From 0da8109a52cfdc8db0bb3f69c4a0c69b085ccb2c Mon Sep 17 00:00:00 2001 From: marcins78 Date: Fri, 25 Jul 2014 13:02:57 +0000 Subject: [PATCH] Introduced adventures. --- .../com/gempukku/lotro/game/Adventure.java | 9 +++++++++ .../gempukku/lotro/game/AdventureLibrary.java | 5 +++++ .../lotro/game/DefaultAdventureLibrary.java | 19 +++++++++++++++++++ .../com/gempukku/lotro/game/LotroFormat.java | 2 ++ .../game/adventure/DefaultAdventure.java | 14 ++++++++++++++ .../lotro/logic/timing/DefaultLotroGame.java | 12 +++++++++++- .../gempukku/lotro/logic/timing/RuleSet.java | 16 +++++++++++++--- .../gempukku/lotro/builder/ServerBuilder.java | 6 ++++++ .../game/formats/DefaultLotroFormat.java | 13 +++++++++++-- .../game/formats/LotroFormatLibrary.java | 7 +++++-- .../com/gempukku/lotro/at/AbstractAtTest.java | 10 ++++++++-- .../lotro/at/IndividualCardAtTest.java | 11 ++++++++--- .../game/formats/LotroFormatLibraryTest.java | 5 +++-- 13 files changed, 114 insertions(+), 15 deletions(-) create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/Adventure.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AdventureLibrary.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/DefaultAdventureLibrary.java create mode 100644 gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultAdventure.java diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/Adventure.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/Adventure.java new file mode 100644 index 000000000..2ee2214c9 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/Adventure.java @@ -0,0 +1,9 @@ +package com.gempukku.lotro.game; + +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; +import com.gempukku.lotro.logic.modifiers.ModifiersLogic; + +public interface Adventure { + public void applyAdventureRules(LotroGame game, DefaultActionsEnvironment actionsEnvironment, ModifiersLogic modifiersLogic); +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AdventureLibrary.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AdventureLibrary.java new file mode 100644 index 000000000..986f7b29b --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/AdventureLibrary.java @@ -0,0 +1,5 @@ +package com.gempukku.lotro.game; + +public interface AdventureLibrary { + public Adventure getAdventure(String adventureType); +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/DefaultAdventureLibrary.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/DefaultAdventureLibrary.java new file mode 100644 index 000000000..656025e05 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/DefaultAdventureLibrary.java @@ -0,0 +1,19 @@ +package com.gempukku.lotro.game; + +import com.gempukku.lotro.game.adventure.DefaultAdventure; + +import java.util.HashMap; +import java.util.Map; + +public class DefaultAdventureLibrary implements AdventureLibrary { + private Adventure _defaultAdventure = new DefaultAdventure(); + private Map _customAdventures = new HashMap(); + + @Override + public Adventure getAdventure(String adventureType) { + final Adventure adventure = _customAdventures.get(adventureType); + if (adventure != null) + return adventure; + return _defaultAdventure; + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java index c4b315051..0acbdcbe7 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/LotroFormat.java @@ -37,4 +37,6 @@ public interface LotroFormat { public String getSurveyUrl(); public int getHandSize(); + + public Adventure getAdventure(); } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultAdventure.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultAdventure.java new file mode 100644 index 000000000..ccf321585 --- /dev/null +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/adventure/DefaultAdventure.java @@ -0,0 +1,14 @@ +package com.gempukku.lotro.game.adventure; + +import com.gempukku.lotro.game.Adventure; +import com.gempukku.lotro.game.state.LotroGame; +import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; +import com.gempukku.lotro.logic.modifiers.ModifiersLogic; +import com.gempukku.lotro.logic.timing.rules.WinConditionRule; + +public class DefaultAdventure implements Adventure { + @Override + public void applyAdventureRules(LotroGame game, DefaultActionsEnvironment actionsEnvironment, ModifiersLogic modifiersLogic) { + new WinConditionRule(actionsEnvironment).applyRule(); + } +} diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java index da79b998a..bf2660dc0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java @@ -5,6 +5,7 @@ import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.communication.GameStateListener; import com.gempukku.lotro.communication.UserFeedback; import com.gempukku.lotro.game.ActionsEnvironment; +import com.gempukku.lotro.game.Adventure; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.LotroFormat; import com.gempukku.lotro.game.PhysicalCard; @@ -19,7 +20,12 @@ import com.gempukku.lotro.logic.timing.rules.CharacterDeathRule; import com.gempukku.lotro.logic.vo.LotroDeck; import org.apache.log4j.Logger; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; public class DefaultLotroGame implements LotroGame { private static final Logger log = Logger.getLogger(DefaultLotroGame.class); @@ -33,6 +39,7 @@ public class DefaultLotroGame implements LotroGame { private boolean _cancelled; private boolean _finished; + private Adventure _adventure; private LotroFormat _format; private Set _allPlayers; @@ -46,6 +53,7 @@ public class DefaultLotroGame implements LotroGame { private Set _requestedCancel = new HashSet(); public DefaultLotroGame(LotroFormat format, Map decks, UserFeedback userFeedback, final LotroCardBlueprintLibrary library) { + _adventure = format.getAdventure(); _format = format; _actionStack = new ActionStack(); @@ -85,6 +93,8 @@ public class DefaultLotroGame implements LotroGame { RuleSet ruleSet = new RuleSet(this, _actionsEnvironment, _modifiersLogic); ruleSet.applyRuleSet(); + + _adventure.applyAdventureRules(this, _actionsEnvironment, _modifiersLogic); } @Override diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java index 929c1a158..d571fa477 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/RuleSet.java @@ -3,7 +3,19 @@ package com.gempukku.lotro.logic.timing; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.game.state.actions.DefaultActionsEnvironment; import com.gempukku.lotro.logic.modifiers.ModifiersLogic; -import com.gempukku.lotro.logic.timing.rules.*; +import com.gempukku.lotro.logic.timing.rules.AmbushRule; +import com.gempukku.lotro.logic.timing.rules.CunningRule; +import com.gempukku.lotro.logic.timing.rules.DiscardedCardRule; +import com.gempukku.lotro.logic.timing.rules.EnduringRule; +import com.gempukku.lotro.logic.timing.rules.FrodoAndSamRule; +import com.gempukku.lotro.logic.timing.rules.HunterRule; +import com.gempukku.lotro.logic.timing.rules.KilledCardRule; +import com.gempukku.lotro.logic.timing.rules.MusterRule; +import com.gempukku.lotro.logic.timing.rules.ResolveSkirmishRule; +import com.gempukku.lotro.logic.timing.rules.RingBearerRule; +import com.gempukku.lotro.logic.timing.rules.RoamingRule; +import com.gempukku.lotro.logic.timing.rules.SanctuaryRule; +import com.gempukku.lotro.logic.timing.rules.ThreatRule; public class RuleSet { private LotroGame _game; @@ -29,8 +41,6 @@ public class RuleSet { new SanctuaryRule(_actionsEnvironment, _modifiersLogic).applyRule(); - new WinConditionRule(_actionsEnvironment).applyRule(); - new DiscardedCardRule(_actionsEnvironment).applyRule(); new KilledCardRule(_actionsEnvironment).applyRule(); diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java index d6ce46141..1f2c41e86 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/builder/ServerBuilder.java @@ -12,6 +12,8 @@ import com.gempukku.lotro.db.LeagueDAO; import com.gempukku.lotro.db.LeagueMatchDAO; import com.gempukku.lotro.db.LeagueParticipationDAO; import com.gempukku.lotro.db.PlayerDAO; +import com.gempukku.lotro.game.AdventureLibrary; +import com.gempukku.lotro.game.DefaultAdventureLibrary; import com.gempukku.lotro.game.GameHistoryService; import com.gempukku.lotro.game.GameRecorder; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; @@ -36,8 +38,12 @@ import java.util.Map; public class ServerBuilder { public static void fillObjectMap(Map objectMap) { + objectMap.put(AdventureLibrary.class, + new DefaultAdventureLibrary()); + objectMap.put(LotroFormatLibrary.class, new LotroFormatLibrary( + extract(objectMap, AdventureLibrary.class), extract(objectMap, LotroCardBlueprintLibrary.class))); objectMap.put(GameHistoryService.class, diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java index 5498e9b7e..2e3e91c1f 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/DefaultLotroFormat.java @@ -4,6 +4,7 @@ import com.gempukku.lotro.common.Block; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; import com.gempukku.lotro.common.Side; +import com.gempukku.lotro.game.Adventure; import com.gempukku.lotro.game.CardNotFoundException; import com.gempukku.lotro.game.DeckInvalidException; import com.gempukku.lotro.game.LotroCardBlueprint; @@ -21,6 +22,7 @@ import java.util.Map; import java.util.Set; public class DefaultLotroFormat implements LotroFormat { + private Adventure _adventure; private LotroCardBlueprintLibrary _library; private String _name; private Block _siteBlock; @@ -38,10 +40,12 @@ public class DefaultLotroFormat implements LotroFormat { private List _validSets = new ArrayList(); private String _surveyUrl; - public DefaultLotroFormat(LotroCardBlueprintLibrary library, String name, String surveyUrl, + public DefaultLotroFormat(Adventure adventure, + LotroCardBlueprintLibrary library, String name, String surveyUrl, Block siteBlock, boolean validateShadowFPCount, int minimumDeckSize, int maximumSameName, boolean mulliganRule, boolean canCancelRingBearerSkirmish, boolean hasRuleOfFour, boolean winAtEndOfRegroup, boolean winOnControlling5Sites) { + _adventure = adventure; _library = library; _name = name; _surveyUrl = surveyUrl; @@ -56,6 +60,11 @@ public class DefaultLotroFormat implements LotroFormat { _winOnControlling5Sites = winOnControlling5Sites; } + @Override + public Adventure getAdventure() { + return _adventure; + } + @Override public final boolean isOrderedSites() { return _siteBlock != Block.SHADOWS; @@ -233,7 +242,7 @@ public class DefaultLotroFormat implements LotroFormat { for (Map.Entry count : cardCountByName.entrySet()) { if (count.getValue() > _maximumSameName) - throw new DeckInvalidException("Deck contains more of the same card than allowed ("+count.getValue()+">"+_maximumSameName+"): " + count.getKey()); + throw new DeckInvalidException("Deck contains more of the same card than allowed (" + count.getValue() + ">" + _maximumSameName + "): " + count.getKey()); } // Restricted cards diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java index 5a8beafdb..dd3af1a96 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/formats/LotroFormatLibrary.java @@ -1,6 +1,8 @@ package com.gempukku.lotro.game.formats; import com.gempukku.lotro.common.Block; +import com.gempukku.lotro.game.Adventure; +import com.gempukku.lotro.game.AdventureLibrary; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.LotroFormat; import org.json.simple.JSONArray; @@ -19,7 +21,7 @@ public class LotroFormatLibrary { private Map _allFormats = new HashMap(); private Map _hallFormats = new LinkedHashMap(); - public LotroFormatLibrary(LotroCardBlueprintLibrary library) { + public LotroFormatLibrary(AdventureLibrary adventureLibrary, LotroCardBlueprintLibrary library) { try { final InputStreamReader reader = new InputStreamReader(LotroFormatLibrary.class.getResourceAsStream("/lotrFormats.json"), "UTF-8"); try { @@ -27,6 +29,7 @@ public class LotroFormatLibrary { JSONArray object = (JSONArray) parser.parse(reader); for (Object formatDefObj : object) { JSONObject formatDef = (JSONObject) formatDefObj; + final Adventure adventure = adventureLibrary.getAdventure((String) formatDef.get("adventure")); String formatCode = (String) formatDef.get("code"); String name = (String) formatDef.get("name"); String surveyUrl = (String) formatDef.get("surveyUrl"); @@ -44,7 +47,7 @@ public class LotroFormatLibrary { if (winOnControlling5Sites == null) winOnControlling5Sites = false; - final DefaultLotroFormat format = new DefaultLotroFormat(library, name, surveyUrl, block, true, 60, 4, true, + final DefaultLotroFormat format = new DefaultLotroFormat(adventure, library, name, surveyUrl, block, true, 60, 4, true, cancelRingBearerSkirmish, hasRuleOfFour, winAtEndOfRegroup, winOnControlling5Sites); JSONArray sets = (JSONArray) formatDef.get("set"); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java index ac2cff023..69ae1afaa 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/AbstractAtTest.java @@ -1,5 +1,6 @@ package com.gempukku.lotro.at; +import com.gempukku.lotro.game.DefaultAdventureLibrary; import com.gempukku.lotro.game.DefaultUserFeedback; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.LotroFormat; @@ -15,7 +16,12 @@ import com.gempukku.lotro.logic.timing.Effect; import com.gempukku.lotro.logic.vo.LotroDeck; import org.junit.BeforeClass; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static org.junit.Assert.fail; @@ -57,7 +63,7 @@ public abstract class AbstractAtTest { protected void initializeGameWithDecks(Map decks) throws DecisionResultInvalidException { _userFeedback = new DefaultUserFeedback(); - LotroFormatLibrary formatLibrary = new LotroFormatLibrary(_library); + LotroFormatLibrary formatLibrary = new LotroFormatLibrary(new DefaultAdventureLibrary(), _library); LotroFormat format = formatLibrary.getFormat("movie"); _game = new DefaultLotroGame(format, decks, _userFeedback, _library); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java index 869ee6d75..e61bb3a32 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/at/IndividualCardAtTest.java @@ -3,7 +3,12 @@ package com.gempukku.lotro.at; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Token; import com.gempukku.lotro.common.Zone; -import com.gempukku.lotro.game.*; +import com.gempukku.lotro.game.CardNotFoundException; +import com.gempukku.lotro.game.DefaultAdventureLibrary; +import com.gempukku.lotro.game.DefaultUserFeedback; +import com.gempukku.lotro.game.LotroFormat; +import com.gempukku.lotro.game.PhysicalCard; +import com.gempukku.lotro.game.PhysicalCardImpl; import com.gempukku.lotro.game.formats.LotroFormatLibrary; import com.gempukku.lotro.logic.decisions.AwaitingDecision; import com.gempukku.lotro.logic.decisions.AwaitingDecisionType; @@ -838,7 +843,7 @@ public class IndividualCardAtTest extends AbstractAtTest { _userFeedback = new DefaultUserFeedback(); - LotroFormatLibrary formatLibrary = new LotroFormatLibrary(_library); + LotroFormatLibrary formatLibrary = new LotroFormatLibrary(new DefaultAdventureLibrary(), _library); LotroFormat format = formatLibrary.getFormat("movie"); _game = new DefaultLotroGame(format, decks, _userFeedback, _library); @@ -879,7 +884,7 @@ public class IndividualCardAtTest extends AbstractAtTest { _userFeedback = new DefaultUserFeedback(); - LotroFormatLibrary formatLibrary = new LotroFormatLibrary(_library); + LotroFormatLibrary formatLibrary = new LotroFormatLibrary(new DefaultAdventureLibrary(), _library); LotroFormat format = formatLibrary.getFormat("movie"); _game = new DefaultLotroGame(format, decks, _userFeedback, _library); diff --git a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/game/formats/LotroFormatLibraryTest.java b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/game/formats/LotroFormatLibraryTest.java index cd2109171..5c409132d 100644 --- a/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/game/formats/LotroFormatLibraryTest.java +++ b/gemp-lotr/gemp-lotr-server/src/test/java/com/gempukku/lotro/game/formats/LotroFormatLibraryTest.java @@ -1,6 +1,7 @@ package com.gempukku.lotro.game.formats; import com.gempukku.lotro.game.DeckInvalidException; +import com.gempukku.lotro.game.DefaultAdventureLibrary; import com.gempukku.lotro.game.LotroCardBlueprintLibrary; import com.gempukku.lotro.game.LotroFormat; import org.junit.Test; @@ -8,12 +9,12 @@ import org.junit.Test; public class LotroFormatLibraryTest { @Test public void testLoad() { - LotroFormatLibrary library = new LotroFormatLibrary(null); + LotroFormatLibrary library = new LotroFormatLibrary(new DefaultAdventureLibrary(), null); } @Test(expected = DeckInvalidException.class) public void legolasGreenleafNotLegalInStandard() throws DeckInvalidException { - LotroFormatLibrary library = new LotroFormatLibrary(new LotroCardBlueprintLibrary()); + LotroFormatLibrary library = new LotroFormatLibrary(new DefaultAdventureLibrary(), new LotroCardBlueprintLibrary()); LotroFormat standard = library.getFormat("standard"); standard.validateCard("1_50"); }