feat: add posture damage & item effect update trigger

This commit is contained in:
2026-04-17 11:57:40 +08:00
parent 65afe6dc8f
commit 1d749f59a6
2 changed files with 43 additions and 9 deletions
@@ -34,6 +34,14 @@ export function onEntityEffectUpkeep(entity: CombatEntity){
}
}
export function onEntityPostureDamage(entity: CombatEntity, damage: number){
for(const effect of Object.values(entity.effects)){
const lifecycle = effect.data.lifecycle;
if(lifecycle === 'posture')
addEntityEffect(entity, effect.data, -Math.min(damage, effect.stacks));
}
}
export function onPlayerItemEffectUpkeep(entity: PlayerEntity){
for(const [itemKey, itemEffects] of Object.entries(entity.itemEffects)){
for(const effect of Object.values(itemEffects)){
@@ -44,6 +52,26 @@ export function onPlayerItemEffectUpkeep(entity: PlayerEntity){
}
}
export function onItemPlay(entity: PlayerEntity, itemKey: string){
const effects = entity.itemEffects[itemKey];
if(!effects)return;
for(const effect of Object.values(effects)){
if(effect.data.lifecycle === 'itemUntilPlay'){
addItemEffect(entity, itemKey, effect.data, -effect.stacks);
}
}
}
export function onItemDiscard(entity: PlayerEntity, itemKey: string){
const effects = entity.itemEffects[itemKey];
if(!effects)return;
for(const effect of Object.values(effects)){
if(effect.data.lifecycle === 'itemUntilDiscard'){
addItemEffect(entity, itemKey, effect.data, -effect.stacks);
}
}
}
export function* getAliveEnemies(state: CombatState) {
for (let enemy of state.enemies) {
if (enemy.isAlive) {