fix: add effect triggering fixes

This commit is contained in:
2026-04-17 15:30:28 +08:00
parent aedf82d264
commit af0906561c
3 changed files with 57 additions and 25 deletions
@@ -1,5 +1,11 @@
import {CombatEntity, CombatState, EffectTable, PlayerEntity} from "./types";
import {CardData, EffectData} from "@/samples/slay-the-spire-like/system/types";
import {CombatEntity, CombatGameContext, CombatState, EffectTable, PlayerEntity} from "./types";
import {
CardData,
CardEffectTarget,
CardTargetType,
EffectData,
EffectTarget
} from "@/samples/slay-the-spire-like/system/types";
import {GameItemMeta} from "@/samples/slay-the-spire-like/system/progress/types";
import {GridInventory} from "@/samples/slay-the-spire-like/system/grid-inventory/types";
@@ -80,6 +86,25 @@ export function* getAliveEnemies(state: CombatState) {
}
}
export function* getEffectTargets(target: CardEffectTarget | EffectTarget, game: CombatGameContext, targetId?: string){
if(target === 'all' || target === 'team'){
for(const enemy of getAliveEnemies(game.value)){
yield enemy;
}
} else if(target === 'self') {
yield game.value.player;
} else if(target === 'target'){
if(!targetId) return;
const entity = getCombatEntity(game.value, targetId);
if(entity) yield entity;
} else if(target === 'random'){
const aliveEnemies = [...getAliveEnemies(game.value)];
if(aliveEnemies.length === 0) return;
const index = game.rng.nextInt(aliveEnemies.length);
yield aliveEnemies[index];
}
}
export function getCombatEntity(state: CombatState, entityKey: string){
return entityKey === 'player' ? state.player : state.enemies.find(e => e.id === entityKey);
}