From 888b7b822d5db8372e100aa3ec84fc8572b671cb Mon Sep 17 00:00:00 2001 From: hypercross Date: Wed, 22 Apr 2026 16:00:15 +0800 Subject: [PATCH] refactor(slay-the-spire-like): extract types in desert data schemas --- .../slay-the-spire-like/data/desert/card.csv.d.ts | 10 +++++++--- .../slay-the-spire-like/data/desert/effect.csv.d.ts | 5 ++++- .../slay-the-spire-like/data/desert/encounter.csv.d.ts | 7 +++++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/samples/slay-the-spire-like/data/desert/card.csv.d.ts b/src/samples/slay-the-spire-like/data/desert/card.csv.d.ts index bbcc7a5..56ef34d 100644 --- a/src/samples/slay-the-spire-like/data/desert/card.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/desert/card.csv.d.ts @@ -1,13 +1,17 @@ import type { CardEffect } from './cardEffect.csv'; +type CardType = "item" | "status"; +type CardCostType = "energy" | "uses" | "none"; +type CardTargetType = "player" | "enemy" | "enemies"; + type CardTable = readonly { readonly id: string; readonly name: string; readonly desc: string; - readonly type: "item" | "status"; - readonly costType: "energy" | "uses" | "none"; + readonly type: CardType; + readonly costType: CardCostType; readonly costCount: number; - readonly targetType: "single" | "none"; + readonly targetType: CardTargetType; readonly effects: CardEffect[]; }[]; diff --git a/src/samples/slay-the-spire-like/data/desert/effect.csv.d.ts b/src/samples/slay-the-spire-like/data/desert/effect.csv.d.ts index 78db08a..06ed931 100644 --- a/src/samples/slay-the-spire-like/data/desert/effect.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/desert/effect.csv.d.ts @@ -1,8 +1,11 @@ +type EffectLifecycle = "instant" | "temporary" | "lingering" | "permanent" | "posture" | "item" | "itemTemporary" | "itemUntilPlay" | "itemUntilDiscard" | "itemPermanent"; + type EffectTable = readonly { readonly id: string; readonly name: string; readonly description: string; - readonly lifecycle: "instant" | "temporary" | "lingering" | "permanent" | "posture" | "item" | "itemTemporary" | "itemUntilPlay" | "itemUntilDiscard" | "itemPermanent"; + readonly lifecycle: EffectLifecycle; + readonly emoji: string; }[]; export type Effect = EffectTable[number]; diff --git a/src/samples/slay-the-spire-like/data/desert/encounter.csv.d.ts b/src/samples/slay-the-spire-like/data/desert/encounter.csv.d.ts index f35b098..c19c6a2 100644 --- a/src/samples/slay-the-spire-like/data/desert/encounter.csv.d.ts +++ b/src/samples/slay-the-spire-like/data/desert/encounter.csv.d.ts @@ -1,12 +1,15 @@ import type { Enemy } from './enemy.csv'; import type { Effect } from './effect.csv'; +type EncounterType = "minion" | "elite" | "event" | "shop" | "camp" | "curio"; +type EnemyList = [data: Enemy, hp: number, effects: [effect: Effect, stacks: number][]][]; + type EncounterTable = readonly { readonly id: string; - readonly type: "minion" | "elite" | "event" | "shop" | "camp" | "curio"; + readonly type: EncounterType; readonly name: string; readonly description: string; - readonly enemies: [data: Enemy, hp: number, effects: [effect: Effect, stacks: number][]][]; + readonly enemies: EnemyList; readonly dialogue: string; }[];