29 lines
1.1 KiB
TypeScript
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>();
|
|
} |