app.hypergames.hypersdk 1.8.22 → 1.8.26

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,32 @@
1
+ ## [1.8.26](https://github.com/mvmhyper/hyper-sdk/compare/v1.8.25...v1.8.26) (2026-07-09)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * address SDK publishing issues ([f00551a](https://github.com/mvmhyper/hyper-sdk/commit/f00551a681bf5e1011410677e220ca3c372648dd))
7
+
8
+ ## [1.8.25](https://github.com/mvmhyper/hyper-sdk/compare/v1.8.24...v1.8.25) (2026-07-09)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * repair SDK publish workflow ([e718b78](https://github.com/mvmhyper/hyper-sdk/commit/e718b78b593abfacf49395e87e780ee0e7529b00))
14
+
15
+ ## [1.8.24](https://github.com/mvmhyper/hyper-sdk/compare/v1.8.23...v1.8.24) (2026-07-09)
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * simplify tutorial available modal ([5a2056d](https://github.com/mvmhyper/hyper-sdk/commit/5a2056d0cac32028e552b250fc76e2a961a04291))
21
+ * support tutorial announcement modal landscape ([db5e7d6](https://github.com/mvmhyper/hyper-sdk/commit/db5e7d639865fdf14ef74947ac0809b1e167f832))
22
+
23
+ ## [1.8.23](https://github.com/mvmhyper/hyper-sdk/compare/v1.8.22...v1.8.23) (2026-07-08)
24
+
25
+
26
+ ### Bug Fixes
27
+
28
+ * signal tutorial availability before cache completes ([7a8d043](https://github.com/mvmhyper/hyper-sdk/commit/7a8d043e016c36007b088535f06ae5f4bb4ae64d))
29
+
1
30
  ## [1.8.22](https://github.com/mvmhyper/hyper-sdk/compare/v1.8.21...v1.8.22) (2026-07-08)
2
31
 
3
32
 
@@ -1644,6 +1644,12 @@ namespace Hyper.Internal.Managers
1644
1644
  {
1645
1645
  switch (result)
1646
1646
  {
1647
+ case "available":
1648
+ tutorialExistsButFailed = false;
1649
+ tutorialFetchSuccess = false;
1650
+ TutorialAvailability = TutorialAvailabilityState.Available;
1651
+ break;
1652
+
1647
1653
  case "success":
1648
1654
  _isFetchingTutorial = false;
1649
1655
  tutorialExistsButFailed = false;
@@ -1697,7 +1703,7 @@ namespace Hyper.Internal.Managers
1697
1703
 
1698
1704
  private bool IsTutorialFetchComplete()
1699
1705
  {
1700
- return TutorialAvailability == TutorialAvailabilityState.Available ||
1706
+ return (TutorialAvailability == TutorialAvailabilityState.Available && !_isFetchingTutorial) ||
1701
1707
  TutorialAvailability == TutorialAvailabilityState.Unavailable;
1702
1708
  }
1703
1709
 
@@ -1757,7 +1763,7 @@ namespace Hyper.Internal.Managers
1757
1763
  private IEnumerator SimulateTutorialFetch()
1758
1764
  {
1759
1765
  var value = UnityEngine.Random.Range(0, 4);
1760
- Debug.Log($"[Tutorial] Simulating tutorial fetch result: {value}");
1766
+ // Debug.Log($"[Tutorial] Simulating tutorial fetch result: {value}");
1761
1767
 
1762
1768
  switch (value)
1763
1769
  {
@@ -1559,6 +1559,7 @@ namespace Hyper.Internal.Managers
1559
1559
  return;
1560
1560
  }
1561
1561
 
1562
+ _tutorialAnnouncementModalComponent.ConfigureForOrientation(ResolvePortraitFlag());
1562
1563
  _tutorialAnnouncementModalComponent.Show(() =>
1563
1564
  {
1564
1565
  MarkTutorialAnnouncementSeen();
@@ -93,6 +93,11 @@ namespace Hyper.Internal
93
93
  }
94
94
 
95
95
  public void SlideDownAnimation()
96
+ {
97
+ SlideDownAnimation(0.5f);
98
+ }
99
+
100
+ public void SlideDownAnimation(float duration)
96
101
  {
97
102
  if (!isInitialized || rectTransform == null)
98
103
  {
@@ -107,7 +112,7 @@ namespace Hyper.Internal
107
112
  RecalcOffScreenY();
108
113
 
109
114
  // Animate to off-screen position
110
- rectTransform.DOAnchorPosY(offScreenY, 0.5f)
115
+ rectTransform.DOAnchorPosY(offScreenY, duration)
111
116
  .SetEase(HyperTween.Ease.InQuad)
112
117
  .SetUpdate(true)
113
118
  .OnComplete(() =>
@@ -9,9 +9,17 @@ namespace Hyper.Internal
9
9
 
10
10
  private System.Action _onClosed;
11
11
  private bool _hasClosed;
12
+ private RectTransform _rectTransform;
13
+ private Vector2 _defaultAnchoredPosition;
12
14
 
13
15
  private void Awake()
14
16
  {
17
+ _rectTransform = GetComponent<RectTransform>();
18
+ if (_rectTransform != null)
19
+ {
20
+ _defaultAnchoredPosition = _rectTransform.anchoredPosition;
21
+ }
22
+
15
23
  if (closeButton == null)
16
24
  {
17
25
  closeButton = GetComponentInChildren<Button>(true);
@@ -35,6 +43,19 @@ namespace Hyper.Internal
35
43
  }
36
44
  }
37
45
 
46
+ internal void ConfigureForOrientation(bool isPortrait)
47
+ {
48
+ if (_rectTransform == null) return;
49
+
50
+ Vector2 anchoredPosition = _defaultAnchoredPosition;
51
+ if (!isPortrait)
52
+ {
53
+ anchoredPosition.y = -50f;
54
+ }
55
+
56
+ _rectTransform.anchoredPosition = anchoredPosition;
57
+ }
58
+
38
59
  internal void Show(System.Action onClosed)
39
60
  {
40
61
  _onClosed = onClosed;
@@ -1234,7 +1234,7 @@ namespace Hyper.Internal
1234
1234
  }
1235
1235
 
1236
1236
  if (videoPlayer != null) videoPlayer.enabled = false;
1237
- slideUp.SlideDownAnimation();
1237
+ slideUp.SlideDownAnimation(SlideInDuration);
1238
1238
  }
1239
1239
 
1240
1240
  private void UpdateNavigationButtons()
@@ -8,6 +8,7 @@ mergeInto(LibraryManager.library, {
8
8
  const gameObject = UTF8ToString(gameObjectPtr);
9
9
 
10
10
  const endpoint = `${baseUrl}/games/${gameSlug}/tutorials`;
11
+ let tutorialRecordsFound = false;
11
12
 
12
13
  caches.open("tutorial-cache").then(async (cache) => {
13
14
  try {
@@ -22,6 +23,9 @@ mergeInto(LibraryManager.library, {
22
23
  return;
23
24
  }
24
25
 
26
+ tutorialRecordsFound = true;
27
+ SendMessage(gameObject, "OnTutorialCacheComplete", "available");
28
+
25
29
  const cards = records
26
30
  .filter(r => r && r.fileUrl)
27
31
  .map((record, index) => ({
@@ -48,7 +52,7 @@ mergeInto(LibraryManager.library, {
48
52
  SendMessage(gameObject, "OnTutorialCacheComplete", "success");
49
53
  } catch (e) {
50
54
  console.error("Tutorial caching error:", e);
51
- const status = e.message.includes("Download failed") ? "download_failed" : "fetch_failed";
55
+ const status = tutorialRecordsFound || e.message.includes("Download failed") ? "download_failed" : "fetch_failed";
52
56
  SendMessage(gameObject, "OnTutorialCacheComplete", status);
53
57
  }
54
58
  });
@@ -257,81 +257,6 @@ MonoBehaviour:
257
257
  m_hasFontAssetChanged: 0
258
258
  m_baseMaterial: {fileID: 0}
259
259
  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
260
- --- !u!1 &3461072911430653139
261
- GameObject:
262
- m_ObjectHideFlags: 0
263
- m_CorrespondingSourceObject: {fileID: 0}
264
- m_PrefabInstance: {fileID: 0}
265
- m_PrefabAsset: {fileID: 0}
266
- serializedVersion: 6
267
- m_Component:
268
- - component: {fileID: 6045797237084068160}
269
- - component: {fileID: 7858062609381968049}
270
- - component: {fileID: 5916393371149723254}
271
- m_Layer: 5
272
- m_Name: How To Play Image
273
- m_TagString: Untagged
274
- m_Icon: {fileID: 0}
275
- m_NavMeshLayer: 0
276
- m_StaticEditorFlags: 0
277
- m_IsActive: 1
278
- --- !u!224 &6045797237084068160
279
- RectTransform:
280
- m_ObjectHideFlags: 0
281
- m_CorrespondingSourceObject: {fileID: 0}
282
- m_PrefabInstance: {fileID: 0}
283
- m_PrefabAsset: {fileID: 0}
284
- m_GameObject: {fileID: 3461072911430653139}
285
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
286
- m_LocalPosition: {x: 0, y: 0, z: 0}
287
- m_LocalScale: {x: 1, y: 1, z: 1}
288
- m_ConstrainProportionsScale: 0
289
- m_Children: []
290
- m_Father: {fileID: 4123193494548902652}
291
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
292
- m_AnchorMin: {x: 0.5, y: 1}
293
- m_AnchorMax: {x: 0.5, y: 1}
294
- m_AnchoredPosition: {x: 0, y: -257.0842}
295
- m_SizeDelta: {x: 609.1098, y: 416.5139}
296
- m_Pivot: {x: 0.5, y: 0.5}
297
- --- !u!222 &7858062609381968049
298
- CanvasRenderer:
299
- m_ObjectHideFlags: 0
300
- m_CorrespondingSourceObject: {fileID: 0}
301
- m_PrefabInstance: {fileID: 0}
302
- m_PrefabAsset: {fileID: 0}
303
- m_GameObject: {fileID: 3461072911430653139}
304
- m_CullTransparentMesh: 1
305
- --- !u!114 &5916393371149723254
306
- MonoBehaviour:
307
- m_ObjectHideFlags: 0
308
- m_CorrespondingSourceObject: {fileID: 0}
309
- m_PrefabInstance: {fileID: 0}
310
- m_PrefabAsset: {fileID: 0}
311
- m_GameObject: {fileID: 3461072911430653139}
312
- m_Enabled: 1
313
- m_EditorHideFlags: 0
314
- m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
315
- m_Name:
316
- m_EditorClassIdentifier:
317
- m_Material: {fileID: 0}
318
- m_Color: {r: 1, g: 1, b: 1, a: 1}
319
- m_RaycastTarget: 1
320
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
321
- m_Maskable: 1
322
- m_OnCullStateChanged:
323
- m_PersistentCalls:
324
- m_Calls: []
325
- m_Sprite: {fileID: 21300000, guid: 79ea1f5df2417914697380a19c4438fc, type: 3}
326
- m_Type: 0
327
- m_PreserveAspect: 1
328
- m_FillCenter: 1
329
- m_FillMethod: 4
330
- m_FillAmount: 1
331
- m_FillClockwise: 1
332
- m_FillOrigin: 0
333
- m_UseSpriteMesh: 1
334
- m_PixelsPerUnitMultiplier: 1
335
260
  --- !u!1 &3513764185288973057
336
261
  GameObject:
337
262
  m_ObjectHideFlags: 0
@@ -364,9 +289,9 @@ RectTransform:
364
289
  m_Children: []
365
290
  m_Father: {fileID: 4123193494548902652}
366
291
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
367
- m_AnchorMin: {x: 0.5, y: 0.5}
368
- m_AnchorMax: {x: 0.5, y: 0.5}
369
- m_AnchoredPosition: {x: 0, y: -94.44171}
292
+ m_AnchorMin: {x: 0.5, y: 1}
293
+ m_AnchorMax: {x: 0.5, y: 1}
294
+ m_AnchoredPosition: {x: 0, y: -126.7}
370
295
  m_SizeDelta: {x: 634.0235, y: 133.6543}
371
296
  m_Pivot: {x: 0.5, y: 0.5}
372
297
  --- !u!222 &3097566720818362696
@@ -502,7 +427,7 @@ RectTransform:
502
427
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
503
428
  m_AnchorMin: {x: 0.5, y: 0.5}
504
429
  m_AnchorMax: {x: 0.5, y: 0.5}
505
- m_AnchoredPosition: {x: 0.00090575, y: -236.0161}
430
+ m_AnchoredPosition: {x: -0.000009777315, y: -16}
506
431
  m_SizeDelta: {x: 634.03, y: 118.2242}
507
432
  m_Pivot: {x: 0.5, y: 0.5}
508
433
  --- !u!222 &5167194094165994009
@@ -533,7 +458,7 @@ MonoBehaviour:
533
458
  m_OnCullStateChanged:
534
459
  m_PersistentCalls:
535
460
  m_Calls: []
536
- m_text: You can replay game tutorials anytime from the pause menu.
461
+ m_text: Tap the pause icon in the top right to watch tutorials anytime.
537
462
  m_isRightToLeft: 0
538
463
  m_fontAsset: {fileID: 11400000, guid: 849755e149fecd54d9c6ec82145e4a1e, type: 2}
539
464
  m_sharedMaterial: {fileID: -153029463916510471, guid: 849755e149fecd54d9c6ec82145e4a1e, type: 2}
@@ -560,8 +485,8 @@ MonoBehaviour:
560
485
  m_faceColor:
561
486
  serializedVersion: 2
562
487
  rgba: 4294967295
563
- m_fontSize: 35
564
- m_fontSizeBase: 35
488
+ m_fontSize: 36
489
+ m_fontSizeBase: 36
565
490
  m_fontWeight: 400
566
491
  m_enableAutoSizing: 0
567
492
  m_fontSizeMin: 18
@@ -635,7 +560,6 @@ RectTransform:
635
560
  m_LocalScale: {x: 1.25, y: 1.25, z: 1.25}
636
561
  m_ConstrainProportionsScale: 1
637
562
  m_Children:
638
- - {fileID: 6045797237084068160}
639
563
  - {fileID: 6968122340101791087}
640
564
  - {fileID: 3032462698273761709}
641
565
  - {fileID: 1763693822121464465}
@@ -643,8 +567,8 @@ RectTransform:
643
567
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
644
568
  m_AnchorMin: {x: 0.5, y: 0.5}
645
569
  m_AnchorMax: {x: 0.5, y: 0.5}
646
- m_AnchoredPosition: {x: 0, y: 0}
647
- m_SizeDelta: {x: 708.9152, y: 970.8}
570
+ m_AnchoredPosition: {x: 0, y: -0.0000076293945}
571
+ m_SizeDelta: {x: 708.9152, y: 517.7589}
648
572
  m_Pivot: {x: 0.5, y: 0.5}
649
573
  --- !u!222 &6745477405133080417
650
574
  CanvasRenderer:
@@ -556,7 +556,7 @@ RectTransform:
556
556
  m_AnchorMin: {x: 0, y: 0}
557
557
  m_AnchorMax: {x: 1, y: 0}
558
558
  m_AnchoredPosition: {x: 0, y: 178.46335}
559
- m_SizeDelta: {x: -729.2227, y: 95.0967}
559
+ m_SizeDelta: {x: -874.37915, y: 95.0967}
560
560
  m_Pivot: {x: 0.5, y: 0.5}
561
561
  --- !u!222 &1858963877420389427
562
562
  CanvasRenderer:
@@ -613,7 +613,7 @@ MonoBehaviour:
613
613
  m_faceColor:
614
614
  serializedVersion: 2
615
615
  rgba: 4294967295
616
- m_fontSize: 24.55
616
+ m_fontSize: 35
617
617
  m_fontSizeBase: 42
618
618
  m_fontWeight: 400
619
619
  m_enableAutoSizing: 1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "app.hypergames.hypersdk",
3
- "version": "1.8.22",
3
+ "version": "1.8.26",
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",
@@ -1,156 +0,0 @@
1
- fileFormatVersion: 2
2
- guid: 79ea1f5df2417914697380a19c4438fc
3
- TextureImporter:
4
- internalIDToNameTable:
5
- - first:
6
- 213: 4044033671516185218
7
- second: Frame 2147224037_0
8
- externalObjects: {}
9
- serializedVersion: 13
10
- mipmaps:
11
- mipMapMode: 0
12
- enableMipMap: 0
13
- sRGBTexture: 1
14
- linearTexture: 0
15
- fadeOut: 0
16
- borderMipMap: 0
17
- mipMapsPreserveCoverage: 0
18
- alphaTestReferenceValue: 0.5
19
- mipMapFadeDistanceStart: 1
20
- mipMapFadeDistanceEnd: 3
21
- bumpmap:
22
- convertToNormalMap: 0
23
- externalNormalMap: 0
24
- heightScale: 0.25
25
- normalMapFilter: 0
26
- flipGreenChannel: 0
27
- isReadable: 0
28
- streamingMipmaps: 0
29
- streamingMipmapsPriority: 0
30
- vTOnly: 0
31
- ignoreMipmapLimit: 0
32
- grayScaleToAlpha: 0
33
- generateCubemap: 6
34
- cubemapConvolution: 0
35
- seamlessCubemap: 0
36
- textureFormat: 1
37
- maxTextureSize: 2048
38
- textureSettings:
39
- serializedVersion: 2
40
- filterMode: 1
41
- aniso: 1
42
- mipBias: 0
43
- wrapU: 1
44
- wrapV: 1
45
- wrapW: 1
46
- nPOTScale: 0
47
- lightmap: 0
48
- compressionQuality: 50
49
- spriteMode: 1
50
- spriteExtrude: 1
51
- spriteMeshType: 1
52
- alignment: 0
53
- spritePivot: {x: 0.5, y: 0.5}
54
- spritePixelsToUnits: 100
55
- spriteBorder: {x: 0, y: 0, z: 0, w: 0}
56
- spriteGenerateFallbackPhysicsShape: 0
57
- alphaUsage: 1
58
- alphaIsTransparency: 1
59
- spriteTessellationDetail: -1
60
- textureType: 8
61
- textureShape: 1
62
- singleChannelComponent: 0
63
- flipbookRows: 1
64
- flipbookColumns: 1
65
- maxTextureSizeSet: 0
66
- compressionQualitySet: 0
67
- textureFormatSet: 0
68
- ignorePngGamma: 0
69
- applyGammaDecoding: 0
70
- swizzle: 50462976
71
- cookieLightType: 0
72
- platformSettings:
73
- - serializedVersion: 4
74
- buildTarget: DefaultTexturePlatform
75
- maxTextureSize: 1024
76
- resizeAlgorithm: 0
77
- textureFormat: -1
78
- textureCompression: 1
79
- compressionQuality: 50
80
- crunchedCompression: 1
81
- allowsAlphaSplitting: 0
82
- overridden: 0
83
- ignorePlatformSupport: 0
84
- androidETC2FallbackOverride: 0
85
- forceMaximumCompressionQuality_BC6H_BC7: 0
86
- - serializedVersion: 4
87
- buildTarget: Standalone
88
- maxTextureSize: 2048
89
- resizeAlgorithm: 0
90
- textureFormat: -1
91
- textureCompression: 1
92
- compressionQuality: 50
93
- crunchedCompression: 0
94
- allowsAlphaSplitting: 0
95
- overridden: 0
96
- ignorePlatformSupport: 0
97
- androidETC2FallbackOverride: 0
98
- forceMaximumCompressionQuality_BC6H_BC7: 0
99
- - serializedVersion: 4
100
- buildTarget: WebGL
101
- maxTextureSize: 2048
102
- resizeAlgorithm: 0
103
- textureFormat: -1
104
- textureCompression: 1
105
- compressionQuality: 50
106
- crunchedCompression: 0
107
- allowsAlphaSplitting: 0
108
- overridden: 0
109
- ignorePlatformSupport: 0
110
- androidETC2FallbackOverride: 0
111
- forceMaximumCompressionQuality_BC6H_BC7: 0
112
- spriteSheet:
113
- serializedVersion: 2
114
- sprites:
115
- - serializedVersion: 2
116
- name: Frame 2147224037_0
117
- rect:
118
- serializedVersion: 2
119
- x: 0
120
- y: 0
121
- width: 1180
122
- height: 808
123
- alignment: 0
124
- pivot: {x: 0, y: 0}
125
- border: {x: 0, y: 0, z: 0, w: 0}
126
- customData:
127
- outline: []
128
- physicsShape: []
129
- tessellationDetail: -1
130
- bones: []
131
- spriteID: 282e072b23b4f1830800000000000000
132
- internalID: 4044033671516185218
133
- vertices: []
134
- indices:
135
- edges: []
136
- weights: []
137
- outline: []
138
- customData:
139
- physicsShape: []
140
- bones: []
141
- spriteID: 5e97eb03825dee720800000000000000
142
- internalID: 0
143
- vertices: []
144
- indices:
145
- edges: []
146
- weights: []
147
- secondaryTextures: []
148
- spriteCustomMetadata:
149
- entries: []
150
- nameFileIdTable:
151
- Frame 2147224037_0: 4044033671516185218
152
- mipmapLimitGroupName:
153
- pSDRemoveMatte: 0
154
- userData:
155
- assetBundleName:
156
- assetBundleVariant: