app.hypergames.hypersdk 1.9.1 → 1.11.0-beta.1

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.
Files changed (124) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/Editor/Scripts/Setup/HyperSDKInstaller.cs +42 -0
  3. package/Editor/Scripts/Tools/HyperGameModeMenu.cs +27 -7
  4. package/Runtime/Internal/AssemblyInfo.cs +1 -0
  5. package/Runtime/Internal/Bootstrap/HyperLoader.cs +186 -8
  6. package/Runtime/Internal/Core/HyperRuntime.cs +58 -0
  7. package/Runtime/Internal/Core/HyperRuntimeHost.cs +6 -0
  8. package/Runtime/Internal/Data/URLData.cs +18 -1
  9. package/Runtime/Internal/Managers/BackendManager.cs +281 -24
  10. package/Runtime/Internal/Managers/DataManager.cs +207 -21
  11. package/Runtime/Internal/Managers/GameManager.cs +350 -15
  12. package/Runtime/Internal/Managers/ReplayManager.cs +111 -0
  13. package/Runtime/Internal/Managers/ReplayManager.cs.meta +11 -0
  14. package/Runtime/Internal/Managers/TimeManager.cs +56 -14
  15. package/Runtime/Internal/Replay/ReplayActivityRecorder.cs +182 -0
  16. package/Runtime/Internal/Replay/ReplayActivityRecorder.cs.meta +2 -0
  17. package/Runtime/Internal/Replay/ReplaySessionState.cs +181 -0
  18. package/Runtime/Internal/Replay/ReplaySessionState.cs.meta +2 -0
  19. package/Runtime/Internal/Replay.meta +8 -0
  20. package/Runtime/Internal/ScriptableObjects/HyperSDKSettings.cs +5 -0
  21. package/Runtime/Internal/UI/Animation/LoadingTextAnimation.cs +15 -1
  22. package/Runtime/Internal/UI/Components/ConcaveImage.cs +147 -0
  23. package/Runtime/Internal/UI/Components/ConcaveImage.cs.meta +11 -0
  24. package/Runtime/Internal/UI/Components/ControlBar.cs +86 -6
  25. package/Runtime/Internal/UI/Components/PauseButton.cs +4 -1
  26. package/Runtime/Internal/UI/Components/ReplayController.cs +501 -0
  27. package/Runtime/Internal/UI/Components/ReplayController.cs.meta +2 -0
  28. package/Runtime/Internal/UI/Components/ReplayMarkerPulse.cs +89 -0
  29. package/Runtime/Internal/UI/Components/ReplayMarkerPulse.cs.meta +2 -0
  30. package/Runtime/Internal/UI/Components/ReplayPresentationCanvas.cs +183 -0
  31. package/Runtime/Internal/UI/Components/ReplayPresentationCanvas.cs.meta +2 -0
  32. package/Runtime/Internal/UI/Components/SnackBar.cs +2 -9
  33. package/Runtime/Internal/UI/Modals/LoadingFailedModal.cs +12 -0
  34. package/Runtime/Internal/UI/Modals/ReplayOverModal.cs +54 -0
  35. package/Runtime/Internal/UI/Modals/ReplayOverModal.cs.meta +2 -0
  36. package/Runtime/Internal/UI/Modals/StartingInstructionModal.cs +38 -29
  37. package/Runtime/Public/AssemblyInfo.cs +3 -0
  38. package/Runtime/Public/AssemblyInfo.cs.meta +2 -0
  39. package/Runtime/Public/Core/HyperSDK.cs +305 -109
  40. package/Runtime/Public/Hyper.asmdef +2 -1
  41. package/Runtime/Public/Replay/ReplayPlaybackEngine.cs +555 -0
  42. package/Runtime/Public/Replay/ReplayPlaybackEngine.cs.meta +2 -0
  43. package/Runtime/Public/Replay.meta +8 -0
  44. package/Runtime/Resources/Fonts/Nunito/Nunito-Light SDF.asset +528 -521
  45. package/Runtime/Resources/Materials/HyperReplayScanlines.preset +340 -0
  46. package/Runtime/Resources/Materials/HyperReplayScanlines.preset.meta +8 -0
  47. package/Runtime/Resources/Materials/ReplayScanlineOverlay.mat +55 -0
  48. package/Runtime/Resources/Materials/ReplayScanlineOverlay.mat.meta +8 -0
  49. package/Runtime/Resources/Shaders/ConcaveImage.shader +155 -0
  50. package/Runtime/Resources/Shaders/ConcaveImage.shader.meta +10 -0
  51. package/Runtime/Resources/Shaders/ReplayScanlineOverlay.shader +150 -0
  52. package/Runtime/Resources/Shaders/ReplayScanlineOverlay.shader.meta +10 -0
  53. package/Runtime/Resources/Sprites/Replays/Fallback avatar.png +0 -0
  54. package/Runtime/Resources/Sprites/Replays/Fallback avatar.png.meta +156 -0
  55. package/Runtime/Resources/Sprites/Replays/Recording.png +0 -0
  56. package/Runtime/Resources/Sprites/{Control Bar/Top_Black_Rounded_Bar_Portrait_IV.png.meta → Replays/Recording.png.meta} +16 -29
  57. package/Runtime/Resources/Sprites/Replays/Replay frame.png +0 -0
  58. package/Runtime/Resources/Sprites/Replays/Replay frame.png.meta +156 -0
  59. package/Runtime/Resources/Sprites/Replays/Replay modal icon.png +0 -0
  60. package/Runtime/Resources/Sprites/Replays/Replay modal icon.png.meta +156 -0
  61. package/Runtime/Resources/Sprites/Replays.meta +8 -0
  62. package/Runtime/Resources/UIPrefabs/ControlBar.prefab +389 -42
  63. package/Runtime/Resources/UIPrefabs/GamePausedModal_Battle.prefab +1 -1
  64. package/Runtime/Resources/UIPrefabs/ReplayController.prefab +1269 -0
  65. package/Runtime/Resources/UIPrefabs/ReplayController.prefab.meta +7 -0
  66. package/Runtime/Resources/UIPrefabs/ReplayInputBlocker.prefab +90 -0
  67. package/Runtime/Resources/UIPrefabs/ReplayInputBlocker.prefab.meta +7 -0
  68. package/Runtime/Resources/UIPrefabs/ReplayOverModal.prefab +958 -0
  69. package/Runtime/Resources/UIPrefabs/ReplayOverModal.prefab.meta +7 -0
  70. package/Runtime/Resources/UIPrefabs/ReplaySeekOverlay.prefab +189 -0
  71. package/Runtime/Resources/UIPrefabs/ReplaySeekOverlay.prefab.meta +7 -0
  72. package/Runtime/Resources/UIPrefabs/Rounded Cutout.prefab +96 -0
  73. package/Runtime/Resources/UIPrefabs/Rounded Cutout.prefab.meta +7 -0
  74. package/Runtime/Resources/UIPrefabs/SnackBar.prefab +23 -6
  75. package/Runtime/Shared/AssemblyInfo.cs +5 -0
  76. package/Runtime/Shared/AssemblyInfo.cs.meta +11 -0
  77. package/Runtime/Shared/DTOs/Enums.cs +8 -3
  78. package/Runtime/Shared/DTOs/Score/ScoreSnapshot.cs +13 -1
  79. package/Runtime/Shared/Replay/IReplayPlaybackEngine.cs +37 -0
  80. package/Runtime/Shared/Replay/IReplayPlaybackEngine.cs.meta +11 -0
  81. package/Runtime/Shared/Replay.meta +8 -0
  82. package/Runtime/Shared/Utils/HyperRandom.cs +25 -5
  83. package/Samples~/LaneRunner/LaneRunnerSample.unity +1603 -0
  84. package/Samples~/LaneRunner/LaneRunnerSample.unity.meta +7 -0
  85. package/Samples~/LaneRunner/Materials/DoubleScore.mat +86 -0
  86. package/Samples~/LaneRunner/Materials/DoubleScore.mat.meta +8 -0
  87. package/Samples~/LaneRunner/Materials/Ground.mat +84 -0
  88. package/Samples~/LaneRunner/Materials/Ground.mat.meta +8 -0
  89. package/Samples~/LaneRunner/Materials/Lane.mat +84 -0
  90. package/Samples~/LaneRunner/Materials/Lane.mat.meta +8 -0
  91. package/Samples~/LaneRunner/Materials/LaneMarker.mat +84 -0
  92. package/Samples~/LaneRunner/Materials/LaneMarker.mat.meta +8 -0
  93. package/Samples~/LaneRunner/Materials/Obstacle.mat +84 -0
  94. package/Samples~/LaneRunner/Materials/Obstacle.mat.meta +8 -0
  95. package/Samples~/LaneRunner/Materials/Player.mat +84 -0
  96. package/Samples~/LaneRunner/Materials/Player.mat.meta +8 -0
  97. package/Samples~/LaneRunner/Materials.meta +8 -0
  98. package/Samples~/LaneRunner/Prefabs/DoubleScorePickup.prefab +152 -0
  99. package/Samples~/LaneRunner/Prefabs/DoubleScorePickup.prefab.meta +7 -0
  100. package/Samples~/LaneRunner/Prefabs/Obstacle.prefab +152 -0
  101. package/Samples~/LaneRunner/Prefabs/Obstacle.prefab.meta +7 -0
  102. package/Samples~/LaneRunner/Prefabs.meta +8 -0
  103. package/Samples~/LaneRunner/README.md +35 -0
  104. package/Samples~/LaneRunner/README.md.meta +7 -0
  105. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerCommand.cs +9 -0
  106. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerCommand.cs.meta +2 -0
  107. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerGame.cs +93 -0
  108. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerGame.cs.meta +2 -0
  109. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerPlayer.cs +155 -0
  110. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerPlayer.cs.meta +2 -0
  111. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerSpawner.cs +110 -0
  112. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerSpawner.cs.meta +2 -0
  113. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerTrackItem.cs +41 -0
  114. package/Samples~/LaneRunner/Scripts/Gameplay/LaneRunnerTrackItem.cs.meta +2 -0
  115. package/Samples~/LaneRunner/Scripts/Gameplay.meta +8 -0
  116. package/Samples~/LaneRunner/Scripts/Hyper/LaneRunnerReplayAdapter.cs +62 -0
  117. package/Samples~/LaneRunner/Scripts/Hyper/LaneRunnerReplayAdapter.cs.meta +2 -0
  118. package/Samples~/LaneRunner/Scripts/Hyper/LaneRunnerTournamentAdapter.cs +64 -0
  119. package/Samples~/LaneRunner/Scripts/Hyper/LaneRunnerTournamentAdapter.cs.meta +2 -0
  120. package/Samples~/LaneRunner/Scripts/Hyper.meta +8 -0
  121. package/Samples~/LaneRunner/Scripts.meta +8 -0
  122. package/Tests.meta +8 -0
  123. package/package.json +9 -3
  124. package/Runtime/Resources/Sprites/Control Bar/Top_Black_Rounded_Bar_Portrait_IV.png +0 -0
