From 31e570676be98b9384028ec53410337b24836a15 Mon Sep 17 00:00:00 2001 From: Simon Forsberg Date: Fri, 30 Jan 2015 23:08:23 +0100 Subject: [PATCH] added healing functionality for Field Medic --- .../cardshifter/ecs/usage/PhrancisGame.java | 18 +++++------ .../zomis/cardshifter/ecs/PhrancisTest.java | 32 ++++++++++++++++++- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/cardshifter-core/src/main/java/net/zomis/cardshifter/ecs/usage/PhrancisGame.java b/cardshifter-core/src/main/java/net/zomis/cardshifter/ecs/usage/PhrancisGame.java index 2dc0030a..e1af3c29 100644 --- a/cardshifter-core/src/main/java/net/zomis/cardshifter/ecs/usage/PhrancisGame.java +++ b/cardshifter-core/src/main/java/net/zomis/cardshifter/ecs/usage/PhrancisGame.java @@ -4,13 +4,12 @@ import java.util.function.Consumer; import java.util.function.UnaryOperator; +import com.cardshifter.modapi.phase.*; +import com.cardshifter.modapi.players.Players; import net.zomis.cardshifter.ecs.config.ConfigComponent; import com.cardshifter.api.config.DeckConfig; import net.zomis.cardshifter.ecs.config.DeckConfigFactory; -import net.zomis.cardshifter.ecs.effects.EffectActionSystem; -import net.zomis.cardshifter.ecs.effects.EffectComponent; -import net.zomis.cardshifter.ecs.effects.EffectTargetFilterSystem; -import net.zomis.cardshifter.ecs.effects.FilterComponent; +import net.zomis.cardshifter.ecs.effects.*; import com.cardshifter.modapi.actions.ActionComponent; import com.cardshifter.modapi.actions.ECSAction; @@ -44,11 +43,6 @@ import com.cardshifter.modapi.cards.PlayFromHandSystem; import com.cardshifter.modapi.cards.RemoveDeadEntityFromZoneSystem; import com.cardshifter.modapi.cards.ZoneComponent; -import com.cardshifter.modapi.phase.GainResourceSystem; -import com.cardshifter.modapi.phase.PerformerMustBeCurrentPlayer; -import com.cardshifter.modapi.phase.Phase; -import com.cardshifter.modapi.phase.PhaseController; -import com.cardshifter.modapi.phase.RestoreResourcesSystem; import com.cardshifter.modapi.resources.ECSResource; import com.cardshifter.modapi.resources.ECSResourceMap; import com.cardshifter.modapi.resources.GameOverIfNoHealth; @@ -97,6 +91,7 @@ public void declareConfiguration(ECSGame game) { public void addCards(ZoneComponent zone) { // Create card models that should be possible to choose from ResourceRetriever sickness = ResourceRetriever.forResource(PhrancisResources.SICKNESS); + ResourceRetriever health = ResourceRetriever.forResource(PhrancisResources.HEALTH); Consumer noSickness = e -> sickness.resFor(e).set(0); // Mechs (ManaCost, zone, Attack, Health, "Type", ScrapValue, "CardName") @@ -118,7 +113,10 @@ public void addCards(ZoneComponent zone) { createCreature(3, zone, 3, 2, "Bio", 0, "Longshot"); createCreature(4, zone, 2, 3, "Bio", 0, "Bodyman"); createCreature(5, zone, 3, 3, "Bio", 0, "Vetter"); - createCreature(5, zone, 1, 5, "Bio", 0, "Field Medic"); + Effects effects = new Effects(); + createCreature(5, zone, 1, 5, "Bio", 0, "Field Medic").addComponent(effects.giveSelf(effects.triggerSystem(PhaseEndEvent.class, + (me, event) -> Players.findOwnerFor(me) == event.getOldPhase().getOwner(), + (me, event) -> Players.findOwnerFor(me).apply(e -> health.resFor(e).change(1))))); // heals player for 1 health at end of turn createCreature(6, zone, 4, 4, "Bio", 0, "Wastelander"); createCreature(6, zone, 5, 3, "Bio", 0, "Commander").apply(noSickness); createCreature(6, zone, 3, 5, "Bio", 0, "Cyberpimp"); diff --git a/cardshifter-core/src/test/java/net/zomis/cardshifter/ecs/PhrancisTest.java b/cardshifter-core/src/test/java/net/zomis/cardshifter/ecs/PhrancisTest.java index f2a9dc3e..9d119be3 100644 --- a/cardshifter-core/src/test/java/net/zomis/cardshifter/ecs/PhrancisTest.java +++ b/cardshifter-core/src/test/java/net/zomis/cardshifter/ecs/PhrancisTest.java @@ -8,6 +8,8 @@ import java.util.function.Predicate; import java.util.stream.Collectors; +import com.cardshifter.modapi.attributes.AttributeRetriever; +import com.cardshifter.modapi.attributes.Attributes; import net.zomis.cardshifter.ecs.config.ConfigComponent; import com.cardshifter.api.config.DeckConfig; import net.zomis.cardshifter.ecs.usage.PhrancisGame; @@ -43,7 +45,11 @@ public class PhrancisTest extends GameTest { private final ComponentRetriever field = ComponentRetriever.retreiverFor(BattlefieldComponent.class); private final Predicate isCreature = entity -> entity.hasComponent(CreatureTypeComponent.class); - + private final Predicate hasName(String str) { + AttributeRetriever name = AttributeRetriever.forAttribute(Attributes.NAME); + return e -> name.getOrDefault(e, "").equals(str); + } + private final PhrancisGame mod = new PhrancisGame(); @Override @@ -64,12 +70,36 @@ protected void setupGame(ECSGame game) { addCard(deckConf, isCreature.and(manaCost(1))); addCard(deckConf, isCreature.and(manaCost(1))); addCard(deckConf, isCreatureType("Bio").and(health(4))); + addCard(deckConf, hasName("Field Medic")); addCard(deckConf, e -> scrapCost.getFor(e) == 1 && health.getFor(e) == 1); } mod.setupGame(game); } + @Test + public void healEndOfTurn() { + while (mana.getFor(currentPlayer()) < 5) { + nextPhase(); + } + + Entity player = currentPlayer(); + Entity medic = cardToHand(hasName("Field Medic")); + int health = this.health.getFor(player); + useAction(medic, PhrancisGame.PLAY_ACTION); + assertEquals(health, this.health.getFor(player)); + nextPhase(); + + assertEquals(health + 1, this.health.getFor(player)); + nextPhase(); + + assertEquals(player, currentPlayer()); + assertEquals(health + 1, this.health.getFor(player)); + nextPhase(); + + assertEquals(health + 2, this.health.getFor(player)); + } + private void addCard(DeckConfig config, Predicate condition) { Set availableCards = game.getEntitiesWithComponent(ZoneComponent.class); ZoneComponent zone = availableCards.iterator().next().getComponent(ZoneComponent.class);