/**
* LoopStep
* ゲームループの共通ステップ契約を定義する
* 各ステップ間で受け渡すフレーム文脈を提供する
*/
import type { Application, Container } from "pixi.js";
import type { LocalPlayerController } from "@client/scenes/game/entities/player/PlayerController";
import type { PlayerRepository } from "@client/scenes/game/entities/player/PlayerRepository";
/** 1フレーム分の更新文脈を表す型 */
export type LoopFrameContext = {
app: Application;
worldContainer: Container;
playerRepository: PlayerRepository;
me: LocalPlayerController;
deltaSeconds: number;
};
/** 入力由来の移動状態を表す型 */
export type LoopMovementState = {
isMoving: boolean;
axisX: number;
axisY: number;
};
/** 1フレーム内で許可する副作用操作の型 */
export type LoopFrameEffects = {
setMovementState: (movement: LoopMovementState) => void;
getMovementState: () => LoopMovementState;
};
/** ゲームループ内で実行されるステップ共通インターフェース */
export type LoopStep = {
run: (context: Readonly<LoopFrameContext>, effects: LoopFrameEffects) => void;
};