@@ -0,0 +1,7 @@
1
+ fileFormatVersion: 2
2
+ guid: 0d50c17bcbaf9164e964e5be84cc0843
3
+ PrefabImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -0,0 +1,189 @@
1
+ %YAML 1.1
2
+ %TAG !u! tag:unity3d.com,2011:
3
+ --- !u!1 &7194081263312604041
4
+ GameObject:
5
+ m_ObjectHideFlags: 0
6
+ m_CorrespondingSourceObject: {fileID: 0}
7
+ m_PrefabInstance: {fileID: 0}
8
+ m_PrefabAsset: {fileID: 0}
9
+ serializedVersion: 6
10
+ m_Component:
11
+ - component: {fileID: 7194081263312604042}
12
+ - component: {fileID: 7194081263312604043}
13
+ - component: {fileID: 7194081263312604044}
14
+ m_Layer: 5
15
+ m_Name: ReplaySeekOverlay
16
+ m_TagString: Untagged
17
+ m_Icon: {fileID: 0}
18
+ m_NavMeshLayer: 0
19
+ m_StaticEditorFlags: 0
20
+ m_IsActive: 1
21
+ --- !u!224 &7194081263312604042
22
+ RectTransform:
23
+ m_ObjectHideFlags: 0
24
+ m_CorrespondingSourceObject: {fileID: 0}
25
+ m_PrefabInstance: {fileID: 0}
26
+ m_PrefabAsset: {fileID: 0}
27
+ m_GameObject: {fileID: 7194081263312604041}
28
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
29
+ m_LocalPosition: {x: 0, y: 0, z: 0}
30
+ m_LocalScale: {x: 1, y: 1, z: 1}
31
+ m_ConstrainProportionsScale: 0
32
+ m_Children:
33
+ - {fileID: 1405550522960570861}
34
+ m_Father: {fileID: 0}
35
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36
+ m_AnchorMin: {x: 0, y: 0}
37
+ m_AnchorMax: {x: 1, y: 1}
38
+ m_AnchoredPosition: {x: 0, y: 0}
39
+ m_SizeDelta: {x: 0, y: 0}
40
+ m_Pivot: {x: 0.5, y: 0.5}
41
+ --- !u!222 &7194081263312604043
42
+ CanvasRenderer:
43
+ m_ObjectHideFlags: 0
44
+ m_CorrespondingSourceObject: {fileID: 0}
45
+ m_PrefabInstance: {fileID: 0}
46
+ m_PrefabAsset: {fileID: 0}
47
+ m_GameObject: {fileID: 7194081263312604041}
48
+ m_CullTransparentMesh: 1
49
+ --- !u!114 &7194081263312604044
50
+ MonoBehaviour:
51
+ m_ObjectHideFlags: 0
52
+ m_CorrespondingSourceObject: {fileID: 0}
53
+ m_PrefabInstance: {fileID: 0}
54
+ m_PrefabAsset: {fileID: 0}
55
+ m_GameObject: {fileID: 7194081263312604041}
56
+ m_Enabled: 1
57
+ m_EditorHideFlags: 0
58
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
59
+ m_Name:
60
+ m_EditorClassIdentifier:
61
+ m_Material: {fileID: 0}
62
+ m_Color: {r: 0, g: 0, b: 0, a: 1}
63
+ m_RaycastTarget: 1
64
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
65
+ m_Maskable: 1
66
+ m_OnCullStateChanged:
67
+ m_PersistentCalls:
68
+ m_Calls: []
69
+ m_Sprite: {fileID: 0}
70
+ m_Type: 0
71
+ m_PreserveAspect: 0
72
+ m_FillCenter: 1
73
+ m_FillMethod: 4
74
+ m_FillAmount: 1
75
+ m_FillClockwise: 1
76
+ m_FillOrigin: 0
77
+ m_UseSpriteMesh: 0
78
+ m_PixelsPerUnitMultiplier: 1
79
+ --- !u!1 &8073796807547131747
80
+ GameObject:
81
+ m_ObjectHideFlags: 0
82
+ m_CorrespondingSourceObject: {fileID: 0}
83
+ m_PrefabInstance: {fileID: 0}
84
+ m_PrefabAsset: {fileID: 0}
85
+ serializedVersion: 6
86
+ m_Component:
87
+ - component: {fileID: 1405550522960570861}
88
+ - component: {fileID: 6724538761259836454}
89
+ - component: {fileID: 1154265679268673513}
90
+ - component: {fileID: 4775253157052730056}
91
+ - component: {fileID: 2032832027083946277}
92
+ m_Layer: 5
93
+ m_Name: Circle Loader
94
+ m_TagString: Untagged
95
+ m_Icon: {fileID: 0}
96
+ m_NavMeshLayer: 0
97
+ m_StaticEditorFlags: 0
98
+ m_IsActive: 1
99
+ --- !u!224 &1405550522960570861
100
+ RectTransform:
101
+ m_ObjectHideFlags: 0
102
+ m_CorrespondingSourceObject: {fileID: 0}
103
+ m_PrefabInstance: {fileID: 0}
104
+ m_PrefabAsset: {fileID: 0}
105
+ m_GameObject: {fileID: 8073796807547131747}
106
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
107
+ m_LocalPosition: {x: 0, y: 0, z: 0}
108
+ m_LocalScale: {x: 1, y: 1, z: 1}
109
+ m_ConstrainProportionsScale: 1
110
+ m_Children: []
111
+ m_Father: {fileID: 7194081263312604042}
112
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
113
+ m_AnchorMin: {x: 0.5, y: 0.5}
114
+ m_AnchorMax: {x: 0.5, y: 0.5}
115
+ m_AnchoredPosition: {x: 0, y: 0}
116
+ m_SizeDelta: {x: 100, y: 100}
117
+ m_Pivot: {x: 0.5, y: 0.5}
118
+ --- !u!222 &6724538761259836454
119
+ CanvasRenderer:
120
+ m_ObjectHideFlags: 0
121
+ m_CorrespondingSourceObject: {fileID: 0}
122
+ m_PrefabInstance: {fileID: 0}
123
+ m_PrefabAsset: {fileID: 0}
124
+ m_GameObject: {fileID: 8073796807547131747}
125
+ m_CullTransparentMesh: 1
126
+ --- !u!114 &1154265679268673513
127
+ MonoBehaviour:
128
+ m_ObjectHideFlags: 0
129
+ m_CorrespondingSourceObject: {fileID: 0}
130
+ m_PrefabInstance: {fileID: 0}
131
+ m_PrefabAsset: {fileID: 0}
132
+ m_GameObject: {fileID: 8073796807547131747}
133
+ m_Enabled: 1
134
+ m_EditorHideFlags: 0
135
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
136
+ m_Name:
137
+ m_EditorClassIdentifier:
138
+ m_Material: {fileID: 0}
139
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
140
+ m_RaycastTarget: 1
141
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
142
+ m_Maskable: 1
143
+ m_OnCullStateChanged:
144
+ m_PersistentCalls:
145
+ m_Calls: []
146
+ m_Sprite: {fileID: 21300000, guid: 5c57961c662dfdd46a321974424c3f15, type: 3}
147
+ m_Type: 0
148
+ m_PreserveAspect: 1
149
+ m_FillCenter: 1
150
+ m_FillMethod: 4
151
+ m_FillAmount: 1
152
+ m_FillClockwise: 1
153
+ m_FillOrigin: 0
154
+ m_UseSpriteMesh: 0
155
+ m_PixelsPerUnitMultiplier: 1
156
+ --- !u!95 &4775253157052730056
157
+ Animator:
158
+ serializedVersion: 7
159
+ m_ObjectHideFlags: 0
160
+ m_CorrespondingSourceObject: {fileID: 0}
161
+ m_PrefabInstance: {fileID: 0}
162
+ m_PrefabAsset: {fileID: 0}
163
+ m_GameObject: {fileID: 8073796807547131747}
164
+ m_Enabled: 1
165
+ m_Avatar: {fileID: 0}
166
+ m_Controller: {fileID: 9100000, guid: 3b038a3cf997e10408e5ae13866f375e, type: 2}
167
+ m_CullingMode: 0
168
+ m_UpdateMode: 2
169
+ m_ApplyRootMotion: 0
170
+ m_LinearVelocityBlending: 0
171
+ m_StabilizeFeet: 0
172
+ m_AnimatePhysics: 0
173
+ m_WarningMessage:
174
+ m_HasTransformHierarchy: 1
175
+ m_AllowConstantClipSamplingOptimization: 1
176
+ m_KeepAnimatorStateOnDisable: 0
177
+ m_WriteDefaultValuesOnDisable: 0
178
+ --- !u!225 &2032832027083946277
179
+ CanvasGroup:
180
+ m_ObjectHideFlags: 0
181
+ m_CorrespondingSourceObject: {fileID: 0}
182
+ m_PrefabInstance: {fileID: 0}
183
+ m_PrefabAsset: {fileID: 0}
184
+ m_GameObject: {fileID: 8073796807547131747}
185
+ m_Enabled: 1
186
+ m_Alpha: 1
187
+ m_Interactable: 1
188
+ m_BlocksRaycasts: 1
189
+ m_IgnoreParentGroups: 1
@@ -0,0 +1,7 @@
1
+ fileFormatVersion: 2
2
+ guid: 8d7bb2f6da6c4ea1ae28721b16c76c6d
3
+ PrefabImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -0,0 +1,96 @@
1
+ %YAML 1.1
2
+ %TAG !u! tag:unity3d.com,2011:
3
+ --- !u!1 &975678129233418977
4
+ GameObject:
5
+ m_ObjectHideFlags: 0
6
+ m_CorrespondingSourceObject: {fileID: 0}
7
+ m_PrefabInstance: {fileID: 0}
8
+ m_PrefabAsset: {fileID: 0}
9
+ serializedVersion: 6
10
+ m_Component:
11
+ - component: {fileID: 7735793393820318980}
12
+ - component: {fileID: 5898651335449289899}
13
+ - component: {fileID: 3226358049917684236}
14
+ - component: {fileID: 6574686447719444045}
15
+ m_Layer: 5
16
+ m_Name: Rounded Cutout
17
+ m_TagString: Untagged
18
+ m_Icon: {fileID: 0}
19
+ m_NavMeshLayer: 0
20
+ m_StaticEditorFlags: 0
21
+ m_IsActive: 1
22
+ --- !u!224 &7735793393820318980
23
+ RectTransform:
24
+ m_ObjectHideFlags: 0
25
+ m_CorrespondingSourceObject: {fileID: 0}
26
+ m_PrefabInstance: {fileID: 0}
27
+ m_PrefabAsset: {fileID: 0}
28
+ m_GameObject: {fileID: 975678129233418977}
29
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
30
+ m_LocalPosition: {x: 0, y: 0, z: 0}
31
+ m_LocalScale: {x: 1, y: 1, z: 1}
32
+ m_ConstrainProportionsScale: 0
33
+ m_Children: []
34
+ m_Father: {fileID: 0}
35
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
36
+ m_AnchorMin: {x: 0, y: 1}
37
+ m_AnchorMax: {x: 1, y: 1}
38
+ m_AnchoredPosition: {x: 0, y: -93.5871}
39
+ m_SizeDelta: {x: 0, y: 187.1742}
40
+ m_Pivot: {x: 0.5, y: 0.5}
41
+ --- !u!222 &5898651335449289899
42
+ CanvasRenderer:
43
+ m_ObjectHideFlags: 0
44
+ m_CorrespondingSourceObject: {fileID: 0}
45
+ m_PrefabInstance: {fileID: 0}
46
+ m_PrefabAsset: {fileID: 0}
47
+ m_GameObject: {fileID: 975678129233418977}
48
+ m_CullTransparentMesh: 1
49
+ --- !u!114 &3226358049917684236
50
+ MonoBehaviour:
51
+ m_ObjectHideFlags: 0
52
+ m_CorrespondingSourceObject: {fileID: 0}
53
+ m_PrefabInstance: {fileID: 0}
54
+ m_PrefabAsset: {fileID: 0}
55
+ m_GameObject: {fileID: 975678129233418977}
56
+ m_Enabled: 1
57
+ m_EditorHideFlags: 0
58
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
59
+ m_Name:
60
+ m_EditorClassIdentifier:
61
+ m_Material: {fileID: 0}
62
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
63
+ m_RaycastTarget: 1
64
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
65
+ m_Maskable: 1
66
+ m_OnCullStateChanged:
67
+ m_PersistentCalls:
68
+ m_Calls: []
69
+ m_Sprite: {fileID: 0}
70
+ m_Type: 0
71
+ m_PreserveAspect: 0
72
+ m_FillCenter: 1
73
+ m_FillMethod: 4
74
+ m_FillAmount: 1
75
+ m_FillClockwise: 1
76
+ m_FillOrigin: 0
77
+ m_UseSpriteMesh: 0
78
+ m_PixelsPerUnitMultiplier: 1
79
+ --- !u!114 &6574686447719444045
80
+ MonoBehaviour:
81
+ m_ObjectHideFlags: 0
82
+ m_CorrespondingSourceObject: {fileID: 0}
83
+ m_PrefabInstance: {fileID: 0}
84
+ m_PrefabAsset: {fileID: 0}
85
+ m_GameObject: {fileID: 975678129233418977}
86
+ m_Enabled: 1
87
+ m_EditorHideFlags: 0
88
+ m_Script: {fileID: 11500000, guid: d8d6fbd710f94d5ab0779c13789d66d7, type: 3}
89
+ m_Name:
90
+ m_EditorClassIdentifier:
91
+ sideInset: 0
92
+ cutoutHeight: 55
93
+ cornerRadius: 75
94
+ aaSoftness: 1
95
+ transparentCutout: 1
96
+ cutoutColor: {r: 1, g: 0, b: 0, a: 1}
@@ -0,0 +1,7 @@
1
+ fileFormatVersion: 2
2
+ guid: 0e545819b3885594c9778fcc906c58ce
3
+ PrefabImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
@@ -34,8 +34,8 @@ RectTransform:
34
34
  m_LocalEulerAnglesHint: {x: 0, y: -0, z: -0}
