boardgame-core/src/samples/slay-the-spire-like/system/combat/triggers.ts

29 lines
1.1 KiB
TypeScript
Raw Normal View History

2026-04-17 08:33:02 +08:00
import {createMiddlewareChain} from "../utils/middleware";
import {CombatGameContext} from "./types";
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-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-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>();
}