summaryrefslogtreecommitdiff
path: root/packages/frontend/src/scripts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2024-01-13 12:00:12 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2024-01-13 12:00:12 +0900
commit7b0f5b50fc68c18431731fa5b829458d9ae7c9b4 (patch)
tree8ebf50d3f86883b9439eab9f66a2126a1bbf20fa /packages/frontend/src/scripts
parentperf(drop-and-fusion): remove root Transition component for improve performance (diff)
downloadsharkey-7b0f5b50fc68c18431731fa5b829458d9ae7c9b4.tar.gz
sharkey-7b0f5b50fc68c18431731fa5b829458d9ae7c9b4.tar.bz2
sharkey-7b0f5b50fc68c18431731fa5b829458d9ae7c9b4.zip
refactor(drop-and-fusion): some refactors
Diffstat (limited to 'packages/frontend/src/scripts')
-rw-r--r--packages/frontend/src/scripts/drop-and-fusion-engine.ts16
1 files changed, 9 insertions, 7 deletions
diff --git a/packages/frontend/src/scripts/drop-and-fusion-engine.ts b/packages/frontend/src/scripts/drop-and-fusion-engine.ts
index 930cde00cb..cc7f9abd56 100644
--- a/packages/frontend/src/scripts/drop-and-fusion-engine.ts
+++ b/packages/frontend/src/scripts/drop-and-fusion-engine.ts
@@ -295,7 +295,7 @@ export class DropAndFusionGame extends EventEmitter<{
public readonly GAME_VERSION = 2;
public readonly GAME_WIDTH = 450;
public readonly GAME_HEIGHT = 600;
- public readonly DROP_INTERVAL = 500;
+ public readonly DROP_COOLTIME = 30; // frame
public readonly PLAYAREA_MARGIN = 25;
private STOCK_MAX = 4;
private TICK_DELTA = 1000 / 60; // 60fps
@@ -323,7 +323,7 @@ export class DropAndFusionGame extends EventEmitter<{
*/
private fusionReservedPairs: { bodyA: Matter.Body; bodyB: Matter.Body }[] = [];
- private latestDroppedAt = 0;
+ private latestDroppedAt = 0; // frame
private latestFusionedAt = 0; // frame
private stock: { id: string; mono: Mono }[] = [];
private holding: { id: string; mono: Mono } | null = null;
@@ -426,10 +426,14 @@ export class DropAndFusionGame extends EventEmitter<{
Matter.Composite.add(this.engine.world, this.overflowCollider);
}
- private msToFrame(ms: number) {
+ public msToFrame(ms: number) {
return Math.round(ms / this.TICK_DELTA);
}
+ public frameToMs(frame: number) {
+ return frame * this.TICK_DELTA;
+ }
+
private createBody(mono: Mono, x: number, y: number) {
const options: Matter.IBodyDefinition = {
label: mono.id,
@@ -461,7 +465,6 @@ export class DropAndFusionGame extends EventEmitter<{
}
this.latestFusionedAt = this.frame;
- // TODO: 単に位置だけでなくそれぞれの動きベクトルも融合する?
const newX = (bodyA.position.x + bodyB.position.x) / 2;
const newY = (bodyA.position.y + bodyB.position.y) / 2;
@@ -608,8 +611,7 @@ export class DropAndFusionGame extends EventEmitter<{
public drop(_x: number) {
if (this.isGameOver) return;
- // TODO: フレームで計算するようにすればリプレイかどうかのチェックは不要になる
- if (!this.replaying && (Date.now() - this.latestDroppedAt < this.DROP_INTERVAL)) return;
+ if (this.frame - this.latestDroppedAt < this.DROP_COOLTIME) return;
const head = this.stock.shift()!;
this.stock.push({
@@ -629,7 +631,7 @@ export class DropAndFusionGame extends EventEmitter<{
Matter.Composite.add(this.engine.world, body);
this.fusionReadyBodyIds.push(body.id);
- this.latestDroppedAt = Date.now();
+ this.latestDroppedAt = this.frame;
this.emit('dropped', x);
this.emit('monoAdded', head.mono);