35
35
  m_AnchorMin: {x: 0, y: 1}
36
36
  m_AnchorMax: {x: 1, y: 1}
37
- m_AnchoredPosition: {x: 0, y: -150}
38
- m_SizeDelta: {x: 0, y: 150}
37
+ m_AnchoredPosition: {x: 0, y: -163.909}
38
+ m_SizeDelta: {x: 0, y: 166.0843}
39
39
  m_Pivot: {x: 0.5, y: 0}
40
40
  --- !u!114 &768694916858949612
41
41
  MonoBehaviour:
@@ -225,6 +225,7 @@ GameObject:
225
225
  - component: {fileID: 4258396565476554788}
226
226
  - component: {fileID: 4077741713236914486}
227
227
  - component: {fileID: 4812839430072998803}
228
+ - component: {fileID: 8767445059493422347}
228
229
  m_Layer: 5
229
230
  m_Name: Status Bar
230
231
  m_TagString: Untagged
@@ -250,7 +251,7 @@ RectTransform:
250
251
  m_AnchorMin: {x: 0, y: 0}
251
252
  m_AnchorMax: {x: 1, y: 1}
252
253
  m_AnchoredPosition: {x: 0, y: 0}
253
- m_SizeDelta: {x: 0, y: 0.00012207}
254
+ m_SizeDelta: {x: 0, y: 0}
254
255
  m_Pivot: {x: 0.5, y: 0.5}
