refactor: avoid globalThis

This commit is contained in:
hyper 2026-04-18 14:40:56 +08:00
parent 03add589c6
commit e46822b45b
1 changed files with 20 additions and 22 deletions

View File

@ -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,13 +528,12 @@ 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<string>();
@ -546,12 +547,9 @@ function getAllEnemyData(game: CombatGameContext) {
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;
}
}