mani-game-engine 1.0.0-pre.90 → 1.0.0-pre.91
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/lib/clock.js +12 -5
- package/lib/clock.js.map +1 -1
- package/package.json +1 -1
- package/src/clock.ts +17 -6
package/lib/clock.js
CHANGED
|
@@ -31,14 +31,16 @@ class GameClock {
|
|
|
31
31
|
this.currentTime = newTime;
|
|
32
32
|
this.isRunning = true;
|
|
33
33
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
const rawDelta = newTime - this.currentTime;
|
|
35
|
+
let clampedDelta = rawDelta;
|
|
36
|
+
if (clampedDelta > this.maxFrameTime) {
|
|
37
|
+
clampedDelta = this.maxFrameTime;
|
|
37
38
|
}
|
|
39
|
+
const frameTime = clampedDelta * this.timeScale;
|
|
38
40
|
this.currentTime = newTime;
|
|
39
41
|
this.accumulator += frameTime;
|
|
40
42
|
while (this.accumulator >= this._fixedDeltaTime) {
|
|
41
|
-
this.onEarlyUpdate.dispatch({ time: this._gameTime, deltaTime:
|
|
43
|
+
this.onEarlyUpdate.dispatch({ time: this._gameTime, deltaTime: this._fixedDeltaTime });
|
|
42
44
|
this.onPrepare.dispatch();
|
|
43
45
|
for (const [id, timeOut] of this.timeouts) {
|
|
44
46
|
if (this._gameTime >= timeOut.callTime) {
|
|
@@ -74,6 +76,8 @@ class GameClock {
|
|
|
74
76
|
opts.autoStart && this.start();
|
|
75
77
|
}
|
|
76
78
|
dispose() {
|
|
79
|
+
this.stop();
|
|
80
|
+
this.timeouts.clear();
|
|
77
81
|
this.onPrepare.detachAll();
|
|
78
82
|
this.onEarlyUpdate.detachAll();
|
|
79
83
|
this.onUpdate.detachAll();
|
|
@@ -84,12 +88,15 @@ class GameClock {
|
|
|
84
88
|
return this._timeScale;
|
|
85
89
|
}
|
|
86
90
|
set timeScale(value) {
|
|
87
|
-
this._timeScale = Math.max(value, MIN_TIME_SCALE);
|
|
91
|
+
this._timeScale = value === 0 ? 0 : Math.max(value, MIN_TIME_SCALE);
|
|
88
92
|
}
|
|
89
93
|
start() {
|
|
90
94
|
if (this.isRunning) {
|
|
91
95
|
return this;
|
|
92
96
|
}
|
|
97
|
+
this.isRunning = true;
|
|
98
|
+
this.currentTime = performance.now() * 0.001;
|
|
99
|
+
this.accumulator = 0;
|
|
93
100
|
this.requestId = requestAnimationFrame(this.update);
|
|
94
101
|
return this;
|
|
95
102
|
}
|
package/lib/clock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../src/clock.ts"],"names":[],"mappings":";;;AAAA,6CAAmC;AAGnC,MAAM,cAAc,GAAG,OAAO,CAAC;AAI/B,MAAM,cAAc,GAAG;IACrB,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,CAAC,GAAG,EAAE;IACtB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,CAAC;CACb,CAAC;AA0BF,MAAa,SAAS;IACpB,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"clock.js","sourceRoot":"","sources":["../src/clock.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/clock.ts
CHANGED
|
@@ -60,17 +60,20 @@ export class GameClock implements Clock {
|
|
|
60
60
|
this.isRunning = true;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
// Clamp raw delta before applying timeScale for more predictable behavior
|
|
64
|
+
const rawDelta = newTime - this.currentTime;
|
|
65
|
+
let clampedDelta = rawDelta;
|
|
66
|
+
if (clampedDelta > this.maxFrameTime) {
|
|
67
|
+
clampedDelta = this.maxFrameTime;
|
|
67
68
|
}
|
|
69
|
+
const frameTime = clampedDelta * this.timeScale;
|
|
68
70
|
|
|
69
71
|
this.currentTime = newTime;
|
|
70
72
|
this.accumulator += frameTime;
|
|
71
73
|
|
|
72
74
|
while (this.accumulator >= this._fixedDeltaTime) {
|
|
73
|
-
|
|
75
|
+
// Use fixedDeltaTime inside the fixed-step loop for consistency
|
|
76
|
+
this.onEarlyUpdate.dispatch({time: this._gameTime, deltaTime: this._fixedDeltaTime});
|
|
74
77
|
this.onPrepare.dispatch();
|
|
75
78
|
for (const [id, timeOut] of this.timeouts) {
|
|
76
79
|
if (this._gameTime >= timeOut.callTime) {
|
|
@@ -111,6 +114,9 @@ export class GameClock implements Clock {
|
|
|
111
114
|
}
|
|
112
115
|
|
|
113
116
|
dispose(): void {
|
|
117
|
+
// Stop scheduling frames and clear callbacks to avoid leaks
|
|
118
|
+
this.stop();
|
|
119
|
+
this.timeouts.clear();
|
|
114
120
|
this.onPrepare.detachAll();
|
|
115
121
|
this.onEarlyUpdate.detachAll();
|
|
116
122
|
this.onUpdate.detachAll();
|
|
@@ -126,13 +132,18 @@ export class GameClock implements Clock {
|
|
|
126
132
|
}
|
|
127
133
|
|
|
128
134
|
set timeScale(value: number) {
|
|
129
|
-
|
|
135
|
+
// Allow 0 (pause). For positive values, clamp to MIN_TIME_SCALE.
|
|
136
|
+
this._timeScale = value === 0 ? 0 : Math.max(value, MIN_TIME_SCALE);
|
|
130
137
|
}
|
|
131
138
|
|
|
132
139
|
start(): this {
|
|
133
140
|
if (this.isRunning) {
|
|
134
141
|
return this;
|
|
135
142
|
}
|
|
143
|
+
// Initialize timing state on start to avoid multiple rAFs and ensure stable first frame
|
|
144
|
+
this.isRunning = true;
|
|
145
|
+
this.currentTime = performance.now() * 0.001;
|
|
146
|
+
this.accumulator = 0;
|
|
136
147
|
this.requestId = requestAnimationFrame(this.update);
|
|
137
148
|
return this;
|
|
138
149
|
}
|