app.hypergames.hypersdk 1.11.0-beta.14 → 1.11.0-beta.16
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 +14 -0
- package/Runtime/Internal/UI/Components/ReplayController.cs +47 -0
- package/Runtime/Internal/UI/Components/ReplaySeekOverlay.cs +18 -0
- package/Runtime/Internal/UI/Components/ReplaySeekOverlay.cs.meta +2 -0
- package/Runtime/Resources/Fonts/Wonder Boys/Wonder Boys.asset +394 -379
- package/Runtime/Resources/Sprites/Circle Loader/Property 1=1.png.meta +7 -7
- package/Runtime/Resources/Sprites/Circle Loader/Property 1=2.png.meta +7 -7
- package/Runtime/Resources/Sprites/Circle Loader/Property 1=3.png.meta +7 -7
- package/Runtime/Resources/Sprites/Circle Loader/Property 1=4.png.meta +7 -7
- package/Runtime/Resources/Sprites/Circle Loader/Property 1=5.png.meta +7 -7
- package/Runtime/Resources/UIPrefabs/ReplayController.prefab +2 -0
- package/Runtime/Resources/UIPrefabs/ReplaySeekOverlay.prefab +291 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.11.0-beta.16](https://github.com/mvmhyper/hyper-sdk/compare/v1.11.0-beta.15...v1.11.0-beta.16) (2026-08-31)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **replay:** show seek preparation progress ([60213f7](https://github.com/mvmhyper/hyper-sdk/commit/60213f784c5bff39da4634590545fe4d0e4c0911))
|
|
7
|
+
|
|
8
|
+
# [1.11.0-beta.15](https://github.com/mvmhyper/hyper-sdk/compare/v1.11.0-beta.14...v1.11.0-beta.15) (2026-08-31)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **replay:** show seek completion progress ([4e7c1b8](https://github.com/mvmhyper/hyper-sdk/commit/4e7c1b807bd9f34b97477ef39aa9ca3c06316ef3))
|
|
14
|
+
|
|
1
15
|
# [1.11.0-beta.14](https://github.com/mvmhyper/hyper-sdk/compare/v1.11.0-beta.13...v1.11.0-beta.14) (2026-08-31)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -21,6 +21,8 @@ namespace Hyper.Internal
|
|
|
21
21
|
[SerializeField] private float[] playbackSpeeds = { 1.5f, 2f, 3f, 4f, 5f, 1f };
|
|
22
22
|
[SerializeField, Min(1f)] private float seekPlaybackSpeed = 10f;
|
|
23
23
|
[SerializeField, Range(0.25f, 1f)] private float seekSnapshotScale = 0.55f;
|
|
24
|
+
[SerializeField, Range(0f, 0.5f)] private float seekPreparationProgress = 0.2f;
|
|
25
|
+
[SerializeField, Min(0.1f)] private float seekPreparationDuration = 1f;
|
|
24
26
|
[SerializeField] private GameObject seekLoadingOverlay;
|
|
25
27
|
[SerializeField] private RawImage seekSnapshotImage;
|
|
26
28
|
|
|
@@ -32,6 +34,8 @@ namespace Hyper.Internal
|
|
|
32
34
|
private Texture2D seekSnapshotTexture;
|
|
33
35
|
private Image seekOverlayBackground;
|
|
34
36
|
private Color seekOverlayBackgroundColor;
|
|
37
|
+
private ReplaySeekOverlay seekOverlay;
|
|
38
|
+
private static float displayedSeekProgress;
|
|
35
39
|
|
|
36
40
|
private void Awake()
|
|
37
41
|
{
|
|
@@ -79,6 +83,11 @@ namespace Hyper.Internal
|
|
|
79
83
|
SetSeekingPresentation(isSeeking);
|
|
80
84
|
}
|
|
81
85
|
|
|
86
|
+
if (isSeeking)
|
|
87
|
+
{
|
|
88
|
+
UpdateSeekProgress(true);
|
|
89
|
+
}
|
|
90
|
+
|
|
82
91
|
if (progressSlider != null && (seekInput == null || !seekInput.IsDragging))
|
|
83
92
|
{
|
|
84
93
|
float displayedProgress = isCapturingSeek
|
|
@@ -189,6 +198,7 @@ namespace Hyper.Internal
|
|
|
189
198
|
|
|
190
199
|
float resumeSpeed = SanitizePlaybackSpeed(ReplaySessionState.UserPlaybackSpeed);
|
|
191
200
|
float fastForwardSpeed = SanitizePlaybackSpeed(seekPlaybackSpeed);
|
|
201
|
+
displayedSeekProgress = 0f;
|
|
192
202
|
StartCoroutine(CaptureAndSeek(targetProgress, resumeSpeed, fastForwardSpeed));
|
|
193
203
|
}
|
|
194
204
|
|
|
@@ -260,6 +270,7 @@ namespace Hyper.Internal
|
|
|
260
270
|
private void SetSeekingPresentation(bool isSeeking)
|
|
261
271
|
{
|
|
262
272
|
ReplayPresentationCanvas.SetSeekingLayer(isSeeking);
|
|
273
|
+
UpdateSeekProgress(isSeeking);
|
|
263
274
|
if (seekLoadingOverlay != null) seekLoadingOverlay.SetActive(isSeeking);
|
|
264
275
|
if (progressSlider != null) progressSlider.interactable = !isSeeking && !ReplaySessionState.HasEnded;
|
|
265
276
|
if (playbackSpeedButton != null)
|
|
@@ -404,10 +415,46 @@ namespace Hyper.Internal
|
|
|
404
415
|
seekLoadingOverlay.transform.SetAsFirstSibling();
|
|
405
416
|
seekOverlayBackground = seekLoadingOverlay.GetComponent<Image>();
|
|
406
417
|
if (seekOverlayBackground != null) seekOverlayBackgroundColor = seekOverlayBackground.color;
|
|
418
|
+
seekOverlay = seekLoadingOverlay.GetComponent<ReplaySeekOverlay>();
|
|
407
419
|
seekLoadingOverlay.SetActive(ReplaySessionState.IsSeeking);
|
|
408
420
|
wasSeeking = ReplaySessionState.IsSeeking;
|
|
409
421
|
}
|
|
410
422
|
|
|
423
|
+
private void UpdateSeekProgress(bool isSeeking)
|
|
424
|
+
{
|
|
425
|
+
if (seekOverlay == null) return;
|
|
426
|
+
|
|
427
|
+
float progress;
|
|
428
|
+
if (!isSeeking)
|
|
429
|
+
{
|
|
430
|
+
progress = 1f;
|
|
431
|
+
}
|
|
432
|
+
else if (isCapturingSeek || ReplaySessionState.IsSeekRestartPending)
|
|
433
|
+
{
|
|
434
|
+
float duration = Mathf.Max(0.1f, seekPreparationDuration);
|
|
435
|
+
displayedSeekProgress = Mathf.MoveTowards(
|
|
436
|
+
displayedSeekProgress,
|
|
437
|
+
seekPreparationProgress,
|
|
438
|
+
seekPreparationProgress * Time.unscaledDeltaTime / duration);
|
|
439
|
+
progress = displayedSeekProgress;
|
|
440
|
+
}
|
|
441
|
+
else
|
|
442
|
+
{
|
|
443
|
+
float target = ReplaySessionState.SeekTarget01;
|
|
444
|
+
float reconstructionProgress = target <= Mathf.Epsilon
|
|
445
|
+
? 1f
|
|
446
|
+
: ReplaySessionState.Progress01 / target;
|
|
447
|
+
float realProgress = Mathf.Lerp(
|
|
448
|
+
seekPreparationProgress,
|
|
449
|
+
1f,
|
|
450
|
+
Mathf.Clamp01(reconstructionProgress));
|
|
451
|
+
displayedSeekProgress = Mathf.Max(displayedSeekProgress, realProgress);
|
|
452
|
+
progress = displayedSeekProgress;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
seekOverlay.SetProgress(progress);
|
|
456
|
+
}
|
|
457
|
+
|
|
411
458
|
private void ConfigureSeekSnapshot()
|
|
412
459
|
{
|
|
413
460
|
if (seekSnapshotImage == null)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
using TMPro;
|
|
2
|
+
using UnityEngine;
|
|
3
|
+
|
|
4
|
+
namespace Hyper.Internal
|
|
5
|
+
{
|
|
6
|
+
internal sealed class ReplaySeekOverlay : MonoBehaviour
|
|
7
|
+
{
|
|
8
|
+
[SerializeField] private TextMeshProUGUI progressText;
|
|
9
|
+
|
|
10
|
+
internal void SetProgress(float progress01)
|
|
11
|
+
{
|
|
12
|
+
if (progressText == null) return;
|
|
13
|
+
|
|
14
|
+
int percentage = Mathf.RoundToInt(Mathf.Clamp01(progress01) * 100f);
|
|
15
|
+
progressText.text = $"{percentage}%";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|