255
256
  --- !u!222 &4077741713236914486
256
257
  CanvasRenderer:
@@ -280,8 +281,8 @@ MonoBehaviour:
280
281
  m_OnCullStateChanged:
281
282
  m_PersistentCalls:
282
283
  m_Calls: []
283
- m_Sprite: {fileID: 21300000, guid: 72b18270f6563fe49bb2d813995c0969, type: 3}
284
- m_Type: 1
284
+ m_Sprite: {fileID: 0}
285
+ m_Type: 0
285
286
  m_PreserveAspect: 0
286
287
  m_FillCenter: 1
287
288
  m_FillMethod: 4
@@ -290,6 +291,22 @@ MonoBehaviour:
290
291
  m_FillOrigin: 0
291
292
  m_UseSpriteMesh: 0
292
293
  m_PixelsPerUnitMultiplier: 2.245
294
+ --- !u!114 &8767445059493422347
295
+ MonoBehaviour:
296
+ m_ObjectHideFlags: 0
297
+ m_CorrespondingSourceObject: {fileID: 0}
298
+ m_PrefabInstance: {fileID: 0}
299
+ m_PrefabAsset: {fileID: 0}
300
+ m_GameObject: {fileID: 3686714507548732898}
301
+ m_Enabled: 1
302
+ m_EditorHideFlags: 0
303
+ m_Script: {fileID: 11500000, guid: d8d6fbd710f94d5ab0779c13789d66d7, type: 3}
304
+ m_Name:
305
+ m_EditorClassIdentifier:
306
+ sideInset: 0
307
+ cutoutHeight: 55
308
+ cornerRadius: 75
309
+ aaSoftness: 1
293
310
  --- !u!1 &5659532641892873429
