Combat log enhancements

Lists experience, gold, and item pickups from combat in the combat log.
This commit is contained in:
Nathan Watson
2020-07-19 22:11:11 -07:00
parent 5bc08762a9
commit 84d03a2945
3 changed files with 34 additions and 3 deletions

View File

@@ -91,6 +91,8 @@
<string name="combat_condition_monster_apply">%1$s is affected by %2$s.</string>
<string name="combat_condition_monster_clear">%1$s is cleared of %2$s.</string>
<string name="combat_condition_monster_immune">%1$s is now immunized against %2$s.</string>
<string name="combat_log_item_single">You found an item: </string>
<string name="combat_log_item_plural">You found %1$d items: </string>
<string name="inventory_info">Info</string>

View File

@@ -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;

View File

@@ -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) {