From 29d8b773d3bbc9fca60b80043e3d9f4606a04828 Mon Sep 17 00:00:00 2001 From: marcins78 Date: Fri, 25 Jul 2014 16:12:21 +0000 Subject: [PATCH] Introducing adventures. --- .../game/adventure/DefaultSoloAdventure.java | 12 +++-- .../ai/AIPlayerAssignsMinionsGameProcess.java | 52 +++++++++++++++++++ 2 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultSoloAdventure.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultSoloAdventure.java index cce992677..d0aef2d32 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultSoloAdventure.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultSoloAdventure.java @@ -14,6 +14,9 @@ import com.gempukku.lotro.logic.timing.processes.GameProcess; import com.gempukku.lotro.logic.timing.processes.pregame.SetupSoloAdventureGameProcess; import com.gempukku.lotro.logic.timing.processes.turn.ShadowPhaseOfAIPlayerGameProcess; import com.gempukku.lotro.logic.timing.processes.turn.ai.AIPlayerAssignsArcheryTotalGameProcess; +import com.gempukku.lotro.logic.timing.processes.turn.ai.AIPlayerAssignsMinionsGameProcess; +import com.gempukku.lotro.logic.timing.processes.turn.regroup.DiscardAllMinionsGameProcess; +import com.gempukku.lotro.logic.timing.processes.turn.regroup.ReturnFollowersToSupportGameProcess; import com.gempukku.lotro.logic.timing.results.PlayCardResult; import java.util.Set; @@ -74,21 +77,22 @@ public class DefaultSoloAdventure extends SoloAdventure { @Override public GameProcess getAfterFellowshipAssignmentGameProcess(Set leftoverMinions, GameProcess followingProcess) { - return null; + return new AIPlayerAssignsMinionsGameProcess(leftoverMinions, followingProcess); } @Override public GameProcess getBeforeFellowshipChooseToMoveGameProcess(GameProcess followingProcess) { - return null; + return followingProcess; } @Override public GameProcess getPlayerStaysGameProcess(LotroGame game, GameProcess followingProcess) { - return null; + return new ReturnFollowersToSupportGameProcess( + new DiscardAllMinionsGameProcess(followingProcess)); } @Override public boolean isSolo() { - return false; + return true; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java new file mode 100644 index 000000000..7d8c3b65e --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/turn/ai/AIPlayerAssignsMinionsGameProcess.java @@ -0,0 +1,52 @@ +package com.gempukku.lotro.logic.timing.processes.turn.ai; + +import com.gempukku.lotro.common.CardType; +import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.filters.Filter; +import com.gempukku.lotro.filters.Filters; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.state.GameState; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.logic.actions.SystemQueueAction; +import com.gempukku.lotro.logic.effects.AssignmentPhaseEffect; +import com.gempukku.lotro.logic.timing.processes.GameProcess; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class AIPlayerAssignsMinionsGameProcess implements GameProcess { + private Set _leftoverMinions; + private GameProcess _followingGameProcess; + + public AIPlayerAssignsMinionsGameProcess(Set leftoverMinions, GameProcess followingGameProcess) { + _leftoverMinions = leftoverMinions; + _followingGameProcess = followingGameProcess; + } + + @Override + public void process(LotroGame game) { + GameState gameState = game.getGameState(); + Filter minionFilter = Filters.and(CardType.MINION, Filters.owner("AI"), Filters.in(_leftoverMinions)); + + final Set minions = new HashSet(Filters.filterActive(gameState, game.getModifiersQuerying(), minionFilter, Filters.assignableToSkirmish(Side.SHADOW, true, false))); + if (minions.size() > 0) { + final PhysicalCard ringBearer = game.getGameState().getRingBearer(game.getGameState().getCurrentPlayerId()); + Map> assignments = Collections.singletonMap(ringBearer, minions); + + if (game.getModifiersQuerying().isValidAssignments(game.getGameState(), Side.SHADOW, assignments)) { + SystemQueueAction action = new SystemQueueAction(); + action.appendEffect( + new AssignmentPhaseEffect("AI", assignments, "Shadow player assignments")); + + game.getActionsEnvironment().addActionToStack(action); + } + } + } + + @Override + public GameProcess getNextProcess() { + return _followingGameProcess; + } +}