feat: implmenet some effects for the design
This commit is contained in:
@@ -18,14 +18,14 @@ type TriggerTypes = {
|
||||
onTurnStart: { entityKey: "player" | string, },
|
||||
onTurnEnd: { entityKey: "player" | string, },
|
||||
onShuffle: {},
|
||||
onCardPlayed: { cardId: string, targetId?: string },
|
||||
onCardDiscarded: { cardId: string, },
|
||||
onCardDrawn: { cardId: string, },
|
||||
onCardPlayed: { cardId: string, targetId?: string, sourceEntityKey?: "player" | string },
|
||||
onCardDiscarded: { cardId: string, sourceEntityKey?: "player" | string },
|
||||
onCardDrawn: { cardId: string, sourceEntityKey?: "player" | string },
|
||||
onDraw: {count: number},
|
||||
onEffectApplied: { effect: EffectData, entityKey: "player" | string, stacks: number, cardId?: string },
|
||||
onEffectApplied: { effect: EffectData, entityKey: "player" | string, stacks: number, cardId?: string, sourceEntityKey?: "player" | string },
|
||||
onHpChange: { entityKey: "player" | string, amount: number},
|
||||
onDamage: { entityKey: "player" | string, amount: number, prevented?: number},
|
||||
onEnemyIntent: { enemyId: string },
|
||||
onDamage: { entityKey: "player" | string, amount: number, prevented?: number, sourceEntityKey?: "player" | string},
|
||||
onEnemyIntent: { enemyId: string, sourceEntityKey?: "player" | string },
|
||||
onIntentUpdate: { enemyId: string },
|
||||
}
|
||||
|
||||
@@ -67,10 +67,11 @@ function createTriggers(){
|
||||
});
|
||||
const {cards, regions} = ctx.game.value.player.deck;
|
||||
const card = cards[ctx.cardId];
|
||||
const source = ctx.sourceEntityKey ?? "player";
|
||||
for(const [trigger, target, effect, stacks] of card.cardData.effects){
|
||||
if(trigger !== 'onPlay') continue;
|
||||
for(const entity of getEffectTargets(target, ctx.game, ctx.targetId))
|
||||
await triggers.onEffectApplied.execute(ctx.game,{effect, entityKey: entity.id, stacks, cardId: ctx.cardId});
|
||||
await triggers.onEffectApplied.execute(ctx.game,{effect, entityKey: entity.id, stacks, cardId: ctx.cardId, sourceEntityKey: source});
|
||||
}
|
||||
}),
|
||||
onCardDiscarded: createTrigger("onCardDiscarded", async ctx => {
|
||||
@@ -81,10 +82,11 @@ function createTriggers(){
|
||||
});
|
||||
const {cards, regions} = ctx.game.value.player.deck;
|
||||
const card = cards[ctx.cardId];
|
||||
const source = ctx.sourceEntityKey ?? "player";
|
||||
for(const [trigger, target, effect, stacks] of card.cardData.effects){
|
||||
if(trigger !== 'onDiscard') continue;
|
||||
for(const entity of getEffectTargets(target, ctx.game))
|
||||
await triggers.onEffectApplied.execute(ctx.game,{effect, entityKey: entity.id, stacks, cardId: ctx.cardId});
|
||||
await triggers.onEffectApplied.execute(ctx.game,{effect, entityKey: entity.id, stacks, cardId: ctx.cardId, sourceEntityKey: source});
|
||||
}
|
||||
}),
|
||||
onCardDrawn: createTrigger("onCardDrawn", async ctx => {
|
||||
@@ -94,10 +96,11 @@ function createTriggers(){
|
||||
});
|
||||
const {cards, regions} = ctx.game.value.player.deck;
|
||||
const card = cards[ctx.cardId];
|
||||
const source = ctx.sourceEntityKey ?? "player";
|
||||
for(const [trigger, target, effect, stacks] of card.cardData.effects){
|
||||
if(trigger !== 'onDraw') continue;
|
||||
for(const entity of getEffectTargets(target, ctx.game))
|
||||
await triggers.onEffectApplied.execute(ctx.game,{effect, entityKey: entity.id, stacks, cardId: ctx.cardId});
|
||||
await triggers.onEffectApplied.execute(ctx.game,{effect, entityKey: entity.id, stacks, cardId: ctx.cardId, sourceEntityKey: source});
|
||||
}
|
||||
}),
|
||||
onDraw: createTrigger("onDraw", async ctx => {
|
||||
@@ -162,9 +165,10 @@ function createTriggers(){
|
||||
const intent = enemy.currentIntent;
|
||||
if(!intent) return;
|
||||
|
||||
const source = ctx.sourceEntityKey ?? enemy.id;
|
||||
for(const [target, effect, stacks] of intent.effects){
|
||||
for(const entity of getEffectTargets(target, ctx.game))
|
||||
await triggers.onEffectApplied.execute(ctx.game, { effect, entityKey: entity.id, stacks, });
|
||||
await triggers.onEffectApplied.execute(ctx.game, { effect, entityKey: entity.id, stacks, sourceEntityKey: source });
|
||||
}
|
||||
}),
|
||||
onIntentUpdate: createTrigger("onIntentUpdate", async ctx => {
|
||||
|
||||
Reference in New Issue
Block a user