294
311
  GameObject:
295
312
  m_ObjectHideFlags: 0
@@ -326,7 +343,7 @@ RectTransform:
326
343
  m_AnchorMin: {x: 0, y: 1}
327
344
  m_AnchorMax: {x: 0, y: 1}
328
345
  m_AnchoredPosition: {x: 214.145, y: -10.5}
329
- m_SizeDelta: {x: 285.29, y: 0}
346
+ m_SizeDelta: {x: 0, y: 0}
330
347
  m_Pivot: {x: 0.5, y: 0.5}
331
348
  --- !u!222 &8979309464556769080
332
349
  CanvasRenderer:
@@ -0,0 +1,5 @@
1
+ using System.Runtime.CompilerServices;
2
+
3
+ [assembly: InternalsVisibleTo("Hyper")]
4
+ [assembly: InternalsVisibleTo("Hyper.Internal")]
5
+ [assembly: InternalsVisibleTo("Hyper.Tests.EditMode")]
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: ebc245f2f24e42bf8d0b4aceb7c5f95d
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -5,7 +5,7 @@ using UnityEngine;
5
5
  namespace Hyper.Shared
6
6
  {
7
7
  /// <summary>
8
- /// Game mode: Practice or Battle (PvP).
8
+ /// SDK gameplay mode.
9
9
  /// </summary>
10
10
  public enum GameMode
11
11
  {
@@ -17,7 +17,12 @@ namespace Hyper.Shared
17
17
  /// <summary>
18
18
  /// Multiplayer battle mode with time limit.
19
19
  /// </summary>
20
- Battle
20
+ Battle,
21
+
22
+ /// <summary>
23
+ /// Playback of a recorded battle session with live input and submissions disabled.
24
+ /// </summary>
25
+ Replay
21
26
  }
22
27
 
23
28
  /// <summary>
@@ -186,4 +191,4 @@ namespace Hyper.Shared
186
191
  /// </summary>
187
192
  Right
188
193
  }
