From dbbbba14e20f778a23b0556d0e53bddf805b5891 Mon Sep 17 00:00:00 2001 From: hypercross Date: Wed, 22 Apr 2026 16:13:48 +0800 Subject: [PATCH] refactor(slay-the-spire-like): update card effect and intent schemas Refactor the data schemas for desert card effects and intents to use dedicated type aliases for triggers, targets, and effect lists. This improves type safety and consistency across the sample data. --- .../data/desert/cardEffect.csv | 2 +- .../data/desert/cardEffect.csv.d.ts | 10 +++++++--- .../data/desert/intent.csv.d.ts | 19 +++++++++++-------- .../system/combat/effects.ts | 1 - 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/samples/slay-the-spire-like/data/desert/cardEffect.csv b/src/samples/slay-the-spire-like/data/desert/cardEffect.csv index 1441aa8..b8cad23 100644 --- a/src/samples/slay-the-spire-like/data/desert/cardEffect.csv +++ b/src/samples/slay-the-spire-like/data/desert/cardEffect.csv @@ -5,7 +5,7 @@ id,card,trigger,target,effects string,@card,CardEffectTrigger,CardEffectTarget,CardEffectList sword,sword,onPlay,eachTarget,[attack;2];[attack;2] -greataxe,greataxe,onPlay,all,[attack;5] +greataxe,greataxe,onPlay,eachTarget,[attack;5] spear,spear,onPlay,eachTarget,[attack;2];[attack;2];[attack;2] dagger,dagger,onPlay,eachTarget,[attack;3];[attack;3] dart,dart,onPlay,eachTarget,[attack;1] diff --git a/src/samples/slay-the-spire-like/data/desert/cardEffect.csv.d.ts b/src/samples/slay-the-spire-like/data/desert/cardEffect.csv.d.ts index 78c6614..3f79840 100644 --- a/src/samples/slay-the-spire-like/data/desert/cardEffect.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/desert/cardEffect.csv.d.ts @@ -1,12 +1,16 @@ import type { Card } from './card.csv'; import type { Effect } from './effect.csv'; +type CardEffectTrigger = "onPlay" | "onDraw" | "onDiscard"; +type CardEffectTarget = "user" | "eachTarget" | "eachEnemy" | "randomEnemy" | "player"; +type CardEffectList = [effect: Effect, stacks: number][]; + type CardEffectTable = readonly { readonly id: string; readonly card: Card; - readonly trigger: "onPlay" | "onDraw" | "onDiscard"; - readonly target: "self" | "target" | "all" | "random"; - readonly effects: [Effect, number][]; + readonly trigger: CardEffectTrigger; + readonly target: CardEffectTarget; + readonly effects: CardEffectList; }[]; export type CardEffect = CardEffectTable[number]; diff --git a/src/samples/slay-the-spire-like/data/desert/intent.csv.d.ts b/src/samples/slay-the-spire-like/data/desert/intent.csv.d.ts index 44a4c97..d161a76 100644 --- a/src/samples/slay-the-spire-like/data/desert/intent.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/desert/intent.csv.d.ts @@ -1,13 +1,16 @@ -import type { Enemy } from './enemy.csv'; -import type { Effect } from './effect.csv'; +import type { Enemy } from "./enemy.csv"; +import type { Effect } from "./effect.csv"; + +type IntentEffectTarget = "user" | "eachEnemy" | "randomEnemy" | "player"; +type IntentEffectList = [IntentEffectTarget, Effect, number][]; type IntentTable = readonly { - readonly id: string; - readonly enemy: Enemy; - readonly initialIntent: boolean; - readonly nextIntents: Intent[]; - readonly brokenIntent: Intent[]; - readonly effects: ["self" | "player" | "team", Effect, number][]; + readonly id: string; + readonly enemy: Enemy; + readonly initialIntent: boolean; + readonly nextIntents: Intent[]; + readonly brokenIntent: Intent[]; + readonly effects: IntentEffectList; }[]; export type Intent = IntentTable[number]; diff --git a/src/samples/slay-the-spire-like/system/combat/effects.ts b/src/samples/slay-the-spire-like/system/combat/effects.ts index 1aaf9d1..bfbda05 100644 --- a/src/samples/slay-the-spire-like/system/combat/effects.ts +++ b/src/samples/slay-the-spire-like/system/combat/effects.ts @@ -9,7 +9,6 @@ import { import { CardData, CardEffectTarget, - CardTargetType, EffectData, EffectTarget, } from "@/samples/slay-the-spire-like/system/types";