private void perform(ActionPerformEvent event) { if (!isInterestingAction(event.getAction())) { return; } this.onPerform(event); }
private ReplayAction(ActionPerformEvent event) { this.entity = event.getEntity().getId(); this.performer = event.getPerformer().getId(); this.actionName = event.getAction().getName(); this.targets = event.getAction().getTargetSets().stream() .map(targetSet -> targetSet.getChosenTargets().stream() .map(e -> e.getId()).collect(Collectors.toList())) .collect(Collectors.toList()); }
@Override protected void onPerform(ActionPerformEvent event) { Entity target = event.getAction().getTargetSets().get(0).getChosenTargets().get(0); Entity enchantment = event.getEntity(); for (ECSResource resource : resources) { ResourceRetriever res = ResourceRetriever.forResource(resource); int enchantmentValue = res.getFor(enchantment); res.resFor(target).change(enchantmentValue); } enchantment.destroy(); }
@Override public void startGame(ECSGame game) { game.getEvents().registerHandlerBefore(TCGGame.this, ActionPerformEvent.class, action -> { UseAbilityMessage useAbilityMessage = new UseAbilityMessage(getId(), action.getEntity().getId(), action.getAction().getName(), action.getAction().getAllTargets().mapToInt(e -> e.getId()).toArray()); send(useAbilityMessage.withPerformer(action.getPerformer().getId())); }); } });
public EffectComponent giveTarget(ECSResource resource, int value, IntUnaryOperator operator) { ResourceRetriever res = ResourceRetriever.forResource(resource); GameEffect effect = (entity, event) -> event.getAction().getAllTargets().forEach(e -> { ECSResourceData data = res.resFor(e); data.change(value); data.set(operator.applyAsInt(data.get())); }); return new EffectComponent("Give target " + value + " " + resource, effect); } public <T extends IEvent> EffectComponent giveSelf(Function<Entity, ECSSystem> system) {
private void onCardPlayed(ActionPerformEvent event) { if (event.getAction().getName().equals(actionName)) { return; } this.cardsPlayedThisTurn++; if (this.cardsPlayedThisTurn >= limit) { if (actionName == null) { PhaseController phases = Retrievers.singleton(event.getEntity().getGame(), PhaseController.class); phases.nextPhase(); } else { ECSAction action = Actions.getAction(event.getPerformer(), actionName); action.perform(event.getPerformer()); } cardsPlayedThisTurn = 0; } }
@Override protected void onPerform(ActionPerformEvent event) { Entity source = event.getEntity(); Entity target = event.getAction().getTargetSets().get(0).getChosenTargets().get(0); ECSGame game = event.getEntity().getGame(); int attackDamage = attack.getFor(source); int defenseDamage = attack.getFor(target); if (target.hasComponent(PlayerComponent.class)) { damage(event, attackDamage, target, source, game); } else { DamageEvent damageEvent = new DamageEvent(event, target, source, attackDamage); game.getEvents().executeEvent(damageEvent, e -> { }); destroyOrNothing(damageEvent.getDamage(), target); } if (allowCounterAttack.test(source, target)) { destroyOrNothing(defenseDamage, source); } }
@Override protected void onPerform(ActionPerformEvent event) { Entity source = event.getEntity(); Entity target = event.getAction().getTargetSets().get(0).getChosenTargets().get(0); AttackEvent attackEvent = new AttackEvent(source, target); source.getGame().executeCancellableEvent(attackEvent, () -> { int attackDamage = attack.getFor(source); int defenseDamage = attack.getFor(target); int attackHealth = health.getFor(source); int defenseHealth = health.getFor(target); ECSGame game = source.getGame(); attackDamage = damage(attackEvent, attackDamage, target, source, game); boolean counterAttack = allowCounterAttack.test(source, target); if (counterAttack) { defenseDamage = damage(attackEvent, defenseDamage, source, target, game); } checkKill(target, attackDamage, defenseHealth); if (counterAttack) { checkKill(source, defenseDamage, attackHealth); } }); }