app.hypergames.hypersdk 1.5.7 → 1.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [1.5.9](https://github.com/mvmhyper/hyper-sdk/compare/v1.5.8...v1.5.9) (2026-03-18)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * resume timers for current game mode only ([a4bef5a](https://github.com/mvmhyper/hyper-sdk/commit/a4bef5acc0c7c8b49998e2486ea4345b53caeefe))
7
+
8
+ ## [1.5.8](https://github.com/mvmhyper/hyper-sdk/compare/v1.5.7...v1.5.8) (2026-03-18)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * make SDK timers independent of game time scale and restore original timescale on resume ([b00e25d](https://github.com/mvmhyper/hyper-sdk/commit/b00e25dd145651ded83c55906137e8b79bc80e6b))
14
+
1
15
  ## [1.5.7](https://github.com/mvmhyper/hyper-sdk/compare/v1.5.6...v1.5.7) (2026-03-04)
2
16
 
3
17
 
package/HyperLoader.unity CHANGED
@@ -304,7 +304,7 @@ RectTransform:
304
304
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
305
305
  m_AnchorMin: {x: 0, y: 1}
306
306
  m_AnchorMax: {x: 0, y: 1}
307
- m_AnchoredPosition: {x: 489.28683, y: -280.1698}
307
+ m_AnchoredPosition: {x: 489.20746, y: -280.1698}
308
308
  m_SizeDelta: {x: 1044.9, y: 239.347}
309
309
  m_Pivot: {x: 0.5, y: 0.5}
310
310
  --- !u!114 &751153944
@@ -1092,7 +1092,7 @@ RectTransform:
1092
1092
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1093
1093
  m_AnchorMin: {x: 0, y: 1}
1094
1094
  m_AnchorMax: {x: 0, y: 1}
1095
- m_AnchoredPosition: {x: 489.28683, y: -133.2274}
1095
+ m_AnchoredPosition: {x: 489.20746, y: -133.2274}
1096
1096
  m_SizeDelta: {x: 875, y: 54.5378}
1097
1097
  m_Pivot: {x: 0.5, y: 0.5}
1098
1098
  --- !u!1 &2874543288936963705
@@ -122,7 +122,6 @@ namespace Hyper.Internal.Managers
122
122
  if (IsBattleMode) return;
123
123
 
124
124
  _hasGameEnded = true;
125
- Time.timeScale = 1;
126
125
  HyperRuntime.Timer.StopAllTimers();
127
126
 
128
127
  if (!HyperRuntime.GameContent.IsPracticeMenu)
@@ -160,6 +159,7 @@ namespace Hyper.Internal.Managers
160
159
 
161
160
  _isPaused = true;
162
161
  _isFrozenBeforePause = Time.timeScale == 0;
162
+ _savedTimeScaleBeforePause = Time.timeScale;
163
163
  Time.timeScale = 0;
164
164
 
165
165
  ShowPauseModal();
@@ -175,11 +175,11 @@ namespace Hyper.Internal.Managers
175
175
 
176
176
  if (!_isFrozenBeforePause)
177
177
  {
178
- Time.timeScale = 1;
178
+ Time.timeScale = _savedTimeScaleBeforePause;
179
179
  }
180
180
  _isFrozenBeforePause = false;
181
181
 
182
- HyperRuntime.Timer.StartActiveGameTimer(); // continue timers if any
182
+ HyperRuntime.Timer.ResumeGameTimersAfterPause(); // continue timers if any
183
183
 
184
184
  HidePauseModals();
185
185
  _eventManager.InvokeGameResumedEvent();
@@ -204,7 +204,7 @@ namespace Hyper.Internal.Managers
204
204
  if (currentTimeScale != _previousTimeScale)
205
205
  {
206
206
  // detect intentional game-freeze states
207
- if (currentTimeScale == 0f && _previousTimeScale != 0f)
207
+ if (currentTimeScale == 0f && _previousTimeScale > 0f)
208
208
  {
209
209
  _eventManager.InvokeTimeScaleFrozenEvent();
210
210
  HyperDebug.Log("Time scale frozen event invoked");
@@ -215,7 +215,7 @@ namespace Hyper.Internal.Managers
215
215
  _backendManager.StopSendingScores();
216
216
  }
217
217
  }
218
- else if (currentTimeScale == 1f && _previousTimeScale != 1f)
218
+ else if (currentTimeScale > 0f && _previousTimeScale == 0f)
219
219
  {
220
220
  _eventManager.InvokeTimeScaleResumedEvent();
221
221
  HyperDebug.Log("Time scale resumed event invoked");
@@ -573,6 +573,7 @@ namespace Hyper.Internal.Managers
573
573
  private bool _isFrozenBeforePause;
574
574
  private bool _isPortrait;
575
575
  private float _previousTimeScale = 1f;
576
+ private float _savedTimeScaleBeforePause = 1f;
576
577
 
577
578
  #endregion
578
579
 
@@ -736,8 +737,8 @@ namespace Hyper.Internal.Managers
736
737
 
737
738
  private void OnSceneLoaded(Scene newScene, LoadSceneMode loadSceneMode)
738
739
  {
739
- Time.timeScale = 1;
740
- _previousTimeScale = 1f; // Sync tracking on scene load
740
+ // Do not force a specific time scale; just sync tracking with the current value
741
+ _previousTimeScale = Time.timeScale;
741
742
  _dataManager.ConfigurePlayerSoundSetting();
742
743
 
743
744
  string menuSceneName = HyperRuntime.GameContent.IsPracticeMenu ?
@@ -841,8 +842,6 @@ namespace Hyper.Internal.Managers
841
842
 
842
843
  ShowControlBarElements();
843
844
  ShowStartingInstructionModal();
844
-
845
- Time.timeScale = 1;
846
845
  }
847
846
 
848
847
  #endregion
@@ -852,7 +851,6 @@ namespace Hyper.Internal.Managers
852
851
  private void EndGameInternal()
853
852
  {
854
853
  _hasGameEnded = true;
855
- Time.timeScale = 1;
856
854
 
857
855
  _eventManager.InvokeGameEndedEvent();
858
856
  HyperRuntime.Timer.StopAllTimers();
@@ -78,10 +78,8 @@ namespace Hyper.Internal.Managers
78
78
  float unscaledDelta = Time.unscaledTime - _lastUnscaledTime;
79
79
  _lastUnscaledTime = Time.unscaledTime;
80
80
 
81
- float delta = Time.deltaTime;
82
-
83
- UpdatePracticeTimer(delta);
84
- UpdateBattleTimer(delta);
81
+ UpdatePracticeTimer(unscaledDelta);
82
+ UpdateBattleTimer(unscaledDelta);
85
83
  UpdateSessionTimer(unscaledDelta);
86
84
  }
87
85
 
@@ -91,6 +89,18 @@ namespace Hyper.Internal.Managers
91
89
  _lastUnscaledTime = Time.unscaledTime;
92
90
  }
93
91
 
92
+ public void ResumeGameTimersAfterPause()
93
+ {
94
+ if (_gameManager.Config.GameMode == GameMode.Battle)
95
+ {
96
+ StartBattle();
97
+ }
98
+ else
99
+ {
100
+ StartPractice();
101
+ }
102
+ }
103
+
94
104
  public void StartActiveGameTimer()
95
105
  {
96
106
  if (_gameManager.Config.GameMode == GameMode.Battle)
@@ -72,14 +72,12 @@ namespace Hyper.Internal
72
72
  float elapsed = 0f;
73
73
  while (elapsed < revealDuration)
74
74
  {
75
- // Compute the fraction of completion.
76
75
  float t = elapsed / revealDuration;
77
- // Lerp both x and y evenly with the same t value.
78
76
  maskRect.sizeDelta = new Vector2(
79
77
  Mathf.Lerp(startSize.x, endSize.x, t),
80
78
  Mathf.Lerp(startSize.y, endSize.y, t)
81
79
  );
82
- elapsed += Time.deltaTime;
80
+ elapsed += Time.unscaledDeltaTime;
83
81
  yield return null;
84
82
  }
85
83
  // Ensure the final state is exactly the target state.
@@ -219,7 +219,6 @@ namespace Hyper.Internal
219
219
  yield break;
220
220
  }
221
221
 
222
- // Pulse alpha
223
222
  float elapsed = 0f;
224
223
  Color startColor = healthFillImage.color;
225
224
  Color pulseColor = new Color(startColor.r, startColor.g, startColor.b, 0.5f);
@@ -227,7 +226,7 @@ namespace Hyper.Internal
227
226
  while (elapsed < pulseDuration)
228
227
  {
229
228
  if (healthFillImage == null) yield break;
230
- elapsed += Time.deltaTime;
229
+ elapsed += Time.unscaledDeltaTime;
231
230
  float t = Mathf.PingPong(elapsed / pulseDuration, 1f);
232
231
  Color currentColor = Color.Lerp(startColor, pulseColor, t);
233
232
  healthFillImage.color = currentColor;
@@ -37,7 +37,7 @@ namespace Hyper.Internal
37
37
 
38
38
  while (elapsedTime < duration)
39
39
  {
40
- elapsedTime += Time.deltaTime;
40
+ elapsedTime += Time.unscaledDeltaTime;
41
41
  loadingBarSlider.value = Mathf.Lerp(startValue, targetValue, elapsedTime / duration);
42
42
  yield return null;
43
43
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "app.hypergames.hypersdk",
3
- "version": "1.5.7",
3
+ "version": "1.5.9",
4
4
  "displayName": "HyperSDK",
5
5
  "description": "Official Unity SDK for Hyper: multiplayer battles, leaderboards, deterministic RNG, session management, tutorials, and WebGL optimizations for production-ready games.",
6
6
  "unity": "6000.0",