189
- }
194
+ }
@@ -1,4 +1,5 @@
1
1
  using System;
2
+ using System.Collections.Generic;
2
3
 
3
4
  namespace Hyper.Shared
4
5
  {
@@ -23,5 +24,16 @@ namespace Hyper.Shared
23
24
  /// Gameplay modifiers active at the time of this snapshot (combo multipliers, powerups, etc.).
24
25
  /// </summary>
25
26
  public GameplayModifiers gameplayModifiers;
27
+
28
+ /// <summary>
29
+ /// Compact replay records captured since the previous score snapshot.
30
+ /// Shapes: [time, x, y], [time, value], or [time, actionName].
31
+ /// </summary>
32
+ public List<object[]> playActivities;
33
+
34
+ public bool ShouldSerializeplayActivities()
35
+ {
36
+ return playActivities != null && playActivities.Count > 0;
37
+ }
26
38
  }
27
- }
39
+ }
@@ -0,0 +1,37 @@
1
+ using System;
2
+
3
+ namespace Hyper.Shared
4
+ {
5
+ /// <summary>
6
+ /// Internal contract used by the SDK runtime to drive replay playback without
7
+ /// introducing an assembly dependency from Hyper.Internal to Hyper.
8
+ /// </summary>
9
+ internal interface IReplayPlaybackEngine
10
+ {
11
+ event Action<float, float> OnValues2;
12
+ event Action<float> OnValue;
13
+ event Action<float, float, float> OnValues;
14
+ event Action<string> OnAction;
15
+ event Action<string, string> OnActions;
16
+ event Action<string, float, float> OnActionValues;
17
+ event Action<float, float, string> OnValuesAction;
18
+ event Action<string, float> OnActionValue;
19
+ event Action<float, string> OnValueAction;
20
+ event Action<string> OnActionPreparing;
21
+ event Action OnGameStarted;
22
+ event Action OnGameEnded;
23
+
24
+ bool IsPlaying { get; }
25
+ double DurationSeconds { get; }
26
+ double ElapsedSeconds { get; }
27
+ float Progress01 { get; }
28
+ double ActionPreparationLeadSeconds { get; set; }
29
+
30
+ void Begin(string ndjson);
31
+ void Tick();
32
+ void Tick(double fixedSimulationDeltaSeconds);
33
+ void Stop();
34
+ void Suspend();
35
+ void Resume();
36
+ }
37
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 6db21fddf49346819a0c433082add2a1
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: cda8edea3bc8ee647a90f4c5eb9f5c48
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -49,8 +49,8 @@ namespace Hyper
49
49
  public static HyperRandomStream GetContext([CallerFilePath] string filePath = "",
50
50
  [CallerMemberName] string memberName = "")
51
51
  {
52
- string className = System.IO.Path.GetFileNameWithoutExtension(filePath);
53
- string contextName = $"{className}.{memberName}";
52
+ string fileIdentifier = GetCallerFileIdentifier(filePath);
53
+ string contextName = $"{fileIdentifier}.{memberName}";
54
54
  return GetOrCreateContextRNG(contextName);
55
55
  }
56
56
 
@@ -60,8 +60,8 @@ namespace Hyper
60
60
  /// </summary>
61
61
  public static HyperRandomStream GetShared([CallerFilePath] string filePath = "")
62
62
  {
63
- string className = System.IO.Path.GetFileNameWithoutExtension(filePath);
64
- return GetOrCreateContextRNG(className);
63
+ string fileIdentifier = GetCallerFileIdentifier(filePath);
64
+ return GetOrCreateContextRNG(fileIdentifier);
65
65
  }
66
66
 
67
67
  /// <summary>
@@ -138,6 +138,26 @@ namespace Hyper
138
138
  }
