feat: effect and triggers
This commit is contained in:
@@ -79,3 +79,7 @@ export function* getAliveEnemies(state: CombatState) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function getCombatEntity(state: CombatState, entityKey: string){
|
||||
return entityKey === 'player' ? state.player : state.enemies.find(e => e.id === entityKey);
|
||||
}
|
||||
@@ -24,7 +24,7 @@ type TriggerTypes = {
|
||||
onDraw: {count: number},
|
||||
onEffectApplied: { effect: EffectData, entityKey: "player" | string, stacks: number, cardId?: string },
|
||||
onHpChange: { entityKey: "player" | string, amount: number},
|
||||
onDamage: { entityKey: "player" | string, amount: number, dealt?: number, prevented?: number},
|
||||
onDamage: { entityKey: "player" | string, amount: number, prevented?: number},
|
||||
onEnemyIntent: { enemyId: string },
|
||||
onIntentUpdate: { enemyId: string },
|
||||
}
|
||||
@@ -126,12 +126,11 @@ function createTriggers(){
|
||||
onDamage: createTrigger("onDamage", async ctx => {
|
||||
const entity = ctx.entityKey === "player" ? ctx.game.value.player : ctx.game.value.enemies.find(e => e.id === ctx.entityKey);
|
||||
if(!entity || !entity.isAlive) return;
|
||||
const dealt = ctx.dealt = Math.min(Math.max(0,entity.hp), ctx.amount);
|
||||
ctx.prevented = ctx.amount - ctx.dealt;
|
||||
const dealt = Math.min(Math.max(0,entity.hp), ctx.amount - (ctx.prevented || 0));
|
||||
await ctx.game.produceAsync(draft => {
|
||||
onEntityPostureDamage(entity, dealt);
|
||||
});
|
||||
await triggers.onHpChange.execute(ctx.game,{entityKey: ctx.entityKey, amount: -ctx.amount});
|
||||
await triggers.onHpChange.execute(ctx.game,{entityKey: ctx.entityKey, amount: -dealt});
|
||||
}),
|
||||
onEnemyIntent: createTrigger("onEnemyIntent", async ctx => {
|
||||
const enemy = ctx.game.value.enemies.find(e => e.id === ctx.enemyId);
|
||||
|
||||
Reference in New Issue
Block a user