diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java index 8341c65ee..8a36325a4 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java @@ -257,9 +257,10 @@ public final class CombatController implements VisualEffectCompletedCallback { } private boolean playerHasApLeft() { - if (model.player.ap.current >= model.player.useItemCost) return true; - if (model.player.ap.current >= model.player.combatTraits.attackCost) return true; - if (model.player.ap.current >= model.player.actorTraits.moveCost) return true; + final Player player = model.player; + if (player.hasAPs(player.useItemCost)) return true; + if (player.hasAPs(player.combatTraits.attackCost)) return true; + if (player.hasAPs(player.actorTraits.moveCost)) return true; return false; } private void playerActionCompleted() { @@ -267,7 +268,9 @@ public final class CombatController implements VisualEffectCompletedCallback { if (!playerHasApLeft()) beginMonsterTurn(false); } private void continueTurn() { - if (!playerHasApLeft()) handleNextMonsterAction(); + if (model.uiSelections.isPlayersCombatTurn) return; + if (playerHasApLeft()) return; + handleNextMonsterAction(); } private void executeCombatMove(final Coord dest) { @@ -304,6 +307,7 @@ public final class CombatController implements VisualEffectCompletedCallback { public void beginMonsterTurn(boolean isFirstRound) { model.player.ap.current = 0; + model.uiSelections.isPlayersCombatTurn = false; for (MonsterSpawnArea a : model.currentMap.spawnAreas) { for (Monster m : a.monsters) { m.setMaxAP(); @@ -315,7 +319,7 @@ public final class CombatController implements VisualEffectCompletedCallback { private Monster determineNextMonster(Monster previousMonster) { if (previousMonster != null) { - if (previousMonster.useAPs(previousMonster.combatTraits.attackCost)) return previousMonster; + if (previousMonster.hasAPs(previousMonster.combatTraits.attackCost)) return previousMonster; } for (MonsterSpawnArea a : model.currentMap.spawnAreas) { @@ -323,7 +327,7 @@ public final class CombatController implements VisualEffectCompletedCallback { if (!m.isAgressive()) continue; if (m.rectPosition.isAdjacentTo(model.player.position)) { - if (m.useAPs(m.combatTraits.attackCost)) return m; + if (m.hasAPs(m.combatTraits.attackCost)) return m; } } } @@ -338,6 +342,7 @@ public final class CombatController implements VisualEffectCompletedCallback { endMonsterTurn(); return; } + currentActiveMonster.useAPs(currentActiveMonster.combatTraits.attackCost); context.mainActivity.combatview.updateTurnInfo(currentActiveMonster); Resources r = context.mainActivity.getResources(); @@ -403,6 +408,7 @@ public final class CombatController implements VisualEffectCompletedCallback { private void newPlayerTurn(boolean isFirstRound) { model.player.setMaxAP(); if (!isFirstRound) context.gameRoundController.onNewPlayerRound(); + model.uiSelections.isPlayersCombatTurn = true; updateTurnInfo(); } private void updateTurnInfo() { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/InterfaceData.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/InterfaceData.java index 8c3db9cf7..1746c0398 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/InterfaceData.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/InterfaceData.java @@ -11,6 +11,7 @@ import com.gpl.rpg.AndorsTrail.util.Coord; public final class InterfaceData { public boolean isMainActivityVisible = false; public boolean isInCombat = false; + public boolean isPlayersCombatTurn = false; public Monster selectedMonster; public Coord selectedPosition; public String selectedTabHeroInfo = ""; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java index b95ef1066..bec0b1035 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java @@ -51,6 +51,9 @@ public class Actor { ap.subtract(cost, false); return true; } + public boolean hasAPs(int cost) { + return ap.current >= cost; + } public boolean hasCondition(final String conditionTypeID) { for (ActorCondition c : conditions) {