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

29 lines
1.1 KiB
TypeScript

import {createMiddlewareChain} from "../utils/middleware";
import {CombatGameContext} from "./types";
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, },
}
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"),
}
}
export function createTrigger<TKey extends keyof Triggers>(event: TKey) {
type Ctx = Triggers[TKey] & { event: TKey, game: CombatGameContext };
return createMiddlewareChain<Ctx>();
}