refactor: gameListener事件改用eventemitter3库

This commit is contained in:
unanmed 2024-10-11 16:24:08 +08:00
parent f9358eb24e
commit eb194bf2b3

View File

@ -1,13 +1,12 @@
import { EventEmitter } from '../core/common/eventEmitter'; import { EventEmitter } from 'eventemitter3';
import type { DamageEnemy, EnemyCollection } from './enemy/damage'; import type { DamageEnemy, EnemyCollection } from './enemy/damage';
// ----- 加载事件 // ----- 加载事件
interface GameLoadEvent { interface GameLoadEvent {
coreLoaded: () => void; coreLoaded: [];
autotileLoaded: () => void; autotileLoaded: [];
coreInit: () => void; coreInit: [];
loaded: () => void; loaded: [];
materialLoaded: () => void;
} }
class GameLoading extends EventEmitter<GameLoadEvent> { class GameLoading extends EventEmitter<GameLoadEvent> {
@ -17,17 +16,8 @@ class GameLoading extends EventEmitter<GameLoadEvent> {
constructor() { constructor() {
super(); super();
this.on( this.on('coreInit', () => {
'coreInit', this.autotileNum = Object.keys(core.material.icons.autotile).length;
() => {
this.autotileNum = Object.keys(
core.material.icons.autotile
).length;
},
{ immediate: true }
);
this.on('materialLoaded', () => {
core.loader._loadMaterials_afterLoad();
}); });
} }
@ -67,51 +57,51 @@ export const loading = new GameLoading();
export interface GameEvent { export interface GameEvent {
/** Emitted in libs/events.js resetGame. */ /** Emitted in libs/events.js resetGame. */
reset: () => void; reset: [];
/** Emitted in src/App.vue setup. */ /** Emitted in src/App.vue setup. */
mounted: () => void; mounted: [];
/** Emitted in plugin/game/ui.ts updateStatusBar_update */ /** Emitted in plugin/game/ui.ts updateStatusBar_update */
statusBarUpdate: () => void; statusBarUpdate: [];
/** Emitted in core/index.ts */ /** Emitted in core/index.ts */
renderLoaded: () => void; renderLoaded: [];
/** Emitted in libs/events.js getItem */ /** Emitted in libs/events.js getItem */
afterGetItem: ( afterGetItem: [
itemId: AllIdsOf<'items'>, itemId: AllIdsOf<'items'>,
x: number, x: number,
y: number, y: number,
isGentleClick: boolean isGentleClick: boolean
) => void; ];
/** Emitted in libs/events.js _openDoor_animate */ /** Emitted in libs/events.js _openDoor_animate */
afterOpenDoor: (doorId: AllIdsOf<'animates'>, x: number, y: number) => void; afterOpenDoor: [doorId: AllIdsOf<'animates'>, x: number, y: number];
/** Emitted in project/functions.js afterChangeFloor */ /** Emitted in project/functions.js afterChangeFloor */
afterChangeFloor: (floorId: FloorIds) => void; afterChangeFloor: [floorId: FloorIds];
/** Emitted in project/functions.js moveOneStep */ /** Emitted in project/functions.js moveOneStep */
moveOneStep: (x: number, y: number, floorId: FloorIds) => void; moveOneStep: [x: number, y: number, floorId: FloorIds];
/** Emitted in src/game/enemy/battle.ts afterBattle */ /** Emitted in src/game/enemy/battle.ts afterBattle */
afterBattle: (enemy: DamageEnemy, x?: number, y?: number) => void; afterBattle: [enemy: DamageEnemy, x?: number, y?: number];
/** Emitted in libs/events.js changingFloor */ /** Emitted in libs/events.js changingFloor */
changingFloor: (floorId: FloorIds, heroLoc: Loc) => void; changingFloor: [floorId: FloorIds, heroLoc: Loc];
/** Emitted in libs/maps.js setBlock */ /** Emitted in libs/maps.js setBlock */
setBlock: ( setBlock: [
x: number, x: number,
y: number, y: number,
floorId: FloorIds, floorId: FloorIds,
newBlock: AllNumbers, newBlock: AllNumbers,
oldBlock: AllNumbers oldBlock: AllNumbers
) => void; ];
/** Emitted in game/enemy/damage.ts */ /** Emitted in game/enemy/damage.ts */
enemyExtract: (col: EnemyCollection) => void; enemyExtract: [col: EnemyCollection];
} }
export const hook = new EventEmitter<GameEvent>(); export const hook = new EventEmitter<GameEvent>();
interface ListenerEvent { interface ListenerEvent {
// block // block
hoverBlock: (block: Block, ev: MouseEvent) => void; hoverBlock: [block: Block, ev: MouseEvent];
leaveBlock: (block: Block, ev: MouseEvent, leaveGame: boolean) => void; leaveBlock: [block: Block, ev: MouseEvent, leaveGame: boolean];
clickBlock: (block: Block, ev: MouseEvent) => void; clickBlock: [block: Block, ev: MouseEvent];
// mouse // mouse
mouseMove: (ev: MouseEvent) => void; mouseMove: [ev: MouseEvent];
} }
class GameListener extends EventEmitter<ListenerEvent> { class GameListener extends EventEmitter<ListenerEvent> {