app.hypergames.hypersdk 1.5.9 → 1.6.0

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,24 @@
1
+ # [1.6.0](https://github.com/mvmhyper/hyper-sdk/compare/v1.5.10...v1.6.0) (2026-03-28)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * avoid auto game resume on reconnect while paused ([ab52983](https://github.com/mvmhyper/hyper-sdk/commit/ab52983215218c658a17a022adda5efe1185bfa1))
7
+ * forward SDK events to FE, fix overlay coverage, disable release logs, and improve editor focus behavior ([1c424ad](https://github.com/mvmhyper/hyper-sdk/commit/1c424adb8dd74ee5f1bfe20896a21547fa3a0b11))
8
+ * send final score as score array payload ([7c06086](https://github.com/mvmhyper/hyper-sdk/commit/7c060869f971aa0a39f07ebc790d7da56462d1d9))
9
+
10
+
11
+ ### Features
12
+
13
+ * batch score submission with offline backlog support ([b372643](https://github.com/mvmhyper/hyper-sdk/commit/b3726438239523119d7c13ba3b5f738dcd3b1381))
14
+
15
+ ## [1.5.10](https://github.com/mvmhyper/hyper-sdk/compare/v1.5.9...v1.5.10) (2026-03-25)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * send SDK lifecycle events (game start/resume/pause) to FE ([1562942](https://github.com/mvmhyper/hyper-sdk/commit/1562942344a40938af71e4ff928425918204fc32))
21
+
1
22
  ## [1.5.9](https://github.com/mvmhyper/hyper-sdk/compare/v1.5.8...v1.5.9) (2026-03-18)
2
23
 
3
24
 
@@ -1166,7 +1166,7 @@ namespace Hyper.Editor
1166
1166
 
1167
1167
  EditorGUILayout.BeginVertical(infoBoxStyle);
1168
1168
  {
1169
- EditorGUILayout.LabelField("Fast builds with Brotli compression for testing. Uses shorter build time, debug symbols, and full exceptions.", EditorStyles.wordWrappedMiniLabel);
1169
+ EditorGUILayout.LabelField("Fast builds with Brotli compression for testing. Uses shorter build time, debug symbols, full exceptions, and HYPER_DEVELOPMENT_BUILD so HyperSDK and Unity Debug.Log output stay available.", EditorStyles.wordWrappedMiniLabel);
1170
1170
  EditorGUILayout.Space(8);
1171
1171
 
1172
1172
  if (GUILayout.Button("Build Development", buttonStyle, GUILayout.Height(40)))
@@ -1198,7 +1198,7 @@ namespace Hyper.Editor
1198
1198
 
1199
1199
  EditorGUILayout.BeginVertical(infoBoxStyle);
1200
1200
  {
1201
- EditorGUILayout.LabelField("Optimized production build that respects your Code Optimization setting and enforces LTO. Build time may exceed 20 minutes.", EditorStyles.wordWrappedMiniLabel);
1201
+ EditorGUILayout.LabelField("Optimized production build that respects your Code Optimization setting and enforces LTO. Sets HYPER_RELEASE_BUILD so Unity Debug.Log / LogWarning / LogError are disabled in the player. Build time may exceed 20 minutes.", EditorStyles.wordWrappedMiniLabel);
1202
1202
  EditorGUILayout.Space(8);
1203
1203
 
1204
1204
  if (GUILayout.Button("Build Release", buttonStyle, GUILayout.Height(40)))
@@ -1944,6 +1944,7 @@ namespace Hyper.Editor
1944
1944
  ForceAssetRepack();
1945
1945
 
1946
1946
  SetReleaseBuildDefineSymbol(true);
1947
+ AddOptimizationSummary("Runtime: Unity debug logger disabled in player (HYPER_RELEASE_BUILD)");
1947
1948
  ApplyReleaseBuildSettings();
1948
1949
 
1949
1950
  BuildPlayerOptions buildOptions = new BuildPlayerOptions
@@ -2216,7 +2217,7 @@ namespace Hyper.Editor
2216
2217
  if (!hasReleaseDefine)
2217
2218
  {
2218
2219
  defines = string.IsNullOrEmpty(defines) ? RELEASE_DEFINE : $"{defines};{RELEASE_DEFINE}";
2219
- if (IsSDKDeveloper()) HyperDebug.LogSuccess("Set HYPER_RELEASE_BUILD define symbol for production API URL");
2220
+ if (IsSDKDeveloper()) HyperDebug.LogSuccess("Set HYPER_RELEASE_BUILD (production API URL; Unity debug logger off in player)");
2220
2221
  }
2221
2222
 
2222
2223
  // Remove HYPER_DEVELOPMENT_BUILD if present
@@ -0,0 +1,19 @@
1
+ using UnityEngine;
2
+
3
+ namespace Hyper.Internal
4
+ {
5
+ /// <summary>
6
+ /// Disables Unity's debug logger in production WebGL players built with HYPER_RELEASE_BUILD
7
+ /// (set by Build Assistant release builds). Development builds keep the default logger enabled.
8
+ /// </summary>
9
+ internal static class HyperProductionLoggingBootstrap
10
+ {
11
+ [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
12
+ private static void Apply()
13
+ {
14
+ #if !UNITY_EDITOR && HYPER_RELEASE_BUILD
15
+ Debug.unityLogger.logEnabled = false;
16
+ #endif
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: b8c3f21e4d6a409c9e7f2b1d8a4c5e6f
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -1244,6 +1244,9 @@ namespace Hyper.Internal.Managers
1244
1244
 
1245
1245
  string eventName = eventType switch
1246
1246
  {
1247
+ ConsoleEventType.GameStart => "GameStart",
1248
+ ConsoleEventType.GameResumed => "GameResumed",
1249
+ ConsoleEventType.GamePaused => "GamePaused",
1247
1250
  ConsoleEventType.GameEnd => "GameEnd",
1248
1251
  ConsoleEventType.PracticeGameEnd => "PracticeGameEnd",
1249
1252
  ConsoleEventType.sdk_ConnectionFailed => "sdk_ConnectionFailed",
@@ -52,14 +52,29 @@ namespace Hyper.Internal.Managers
52
52
  #endregion
53
53
 
54
54
  #region Event Invocation Methods
55
- internal void InvokeGamePausedEvent() => OnGamePaused?.Invoke();
56
- internal void InvokeGameResumedEvent() => OnGameResumed?.Invoke();
55
+ internal void InvokeGamePausedEvent()
56
+ {
57
+ OnGamePaused?.Invoke();
58
+ HyperRuntime.BackendManager.LogEvent(ConsoleEventType.GamePaused);
59
+ }
60
+
61
+ internal void InvokeGameResumedEvent()
62
+ {
63
+ OnGameResumed?.Invoke();
64
+ HyperRuntime.BackendManager.LogEvent(ConsoleEventType.GameResumed);
65
+ }
66
+
67
+ internal void InvokeGameStartEvent()
68
+ {
69
+ OnGameStart?.Invoke();
70
+ HyperRuntime.BackendManager.LogEvent(ConsoleEventType.GameStart);
71
+ }
72
+
57
73
  internal void InvokeSoundChangedEvent(bool sound) => OnSoundChanged?.Invoke(sound);
58
74
  internal void InvokeTimeUpEvent() => OnTimeUp?.Invoke();
59
75
  internal void InvokeSessionTimeOutEvent() => OnSessionTimeOut?.Invoke();
60
76
  internal void InvokeSessionAboutToExpireEvent() => OnSessionAboutToExpire?.Invoke();
61
77
  internal void InvokeStartDeadlineReachedEvent() => OnStartDeadlineReached?.Invoke();
62
- internal void InvokeGameStartEvent() => OnGameStart?.Invoke();
63
78
  internal void InvokeGameEndedEvent() => OnGameEnded?.Invoke();
64
79
  internal void InvokeLivesExhaustedEvent() => OnLivesExhausted?.Invoke();
65
80
  internal void InvokeHealthExhaustedEvent() => OnHealthExhausted?.Invoke();
@@ -187,7 +187,9 @@ namespace Hyper.Internal.Managers
187
187
 
188
188
  void OnApplicationFocus(bool hasFocus)
189
189
  {
190
+ #if !UNITY_EDITOR
190
191
  HandlePauseState(!hasFocus);
192
+ #endif
191
193
  }
192
194
 
193
195
  void HandlePauseState(bool shouldPause)
@@ -711,8 +713,6 @@ namespace Hyper.Internal.Managers
711
713
 
712
714
  private void OptimizeForWebGL()
713
715
  {
714
- QualitySettings.streamingMipmapsActive = false;
715
- QualitySettings.billboardsFaceCameraPosition = false;
716
716
  Resources.UnloadUnusedAssets();
717
717
  }
718
718
 
@@ -102,17 +102,12 @@ mergeInto(LibraryManager.library, {
102
102
 
103
103
  console.log(eventDataStr);
104
104
 
105
- // Dispatch custom event locally
106
105
  const event = new CustomEvent(eventNameStr);
107
106
  document.dispatchEvent(event);
108
107
 
109
- // Send stringified data to parent window
110
108
  try {
111
109
  if (window.parent && window.parent !== window) {
112
110
  window.parent.postMessage(eventDataStr, "*");
113
- // console.log("Stringified message sent to parent");
114
- } else {
115
- // console.log("No parent window found or same window");
116
111
  }
117
112
  } catch (error) {
118
113
  console.error("Failed to send message to parent:", error);
@@ -1526,7 +1526,7 @@ RectTransform:
1526
1526
  m_AnchorMin: {x: 0, y: 1}
1527
1527
  m_AnchorMax: {x: 0, y: 1}
1528
1528
  m_AnchoredPosition: {x: 242.0348, y: -33.43245}
1529
- m_SizeDelta: {x: 342.7, y: 46.0515}
1529
+ m_SizeDelta: {x: 0, y: 46.0515}
1530
1530
  m_Pivot: {x: 0.5, y: 0.5}
1531
1531
  --- !u!222 &8480469813127575513
1532
1532
  CanvasRenderer:
@@ -28,7 +28,7 @@ RectTransform:
28
28
  m_GameObject: {fileID: 858581963775131442}
29
29
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
30
30
  m_LocalPosition: {x: 0, y: 0, z: 0}
31
- m_LocalScale: {x: 1, y: 1, z: 1}
31
+ m_LocalScale: {x: 0.82, y: 0.82, z: 0.82}
32
32
  m_ConstrainProportionsScale: 1
33
33
  m_Children:
34
34
  - {fileID: 3260987079844009583}
@@ -40,7 +40,7 @@ RectTransform:
40
40
  m_AnchorMin: {x: 0.5, y: 0.5}
41
41
  m_AnchorMax: {x: 0.5, y: 0.5}
42
42
  m_AnchoredPosition: {x: 0, y: 0}
43
- m_SizeDelta: {x: 890.68, y: 921.8411}
43
+ m_SizeDelta: {x: 890.68, y: 854.7493}
44
44
  m_Pivot: {x: 0.5, y: 0.5}
45
45
  --- !u!222 &5855589522202011792
46
46
  CanvasRenderer:
@@ -130,9 +130,9 @@ RectTransform:
130
130
  m_Children: []
131
131
  m_Father: {fileID: 1314863699767144124}
132
132
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
133
- m_AnchorMin: {x: 0.5, y: 1}
134
- m_AnchorMax: {x: 0.5, y: 1}
135
- m_AnchoredPosition: {x: 0.0000076293945, y: -354}
133
+ m_AnchorMin: {x: 0.5, y: 0.6192544}
134
+ m_AnchorMax: {x: 0.5, y: 0.6192544}
135
+ m_AnchoredPosition: {x: 0.0000076293945, y: -3}
136
136
  m_SizeDelta: {x: 766, y: 150.8242}
137
137
  m_Pivot: {x: 0.5, y: 0.5}
138
138
  --- !u!222 &4673185574738174376
@@ -267,10 +267,10 @@ RectTransform:
267
267
  - {fileID: 8757155083608065361}
268
268
  m_Father: {fileID: 1314863699767144124}
269
269
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
270
- m_AnchorMin: {x: 0.5, y: 1}
271
- m_AnchorMax: {x: 0.5, y: 1}
272
- m_AnchoredPosition: {x: 0, y: -818}
273
- m_SizeDelta: {x: 766, y: 138.0001}
270
+ m_AnchorMin: {x: 0.5, y: 0}
271
+ m_AnchorMax: {x: 0.5, y: 0}
272
+ m_AnchoredPosition: {x: 0, y: 104}
273
+ m_SizeDelta: {x: 766, y: 138.00012}
274
274
  m_Pivot: {x: 0.5, y: 0.5}
275
275
  --- !u!225 &60913365496353251
276
276
  CanvasGroup:
@@ -316,9 +316,9 @@ RectTransform:
316
316
  m_Children: []
317
317
  m_Father: {fileID: 1314863699767144124}
318
318
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
319
- m_AnchorMin: {x: 0, y: 1}
320
- m_AnchorMax: {x: 0, y: 1}
321
- m_AnchoredPosition: {x: 445.34, y: -144.2}
319
+ m_AnchorMin: {x: 0.5, y: 1}
320
+ m_AnchorMax: {x: 0.5, y: 1}
321
+ m_AnchoredPosition: {x: 0.33999634, y: -144.2}
322
322
  m_SizeDelta: {x: 180, y: 180}
323
323
  m_Pivot: {x: 0.5, y: 0.5}
324
324
  --- !u!222 &1807166882388356321
@@ -871,7 +871,7 @@ PrefabInstance:
871
871
  objectReference: {fileID: 0}
872
872
  - target: {fileID: 6466996468591858475, guid: 6a53542e1517b294097a062f761d422c, type: 3}
873
873
  propertyPath: m_AnchorMax.y
874
- value: 0.5
874
+ value: 0.3654065
875
875
  objectReference: {fileID: 0}
876
876
  - target: {fileID: 6466996468591858475, guid: 6a53542e1517b294097a062f761d422c, type: 3}
877
877
  propertyPath: m_AnchorMin.x
@@ -879,7 +879,7 @@ PrefabInstance:
879
879
  objectReference: {fileID: 0}
880
880
  - target: {fileID: 6466996468591858475, guid: 6a53542e1517b294097a062f761d422c, type: 3}
881
881
  propertyPath: m_AnchorMin.y
882
- value: 0.5
882
+ value: 0.3654065
883
883
  objectReference: {fileID: 0}
884
884
  - target: {fileID: 6466996468591858475, guid: 6a53542e1517b294097a062f761d422c, type: 3}
885
885
  propertyPath: m_SizeDelta.x
@@ -919,11 +919,11 @@ PrefabInstance:
919
919
  objectReference: {fileID: 0}
920
920
  - target: {fileID: 6466996468591858475, guid: 6a53542e1517b294097a062f761d422c, type: 3}
921
921
  propertyPath: m_AnchoredPosition.x
922
- value: 0.0000000029685907
922
+ value: 0
923
923
  objectReference: {fileID: 0}
924
924
  - target: {fileID: 6466996468591858475, guid: 6a53542e1517b294097a062f761d422c, type: 3}
925
925
  propertyPath: m_AnchoredPosition.y
926
- value: -122
926
+ value: 2
927
927
  objectReference: {fileID: 0}
928
928
  - target: {fileID: 6466996468591858475, guid: 6a53542e1517b294097a062f761d422c, type: 3}
929
929
  propertyPath: m_LocalEulerAnglesHint.x
@@ -108,7 +108,6 @@ GameObject:
108
108
  m_Component:
109
109
  - component: {fileID: 7363684731116559227}
110
110
  - component: {fileID: 7474295978719854104}
111
- - component: {fileID: 8927388423251347516}
112
111
  - component: {fileID: 4574435796561651467}
113
112
  m_Layer: 5
114
113
  m_Name: TimeUpModal
@@ -129,6 +128,7 @@ RectTransform:
129
128
  m_LocalScale: {x: 1, y: 1, z: 1}
130
129
  m_ConstrainProportionsScale: 0
131
130
  m_Children:
131
+ - {fileID: 1331577716990815236}
132
132
  - {fileID: 7516979272147510967}
133
133
  - {fileID: 1499342646007565420}
134
134
  m_Father: {fileID: 0}
@@ -146,7 +146,7 @@ CanvasRenderer:
146
146
  m_PrefabAsset: {fileID: 0}
147
147
  m_GameObject: {fileID: 936452418214250672}
148
148
  m_CullTransparentMesh: 1
149
- --- !u!114 &8927388423251347516
149
+ --- !u!114 &4574435796561651467
150
150
  MonoBehaviour:
151
151
  m_ObjectHideFlags: 0
152
152
  m_CorrespondingSourceObject: {fileID: 0}
@@ -155,6 +155,63 @@ MonoBehaviour:
155
155
  m_GameObject: {fileID: 936452418214250672}
156
156
  m_Enabled: 1
157
157
  m_EditorHideFlags: 0
158
+ m_Script: {fileID: 11500000, guid: 7290c98ee8db59446a0d5e5027a82b76, type: 3}
159
+ m_Name:
160
+ m_EditorClassIdentifier:
161
+ --- !u!1 &8007582516861501233
162
+ GameObject:
163
+ m_ObjectHideFlags: 0
164
+ m_CorrespondingSourceObject: {fileID: 0}
165
+ m_PrefabInstance: {fileID: 0}
166
+ m_PrefabAsset: {fileID: 0}
167
+ serializedVersion: 6
168
+ m_Component:
169
+ - component: {fileID: 1331577716990815236}
170
+ - component: {fileID: 501133231201272860}
171
+ - component: {fileID: 139373640498174883}
172
+ m_Layer: 5
173
+ m_Name: BG
174
+ m_TagString: Untagged
175
+ m_Icon: {fileID: 0}
176
+ m_NavMeshLayer: 0
177
+ m_StaticEditorFlags: 0
178
+ m_IsActive: 1
179
+ --- !u!224 &1331577716990815236
180
+ RectTransform:
181
+ m_ObjectHideFlags: 0
182
+ m_CorrespondingSourceObject: {fileID: 0}
183
+ m_PrefabInstance: {fileID: 0}
184
+ m_PrefabAsset: {fileID: 0}
185
+ m_GameObject: {fileID: 8007582516861501233}
186
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
187
+ m_LocalPosition: {x: 0, y: 0, z: 0}
188
+ m_LocalScale: {x: 3, y: 3, z: 3}
189
+ m_ConstrainProportionsScale: 1
190
+ m_Children: []
191
+ m_Father: {fileID: 7363684731116559227}
192
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
193
+ m_AnchorMin: {x: 0.5, y: 0.5}
194
+ m_AnchorMax: {x: 0.5, y: 0.5}
195
+ m_AnchoredPosition: {x: 0, y: 0}
196
+ m_SizeDelta: {x: 1700.5007, y: 1278}
197
+ m_Pivot: {x: 0.5, y: 0.5}
198
+ --- !u!222 &501133231201272860
199
+ CanvasRenderer:
200
+ m_ObjectHideFlags: 0
201
+ m_CorrespondingSourceObject: {fileID: 0}
202
+ m_PrefabInstance: {fileID: 0}
203
+ m_PrefabAsset: {fileID: 0}
204
+ m_GameObject: {fileID: 8007582516861501233}
205
+ m_CullTransparentMesh: 1
206
+ --- !u!114 &139373640498174883
207
+ MonoBehaviour:
208
+ m_ObjectHideFlags: 0
209
+ m_CorrespondingSourceObject: {fileID: 0}
210
+ m_PrefabInstance: {fileID: 0}
211
+ m_PrefabAsset: {fileID: 0}
212
+ m_GameObject: {fileID: 8007582516861501233}
213
+ m_Enabled: 1
214
+ m_EditorHideFlags: 0
158
215
  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
159
216
  m_Name:
160
217
  m_EditorClassIdentifier:
@@ -176,18 +233,6 @@ MonoBehaviour:
176
233
  m_FillOrigin: 0
177
234
  m_UseSpriteMesh: 0
178
235
  m_PixelsPerUnitMultiplier: 1
179
- --- !u!114 &4574435796561651467
180
- MonoBehaviour:
181
- m_ObjectHideFlags: 0
182
- m_CorrespondingSourceObject: {fileID: 0}
183
- m_PrefabInstance: {fileID: 0}
184
- m_PrefabAsset: {fileID: 0}
185
- m_GameObject: {fileID: 936452418214250672}
186
- m_Enabled: 1
187
- m_EditorHideFlags: 0
188
- m_Script: {fileID: 11500000, guid: 7290c98ee8db59446a0d5e5027a82b76, type: 3}
189
- m_Name:
190
- m_EditorClassIdentifier:
191
236
  --- !u!1001 &3747920875680424434
192
237
  PrefabInstance:
193
238
  m_ObjectHideFlags: 0
@@ -48,7 +48,22 @@ namespace Hyper.Shared
48
48
  /// <summary>
49
49
  /// Fired when the game ends due to no internet connection.
50
50
  /// </summary>
51
- sdk_GameEndNoInternet
51
+ sdk_GameEndNoInternet,
52
+
53
+ /// <summary>
54
+ /// Fired when the game starts.
55
+ /// </summary>
56
+ GameStart,
57
+
58
+ /// <summary>
59
+ /// Fired when the game is resumed.
60
+ /// </summary>
61
+ GameResumed,
62
+
63
+ /// <summary>
64
+ /// Fired when the game is paused.
65
+ /// </summary>
66
+ GamePaused
52
67
  }
53
68
 
54
69
  /// <summary>
@@ -97,7 +97,7 @@ namespace Hyper.Internal
97
97
 
98
98
  /// <summary>
99
99
  /// Error log (red) with HyperSDK prefix.
100
- /// Always logs regardless of build type.
100
+ /// In HYPER_RELEASE_BUILD WebGL players the SDK disables Unity's debug logger at startup, so this produces no console output there.
101
101
  /// </summary>
102
102
  public static void LogError(string message, UnityEngine.Object context = null)
103
103
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "app.hypergames.hypersdk",
3
- "version": "1.5.9",
3
+ "version": "1.6.0",
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",