139
139
  }
140
140
 
141
+ private static string GetCallerFileIdentifier(string filePath)
142
+ {
143
+ #if UNITY_EDITOR
144
+ // A WebGL player treats the backslashes embedded in a Windows
145
+ // CallerFilePath as ordinary characters, so Path returns the full
146
+ // path without its extension. Reproduce that established behavior
147
+ // in the Editor without changing the player implementation.
148
+ string webGLFilePath = (filePath ?? string.Empty).Replace('/', '\\');
149
+ if (webGLFilePath.EndsWith(".cs", StringComparison.OrdinalIgnoreCase))
150
+ {
151
+ webGLFilePath = webGLFilePath.Substring(0, webGLFilePath.Length - 3);
152
+ }
153
+ return webGLFilePath;
154
+ #else
155
+ // Compatibility locked: this is the path handling currently used
156
+ // by live WebGL players and must remain unchanged.
157
+ return System.IO.Path.GetFileNameWithoutExtension(filePath);
158
+ #endif
159
+ }
160
+
141
161
  private static int CalculateWebGLSafeSeed(string identifier)
142
162
  {
143
163
  unchecked
@@ -508,4 +528,4 @@ namespace Hyper
508
528
  return list.OrderBy(keySelector).ToList();
509
529
  }
510
530
  }
511
- }
531
+ }