diff --git a/src/main/java/toniarts/openkeeper/utils/TextParameter.java b/src/main/java/toniarts/openkeeper/utils/TextParameter.java
new file mode 100644
index 000000000..4ce143b3f
--- /dev/null
+++ b/src/main/java/toniarts/openkeeper/utils/TextParameter.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2014-2026 OpenKeeper
+ *
+ * OpenKeeper is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ */
+package toniarts.openkeeper.utils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * Parameters embedded in Dungeon Keeper text resources.
+ *
+ * The numeric IDs are part of the original text-resource format and must not
+ * be replaced with enum ordinals.
+ */
+public enum TextParameter {
+
+ NAME(1),
+ COST(2),
+ SPELL_LEVEL(3),
+ CLAIMED_LAND_MANA(4),
+ MANA_SOURCES(5),
+ TEMPLE_PRAYERS(6),
+ IMP_UPKEEP(7),
+ TRAP_UPKEEP(8),
+ SPELL_MANA_USAGE(9),
+ DUNGEON_HEART_HEALTH(10),
+ PAYDAY_COST(11),
+ IDLE_CREATURE_COUNT(12),
+ CLAIMED_LAND_MANA_GAIN(13),
+ MANA_SOURCE_GAIN(14),
+ TEMPLE_PRAYER_GAIN(15),
+ IMP_UPKEEP_LOSS(16),
+ TRAP_OR_DOOR_COST(17),
+ SPELL_MANA_COST(18),
+ CURRENT_DUNGEON_HEART_HEALTH(19),
+ CURRENT_PAYDAY_COST(20),
+ ROOM_COST(21),
+ ROOM_SIZE_HINT(22),
+ HORNY_TALISMAN_MANA_COST(23),
+ SPECIAL_COUNT(24),
+ MANA_USAGE(25),
+ MANA_COST_TO_FIRE(26),
+ CREATURE_DESCRIPTION(27),
+ CREATURE_FIGHT_STYLE(28),
+ CREATURE_INSTANCE_NAME(29),
+ CREATURE_NAME(30),
+ CREATURE_ACTIVITY(31),
+ CREATURE_STATUS(32),
+ CREATURE_MOOD(33),
+ CREATURE_BLOOD_TYPE(34),
+ CREATURE_PAY(35),
+ CREATURE_GOLD(36),
+ HEALTH_PERCENTAGE(37),
+ ROOM_USED_CAPACITY(38),
+ ROOM_MAX_CAPACITY(39),
+ DUNGEON_HEART_MANA(40),
+ DUNGEON_HEART_MAX_MANA(41),
+ ATTRACTED_CREATURE_COUNT(42),
+ PORTAL_CREATURE_CAPACITY(43),
+ PORTAL_COUNT(44),
+ LAIR_COUNT(45),
+ HATCHERY_COUNT(46),
+ TREASURY_COUNT(47),
+ LIBRARY_COUNT(48),
+ TRAINING_ROOM_COUNT(49),
+ WORKSHOP_COUNT(50),
+ GUARD_ROOM_COUNT(51),
+ PATROL_ROUTE_COUNT(52),
+ COMBAT_PIT_COUNT(53),
+ TORTURE_CHAMBER_COUNT(54),
+ SKELETON_COUNT(55),
+ MAX_SKELETON_COUNT(56),
+ PRISON_STATUS(57),
+ PRISON_COUNT(58),
+ VAMPIRE_COUNT(59),
+ MAX_VAMPIRE_COUNT(60),
+ GRAVEYARD_COUNT(61),
+ TEMPLE_COUNT(62),
+ CASINO_COUNT(63),
+ ROOM_NAME(64),
+ ROOM_USER_COUNT(65),
+ MANA_GAIN(66),
+ GOLD(67),
+ ENTITY_NAME(68),
+ WORKSHOP_ITEM_NUMBER(69),
+ WORKSHOP_QUEUE_SIZE(70),
+ TRAP_TRIGGER_STATE(71),
+ STATE(72),
+ ENTITY_GOLD(73),
+ CREATURE_EFFICIENCY(74),
+ TREASURY_GOLD(75),
+ TREASURY_MAX_GOLD(76),
+ LIBRARY_RESEARCHER_COUNT(77),
+ LIBRARY_MAX_RESEARCHER_COUNT(78),
+ WORKSHOP_USED_CAPACITY(79),
+ WORKSHOP_MAX_CAPACITY(80),
+ GUARD_ROOM_GUARD_COUNT(81),
+ GUARD_ROOM_MAX_GUARD_COUNT(82),
+ PRISONER_COUNT(83),
+ MAX_PRISONER_COUNT(84),
+ PRISON_COUNT_ALTERNATIVE(85),
+ GRAVEYARD_MAX_VAMPIRE_COUNT(86),
+ CASINO_PAYOUT(87),
+ CREATURE_LEVEL(88),
+ BONUS_PACK_NUMBER(89),
+ CRYPT_STATUS(90);
+
+ private static final Map BY_ID;
+
+ static {
+ Map parameters = new HashMap<>();
+ for (TextParameter parameter : values()) {
+ TextParameter previous = parameters.put(parameter.id, parameter);
+ if (previous != null) {
+ throw new IllegalStateException("Duplicate text parameter ID " + parameter.id);
+ }
+ }
+ BY_ID = Collections.unmodifiableMap(parameters);
+ }
+
+ private final int id;
+
+ TextParameter(int id) {
+ this.id = id;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public static Optional fromId(int id) {
+ return Optional.ofNullable(BY_ID.get(id));
+ }
+}
diff --git a/src/main/java/toniarts/openkeeper/utils/TextReplacer.java b/src/main/java/toniarts/openkeeper/utils/TextReplacer.java
index d39a66c69..a27c5ec5b 100644
--- a/src/main/java/toniarts/openkeeper/utils/TextReplacer.java
+++ b/src/main/java/toniarts/openkeeper/utils/TextReplacer.java
@@ -26,9 +26,9 @@ public interface TextReplacer {
/**
* Get replacement for a parameter
*
- * @param index parameter index
+ * @param parameter text parameter
* @return the actual parameter replacement
*/
- String getReplacement(int index);
+ String getReplacement(TextParameter parameter);
}
diff --git a/src/main/java/toniarts/openkeeper/utils/TextUtils.java b/src/main/java/toniarts/openkeeper/utils/TextUtils.java
index 9282f41ed..91eba5aa1 100644
--- a/src/main/java/toniarts/openkeeper/utils/TextUtils.java
+++ b/src/main/java/toniarts/openkeeper/utils/TextUtils.java
@@ -16,6 +16,9 @@
*/
package toniarts.openkeeper.utils;
+import java.lang.System.Logger;
+import java.lang.System.Logger.Level;
+import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -32,6 +35,7 @@
*/
public final class TextUtils {
+ private static final Logger logger = System.getLogger(TextUtils.class.getName());
private final static Pattern PATTERN = Pattern.compile("%(\\d+|%)");
private TextUtils() {
@@ -43,14 +47,29 @@ public static String parseText(String text, TextReplacer replacer) {
StringBuilder sb = new StringBuilder();
while (matcher.find()) {
String param = matcher.group(1);
+ String replacement;
if ("%".equals(param)) {
- matcher.appendReplacement(sb, "%");
+ replacement = "%";
} else {
- matcher.appendReplacement(sb, replacer.getReplacement(Integer.parseInt(param)));
+ int id = Integer.parseInt(param);
+ Optional parameter = TextParameter.fromId(id);
+ if (parameter.isEmpty()) {
+ logger.log(Level.WARNING, "Unknown text parameter ID {0}", id);
+ replacement = matcher.group();
+ } else {
+ replacement = replacer.getReplacement(parameter.get());
+ }
}
+ matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement));
}
matcher.appendTail(sb);
return sb.toString();
}
+
+ public static String getUnsupportedParameterMessage(TextParameter parameter, Class> parserType) {
+ logger.log(Level.WARNING, "Text parameter {0} is not supported by {1}",
+ new Object[]{parameter.getId(), parserType.getSimpleName()});
+ return "Parameter " + parameter.getId() + " not implemented!";
+ }
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/CreatureTextParser.java b/src/main/java/toniarts/openkeeper/view/text/CreatureTextParser.java
index e6da0efec..08cb970a8 100644
--- a/src/main/java/toniarts/openkeeper/view/text/CreatureTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/CreatureTextParser.java
@@ -19,6 +19,7 @@
import com.simsilica.es.Entity;
import com.simsilica.es.EntityComponent;
import java.util.Collection;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.game.component.CreatureAi;
import toniarts.openkeeper.game.component.CreatureComponent;
import toniarts.openkeeper.game.component.CreatureEfficiency;
@@ -45,40 +46,40 @@ public CreatureTextParser(IMapInformation mapInformation) {
}
@Override
- protected String getReplacement(int index, Entity entity, Creature creature) {
- switch (index) {
- case 29:
+ protected String getReplacement(TextParameter parameter, Entity entity, Creature creature) {
+ switch (parameter) {
+ case CREATURE_INSTANCE_NAME:
CreatureComponent creatureComponent = entity.get(CreatureComponent.class);
if (creatureComponent != null) {
return creatureComponent.name;
}
return "";
- case 30:
+ case CREATURE_NAME:
return Utils.getMainTextResourceBundle().getString(Integer.toString(creature.getNameStringId()));
- case 31:
+ case CREATURE_ACTIVITY:
CreatureAi creatureAi = entity.get(CreatureAi.class);
if (creatureAi != null) {
return getStatusText(entity, creatureAi, mapInformation);
}
return "";
- case 32:
+ case CREATURE_STATUS:
// FIXME
return "";
- case 33:
+ case CREATURE_MOOD:
CreatureMood creatureMood = entity.get(CreatureMood.class);
if (creatureMood != null) {
return Integer.toString(creatureMood.moodValue);
}
return "";
- case 74:
+ case CREATURE_EFFICIENCY:
CreatureEfficiency creatureEfficiency = entity.get(CreatureEfficiency.class);
if (creatureEfficiency != null) {
return Integer.toString(creatureEfficiency.efficiencyPercentage);
}
return "";
+ default:
+ return super.getReplacement(parameter, entity, creature);
}
-
- return super.getReplacement(index, entity, creature);
}
private static String getStatusText(Entity entity, CreatureAi creatureAi,
diff --git a/src/main/java/toniarts/openkeeper/view/text/DoorIconTextParser.java b/src/main/java/toniarts/openkeeper/view/text/DoorIconTextParser.java
index 7f3b3cab4..0802940a0 100644
--- a/src/main/java/toniarts/openkeeper/view/text/DoorIconTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/DoorIconTextParser.java
@@ -18,6 +18,8 @@
import toniarts.openkeeper.tools.convert.map.Door;
import toniarts.openkeeper.tools.convert.map.Trap;
+import toniarts.openkeeper.utils.TextParameter;
+import toniarts.openkeeper.utils.TextUtils;
import toniarts.openkeeper.utils.Utils;
/**
@@ -28,19 +30,19 @@
public final class DoorIconTextParser extends IconTextParser {
@Override
- protected String getReplacement(int index, Door door, Trap trap) {
- switch (index) {
- case 1:
+ protected String getReplacement(TextParameter parameter, Door door, Trap trap) {
+ switch (parameter) {
+ case NAME:
return Utils.getMainTextResourceBundle().getString(Integer.toString(door.getNameStringId()));
- case 2:
+ case COST:
return Integer.toString(door.getGoldCost());
- case 25:
+ case MANA_USAGE:
return Integer.toString(trap.getManaUsage());
- case 26:
+ case MANA_COST_TO_FIRE:
return Integer.toString(trap.getManaCostToFire());
+ default:
+ return TextUtils.getUnsupportedParameterMessage(parameter, getClass());
}
-
- return "Parameter " + index + " not implemented!";
}
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/DoorTextParser.java b/src/main/java/toniarts/openkeeper/view/text/DoorTextParser.java
index 055b20cb8..48c158426 100644
--- a/src/main/java/toniarts/openkeeper/view/text/DoorTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/DoorTextParser.java
@@ -19,6 +19,7 @@
import com.simsilica.es.Entity;
import com.simsilica.es.EntityComponent;
import java.util.Collection;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.game.component.DoorComponent;
import toniarts.openkeeper.tools.convert.map.Door;
import toniarts.openkeeper.utils.Utils;
@@ -35,19 +36,19 @@ public DoorTextParser() {
}
@Override
- protected String getReplacement(int index, Entity entity, Door door) {
- switch (index) {
- case 68:
+ protected String getReplacement(TextParameter parameter, Entity entity, Door door) {
+ switch (parameter) {
+ case ENTITY_NAME:
return Utils.getMainTextResourceBundle().getString(Integer.toString(door.getNameStringId()));
- case 72:
+ case STATE:
DoorComponent doorComponent = entity.get(DoorComponent.class);
if (doorComponent != null) {
return doorComponent.locked ? Utils.getMainTextResourceBundle().getString("2516") : Utils.getMainTextResourceBundle().getString("2515");
}
return "";
+ default:
+ return super.getReplacement(parameter, entity, door);
}
-
- return super.getReplacement(index, entity, door);
}
@Override
diff --git a/src/main/java/toniarts/openkeeper/view/text/EntityTextParser.java b/src/main/java/toniarts/openkeeper/view/text/EntityTextParser.java
index f1eae3250..eba922455 100644
--- a/src/main/java/toniarts/openkeeper/view/text/EntityTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/EntityTextParser.java
@@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.game.component.Gold;
import toniarts.openkeeper.game.component.Health;
import toniarts.openkeeper.utils.TextUtils;
@@ -37,28 +38,28 @@ public EntityTextParser() {
}
public String parseText(String text, Entity entity, T dataObject) {
- return TextUtils.parseText(text, (index) -> {
- return getReplacement(index, entity, dataObject);
+ return TextUtils.parseText(text, (parameter) -> {
+ return getReplacement(parameter, entity, dataObject);
});
}
- protected String getReplacement(int index, Entity entity, T dataObject) {
- switch (index) {
- case 37:
+ protected String getReplacement(TextParameter parameter, Entity entity, T dataObject) {
+ switch (parameter) {
+ case HEALTH_PERCENTAGE:
Health health = entity.get(Health.class);
if (health != null) {
return Integer.toString((int) (health.health / health.maxHealth * 100f));
}
return "";
- case 73:
+ case ENTITY_GOLD:
Gold gold = entity.get(Gold.class);
if (gold != null) {
return Integer.toString(gold.gold);
}
return "";
+ default:
+ return TextUtils.getUnsupportedParameterMessage(parameter, getClass());
}
-
- return "Parameter " + index + " not implemented!";
}
public Collection> getWatchedComponents() {
diff --git a/src/main/java/toniarts/openkeeper/view/text/IconTextParser.java b/src/main/java/toniarts/openkeeper/view/text/IconTextParser.java
index a1585454e..636c9b56f 100644
--- a/src/main/java/toniarts/openkeeper/view/text/IconTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/IconTextParser.java
@@ -16,6 +16,7 @@
*/
package toniarts.openkeeper.view.text;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.utils.TextUtils;
/**
@@ -31,11 +32,11 @@ public IconTextParser() {
}
public String parseText(String text, T o1, S o2) {
- return TextUtils.parseText(text, (index) -> {
- return getReplacement(index, o1, o2);
+ return TextUtils.parseText(text, (parameter) -> {
+ return getReplacement(parameter, o1, o2);
});
}
- protected abstract String getReplacement(int index, T o1, S o2);
+ protected abstract String getReplacement(TextParameter parameter, T o1, S o2);
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/MapTileTextParser.java b/src/main/java/toniarts/openkeeper/view/text/MapTileTextParser.java
index c87642e2f..58d963108 100644
--- a/src/main/java/toniarts/openkeeper/view/text/MapTileTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/MapTileTextParser.java
@@ -16,6 +16,7 @@
*/
package toniarts.openkeeper.view.text;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.game.map.IMapTileInformation;
import toniarts.openkeeper.utils.TextUtils;
@@ -30,22 +31,22 @@ public MapTileTextParser() {
}
public String parseText(String text, IMapTileInformation mapTile) {
- return TextUtils.parseText(text, (index) -> {
- return getReplacement(index, mapTile);
+ return TextUtils.parseText(text, (parameter) -> {
+ return getReplacement(parameter, mapTile);
});
}
- protected String getReplacement(int index, IMapTileInformation mapTile) {
- switch (index) {
- case 37:
+ protected String getReplacement(TextParameter parameter, IMapTileInformation mapTile) {
+ switch (parameter) {
+ case HEALTH_PERCENTAGE:
return Integer.toString(mapTile.getHealthPercent());
- case 66:
+ case MANA_GAIN:
return Integer.toString(mapTile.getManaGain());
- case 67:
+ case GOLD:
return Integer.toString(mapTile.getGold());
+ default:
+ return TextUtils.getUnsupportedParameterMessage(parameter, getClass());
}
-
- return "Parameter " + index + " not implemented!";
}
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/ObjectTextParser.java b/src/main/java/toniarts/openkeeper/view/text/ObjectTextParser.java
index f00413938..7a4255ec1 100644
--- a/src/main/java/toniarts/openkeeper/view/text/ObjectTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/ObjectTextParser.java
@@ -17,6 +17,7 @@
package toniarts.openkeeper.view.text;
import com.simsilica.es.Entity;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.tools.convert.map.GameObject;
/**
@@ -31,8 +32,8 @@ public ObjectTextParser() {
}
@Override
- protected String getReplacement(int index, Entity entity, GameObject gameObject) {
- return super.getReplacement(index, entity, gameObject);
+ protected String getReplacement(TextParameter parameter, Entity entity, GameObject gameObject) {
+ return super.getReplacement(parameter, entity, gameObject);
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/RoomIconTextParser.java b/src/main/java/toniarts/openkeeper/view/text/RoomIconTextParser.java
index 8251e2cf8..5d92b92f8 100644
--- a/src/main/java/toniarts/openkeeper/view/text/RoomIconTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/RoomIconTextParser.java
@@ -17,6 +17,8 @@
package toniarts.openkeeper.view.text;
import toniarts.openkeeper.tools.convert.map.Room;
+import toniarts.openkeeper.utils.TextParameter;
+import toniarts.openkeeper.utils.TextUtils;
import toniarts.openkeeper.utils.Utils;
/**
@@ -27,15 +29,15 @@
public final class RoomIconTextParser extends SimpleIconTextParser {
@Override
- protected String getReplacement(int index, Room room) {
- switch (index) {
- case 1:
+ protected String getReplacement(TextParameter parameter, Room room) {
+ switch (parameter) {
+ case NAME:
return Utils.getMainTextResourceBundle().getString(Integer.toString(room.getNameStringId()));
- case 2:
+ case COST:
return Integer.toString(room.getCost());
- case 21: // ?
+ case ROOM_COST: // ?
return Integer.toString(room.getCost());
- case 22:
+ case ROOM_SIZE_HINT:
// Size hint
if (room.getRecommendedSizeX() == 1 && room.getRecommendedSizeY() == 1) {
@@ -50,9 +52,9 @@ protected String getReplacement(int index, Room room) {
return "No size hint for " + room.getRecommendedSizeX() + " x " + room.getRecommendedSizeY();
+ default:
+ return TextUtils.getUnsupportedParameterMessage(parameter, getClass());
}
-
- return "Parameter " + index + " not implemented!";
}
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/RoomTextParser.java b/src/main/java/toniarts/openkeeper/view/text/RoomTextParser.java
index f854ebdd9..033b8bb3c 100644
--- a/src/main/java/toniarts/openkeeper/view/text/RoomTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/RoomTextParser.java
@@ -17,6 +17,7 @@
package toniarts.openkeeper.view.text;
import com.simsilica.es.EntityId;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.game.map.IRoomInformation;
import toniarts.openkeeper.game.map.IRoomsInformation;
import toniarts.openkeeper.utils.TextUtils;
@@ -35,50 +36,50 @@ public RoomTextParser(IRoomsInformation roomsInformation) {
}
public String parseText(String text, EntityId room) {
- return TextUtils.parseText(text, (index) -> {
- return getReplacement(index, roomsInformation.getRoomInformation(room));
+ return TextUtils.parseText(text, (parameter) -> {
+ return getReplacement(parameter, roomsInformation.getRoomInformation(room));
});
}
- protected String getReplacement(int index, IRoomInformation room) {
- switch (index) {
- case 37:
+ protected String getReplacement(TextParameter parameter, IRoomInformation room) {
+ switch (parameter) {
+ case HEALTH_PERCENTAGE:
return Integer.toString(room.getHealthPercent()); // Health
- case 38:
+ case ROOM_USED_CAPACITY:
return Integer.toString(room.getUsedCapacity()); // Used capacity
- case 39:
+ case ROOM_MAX_CAPACITY:
return Integer.toString(room.getMaxCapacity()); // Max capacity
- case 44:
+ case PORTAL_COUNT:
return getRoomAmount(room, 3); // Portal
- case 45:
+ case LAIR_COUNT:
return getRoomAmount(room, 2); // Lair
- case 46:
+ case HATCHERY_COUNT:
return getRoomAmount(room, 4); // Hatchery
- case 47:
+ case TREASURY_COUNT:
return getRoomAmount(room, 1); // Treasury
- case 48:
+ case LIBRARY_COUNT:
return getRoomAmount(room, 6); // Library
- case 49:
+ case TRAINING_ROOM_COUNT:
return getRoomAmount(room, 7); // Training Room
- case 50:
+ case WORKSHOP_COUNT:
return getRoomAmount(room, 10); // Workshop
- case 51:
+ case GUARD_ROOM_COUNT:
return getRoomAmount(room, 9); // Guard Room
- case 53:
+ case COMBAT_PIT_COUNT:
return getRoomAmount(room, 16); // Combat Pit
- case 54:
+ case TORTURE_CHAMBER_COUNT:
return getRoomAmount(room, 12); // Torture
- case 58:
+ case PRISON_COUNT:
return getRoomAmount(room, 11); // Prison
- case 61:
+ case GRAVEYARD_COUNT:
return getRoomAmount(room, 14); // Graveyard
- case 62:
+ case TEMPLE_COUNT:
return getRoomAmount(room, 13); // Temple
- case 63:
+ case CASINO_COUNT:
return getRoomAmount(room, 15); // Casino
+ default:
+ return TextUtils.getUnsupportedParameterMessage(parameter, getClass());
}
-
- return "Parameter " + index + " not implemented!";
}
private String getRoomAmount(IRoomInformation room, int roomId) {
diff --git a/src/main/java/toniarts/openkeeper/view/text/SimpleIconTextParser.java b/src/main/java/toniarts/openkeeper/view/text/SimpleIconTextParser.java
index afc2142e3..7b870eaba 100644
--- a/src/main/java/toniarts/openkeeper/view/text/SimpleIconTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/SimpleIconTextParser.java
@@ -16,6 +16,7 @@
*/
package toniarts.openkeeper.view.text;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.utils.TextUtils;
/**
@@ -30,11 +31,11 @@ public SimpleIconTextParser() {
}
public String parseText(String text, T dataObject) {
- return TextUtils.parseText(text, (index) -> {
- return getReplacement(index, dataObject);
+ return TextUtils.parseText(text, (parameter) -> {
+ return getReplacement(parameter, dataObject);
});
}
- protected abstract String getReplacement(int index, T dataObject);
+ protected abstract String getReplacement(TextParameter parameter, T dataObject);
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/SpellIconTextParser.java b/src/main/java/toniarts/openkeeper/view/text/SpellIconTextParser.java
index 97ae03f7d..50d93891c 100644
--- a/src/main/java/toniarts/openkeeper/view/text/SpellIconTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/SpellIconTextParser.java
@@ -18,6 +18,8 @@
import toniarts.openkeeper.game.data.ResearchableEntity;
import toniarts.openkeeper.tools.convert.map.KeeperSpell;
+import toniarts.openkeeper.utils.TextParameter;
+import toniarts.openkeeper.utils.TextUtils;
import toniarts.openkeeper.utils.Utils;
/**
@@ -28,17 +30,17 @@
public final class SpellIconTextParser extends IconTextParser {
@Override
- protected String getReplacement(int index, KeeperSpell keeperSpell, ResearchableEntity spell) {
- switch (index) {
- case 1:
+ protected String getReplacement(TextParameter parameter, KeeperSpell keeperSpell, ResearchableEntity spell) {
+ switch (parameter) {
+ case NAME:
return Utils.getMainTextResourceBundle().getString(Integer.toString(keeperSpell.getNameStringId()));
- case 2:
+ case COST:
return Integer.toString(keeperSpell.getManaCost());
- case 3:
+ case SPELL_LEVEL:
return spell.isUpgraded() ? "2" : "1";
+ default:
+ return TextUtils.getUnsupportedParameterMessage(parameter, getClass());
}
-
- return "Parameter " + index + " not implemented!";
}
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/TrapIconTextParser.java b/src/main/java/toniarts/openkeeper/view/text/TrapIconTextParser.java
index 809d04733..77b3dd9e3 100644
--- a/src/main/java/toniarts/openkeeper/view/text/TrapIconTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/TrapIconTextParser.java
@@ -17,6 +17,8 @@
package toniarts.openkeeper.view.text;
import toniarts.openkeeper.tools.convert.map.Trap;
+import toniarts.openkeeper.utils.TextParameter;
+import toniarts.openkeeper.utils.TextUtils;
import toniarts.openkeeper.utils.Utils;
/**
@@ -27,21 +29,21 @@
public final class TrapIconTextParser extends SimpleIconTextParser {
@Override
- protected String getReplacement(int index, Trap trap) {
- switch (index) {
- case 1:
+ protected String getReplacement(TextParameter parameter, Trap trap) {
+ switch (parameter) {
+ case NAME:
return Utils.getMainTextResourceBundle().getString(Integer.toString(trap.getNameStringId()));
- case 2:
+ case COST:
return Integer.toString(trap.getGoldCost());
- case 17: // ?
+ case TRAP_OR_DOOR_COST: // ?
return Integer.toString(trap.getGoldCost());
- case 25:
+ case MANA_USAGE:
return Integer.toString(trap.getManaUsage());
- case 26:
+ case MANA_COST_TO_FIRE:
return Integer.toString(trap.getManaCostToFire());
+ default:
+ return TextUtils.getUnsupportedParameterMessage(parameter, getClass());
}
-
- return "Parameter " + index + " not implemented!";
}
}
diff --git a/src/main/java/toniarts/openkeeper/view/text/TrapTextParser.java b/src/main/java/toniarts/openkeeper/view/text/TrapTextParser.java
index 13e6d8226..e04232e51 100644
--- a/src/main/java/toniarts/openkeeper/view/text/TrapTextParser.java
+++ b/src/main/java/toniarts/openkeeper/view/text/TrapTextParser.java
@@ -17,6 +17,7 @@
package toniarts.openkeeper.view.text;
import com.simsilica.es.Entity;
+import toniarts.openkeeper.utils.TextParameter;
import toniarts.openkeeper.tools.convert.map.Trap;
import toniarts.openkeeper.utils.Utils;
@@ -32,19 +33,19 @@ public TrapTextParser() {
}
@Override
- protected String getReplacement(int index, Entity entity, Trap trap) {
- switch (index) {
- case 68:
+ protected String getReplacement(TextParameter parameter, Entity entity, Trap trap) {
+ switch (parameter) {
+ case ENTITY_NAME:
return Utils.getMainTextResourceBundle().getString(Integer.toString(trap.getNameStringId()));
- case 25:
+ case MANA_USAGE:
return Integer.toString(trap.getManaUsage());
- case 26:
+ case MANA_COST_TO_FIRE:
return Integer.toString(trap.getManaCostToFire());
- case 72:
+ case STATE:
return trap.getFlags().contains(Trap.TrapFlag.REVEAL_WHEN_FIRED) ? Utils.getMainTextResourceBundle().getString("2514") : Utils.getMainTextResourceBundle().getString("2513"); // This is not entirely true if you compare to original, see Fear trap
+ default:
+ return super.getReplacement(parameter, entity, trap);
}
-
- return super.getReplacement(index, entity, trap);
}