diff --git a/scripts/verify-flow.mjs b/scripts/verify-flow.mjs index efa4ecf..104e18f 100644 --- a/scripts/verify-flow.mjs +++ b/scripts/verify-flow.mjs @@ -75,8 +75,8 @@ try { } const readyUnits = result.battleState.units.filter((unit) => !unit.acted); - if (!readyUnits.some((unit) => unit.animating && unit.animationKey?.includes('-walk-'))) { - throw new Error(`Expected ready units to loop walk frames: ${JSON.stringify(readyUnits)}`); + if (!readyUnits.some((unit) => unit.animating && unit.animationKey?.includes('-idle-'))) { + throw new Error(`Expected ready units to loop idle frames: ${JSON.stringify(readyUnits)}`); } console.log(`Verified title-to-battle flow and debug API at ${targetUrl}`); diff --git a/src/assets/images/units/unit-guan-yu.png b/src/assets/images/units/unit-guan-yu.png index 2bd45f1..287d524 100644 Binary files a/src/assets/images/units/unit-guan-yu.png and b/src/assets/images/units/unit-guan-yu.png differ diff --git a/src/assets/images/units/unit-liu-bei.png b/src/assets/images/units/unit-liu-bei.png index b4b7397..f558aa8 100644 Binary files a/src/assets/images/units/unit-liu-bei.png and b/src/assets/images/units/unit-liu-bei.png differ diff --git a/src/assets/images/units/unit-rebel-archer.png b/src/assets/images/units/unit-rebel-archer.png index 1b86915..032b548 100644 Binary files a/src/assets/images/units/unit-rebel-archer.png and b/src/assets/images/units/unit-rebel-archer.png differ diff --git a/src/assets/images/units/unit-rebel-cavalry.png b/src/assets/images/units/unit-rebel-cavalry.png index b3c1179..059983b 100644 Binary files a/src/assets/images/units/unit-rebel-cavalry.png and b/src/assets/images/units/unit-rebel-cavalry.png differ diff --git a/src/assets/images/units/unit-rebel-leader.png b/src/assets/images/units/unit-rebel-leader.png index 7d4eb45..dc2ef1f 100644 Binary files a/src/assets/images/units/unit-rebel-leader.png and b/src/assets/images/units/unit-rebel-leader.png differ diff --git a/src/assets/images/units/unit-rebel.png b/src/assets/images/units/unit-rebel.png index 3c11141..f70cd95 100644 Binary files a/src/assets/images/units/unit-rebel.png and b/src/assets/images/units/unit-rebel.png differ diff --git a/src/assets/images/units/unit-zhang-fei.png b/src/assets/images/units/unit-zhang-fei.png index d632051..2576608 100644 Binary files a/src/assets/images/units/unit-zhang-fei.png and b/src/assets/images/units/unit-zhang-fei.png differ diff --git a/src/game/scenes/BattleScene.ts b/src/game/scenes/BattleScene.ts index 3eaece8..240f546 100644 --- a/src/game/scenes/BattleScene.ts +++ b/src/game/scenes/BattleScene.ts @@ -1434,6 +1434,12 @@ export class BattleScene extends Phaser.Scene { view.sprite.play(`${view.textureBase}-walk-${direction}`, true); } + private playUnitIdle(view: UnitView, direction: UnitDirection) { + view.direction = direction; + view.sprite.setFlipX(false); + view.sprite.play(`${view.textureBase}-idle-${direction}`, true); + } + private stopUnitWalk(view: UnitView, direction: UnitDirection) { view.direction = direction; view.sprite.stop(); @@ -1451,7 +1457,7 @@ export class BattleScene extends Phaser.Scene { return; } - this.playUnitWalk(view, direction); + this.playUnitIdle(view, direction); } private setUnitDirectionFrame(view: UnitView, direction: UnitDirection) { diff --git a/src/game/scenes/BootScene.ts b/src/game/scenes/BootScene.ts index 1942f66..09f07cb 100644 --- a/src/game/scenes/BootScene.ts +++ b/src/game/scenes/BootScene.ts @@ -21,6 +21,8 @@ type UnitDirection = 'south' | 'east' | 'north' | 'west'; const unitWalkFrameCount = 4; const unitSheetFrameSize = 313; +const unitWalkFrameRate = 8; +const unitIdleFrameRate = 4; const unitSheetRows: Record = { south: 0, east: 1, @@ -82,20 +84,30 @@ export class BootScene extends Phaser.Scene { private createUnitAnimations() { unitSheets.forEach(({ key }) => { (['south', 'east', 'north', 'west'] as UnitDirection[]).forEach((direction) => { - const animationKey = `${key}-walk-${direction}`; - if (this.anims.exists(animationKey)) { - return; + const frames = Array.from({ length: unitWalkFrameCount }, (_, frameIndex) => ({ + key, + frame: unitSheetRows[direction] * unitWalkFrameCount + frameIndex + })); + const walkAnimationKey = `${key}-walk-${direction}`; + const idleAnimationKey = `${key}-idle-${direction}`; + + if (!this.anims.exists(walkAnimationKey)) { + this.anims.create({ + key: walkAnimationKey, + frames, + frameRate: unitWalkFrameRate, + repeat: -1 + }); } - this.anims.create({ - key: animationKey, - frames: Array.from({ length: unitWalkFrameCount }, (_, frameIndex) => ({ - key, - frame: unitSheetRows[direction] * unitWalkFrameCount + frameIndex - })), - frameRate: 8, - repeat: -1 - }); + if (!this.anims.exists(idleAnimationKey)) { + this.anims.create({ + key: idleAnimationKey, + frames, + frameRate: unitIdleFrameRate, + repeat: -1 + }); + } }); }); }