From b18e232cc8aef38a04b5235c8fa1d5160b17b114 Mon Sep 17 00:00:00 2001 From: hyper Date: Thu, 16 Apr 2026 19:14:46 +0800 Subject: [PATCH] chore: todos --- src/samples/slay-the-spire-like/combat/triggers.ts | 4 ++++ src/samples/slay-the-spire-like/combat/types.ts | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/samples/slay-the-spire-like/combat/triggers.ts b/src/samples/slay-the-spire-like/combat/triggers.ts index fb28942..84e1117 100644 --- a/src/samples/slay-the-spire-like/combat/triggers.ts +++ b/src/samples/slay-the-spire-like/combat/triggers.ts @@ -9,6 +9,9 @@ export type TriggerContext = { rng: { nextInt: (n: number) => number }; }; +// TODO add an onCardDrawn trigger +// TODO refactor this to NOT implicitly correspond to an effect type, but generic event handler +// TODO also, refactor this to be async to support prompts and produceAsync export type BuffTriggerBehavior = { onTurnStart?: (ctx: TriggerContext, entityKey: "player" | string, stacks: number) => void; onTurnEnd?: (ctx: TriggerContext, entityKey: "player" | string, stacks: number) => void; @@ -21,6 +24,7 @@ export type BuffTriggerBehavior = { onCardDiscarded?: (ctx: TriggerContext, cardId: string, stacks: number) => void; }; +// TODO refactor this to be keyed by event type export type CombatTriggerRegistry = Record; export function createCombatTriggerRegistry(): CombatTriggerRegistry { diff --git a/src/samples/slay-the-spire-like/combat/types.ts b/src/samples/slay-the-spire-like/combat/types.ts index 9fdbb47..60048fb 100644 --- a/src/samples/slay-the-spire-like/combat/types.ts +++ b/src/samples/slay-the-spire-like/combat/types.ts @@ -1,3 +1,4 @@ +// TODO shouldn't rely on csv types. Use interfaces and expect csv types to match. import type { EnemyDesert } from "../data/enemyDesert.csv"; import type { EnemyIntentDesert } from "../data/enemyIntentDesert.csv"; import type { EffectDesert } from "../data/effectDesert.csv"; @@ -6,6 +7,7 @@ import type { PlayerState } from "../progress/types"; export type BuffTable = Record; +// TODO rename this to "lifecycle". Should use lifecycle in csv as well. export type EffectTiming = EffectDesert["timing"]; export type EffectTarget = "self" | "target" | "all" | "random" | "player" | "team"; @@ -58,9 +60,13 @@ export type CombatState = { player: PlayerCombatState; phase: CombatPhase; turnNumber: number; + // TODO: "fled" is a per-enemy state. Should remove it here and expand the isAlive property on enemy instead. + // TODO: CombatResult should just be "victory" "defeat" or null. result: CombatResult | null; loot: LootEntry[]; + // TODO: I think this belongs to the player combat state. itemBuffs: ItemBuff[]; + // TODO: Also belongs to the player combat state. fatigueAddedCount: number; enemyTemplateData: Record; };