From e46822b45baf7dc78ea1fbd31f925daa002d6d0e Mon Sep 17 00:00:00 2001 From: hyper Date: Sat, 18 Apr 2026 14:40:56 +0800 Subject: [PATCH] refactor: avoid globalThis --- .../data/desert/triggers/effect.ts | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/samples/slay-the-spire-like/data/desert/triggers/effect.ts b/src/samples/slay-the-spire-like/data/desert/triggers/effect.ts index 2b380ac..a2d6316 100644 --- a/src/samples/slay-the-spire-like/data/desert/triggers/effect.ts +++ b/src/samples/slay-the-spire-like/data/desert/triggers/effect.ts @@ -9,8 +9,10 @@ import { EffectData } from "@/samples/slay-the-spire-like/system/types"; import { GameCard } from "@/samples/slay-the-spire-like/system/deck"; import { getAdjacentItems } from "@/samples/slay-the-spire-like/system/grid-inventory"; import { GameItemMeta } from "@/samples/slay-the-spire-like/system/progress"; +import getEffects from "../effect.csv"; export function addEffectTriggers(triggers: Triggers) { + const effects = getEffects(); // ========== instant effects ========== triggers.onEffectApplied.use(async (ctx, next) => { if (ctx.effect.id === "attack") { @@ -239,7 +241,7 @@ export function addEffectTriggers(triggers: Triggers) { if (storm > 0) { for (let i = 0; i < storm; i++) { await triggers.onEffectApplied.execute(ctx.game, { - effect: findEffect(ctx.game, "static"), + effect: findEffect("static"), entityKey: "player", stacks: 1, sourceEntityKey: ctx.enemyId, @@ -321,7 +323,7 @@ export function addEffectTriggers(triggers: Triggers) { const defendNext = ctx.game.value.player.effects.defendNext; if (defendNext && defendNext.stacks > 0) { await ctx.game.produceAsync(draft => { - addEntityEffect(draft.player, findEffect(ctx.game, "defend"), defendNext.stacks); + addEntityEffect(draft.player, findEffect("defend"), defendNext.stacks); addEntityEffect(draft.player, defendNext.data, -defendNext.stacks); }); } @@ -386,7 +388,7 @@ export function addEffectTriggers(triggers: Triggers) { const rollDamage = Math.floor(roll / 10) * 10; ctx.amount += rollDamage; await ctx.game.produceAsync(draft => { - addEntityEffect(draft.player, findEffect(ctx.game, "roll"), -rollDamage); + addEntityEffect(draft.player, findEffect("roll"), -rollDamage); }); } } @@ -419,7 +421,7 @@ export function addEffectTriggers(triggers: Triggers) { if (consumed > 0) { await ctx.game.produceAsync(draft => { const e = getCombatEntity(draft, ctx.entityKey); - if (e) addEntityEffect(e, findEffect(ctx.game, "charge"), -consumed); + if (e) addEntityEffect(e, findEffect("charge"), -consumed); }); } } @@ -438,7 +440,7 @@ export function addEffectTriggers(triggers: Triggers) { if (consumed > 0) { await ctx.game.produceAsync(draft => { const a = getCombatEntity(draft, ctx.sourceEntityKey!); - if (a) addEntityEffect(a, findEffect(ctx.game, "charge"), -consumed); + if (a) addEntityEffect(a, findEffect("charge"), -consumed); }); } } @@ -526,32 +528,28 @@ export function addEffectTriggers(triggers: Triggers) { if (!attacker || !("enemy" in attacker) || attacker.enemy.id !== "秃鹫") return; await triggers.onEffectApplied.execute(ctx.game, { - effect: findEffect(ctx.game, "vultureEye"), + effect: findEffect("vultureEye"), entityKey: "player", stacks: 1, sourceEntityKey: ctx.sourceEntityKey, }); }); -} -function getAllEnemyData(game: CombatGameContext) { - const seen = new Set(); - const result: typeof game.value.enemies[number]["enemy"][] = []; - for (const enemy of game.value.enemies) { - if (!seen.has(enemy.enemy.id)) { - seen.add(enemy.enemy.id); - result.push(enemy.enemy); + function getAllEnemyData(game: CombatGameContext) { + const seen = new Set(); + const result: typeof game.value.enemies[number]["enemy"][] = []; + for (const enemy of game.value.enemies) { + if (!seen.has(enemy.enemy.id)) { + seen.add(enemy.enemy.id); + result.push(enemy.enemy); + } } + return result; } - return result; -} -function findEffect(game: CombatGameContext | { value: CombatGameContext["value"] }, id: string): EffectData { - const value = "value" in game ? game.value : game; - const dataModule = (globalThis as any).__desertEffects; - if (dataModule) { - const found = dataModule.find((e: EffectData) => e.id === id); + function findEffect(id: string): EffectData { + const found = effects.find((e: EffectData) => e.id === id); if (found) return found; + return { id, name: id, description: "", lifecycle: "instant" } as EffectData; } - return { id, name: id, description: "", lifecycle: "instant" } as EffectData; }