From 84d03a29454cb1407a05b5eef2f70fe5c665986b Mon Sep 17 00:00:00 2001 From: Nathan Watson Date: Sun, 19 Jul 2020 22:11:11 -0700 Subject: [PATCH] Combat log enhancements Lists experience, gold, and item pickups from combat in the combat log. --- AndorsTrail/res/values/strings.xml | 2 ++ .../controller/CombatController.java | 30 +++++++++++++++++++ .../controller/ItemController.java | 5 ++-- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml index 19548158d..e9dd5c433 100644 --- a/AndorsTrail/res/values/strings.xml +++ b/AndorsTrail/res/values/strings.xml @@ -91,6 +91,8 @@ %1$s is affected by %2$s. %1$s is cleared of %2$s. %1$s is now immunized against %2$s. + You found an item: + You found %1$d items: Info diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java index 75706b472..11a9de0f7 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java @@ -18,6 +18,7 @@ import com.gpl.rpg.AndorsTrail.model.actor.Actor; import com.gpl.rpg.AndorsTrail.model.actor.Monster; import com.gpl.rpg.AndorsTrail.model.actor.MonsterType; import com.gpl.rpg.AndorsTrail.model.actor.Player; +import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnHitReceived; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.model.item.Loot; @@ -58,6 +59,9 @@ public final class CombatController implements VisualEffectCompletedCallback { public void exitCombat(boolean pickupLootBags) { setCombatSelection(null, null); world.model.uiSelections.isInCombat = false; + if (pickupLootBags) { + recordLootInCombatLog(); + } combatTurnListeners.onCombatEnded(); controllers.actorStatsController.setActorMaxAP(world.model.player); world.model.uiSelections.selectedPosition = null; @@ -75,6 +79,31 @@ public final class CombatController implements VisualEffectCompletedCallback { resetCombatState(); } + private void recordLootInCombatLog() { + Loot combinedLoot = Loot.combine(killedMonsterBags); + if (combinedLoot.gold > 0) { + world.model.combatLog.append(controllers.getResources().getString(R.string.dialog_loot_foundgold, combinedLoot.gold)); + } + int itemCount = combinedLoot.items.countItems(); + if (itemCount > 0) { + StringBuilder itemMessage = new StringBuilder(); + if (itemCount == 1) { + itemMessage.append(controllers.getResources().getString(R.string.combat_log_item_single)); + } else { + itemMessage.append(controllers.getResources().getString(R.string.combat_log_item_plural, itemCount)); + } + boolean firstItem = true; + for (ItemContainer.ItemEntry entry : combinedLoot.items.items) { + if (!firstItem) { + itemMessage.append(";"); + } + itemMessage.append(" " + entry.itemType.getName(world.model.player) + " (" + entry.quantity + ")"); + firstItem = false; + } + world.model.combatLog.append(itemMessage.toString()); + } + } + private void resetCombatState() { killedMonsterBags.clear(); totalExpThisFight = 0; @@ -211,6 +240,7 @@ public final class CombatController implements VisualEffectCompletedCallback { world.model.statistics.addMonsterKill(killedMonster.getMonsterTypeID()); controllers.actorStatsController.addExperience(loot.exp); + world.model.combatLog.append(controllers.getResources().getString(R.string.dialog_monsterloot_gainedexp, loot.exp)); totalExpThisFight += loot.exp; loot.exp = 0; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java index a1336d2a9..1112ffe23 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collection; import com.gpl.rpg.AndorsTrail.AndorsTrailPreferences; +import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.context.ControllerContext; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.controller.listeners.QuickSlotListeners; @@ -92,11 +93,9 @@ public final class ItemController { if (!player.inventory.removeItem(type.id, 1)) return; + world.model.combatLog.append(controllers.getResources().getString(R.string.inventory_item_used, type.getName(player))); controllers.actorStatsController.applyUseEffect(player, null, type.effects_use); world.model.statistics.addItemUsage(type); - - //TODO: provide feedback that the item has been used. - //context.mainActivity.message(androidContext.getResources().getString(R.string.inventory_item_used, type.name)); } public void playerSteppedOnLootBag(Loot loot) {