summaryrefslogtreecommitdiff
path: root/game-engine/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'game-engine/src/main/java/org')
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/Settings.kt34
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java59
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java91
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/GlobalRules.java17
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java38
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java76
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java24
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java66
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java27
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java6
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java31
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java36
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java18
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java48
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java55
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java78
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java31
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java37
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java40
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java64
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java8
21 files changed, 8 insertions, 876 deletions
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/Settings.kt b/game-engine/src/main/java/org/luxons/sevenwonders/game/Settings.kt
deleted file mode 100644
index 70dddccf..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/Settings.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.luxons.sevenwonders.game
-
-import org.luxons.sevenwonders.game.api.CustomizableSettings
-import org.luxons.sevenwonders.game.data.definitions.WonderSide
-import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod
-import java.util.Random
-
-class Settings @JvmOverloads constructor(
- val nbPlayers: Int,
- customSettings: CustomizableSettings = CustomizableSettings()
-) {
- val random: Random
- val timeLimitInSeconds: Int = customSettings.timeLimitInSeconds
- val initialGold: Int = customSettings.initialGold
- val discardedCardGold: Int = customSettings.discardedCardGold
- val defaultTradingCost: Int = customSettings.defaultTradingCost
- val pointsPer3Gold: Int = customSettings.pointsPer3Gold
- val lostPointsPerDefeat: Int = customSettings.lostPointsPerDefeat
- val wonPointsPerVictoryPerAge: Map<Int, Int> = customSettings.wonPointsPerVictoryPerAge
-
- private val wonderSidePickMethod: WonderSidePickMethod = customSettings.wonderSidePickMethod
- private var lastPickedSide: WonderSide? = null
-
- init {
- val seed = customSettings.randomSeedForTests
- this.random = if (seed != null) Random(seed) else Random()
- }
-
- fun pickWonderSide(): WonderSide {
- val newSide = wonderSidePickMethod.pickSide(random, lastPickedSide)
- lastPickedSide = newSide
- return newSide
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java
deleted file mode 100644
index 0402a26d..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Decks;
-import org.luxons.sevenwonders.game.data.definitions.DecksDefinition;
-import org.luxons.sevenwonders.game.data.definitions.WonderDefinition;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-public class GameDefinition {
-
- private final GlobalRules rules;
-
- private final WonderDefinition[] wonders;
-
- private final DecksDefinition decksDefinition;
-
- GameDefinition(GlobalRules rules, WonderDefinition[] wonders, DecksDefinition decksDefinition) {
- this.rules = rules;
- this.wonders = wonders;
- this.decksDefinition = decksDefinition;
- }
-
- public int getMinPlayers() {
- return rules.getMinPlayers();
- }
-
- public int getMaxPlayers() {
- return rules.getMaxPlayers();
- }
-
- public Game initGame(long id, CustomizableSettings customSettings, int nbPlayers) {
- Settings settings = new Settings(nbPlayers, customSettings);
- List<Board> boards = assignBoards(settings, nbPlayers);
- Decks decks = decksDefinition.create(settings);
- return new Game(id, settings, nbPlayers, boards, decks);
- }
-
- private List<Board> assignBoards(Settings settings, int nbPlayers) {
- List<WonderDefinition> randomizedWonders = Arrays.asList(wonders);
- Collections.shuffle(randomizedWonders, settings.getRandom());
-
- List<Board> boards = new ArrayList<>(nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- WonderDefinition def = randomizedWonders.get(i);
- Wonder w = def.create(settings);
- Board b = new Board(w, i, settings);
- boards.add(b);
- }
- return boards;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java
deleted file mode 100644
index a1bd7b8d..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.lang.reflect.Type;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.data.definitions.DecksDefinition;
-import org.luxons.sevenwonders.game.data.definitions.WonderDefinition;
-import org.luxons.sevenwonders.game.data.serializers.NumericEffectSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ProductionIncreaseSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ProductionSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourceTypeSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourceTypesSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourcesSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ScienceProgressSerializer;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-
-public class GameDefinitionLoader {
-
- private static final String BASE_PACKAGE = GameDefinitionLoader.class.getPackage().getName();
-
- private static final String BASE_PACKAGE_PATH = '/' + BASE_PACKAGE.replace('.', '/');
-
- private static final String GLOBAL_RULES_FILE = "global_rules.json";
-
- private static final String CARDS_FILE = "cards.json";
-
- private static final String WONDERS_FILE = "wonders.json";
-
- private final GameDefinition gameDefinition;
-
- public GameDefinitionLoader() {
- gameDefinition = load();
- }
-
- public GameDefinition getGameDefinition() {
- return gameDefinition;
- }
-
- private static GameDefinition load() {
- return new GameDefinition(loadGlobalRules(), loadWonders(), loadDecks());
- }
-
- private static GlobalRules loadGlobalRules() {
- return readJsonFile(GLOBAL_RULES_FILE, GlobalRules.class);
- }
-
- private static WonderDefinition[] loadWonders() {
- return readJsonFile(WONDERS_FILE, WonderDefinition[].class);
- }
-
- private static DecksDefinition loadDecks() {
- return readJsonFile(CARDS_FILE, DecksDefinition.class);
- }
-
- private static <T> T readJsonFile(String filename, Class<T> clazz) {
- InputStream in = GameDefinitionLoader.class.getResourceAsStream(BASE_PACKAGE_PATH + '/' + filename);
- Reader reader = new BufferedReader(new InputStreamReader(in));
- Gson gson = createGson();
- return gson.fromJson(reader, clazz);
- }
-
- private static Gson createGson() {
- Type resourceTypeList = new TypeToken<List<ResourceType>>() {}.getType();
- return new GsonBuilder().disableHtmlEscaping()
- .registerTypeAdapter(Resources.class, new ResourcesSerializer())
- .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer())
- .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer())
- .registerTypeAdapter(Production.class, new ProductionSerializer())
- .registerTypeAdapter(ProductionIncrease.class, new ProductionIncreaseSerializer())
- .registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer())
- .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(ScienceProgress.class, new ScienceProgressSerializer())
- .create();
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GlobalRules.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GlobalRules.java
deleted file mode 100644
index 526bebad..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/GlobalRules.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-@SuppressWarnings("unused") // fields are set by Gson
-class GlobalRules {
-
- private int minPlayers;
-
- private int maxPlayers;
-
- int getMinPlayers() {
- return minPlayers;
- }
-
- int getMaxPlayers() {
- return maxPlayers;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java
deleted file mode 100644
index 621bed2c..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.List;
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.cards.Requirements;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class CardDefinition implements Definition<Card> {
-
- private String name;
-
- private Color color;
-
- private Requirements requirements;
-
- private EffectsDefinition effect;
-
- private String chainParent;
-
- private List<String> chainChildren;
-
- private Map<Integer, Integer> countPerNbPlayer;
-
- private String image;
-
- @Override
- public Card create(Settings settings) {
- return new Card(name, color, requirements, effect.create(settings), chainParent, chainChildren, image);
- }
-
- Map<Integer, Integer> getCountPerNbPlayer() {
- return countPerNbPlayer;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java
deleted file mode 100644
index 6f97e55f..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Decks;
-
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson
-public class DecksDefinition implements Definition<Decks> {
-
- private List<CardDefinition> age1;
-
- private List<CardDefinition> age2;
-
- private List<CardDefinition> age3;
-
- private String age1Back;
-
- private String age2Back;
-
- private String age3Back;
-
- private List<CardDefinition> guildCards;
-
- @Override
- public Decks create(Settings settings) {
- Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
- cardsPerAge.put(1, prepareStandardDeck(age1, settings, age1Back));
- cardsPerAge.put(2, prepareStandardDeck(age2, settings, age2Back));
- cardsPerAge.put(3, prepareAge3Deck(settings));
- return new Decks(cardsPerAge);
- }
-
- private static List<Card> prepareStandardDeck(List<CardDefinition> defs, Settings settings, String backImage) {
- CardBack back = new CardBack(backImage);
- List<Card> cards = createDeck(defs, settings, back);
- Collections.shuffle(cards, settings.getRandom());
- return cards;
- }
-
- private List<Card> prepareAge3Deck(Settings settings) {
- CardBack back = new CardBack(age3Back);
- List<Card> age3deck = createDeck(age3, settings, back);
- age3deck.addAll(createGuildCards(settings, back));
- Collections.shuffle(age3deck, settings.getRandom());
- return age3deck;
- }
-
- private static List<Card> createDeck(List<CardDefinition> defs, Settings settings, CardBack back) {
- List<Card> cards = new ArrayList<>();
- for (CardDefinition def : defs) {
- for (int i = 0; i < def.getCountPerNbPlayer().get(settings.getNbPlayers()); i++) {
- Card card = def.create(settings);
- card.setBack(back);
- cards.add(card);
- }
- }
- return cards;
- }
-
- private List<Card> createGuildCards(Settings settings, CardBack back) {
- List<Card> guild = guildCards.stream()
- .map((def) -> def.create(settings))
- .peek(c -> c.setBack(back))
- .collect(Collectors.toList());
- Collections.shuffle(guild, settings.getRandom());
- return guild.subList(0, settings.getNbPlayers() + 2);
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java
deleted file mode 100644
index 6c6b4b19..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import org.luxons.sevenwonders.game.Settings;
-
-/**
- * Represents a deserialized JSON definition of some data about the game. It is settings-agnostic. An instance of
- * in-game data can be generated from this, given specific game settings.
- *
- * @param <T>
- * the type of in-game object that can be generated from this definition
- */
-public interface Definition<T> {
-
- /**
- * Creates a T object from the given settings. This method mustn't mutate this Definition as it may be called
- * multiple times with different settings.
- *
- * @param settings
- * the game settings to use to generate a game-specific object from this definition
- *
- * @return the new game-specific object created from this definition
- */
- T create(Settings settings);
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java
deleted file mode 100644
index e35463d4..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.effects.BonusPerBoardElement;
-import org.luxons.sevenwonders.game.effects.Discount;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.effects.SpecialAbilityActivation;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class EffectsDefinition implements Definition<List<Effect>> {
-
- private GoldIncrease gold;
-
- private MilitaryReinforcements military;
-
- private ScienceProgress science;
-
- private Discount discount;
-
- private BonusPerBoardElement perBoardElement;
-
- private ProductionIncrease production;
-
- private RawPointsIncrease points;
-
- private SpecialAbility action;
-
- @Override
- public List<Effect> create(Settings settings) {
- List<Effect> effects = new ArrayList<>();
- if (gold != null) {
- effects.add(gold);
- }
- if (military != null) {
- effects.add(military);
- }
- if (science != null) {
- effects.add(science);
- }
- if (discount != null) {
- effects.add(discount);
- }
- if (perBoardElement != null) {
- effects.add(perBoardElement);
- }
- if (production != null) {
- effects.add(production);
- }
- if (points != null) {
- effects.add(points);
- }
- if (action != null) {
- effects.add(new SpecialAbilityActivation(action));
- }
- return effects;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java
deleted file mode 100644
index a972a517..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson
-public class WonderDefinition implements Definition<Wonder> {
-
- private String name;
-
- private Map<WonderSide, WonderSideDefinition> sides;
-
- @Override
- public Wonder create(Settings settings) {
- Wonder wonder = new Wonder();
- wonder.setName(name);
-
- WonderSideDefinition wonderSideDef = sides.get(settings.pickWonderSide());
- wonder.setInitialResource(wonderSideDef.getInitialResource());
- wonder.setStages(wonderSideDef.createStages(settings));
- wonder.setImage(wonderSideDef.getImage());
- return wonder;
- }
-
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java
deleted file mode 100644
index 34091350..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-public enum WonderSide {
- A,
- B
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java
deleted file mode 100644
index c84bba4e..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-// the fields are injected by Gson
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection")
-class WonderSideDefinition {
-
- private ResourceType initialResource;
-
- private List<WonderStageDefinition> stages;
-
- private String image;
-
- ResourceType getInitialResource() {
- return initialResource;
- }
-
- List<WonderStage> createStages(Settings settings) {
- return stages.stream().map(def -> def.create(settings)).collect(Collectors.toList());
- }
-
- String getImage() {
- return image;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java
deleted file mode 100644
index 08aaad14..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Random;
-
-public enum WonderSidePickMethod {
- ALL_A {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return WonderSide.A;
- }
- },
- ALL_B {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return WonderSide.B;
- }
- },
- EACH_RANDOM {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return random.nextBoolean() ? WonderSide.A : WonderSide.B;
- }
- },
- SAME_RANDOM_FOR_ALL {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- if (lastPickedSide == null) {
- return random.nextBoolean() ? WonderSide.A : WonderSide.B;
- } else {
- return lastPickedSide;
- }
- }
- };
-
- public abstract WonderSide pickSide(Random random, WonderSide lastPickedSide);
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java
deleted file mode 100644
index 230484ee..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Requirements;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class WonderStageDefinition implements Definition<WonderStage> {
-
- private Requirements requirements;
-
- private EffectsDefinition effects;
-
- @Override
- public WonderStage create(Settings settings) {
- return new WonderStage(requirements, effects.create(settings));
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
deleted file mode 100644
index c0a75d80..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class NumericEffectSerializer implements JsonSerializer<Effect>, JsonDeserializer<Effect> {
-
- @Override
- public JsonElement serialize(Effect effect, Type typeOfSrc, JsonSerializationContext context) {
- int value;
- if (MilitaryReinforcements.class.equals(typeOfSrc)) {
- value = ((MilitaryReinforcements) effect).getCount();
- } else if (GoldIncrease.class.equals(typeOfSrc)) {
- value = ((GoldIncrease) effect).getAmount();
- } else if (RawPointsIncrease.class.equals(typeOfSrc)) {
- value = ((RawPointsIncrease) effect).getPoints();
- } else {
- throw new IllegalArgumentException("Unknown numeric effect " + typeOfSrc.getTypeName());
- }
- return new JsonPrimitive(value);
- }
-
- @Override
- public Effect deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- int value = json.getAsInt();
- if (MilitaryReinforcements.class.equals(typeOfT)) {
- return new MilitaryReinforcements(value);
- } else if (GoldIncrease.class.equals(typeOfT)) {
- return new GoldIncrease(value);
- } else if (RawPointsIncrease.class.equals(typeOfT)) {
- return new RawPointsIncrease(value);
- }
- throw new IllegalArgumentException("Unknown numeric effet " + typeOfT.getTypeName());
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java
deleted file mode 100644
index c3eb1386..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.resources.Production;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ProductionIncreaseSerializer implements JsonSerializer<ProductionIncrease>,
- JsonDeserializer<ProductionIncrease> {
-
- @Override
- public JsonElement serialize(ProductionIncrease productionIncrease, Type typeOfSrc,
- JsonSerializationContext context) {
- Production production = productionIncrease.getProduction();
- JsonElement json = context.serialize(production);
- if (!json.isJsonNull() && !productionIncrease.isSellable()) {
- return new JsonPrimitive(wrapInBrackets(json.getAsString()));
- }
- return json;
- }
-
- private String wrapInBrackets(String str) {
- return '(' + str + ')';
- }
-
- @Override
- public ProductionIncrease deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- ProductionIncrease productionIncrease = new ProductionIncrease();
-
- String resourcesStr = json.getAsString();
- boolean isSellable = !resourcesStr.startsWith("(");
- if (!isSellable) {
- resourcesStr = unwrapBrackets(resourcesStr);
- json = new JsonPrimitive(resourcesStr);
- }
- productionIncrease.setSellable(isSellable);
-
- Production production = context.deserialize(json, Production.class);
- productionIncrease.setProduction(production);
- return productionIncrease;
- }
-
- private static String unwrapBrackets(String str) {
- return str.substring(1, str.length() - 1);
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java
deleted file mode 100644
index 178134bb..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ProductionSerializer implements JsonSerializer<Production>, JsonDeserializer<Production> {
-
- @Override
- public JsonElement serialize(Production production, Type typeOfSrc, JsonSerializationContext context) {
- Resources fixedResources = production.getFixedResources();
- Set<Set<ResourceType>> choices = production.getAlternativeResources();
- if (fixedResources.isEmpty()) {
- return serializeAsChoice(choices, context);
- } else if (choices.isEmpty()) {
- return serializeAsResources(fixedResources, context);
- } else {
- throw new IllegalArgumentException("Cannot serialize a production with mixed fixed resources and choices");
- }
- }
-
- private static JsonElement serializeAsChoice(Set<Set<ResourceType>> choices, JsonSerializationContext context) {
- if (choices.isEmpty()) {
- return JsonNull.INSTANCE;
- }
- if (choices.size() > 1) {
- throw new IllegalArgumentException("Cannot serialize a production with more than one choice");
- }
- String str = choices.stream()
- .flatMap(Set::stream)
- .map(ResourceType::getSymbol)
- .map(Object::toString)
- .collect(Collectors.joining("/"));
- return context.serialize(str);
- }
-
- private static JsonElement serializeAsResources(Resources fixedResources, JsonSerializationContext context) {
- return context.serialize(fixedResources);
- }
-
- @Override
- public Production deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String resourcesStr = json.getAsString();
- Production production = new Production();
- if (resourcesStr.contains("/")) {
- production.addChoice(createChoice(resourcesStr));
- } else {
- Resources fixedResources = context.deserialize(json, Resources.class);
- production.addAll(fixedResources);
- }
- return production;
- }
-
- private ResourceType[] createChoice(String choiceStr) {
- String[] symbols = choiceStr.split("/");
- ResourceType[] choice = new ResourceType[symbols.length];
- for (int i = 0; i < symbols.length; i++) {
- if (symbols[i].length() != 1) {
- throw new IllegalArgumentException("Choice elements must be resource types, got " + symbols[i]);
- }
- choice[i] = ResourceType.fromSymbol(symbols[i].charAt(0));
- }
- return choice;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java
deleted file mode 100644
index d2a49180..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ResourceTypeSerializer implements JsonSerializer<ResourceType>, JsonDeserializer<ResourceType> {
-
- @Override
- public JsonElement serialize(ResourceType type, Type typeOfSrc, JsonSerializationContext context) {
- return new JsonPrimitive(type.getSymbol());
- }
-
- @Override
- public ResourceType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String str = json.getAsString();
- if (str.isEmpty()) {
- throw new IllegalArgumentException("Empty string is not a valid resource type");
- }
- return ResourceType.fromSymbol(str.charAt(0));
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java
deleted file mode 100644
index 89d3e723..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ResourceTypesSerializer implements JsonSerializer<List<ResourceType>>,
- JsonDeserializer<List<ResourceType>> {
-
- @Override
- public JsonElement serialize(List<ResourceType> resources, Type typeOfSrc, JsonSerializationContext context) {
- String s = resources.stream().map(ResourceType::getSymbol).map(Object::toString).collect(Collectors.joining());
- return new JsonPrimitive(s);
- }
-
- @Override
- public List<ResourceType> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String s = json.getAsString();
- List<ResourceType> resources = new ArrayList<>();
- for (char c : s.toCharArray()) {
- resources.add(ResourceType.fromSymbol(c));
- }
- return resources;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java
deleted file mode 100644
index 9c27b2a1..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ResourcesSerializer implements JsonSerializer<Resources>, JsonDeserializer<Resources> {
-
- @Override
- public JsonElement serialize(Resources resources, Type typeOfSrc, JsonSerializationContext context) {
- String s = resources.asList()
- .stream()
- .map(ResourceType::getSymbol)
- .map(Object::toString)
- .collect(Collectors.joining());
- return s.isEmpty() ? JsonNull.INSTANCE : new JsonPrimitive(s);
- }
-
- @Override
- public Resources deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String s = json.getAsString();
- Resources resources = new Resources();
- for (char c : s.toCharArray()) {
- resources.add(ResourceType.fromSymbol(c), 1);
- }
- return resources;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java
deleted file mode 100644
index cecad405..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.boards.Science;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ScienceProgressSerializer implements JsonSerializer<ScienceProgress>, JsonDeserializer<ScienceProgress> {
-
- @Override
- public JsonElement serialize(ScienceProgress scienceProgress, Type typeOfSrc, JsonSerializationContext context) {
- Science science = scienceProgress.getScience();
-
- if (science.size() > 1) {
- throw new UnsupportedOperationException("Cannot serialize science containing more than one element");
- }
-
- for (ScienceType type : ScienceType.values()) {
- int quantity = science.getQuantity(type);
- if (quantity == 1) {
- return context.serialize(type);
- }
- }
-
- if (science.getJokers() == 1) {
- return new JsonPrimitive("any");
- }
-
- return JsonNull.INSTANCE;
- }
-
- @Override
- public ScienceProgress deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String s = json.getAsString();
- ScienceProgress scienceProgress = new ScienceProgress();
- Science science = new Science();
- if ("any".equals(s)) {
- science.addJoker(1);
- } else {
- science.add(deserializeScienceType(json, context), 1);
- }
- scienceProgress.setScience(science);
- return scienceProgress;
- }
-
- private ScienceType deserializeScienceType(JsonElement json, JsonDeserializationContext context) {
- ScienceType type = context.deserialize(json, ScienceType.class);
- if (type == null) {
- throw new IllegalArgumentException("Invalid science type " + json.getAsString());
- }
- return type;
- }
-}
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java
index baad8451..644437df 100644
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java
+++ b/game-engine/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java
@@ -26,6 +26,14 @@ public enum ResourceType {
this.symbol = symbol;
}
+ public static ResourceType fromSymbol(String symbol) {
+ if (symbol.length() != 1) {
+ throw new IllegalArgumentException("The given symbol must be a valid single-char resource type, got "
+ + symbol);
+ }
+ return fromSymbol(symbol.charAt(0));
+ }
+
public static ResourceType fromSymbol(Character symbol) {
ResourceType type = typesPerSymbol.get(symbol);
if (type == null) {
bgstack15