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); }