2026-04-17 08:33:02 +08:00
|
|
|
import {createMiddlewareChain} from "../utils/middleware";
|
|
|
|
|
import {CombatGameContext} from "./types";
|
2026-04-16 14:00:49 +08:00
|
|
|
|
2026-04-17 08:33:02 +08:00
|
|
|
export type Triggers = {
|
|
|
|
|
onTurnStart: { entityKey: "player" | string, },
|
|
|
|
|
onTurnEnd: { entityKey: "player" | string, },
|
|
|
|
|
onShuffle: { entityKey: "player" | string, },
|
|
|
|
|
onCardPlayed: { cardId: string, },
|
|
|
|
|
onCardDiscarded: { cardId: string, },
|
|
|
|
|
onCardDrawn: { cardId: string, },
|
|
|
|
|
onEffectApplied: { effectId: string, entityKey: "player" | string, stacks: number, },
|
2026-04-16 14:00:49 +08:00
|
|
|
}
|
|
|
|
|
|
2026-04-17 08:33:02 +08:00
|
|
|
export function createTriggers(){
|
|
|
|
|
return {
|
|
|
|
|
onTurnStart: createTrigger("onTurnStart"),
|
|
|
|
|
onTurnEnd: createTrigger("onTurnEnd"),
|
|
|
|
|
onShuffle: createTrigger("onShuffle"),
|
|
|
|
|
onCardPlayed: createTrigger("onCardPlayed"),
|
|
|
|
|
onCardDiscarded: createTrigger("onCardDiscarded"),
|
|
|
|
|
onCardDrawn: createTrigger("onCardDrawn"),
|
|
|
|
|
onEffectApplied: createTrigger("onEffectApplied"),
|
2026-04-16 14:00:49 +08:00
|
|
|
}
|
|
|
|
|
}
|
2026-04-16 21:52:28 +08:00
|
|
|
|
2026-04-17 08:33:02 +08:00
|
|
|
export function createTrigger<TKey extends keyof Triggers>(event: TKey) {
|
|
|
|
|
type Ctx = Triggers[TKey] & { event: TKey, game: CombatGameContext };
|
|
|
|
|
return createMiddlewareChain<Ctx>();
|
|
|
|
|
}
|