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(); }
private void perform(ActionPerformEvent event) { if (!isInterestingAction(event.getAction())) { return; } this.onPerform(event); }
public boolean perform(Entity performer) { synchronized (performer.getGame()) { if (!this.isAllowed(performer)) { return false; } if (!this.targetSets.stream().allMatch(targets -> targets.hasEnoughTargets())) { return false; } try { this.owner.getGame().executeEvent(new ActionPerformEvent(owner, this, performer), () -> this.perform.accept(this)); } catch (RuntimeException ex) { throw new RuntimeException("Error performing action " + this, ex); } this.targetSets.forEach(TargetSet::clearTargets); return true; } }
@Override protected void onPerform(ActionPerformEvent event) { forceScrap(event.getEntity()); }
@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); } }
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) { event.getEntity().destroy(); }
@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); } }); }
@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 void perform(ActionPerformEvent event) { effect.accept(event.getEntity(), event); }
private void recount(ActionPerformEvent event) { ResourceModifierComponent mod = modifier.get(event.getEntity()); int count = mod.getModifiedResourcesCount(); if (count == 0) { return; } Set<Entity> entities = event.getEntity().getGame() .getEntitiesWithComponent(ECSResourceMap.class); entities.stream() .map(e -> e.getComponent(ECSResourceMap.class)) .forEach(e -> mod.getModifiedResources() .forEach(res -> e.get(res).ifPresent(resData -> resData.get()))); System.out.println("Recounted " + count + " resources for " + entities.size() + " entities."); }
@Override protected void onPerform(ActionPerformEvent event) { CardComponent card = event.getEntity().getComponent(CardComponent.class); card.moveToBottom(card.getOwner().getComponent(BattlefieldComponent.class)); }
@Override protected void onPerform(ActionPerformEvent event) { if (event.getEntity() != entity) { return; } if (entity.isRemoved()) { return; } health.resFor(entity).set(healthMax.getFor(entity)); }
@Override protected void onPerform(ActionPerformEvent event) { value.getAndIncrement(); event.getEntity().getGame().removeSystem(system); } };
@Override public void startGame(ECSGame game) { game.getEvents().registerHandlerAfter(this, ActionPerformEvent.class, event -> this.aiPerform(event.getEntity().getGame())); game.getEvents().registerHandlerAfter(this, StartGameEvent.class, event -> this.aiPerform(event.getGame())); }