pinball/assets/_Game/Scripts/Events/GameEvent.ts

47 lines
1.6 KiB
TypeScript

import { Node, Vec3 } from 'cc';
import GameState from '../Enum/GameState';
import ScoreType from '../Enum/ScoreType';
import BoosterType from '../Enum/BoosterType';
import { ControllerSide } from '../GamePlay/Flipper';
enum GameEvent {
Score,
BallOut,
MultiBall,
TimeUpdate,
GameStateChange,
ObjectRelease,
BoosterActive,
BoosterDisable,
ControlTouchStart,
ControlTouchEnd,
}
export interface GameEventCallbackMap {
[GameEvent.Score]: (score: number, points?: number, type?: ScoreType, position?: Vec3) => void;
[GameEvent.BallOut]: () => void;
[GameEvent.MultiBall]: (active: boolean) => void;
[GameEvent.TimeUpdate]: (time: number) => void;
[GameEvent.GameStateChange]: (state: GameState) => void;
[GameEvent.ObjectRelease]: (obj: Node) => void;
[GameEvent.BoosterActive]: (boosterType: BoosterType) => void;
[GameEvent.BoosterDisable]: (boosterType: BoosterType) => void;
[GameEvent.ControlTouchStart]: (touchSide: ControllerSide) => void;
[GameEvent.ControlTouchEnd]: (touchSide: ControllerSide) => void;
}
export interface GameEventArgMap {
[GameEvent.Score]: [number, number, ScoreType, Vec3];
[GameEvent.BallOut]: null;
[GameEvent.MultiBall]: boolean;
[GameEvent.TimeUpdate]: number;
[GameEvent.GameStateChange]: GameState;
[GameEvent.ObjectRelease]: Node;
[GameEvent.BoosterActive]: BoosterType;
[GameEvent.BoosterDisable]: BoosterType;
[GameEvent.ControlTouchStart]: ControllerSide;
[GameEvent.ControlTouchEnd]: ControllerSide;
}
export default GameEvent;