app.hypergames.hypersdk 1.11.0-beta.16 → 1.11.0-beta.17
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,10 @@
|
|
|
1
|
+
# [1.11.0-beta.17](https://github.com/mvmhyper/hyper-sdk/compare/v1.11.0-beta.16...v1.11.0-beta.17) (2026-09-01)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **replay:** refine seek loading progress ([3d01f94](https://github.com/mvmhyper/hyper-sdk/commit/3d01f94d7e6ce360a61dd3d257149cf7f3237bcb))
|
|
7
|
+
|
|
1
8
|
# [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
9
|
|
|
3
10
|
|
|
@@ -22,7 +22,8 @@ namespace Hyper.Internal
|
|
|
22
22
|
[SerializeField, Min(1f)] private float seekPlaybackSpeed = 10f;
|
|
23
23
|
[SerializeField, Range(0.25f, 1f)] private float seekSnapshotScale = 0.55f;
|
|
24
24
|
[SerializeField, Range(0f, 0.5f)] private float seekPreparationProgress = 0.2f;
|
|
25
|
-
[SerializeField,
|
|
25
|
+
[SerializeField, Range(0f, 0.15f)] private float seekPreparationProgressVariation = 0.05f;
|
|
26
|
+
[SerializeField, Min(0.1f)] private float seekPreparationDuration = 3f;
|
|
26
27
|
[SerializeField] private GameObject seekLoadingOverlay;
|
|
27
28
|
[SerializeField] private RawImage seekSnapshotImage;
|
|
28
29
|
|
|
@@ -35,7 +36,11 @@ namespace Hyper.Internal
|
|
|
35
36
|
private Image seekOverlayBackground;
|
|
36
37
|
private Color seekOverlayBackgroundColor;
|
|
37
38
|
private ReplaySeekOverlay seekOverlay;
|
|
39
|
+
private static readonly System.Random SeekProgressRandom = new System.Random();
|
|
38
40
|
private static float displayedSeekProgress;
|
|
41
|
+
private static float firstSeekPreparationTarget;
|
|
42
|
+
private static float secondSeekPreparationTarget;
|
|
43
|
+
private static float seekPreparationCeiling;
|
|
39
44
|
|
|
40
45
|
private void Awake()
|
|
41
46
|
{
|
|
@@ -198,7 +203,7 @@ namespace Hyper.Internal
|
|
|
198
203
|
|
|
199
204
|
float resumeSpeed = SanitizePlaybackSpeed(ReplaySessionState.UserPlaybackSpeed);
|
|
200
205
|
float fastForwardSpeed = SanitizePlaybackSpeed(seekPlaybackSpeed);
|
|
201
|
-
|
|
206
|
+
InitializeSeekProgressPresentation();
|
|
202
207
|
StartCoroutine(CaptureAndSeek(targetProgress, resumeSpeed, fastForwardSpeed));
|
|
203
208
|
}
|
|
204
209
|
|
|
@@ -431,30 +436,98 @@ namespace Hyper.Internal
|
|
|
431
436
|
}
|
|
432
437
|
else if (isCapturingSeek || ReplaySessionState.IsSeekRestartPending)
|
|
433
438
|
{
|
|
434
|
-
|
|
435
|
-
displayedSeekProgress = Mathf.MoveTowards(
|
|
436
|
-
displayedSeekProgress,
|
|
437
|
-
seekPreparationProgress,
|
|
438
|
-
seekPreparationProgress * Time.unscaledDeltaTime / duration);
|
|
439
|
+
AdvanceSeekPreparationProgress();
|
|
439
440
|
progress = displayedSeekProgress;
|
|
440
441
|
}
|
|
441
442
|
else
|
|
442
443
|
{
|
|
444
|
+
EnsureSeekProgressPresentation();
|
|
443
445
|
float target = ReplaySessionState.SeekTarget01;
|
|
444
446
|
float reconstructionProgress = target <= Mathf.Epsilon
|
|
445
447
|
? 1f
|
|
446
448
|
: ReplaySessionState.Progress01 / target;
|
|
447
449
|
float realProgress = Mathf.Lerp(
|
|
448
|
-
|
|
450
|
+
seekPreparationCeiling,
|
|
449
451
|
1f,
|
|
450
452
|
Mathf.Clamp01(reconstructionProgress));
|
|
451
|
-
|
|
453
|
+
AdvanceSeekReconstructionProgress(realProgress);
|
|
452
454
|
progress = displayedSeekProgress;
|
|
453
455
|
}
|
|
454
456
|
|
|
455
457
|
seekOverlay.SetProgress(progress);
|
|
456
458
|
}
|
|
457
459
|
|
|
460
|
+
private void AdvanceSeekPreparationProgress()
|
|
461
|
+
{
|
|
462
|
+
EnsureSeekProgressPresentation();
|
|
463
|
+
float duration = Mathf.Max(0.1f, seekPreparationDuration);
|
|
464
|
+
float deltaTime = Mathf.Min(Time.unscaledDeltaTime, 0.1f);
|
|
465
|
+
|
|
466
|
+
if (displayedSeekProgress < firstSeekPreparationTarget)
|
|
467
|
+
{
|
|
468
|
+
float speed = firstSeekPreparationTarget / (duration * 0.35f);
|
|
469
|
+
displayedSeekProgress = Mathf.MoveTowards(
|
|
470
|
+
displayedSeekProgress,
|
|
471
|
+
firstSeekPreparationTarget,
|
|
472
|
+
speed * deltaTime);
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
if (displayedSeekProgress < secondSeekPreparationTarget)
|
|
477
|
+
{
|
|
478
|
+
float speed = (secondSeekPreparationTarget - firstSeekPreparationTarget) / (duration * 0.2f);
|
|
479
|
+
displayedSeekProgress = Mathf.MoveTowards(
|
|
480
|
+
displayedSeekProgress,
|
|
481
|
+
secondSeekPreparationTarget,
|
|
482
|
+
speed * deltaTime);
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
float crawlResponse = 1f - Mathf.Exp(-deltaTime / (duration * 0.65f));
|
|
487
|
+
displayedSeekProgress = Mathf.Lerp(displayedSeekProgress, seekPreparationCeiling, crawlResponse);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
private void InitializeSeekProgressPresentation()
|
|
491
|
+
{
|
|
492
|
+
float center = Mathf.Clamp01(seekPreparationProgress);
|
|
493
|
+
float variation = Mathf.Max(0f, seekPreparationProgressVariation);
|
|
494
|
+
float minimum = Mathf.Clamp01(center - variation);
|
|
495
|
+
float maximum = Mathf.Clamp01(center + variation);
|
|
496
|
+
|
|
497
|
+
displayedSeekProgress = 0f;
|
|
498
|
+
seekPreparationCeiling = RandomRange(minimum, maximum);
|
|
499
|
+
firstSeekPreparationTarget = seekPreparationCeiling * RandomRange(0.25f, 0.35f);
|
|
500
|
+
secondSeekPreparationTarget = seekPreparationCeiling * RandomRange(0.62f, 0.76f);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
private void EnsureSeekProgressPresentation()
|
|
504
|
+
{
|
|
505
|
+
if (seekPreparationCeiling > 0f) return;
|
|
506
|
+
InitializeSeekProgressPresentation();
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
private static float RandomRange(float minimum, float maximum)
|
|
510
|
+
{
|
|
511
|
+
if (maximum <= minimum) return minimum;
|
|
512
|
+
return minimum + ((float)SeekProgressRandom.NextDouble() * (maximum - minimum));
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
private void AdvanceSeekReconstructionProgress(float realProgress)
|
|
516
|
+
{
|
|
517
|
+
float target = Mathf.Max(displayedSeekProgress, realProgress);
|
|
518
|
+
if (target >= 0.999f)
|
|
519
|
+
{
|
|
520
|
+
displayedSeekProgress = 1f;
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
float deltaTime = Mathf.Min(Time.unscaledDeltaTime, 0.1f);
|
|
525
|
+
float gap = target - displayedSeekProgress;
|
|
526
|
+
float responseSpeed = Mathf.Lerp(5f, 14f, Mathf.Clamp01(gap * 4f));
|
|
527
|
+
float response = 1f - Mathf.Exp(-responseSpeed * deltaTime);
|
|
528
|
+
displayedSeekProgress = Mathf.Lerp(displayedSeekProgress, target, response);
|
|
529
|
+
}
|
|
530
|
+
|
|
458
531
|
private void ConfigureSeekSnapshot()
|
|
459
532
|
{
|
|
460
533
|
if (seekSnapshotImage == null)
|
|
@@ -320,7 +320,8 @@ MonoBehaviour:
|
|
|
320
320
|
seekPlaybackSpeed: 10
|
|
321
321
|
seekSnapshotScale: 0.725
|
|
322
322
|
seekPreparationProgress: 0.2
|
|
323
|
-
|
|
323
|
+
seekPreparationProgressVariation: 0.05
|
|
324
|
+
seekPreparationDuration: 3
|
|
324
325
|
seekLoadingOverlay: {fileID: 0}
|
|
325
326
|
seekSnapshotImage: {fileID: 0}
|
|
326
327
|
--- !u!1 &1862654115017658012
|
|
@@ -288,7 +288,7 @@ MonoBehaviour:
|
|
|
288
288
|
m_Name:
|
|
289
289
|
m_EditorClassIdentifier:
|
|
290
290
|
m_Material: {fileID: 0}
|
|
291
|
-
m_Color: {r: 1, g: 1, b: 1, a: 0.
|
|
291
|
+
m_Color: {r: 1, g: 1, b: 1, a: 0.1764706}
|
|
292
292
|
m_RaycastTarget: 1
|
|
293
293
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
|
294
294
|
m_Maskable: 1
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "app.hypergames.hypersdk",
|
|
3
|
-
"version": "1.11.0-beta.
|
|
3
|
+
"version": "1.11.0-beta.17",
|
|
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",
|