From: Oskar Wiksten Date: Sun, 30 Sep 2012 21:01:22 +0000 (+0200) Subject: Refactored how item stats are applied. Changed item stats from re-using CombatTraits... X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=534148431e873f413bd044de81e9439588033c15;p=users%2Fmchehab%2Fandors-trail.git Refactored how item stats are applied. Changed item stats from re-using CombatTraits (which is used on actors) on items, to now instead use more explicit fields on the AbilityModifierTraits object. --- diff --git a/AndorsTrail/res/layout/abilitymodifierview.xml b/AndorsTrail/res/layout/abilitymodifierview.xml index 4456efb..7a781d2 100644 --- a/AndorsTrail/res/layout/abilitymodifierview.xml +++ b/AndorsTrail/res/layout/abilitymodifierview.xml @@ -5,12 +5,48 @@ android:layout_height="wrap_content" > - + + + + + + - - + + + diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml index 76a094f..570adf2 100644 --- a/AndorsTrail/res/values/strings.xml +++ b/AndorsTrail/res/values/strings.xml @@ -510,4 +510,28 @@ Equip (offhand) + Attack cost: %1$d AP + Increases attack cost by %1$d AP + Lowers attack cost by %1$d AP + Attack chance: %1$d %% + Increases attack chance by %1$d %% + Lowers attack chance by %1$d %% + Attack damage: %1$d + Attack damage: %1$d-%2$d + Increases attack damage by %1$d + Increases attack damage by %1$d-%2$d + Lowers attack damage by %1$d + Lowers attack damage by %1$d-%2$d + Increases critical skill by %1$d + Lowers critical skill by %1$d + Enables critical hits with a multiplier of x%1$.1f + Increases block chance by %1$d %% + Lowers block chance by %1$d %% + Raises damage resistance by %1$d + Lowers damage resistance by %1$d + Increases AP cost of using items in combat by %1$d AP + Lowers AP cost of using items in combat by %1$d AP + Increases AP cost of equipping items in combat by %1$d AP + Lowers AP cost of equipping items in combat by %1$d AP + diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ActorConditionInfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ActorConditionInfoActivity.java index 9309319..f47dfe8 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ActorConditionInfoActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ActorConditionInfoActivity.java @@ -57,7 +57,8 @@ public class ActorConditionInfoActivity extends Activity { final String categoryName = res.getStringArray(R.array.actorcondition_categories)[conditionType.conditionCategory]; tv.setText(res.getString(R.string.actorconditioninfo_category, categoryName)); - ((AbilityModifierInfoView) findViewById(R.id.actorconditioninfo_constant_effect_abilitymodifierinfo)).update(conditionType.abilityEffect); + ((AbilityModifierInfoView) findViewById(R.id.actorconditioninfo_constant_effect_abilitymodifierinfo)).update(conditionType.abilityEffect, false); + tv = (TextView) findViewById(R.id.actorconditioninfo_constant_effect_title); if (conditionType.abilityEffect != null) { tv.setVisibility(View.VISIBLE); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Inventory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Inventory.java index 735cadc..27987f6 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Inventory.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Inventory.java @@ -5,6 +5,8 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.context.ViewContext; import com.gpl.rpg.AndorsTrail.context.WorldContext; +import com.gpl.rpg.AndorsTrail.controller.ItemController; +import com.gpl.rpg.AndorsTrail.model.CombatTraits; import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.item.Inventory; import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; @@ -162,8 +164,15 @@ public final class HeroinfoActivity_Inventory extends Activity { private void updateTraits() { heroinfo_stats_gold.setText(getResources().getString(R.string.heroinfo_gold, player.inventory.gold)); - heroinfo_stats_attack.setText(ItemType.describeAttackEffect(player.combatTraits)); - heroinfo_stats_defense.setText(ItemType.describeBlockEffect(player.combatTraits)); + CombatTraits c = player.combatTraits; + + StringBuilder sb = new StringBuilder(); + ItemController.describeAttackEffect(c.attackChance, c.damagePotential.current, c.damagePotential.max, c.criticalSkill, c.criticalMultiplier, sb); + heroinfo_stats_attack.setText(sb.toString()); + + sb = new StringBuilder(); + ItemController.describeBlockEffect(c.blockChance, c.damageResistance, sb); + heroinfo_stats_defense.setText(sb.toString()); } private void updateWorn() { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Stats.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Stats.java index 3d3ab5b..fa47dc5 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Stats.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Stats.java @@ -125,7 +125,7 @@ public final class HeroinfoActivity_Stats extends Activity { } if (effects_hit.isEmpty()) effects_hit = null; if (effects_kill.isEmpty()) effects_kill = null; - heroinfo_itemeffects.update(null, null, effects_hit, effects_kill); + heroinfo_itemeffects.update(null, null, effects_hit, effects_kill, false); heroinfo_basetraits.update(player.actorTraits); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java index 753816b..12b770e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ItemInfoActivity.java @@ -57,7 +57,8 @@ public final class ItemInfoActivity extends Activity { itemType.effects_equip, itemType.effects_use == null ? null : Arrays.asList(itemType.effects_use), itemType.effects_hit == null ? null : Arrays.asList(itemType.effects_hit), - itemType.effects_kill == null ? null : Arrays.asList(itemType.effects_kill) + itemType.effects_kill == null ? null : Arrays.asList(itemType.effects_kill), + itemType.isWeapon() ); Button b = (Button) findViewById(R.id.iteminfo_close); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java index 0fb7fc1..3fa7c15 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java @@ -90,7 +90,8 @@ public final class MonsterInfoActivity extends Activity { null, null, monster.actorTraits.onHitEffects == null ? null : Arrays.asList(monster.actorTraits.onHitEffects), - null); + null, + false); hp.update(monster.health); monsterinfo_immune_criticals.setVisibility(monster.isImmuneToCriticalHits ? View.VISIBLE : View.GONE); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java index 48c0a7a..f556f94 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java @@ -155,21 +155,18 @@ public class ActorStatsController { CombatTraits actorCombatTraits = actor.combatTraits; - actor.health.addToMax(effects.maxHPBoost * multiplier); - actor.ap.addToMax(effects.maxAPBoost * multiplier); - actor.actorTraits.moveCost += effects.moveCostPenalty * multiplier; + actor.health.addToMax(effects.increaseMaxHP * multiplier); + actor.ap.addToMax(effects.increaseMaxAP * multiplier); + actor.actorTraits.moveCost += effects.increaseMoveCost * multiplier; - CombatTraits combatTraits = effects.combatProficiency; - if (combatTraits != null) { - actorCombatTraits.attackCost += combatTraits.attackCost * multiplier; - //criticalMultiplier should not be increased. It is always defined by the weapon in use. - actorCombatTraits.attackChance += combatTraits.attackChance * multiplier; - actorCombatTraits.criticalSkill += combatTraits.criticalSkill * multiplier; - actorCombatTraits.damagePotential.add(combatTraits.damagePotential.current * multiplier, true); - actorCombatTraits.damagePotential.addToMax(combatTraits.damagePotential.max * multiplier); - actorCombatTraits.blockChance += combatTraits.blockChance * multiplier; - actorCombatTraits.damageResistance += combatTraits.damageResistance * multiplier; - } + actorCombatTraits.attackCost += effects.increaseAttackCost * multiplier; + //criticalMultiplier should not be increased. It is always defined by the weapon in use. + actorCombatTraits.attackChance += effects.increaseAttackChance * multiplier; + actorCombatTraits.criticalSkill += effects.increaseCriticalSkill * multiplier; + actorCombatTraits.damagePotential.add(effects.increaseMinDamage * multiplier, true); + actorCombatTraits.damagePotential.addToMax(effects.increaseMaxDamage * multiplier); + actorCombatTraits.blockChance += effects.increaseBlockChance * multiplier; + actorCombatTraits.damageResistance += effects.increaseDamageResistance * multiplier; if (actorCombatTraits.attackCost <= 0) actorCombatTraits.attackCost = 1; if (actorCombatTraits.attackChance < 0) actorCombatTraits.attackChance = 0; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java index 706193c..7f5ff79 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java @@ -10,12 +10,14 @@ import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.model.ModelContainer; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect; import com.gpl.rpg.AndorsTrail.model.ability.SkillCollection; +import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.item.Inventory; import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.model.item.ItemType; import com.gpl.rpg.AndorsTrail.model.item.Loot; +import com.gpl.rpg.AndorsTrail.model.item.ItemContainer.ItemEntry; import com.gpl.rpg.AndorsTrail.view.MainView; public final class ItemController { @@ -103,7 +105,7 @@ public final class ItemController { ItemType weapon = getMainWeapon(player); if (weapon != null) { player.combatTraits.attackCost = 0; - player.combatTraits.criticalMultiplier = weapon.effects_equip.combatProficiency.criticalMultiplier; + player.combatTraits.criticalMultiplier = weapon.effects_equip.stats.setCriticalMultiplier; } applyInventoryEffects(player, Inventory.WEARSLOT_WEAPON); @@ -135,7 +137,8 @@ public final class ItemController { // The stats for off-hand weapons will be added later in SkillController.applySkillEffectsFromFightingStyles if (SkillController.isDualWielding(mainHandItem, type)) return; } - ActorStatsController.applyAbilityEffects(player, type.effects_equip, 1); + if (type.effects_equip != null && type.effects_equip.stats != null) + ActorStatsController.applyAbilityEffects(player, type.effects_equip.stats, 1); } public static void recalculateHitEffectsFromWornItems(Player player) { @@ -241,6 +244,79 @@ public final class ItemController { model.statistics.addGoldSpent(price); } } + + + public static String describeItemForListView(ItemEntry item) { + StringBuilder sb = new StringBuilder(item.itemType.name); + if (item.quantity > 1) { + sb.append(" ("); + sb.append(item.quantity); + sb.append(')'); + } + if (item.itemType.effects_equip != null) { + AbilityModifierTraits t = item.itemType.effects_equip.stats; + if (t != null) { + if (t.increaseAttackChance != 0 + || t.increaseMinDamage != 0 + || t.increaseMaxDamage != 0 + || t.increaseCriticalSkill != 0 + || t.setCriticalMultiplier != 0) { + sb.append(" ["); + describeAttackEffect(t.increaseAttackChance, t.increaseMinDamage, t.increaseMaxDamage, t.increaseCriticalSkill, t.setCriticalMultiplier, sb); + sb.append(']'); + } + if (t.increaseBlockChance != 0 + || t.increaseDamageResistance != 0) { + sb.append(" ["); + describeBlockEffect(t.increaseBlockChance, t.increaseDamageResistance, sb); + sb.append(']'); + } + } + } + return sb.toString(); + } + + public static void describeAttackEffect(int attackChance, int minDamage, int maxDamage, int criticalSkill, float criticalMultiplier, StringBuilder sb) { + boolean addSpace = false; + if (attackChance != 0) { + sb.append(attackChance); + sb.append('%'); + addSpace = true; + } + if (minDamage != 0 || maxDamage != 0) { + if (addSpace) sb.append(' '); + sb.append(minDamage); + if (minDamage != maxDamage) { + sb.append('-'); + sb.append(maxDamage); + } + addSpace = true; + } + if (criticalSkill != 0) { + if (addSpace) sb.append(' '); + if (criticalSkill >= 0) { + sb.append('+'); + } + sb.append(criticalSkill); + addSpace = true; + } + if (criticalMultiplier != 0 && criticalMultiplier != 1) { + sb.append('x'); + sb.append(criticalMultiplier); + addSpace = true; + } + } + + public static void describeBlockEffect(int blockChance, int damageResistance, StringBuilder sb) { + if (blockChance != 0) { + sb.append(blockChance); + sb.append('%'); + } + if (damageResistance != 0) { + sb.append('/'); + sb.append(damageResistance); + } + } public void quickitemUse(int quickSlotId) { useItem(model.player.inventory.quickitem[quickSlotId]); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/CombatTraits.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/CombatTraits.java index 224139a..ad4fa02 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/CombatTraits.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/CombatTraits.java @@ -102,24 +102,6 @@ public class CombatTraits { return 0; } - public int calculateCost(boolean isWeapon) { - final int costBC = (int) (3*Math.pow(Math.max(0, blockChance), 2.5) + 28*blockChance); - final int costAC = (int) (0.4*Math.pow(Math.max(0,attackChance), 2.5) - 6*Math.pow(Math.abs(Math.min(0,attackChance)),2.7)); - final int costAP = isWeapon ? - (int) (0.2*Math.pow(10.0f/attackCost, 8) - 25*attackCost) - : -3125 * attackCost; - final int costDR = 1325*damageResistance; - final int costDMG_Min = isWeapon ? - (int) (10*Math.pow(Math.max(0, damagePotential.current), 2.5)) - :(int) (10*Math.pow(Math.max(0, damagePotential.current), 3) + damagePotential.current*80); - final int costDMG_Max = isWeapon ? - (int) (2*Math.pow(Math.max(0, damagePotential.max), 2.1)) - :(int) (2*Math.pow(Math.max(0, damagePotential.max), 3) + damagePotential.max*20); - final int costCS = (int) (2.2*Math.pow(criticalSkill, 3)); - final int costCM = (int) (50*Math.pow(Math.max(0, criticalMultiplier), 2)); - - return costBC + costAC + costAP + costDR + costDMG_Min + costDMG_Max + costCS + costCM; - } // ====== PARCELABLE =================================================================== diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java index 2714617..354c19e 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/ability/traits/AbilityModifierTraits.java @@ -1,25 +1,77 @@ package com.gpl.rpg.AndorsTrail.model.ability.traits; -import com.gpl.rpg.AndorsTrail.model.CombatTraits; +public final class AbilityModifierTraits { + public final int increaseMaxHP; + public final int increaseMaxAP; + public final int increaseMoveCost; + public final int increaseUseItemCost; + public final int increaseReequipCost; + public final int increaseAttackCost; -public class AbilityModifierTraits { - public final int maxHPBoost; - public final int maxAPBoost; - public final int moveCostPenalty; - public final CombatTraits combatProficiency; + public final int increaseAttackChance; + public final int increaseBlockChance; + public final int increaseMinDamage; + public final int increaseMaxDamage; + public final int increaseCriticalSkill; + public final float setCriticalMultiplier; + public final int increaseDamageResistance; - public AbilityModifierTraits(int maxHPBoost, int maxAPBoost, int moveCostPenalty, CombatTraits combatProficiency) { - this.maxHPBoost = maxHPBoost; - this.maxAPBoost = maxAPBoost; - this.moveCostPenalty = moveCostPenalty; - this.combatProficiency = combatProficiency; + public AbilityModifierTraits( + int increaseMaxHP, + int increaseMaxAP, + int increaseMoveCost, + int increaseUseItemCost, + int increaseReequipCost, + int increaseAttackCost, + int increaseAttackChance, + int increaseBlockChance, + int increaseMinDamage, + int increaseMaxDamage, + int increaseCriticalSkill, + float setCriticalMultiplier, + int increaseDamageResistance + ) { + this.increaseMaxHP = increaseMaxHP; + this.increaseMaxAP = increaseMaxAP; + this.increaseMoveCost = increaseMoveCost; + this.increaseUseItemCost = increaseUseItemCost; + this.increaseReequipCost = increaseReequipCost; + this.increaseAttackCost = increaseAttackCost; + this.increaseAttackChance = increaseAttackChance; + this.increaseBlockChance = increaseBlockChance; + this.increaseMinDamage = increaseMinDamage; + this.increaseMaxDamage = increaseMaxDamage; + this.increaseCriticalSkill = increaseCriticalSkill; + this.setCriticalMultiplier = setCriticalMultiplier; + this.increaseDamageResistance = increaseDamageResistance; } + public boolean hasAttackChanceEffect() { return increaseAttackChance != 0; } + public boolean hasAttackDamageEffect() { return increaseMinDamage != 0 || increaseMaxDamage != 0; } + public boolean hasBlockEffect() { return increaseBlockChance != 0; } + public boolean hasCriticalSkillEffect() { return increaseCriticalSkill != 0; } + public boolean hasCriticalMultiplierEffect() { return setCriticalMultiplier != 0 && setCriticalMultiplier != 1; } + public int calculateCost(boolean isWeapon) { - final int costCombat = combatProficiency == null ? 0 : combatProficiency.calculateCost(isWeapon); - final int costMaxHP = (int) (30*Math.pow(Math.max(0,maxHPBoost), 1.2) + 70*maxHPBoost); - final int costMaxAP = (int) (50*Math.pow(Math.max(0,maxAPBoost), 3) + 750*maxAPBoost); - final int costMovement = (int) (510*Math.pow(Math.max(0,-moveCostPenalty), 2.5) - 350*moveCostPenalty); - return costCombat + costMaxHP + costMaxAP + costMovement; + final int costBC = (int) (3*Math.pow(Math.max(0, increaseBlockChance), 2.5) + 28*increaseBlockChance); + final int costAC = (int) (0.4*Math.pow(Math.max(0,increaseAttackChance), 2.5) - 6*Math.pow(Math.abs(Math.min(0,increaseAttackChance)),2.7)); + final int costAP = isWeapon ? + (int) (0.2*Math.pow(10.0f/increaseAttackCost, 8) - 25*increaseAttackCost) + :-3125 * increaseAttackCost; + final int costDR = 1325 * increaseDamageResistance; + final int costDMG_Min = isWeapon ? + (int) (10*Math.pow(Math.max(0, increaseMinDamage), 2.5)) + :(int) (10*Math.pow(Math.max(0, increaseMinDamage), 3) + increaseMinDamage*80); + final int costDMG_Max = isWeapon ? + (int) (2*Math.pow(Math.max(0, increaseMaxDamage), 2.1)) + :(int) (2*Math.pow(Math.max(0, increaseMaxDamage), 3) + increaseMaxDamage*20); + final int costCS = (int) (2.2*Math.pow(increaseCriticalSkill, 3)); + final int costCM = (int) (50*Math.pow(Math.max(0, setCriticalMultiplier), 2)); + + final int costMaxHP = (int) (30*Math.pow(Math.max(0,increaseMaxHP), 1.2) + 70*increaseMaxHP); + final int costMaxAP = (int) (50*Math.pow(Math.max(0,increaseMaxAP), 3) + 750*increaseMaxAP); + final int costMovement = (int) (510*Math.pow(Math.max(0,-increaseMoveCost), 2.5) - 350*increaseMoveCost); + + return costBC + costAC + costAP + costDR + costDMG_Min + costDMG_Max + costCS + costCM + costMaxHP + costMaxAP + costMovement; } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnEquip.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnEquip.java index c7cac14..b6ada67 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnEquip.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnEquip.java @@ -1,14 +1,21 @@ package com.gpl.rpg.AndorsTrail.model.item; -import com.gpl.rpg.AndorsTrail.model.CombatTraits; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect; import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; -public final class ItemTraits_OnEquip extends AbilityModifierTraits { +public final class ItemTraits_OnEquip { + public final AbilityModifierTraits stats; public final ActorConditionEffect[] addedConditions; - public ItemTraits_OnEquip(int maxHPBoost, int maxAPBoost, int moveCostPenalty, CombatTraits combatProficiency, ActorConditionEffect[] addedConditions) { - super(maxHPBoost, maxAPBoost, moveCostPenalty, combatProficiency); + public ItemTraits_OnEquip( + AbilityModifierTraits stats, + ActorConditionEffect[] addedConditions) { + this.stats = stats; this.addedConditions = addedConditions; } + + public int calculateCost(boolean isWeapon) { + final int costStats = stats == null ? 0 : stats.calculateCost(isWeapon); + return costStats; + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemType.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemType.java index 6ccd3d6..d1a98bf 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemType.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemType.java @@ -1,6 +1,5 @@ package com.gpl.rpg.AndorsTrail.model.item; -import com.gpl.rpg.AndorsTrail.model.CombatTraits; import com.gpl.rpg.AndorsTrail.resource.tiles.TileManager; public final class ItemType { @@ -25,7 +24,18 @@ public final class ItemType { public final ItemTraits_OnUse effects_hit; public final ItemTraits_OnUse effects_kill; - public ItemType(String id, int iconID, String name, ItemCategory category, int displayType, boolean hasManualPrice, int fixedBaseMarketCost, ItemTraits_OnEquip effects_equip, ItemTraits_OnUse effects_use, ItemTraits_OnUse effects_hit, ItemTraits_OnUse effects_kill) { + public ItemType( + String id, + int iconID, + String name, + ItemCategory category, + int displayType, + boolean hasManualPrice, + int fixedBaseMarketCost, + ItemTraits_OnEquip effects_equip, + ItemTraits_OnUse effects_use, + ItemTraits_OnUse effects_hit, + ItemTraits_OnUse effects_kill) { this.id = id; this.iconID = iconID; this.name = name; @@ -55,76 +65,6 @@ public final class ItemType { return true; } - - public String describeWearEffect(int quantity) { - StringBuilder sb = new StringBuilder(name); - if (quantity > 1) { - sb.append(" ("); - sb.append(quantity); - sb.append(')'); - } - if (effects_equip != null) { - if (effects_equip.combatProficiency != null) { - if (effects_equip.combatProficiency.hasAttackChanceEffect() || effects_equip.combatProficiency.hasAttackDamageEffect()) { - sb.append(" ["); - describeAttackEffect(effects_equip.combatProficiency, sb); - sb.append(']'); - } - if (effects_equip.combatProficiency.hasBlockEffect()) { - sb.append(" ["); - describeBlockEffect(effects_equip.combatProficiency, sb); - sb.append(']'); - } - } - } - return sb.toString(); - } - - public static void describeAttackEffect(CombatTraits attackEffect, StringBuilder sb) { - boolean addSpace = false; - if (attackEffect.hasAttackChanceEffect()) { - sb.append(attackEffect.attackChance); - sb.append('%'); - addSpace = true; - } - if (attackEffect.hasAttackDamageEffect()) { - if (addSpace) sb.append(' '); - sb.append(attackEffect.damagePotential.toMinMaxString()); - addSpace = true; - } - if (attackEffect.hasCriticalSkillEffect()) { - if (addSpace) sb.append(' '); - if (attackEffect.criticalSkill >= 0) { - sb.append('+'); - } - sb.append(attackEffect.criticalSkill); - sb.append("x"); - if (attackEffect.hasCriticalMultiplierEffect()) { - sb.append(attackEffect.criticalMultiplier); - } - addSpace = true; - } - } - public static String describeAttackEffect(CombatTraits attackEffect) { - StringBuilder sb = new StringBuilder(); - describeAttackEffect(attackEffect, sb); - return sb.toString(); - } - - public static void describeBlockEffect(CombatTraits defenseEffect, StringBuilder sb) { - sb.append(defenseEffect.blockChance); - sb.append('%'); - if (defenseEffect.damageResistance != 0) { - sb.append('/'); - sb.append(defenseEffect.damageResistance); - } - } - public static String describeBlockEffect(CombatTraits defenseEffect) { - StringBuilder sb = new StringBuilder(); - describeBlockEffect(defenseEffect, sb); - return sb.toString(); - } - public int getOverlayTileID() { switch (displayType) { case ItemType.DISPLAYTYPE_QUEST: diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java index a82d6d8..17af2a1 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ActorConditionsTypeParser.java @@ -1,6 +1,7 @@ package com.gpl.rpg.AndorsTrail.resource.parsers; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionType; +import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader; import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor; import com.gpl.rpg.AndorsTrail.util.Pair; @@ -17,6 +18,12 @@ public final class ActorConditionsTypeParser extends ResourceParserFor parseRow(String[] parts) { final String conditionTypeID = parts[0]; + + AbilityModifierTraits stats = null; + if (ResourceParserUtils.parseBoolean(parts[18], false)) { + stats = ResourceParserUtils.parseAbilityModifierTraits(parts, 19); + } + return new Pair(conditionTypeID, new ActorConditionType( conditionTypeID , parts[1] @@ -26,7 +33,7 @@ public final class ActorConditionsTypeParser extends ResourceParserFor addedConditions = new ArrayList(); tokenize2Fields.tokenizeArray(parts[startIndex + 12], addedConditions, actorConditionEffectParser_withoutDuration); - if ( boostMaxHP.length() <= 0 - && boostMaxAP.length() <= 0 - && moveCostPenalty.length() <= 0 - && combatTraits == null - && addedConditions.isEmpty() - ) { + if (stats == null && addedConditions.isEmpty()) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { L.log("OPTIMIZE: Tried to parseItemTraits_OnEquip , where hasEffect=" + parts[startIndex] + ", but all data was empty."); } return null; } else { - return new ItemTraits_OnEquip( - ResourceParserUtils.parseInt(boostMaxHP, 0) - ,ResourceParserUtils.parseInt(boostMaxAP, 0) - ,ResourceParserUtils.parseInt(moveCostPenalty, 0) - ,combatTraits - ,listToArray(addedConditions) - ); + return new ItemTraits_OnEquip(stats, listToArray(addedConditions)); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java index 3c47b3b..322349b 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ResourceParserUtils.java @@ -121,30 +121,47 @@ public final class ResourceParserUtils { } public static AbilityModifierTraits parseAbilityModifierTraits(String[] parts, int startIndex) { - boolean hasEffect = parseBoolean(parts[startIndex], false); - if (!hasEffect) return null; - - String boostMaxHP = parts[startIndex + 1]; - String boostMaxAP = parts[startIndex + 2]; - String moveCostPenalty = parts[startIndex + 3]; - CombatTraits combatTraits = parseCombatTraits(parts, startIndex + 4); + String increaseMaxHP = parts[startIndex + 0]; + String increaseMaxAP = parts[startIndex + 1]; + String increaseMoveCost = parts[startIndex + 2]; + String increaseAttackCost = parts[startIndex + 3]; + String increaseAttackChance = parts[startIndex + 4]; + String increaseBlockChance = parts[startIndex + 9]; + String increaseMinDamage = parts[startIndex + 7]; + String increaseMaxDamage = parts[startIndex + 8]; + String increaseCriticalSkill = parts[startIndex + 5]; + String setCriticalMultiplier = parts[startIndex + 6]; + String increaseDamageResistance = parts[startIndex + 10]; - if ( boostMaxHP.length() <= 0 - && boostMaxAP.length() <= 0 - && moveCostPenalty.length() <= 0 - && combatTraits == null + if ( increaseMaxHP.length() <= 0 + && increaseMaxAP.length() <= 0 + && increaseMoveCost.length() <= 0 + && increaseAttackCost.length() <= 0 + && increaseAttackChance.length() <= 0 + && increaseBlockChance.length() <= 0 + && increaseMinDamage.length() <= 0 + && increaseMaxDamage.length() <= 0 + && increaseCriticalSkill.length() <= 0 + && setCriticalMultiplier.length() <= 0 + && increaseDamageResistance.length() <= 0 ) { - if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { - L.log("OPTIMIZE: Tried to parseAbilityModifierTraits , where hasEffect=" + parts[startIndex] + ", but all data was empty."); - } return null; } else { return new AbilityModifierTraits( - parseInt(boostMaxHP, 0) - ,parseInt(boostMaxAP, 0) - ,parseInt(moveCostPenalty, 0) - ,combatTraits - ); + parseInt(increaseMaxHP, 0) + ,parseInt(increaseMaxAP, 0) + ,parseInt(increaseMoveCost, 0) + ,0 // increaseUseItemCost + ,0 // increaseReequipCost + ,parseInt(increaseAttackCost, 0) + ,parseInt(increaseAttackChance, 0) + ,parseInt(increaseBlockChance, 0) + ,parseInt(increaseMinDamage, 0) + ,parseInt(increaseMaxDamage, 0) + ,parseInt(increaseCriticalSkill, 0) + ,parseFloat(setCriticalMultiplier, 0) + ,parseInt(increaseDamageResistance, 0) + ); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java index df59cb2..ae3734b 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/AbilityModifierInfoView.java @@ -11,10 +11,18 @@ import android.widget.LinearLayout; import android.widget.TextView; public final class AbilityModifierInfoView extends LinearLayout { - private final TraitsInfoView abilitymodifierinfo_traits; private final TextView abilitymodifierinfo_change_maxap; private final TextView abilitymodifierinfo_change_maxhp; private final TextView abilitymodifierinfo_change_movecost; + private final TextView abilitymodifierinfo_change_use_cost; + private final TextView abilitymodifierinfo_change_reequip_cost; + private final TextView abilitymodifierinfo_change_attack_cost; + private final TextView abilitymodifierinfo_change_attack_chance; + private final TextView abilitymodifierinfo_change_attack_damage; + private final TextView abilitymodifierinfo_change_critical_skill; + private final TextView abilitymodifierinfo_change_critical_multiplier; + private final TextView abilitymodifierinfo_change_block_chance; + private final TextView abilitymodifierinfo_change_damage_resistance; public AbilityModifierInfoView(Context context, AttributeSet attr) { super(context, attr); @@ -22,44 +30,72 @@ public final class AbilityModifierInfoView extends LinearLayout { setOrientation(LinearLayout.VERTICAL); inflate(context, R.layout.abilitymodifierview, this); - abilitymodifierinfo_traits = (TraitsInfoView) findViewById(R.id.abilitymodifierinfo_traits); abilitymodifierinfo_change_maxap = (TextView) findViewById(R.id.abilitymodifierinfo_change_maxap); abilitymodifierinfo_change_maxhp = (TextView) findViewById(R.id.abilitymodifierinfo_change_maxhp); abilitymodifierinfo_change_movecost = (TextView) findViewById(R.id.abilitymodifierinfo_change_movecost); + abilitymodifierinfo_change_use_cost = (TextView) findViewById(R.id.abilitymodifierinfo_change_use_cost); + abilitymodifierinfo_change_reequip_cost = (TextView) findViewById(R.id.abilitymodifierinfo_change_reequip_cost); + abilitymodifierinfo_change_attack_cost = (TextView) findViewById(R.id.abilitymodifierinfo_change_attack_cost); + abilitymodifierinfo_change_attack_chance = (TextView) findViewById(R.id.abilitymodifierinfo_change_attack_chance); + abilitymodifierinfo_change_attack_damage = (TextView) findViewById(R.id.abilitymodifierinfo_change_attack_damage); + abilitymodifierinfo_change_critical_skill = (TextView) findViewById(R.id.abilitymodifierinfo_change_critical_skill); + abilitymodifierinfo_change_critical_multiplier = (TextView) findViewById(R.id.abilitymodifierinfo_change_critical_multiplier); + abilitymodifierinfo_change_block_chance = (TextView) findViewById(R.id.abilitymodifierinfo_change_block_chance); + abilitymodifierinfo_change_damage_resistance = (TextView) findViewById(R.id.abilitymodifierinfo_change_damage_resistance); } - public void update(AbilityModifierTraits traits) { + public void update(AbilityModifierTraits traits, boolean isWeapon) { + for(int i = 0; i < getChildCount(); ++i) { + getChildAt(i).setVisibility(View.GONE); + } + if (traits == null) return; + final Resources res = getResources(); - if (traits != null && traits.combatProficiency != null) { - abilitymodifierinfo_traits.update(traits); - abilitymodifierinfo_traits.setVisibility(View.VISIBLE); - } else { - abilitymodifierinfo_traits.setVisibility(View.GONE); - } + displayIfNonZero(traits.increaseMaxHP, abilitymodifierinfo_change_maxhp, R.string.iteminfo_effect_increase_max_hp, R.string.iteminfo_effect_decrease_max_hp); + displayIfNonZero(traits.increaseMaxAP, abilitymodifierinfo_change_maxap, R.string.iteminfo_effect_increase_max_ap, R.string.iteminfo_effect_decrease_max_ap); + displayIfNonZero(traits.increaseMoveCost, abilitymodifierinfo_change_movecost, R.string.iteminfo_effect_increase_movecost, R.string.iteminfo_effect_decrease_movecost); + displayIfNonZero(traits.increaseUseItemCost, abilitymodifierinfo_change_use_cost, R.string.iteminfo_effect_increase_use_cost, R.string.iteminfo_effect_decrease_use_cost); + displayIfNonZero(traits.increaseReequipCost, abilitymodifierinfo_change_reequip_cost, R.string.iteminfo_effect_increase_reequip_cost, R.string.iteminfo_effect_decrease_reequip_cost); + displayIfNonZero(traits.increaseCriticalSkill, abilitymodifierinfo_change_critical_skill, R.string.iteminfo_effect_increase_critical_skill, R.string.iteminfo_effect_decrease_critical_skill); + displayIfNonZero(traits.increaseBlockChance, abilitymodifierinfo_change_block_chance, R.string.iteminfo_effect_increase_block_chance, R.string.iteminfo_effect_decrease_block_chance); + displayIfNonZero(traits.increaseDamageResistance, abilitymodifierinfo_change_damage_resistance, R.string.iteminfo_effect_increase_damage_resistance, R.string.iteminfo_effect_decrease_damage_resistance); - if (traits != null && traits.maxAPBoost != 0) { - final int label = traits.maxAPBoost > 0 ? R.string.iteminfo_effect_increase_max_ap : R.string.iteminfo_effect_decrease_max_ap; - abilitymodifierinfo_change_maxap.setText(res.getString(label, Math.abs(traits.maxAPBoost))); - abilitymodifierinfo_change_maxap.setVisibility(View.VISIBLE); + if (isWeapon) { + abilitymodifierinfo_change_attack_cost.setText(res.getString(R.string.iteminfo_effect_weapon_attack_cost, traits.increaseAttackCost)); + abilitymodifierinfo_change_attack_cost.setVisibility(View.VISIBLE); + displayIfNonZero(traits.increaseAttackChance, abilitymodifierinfo_change_attack_chance, R.string.iteminfo_effect_weapon_attack_chance, R.string.iteminfo_effect_decrease_attack_chance); + + if (traits.setCriticalMultiplier != 0) { + abilitymodifierinfo_change_critical_multiplier.setText(res.getString(R.string.iteminfo_effect_critical_multiplier, Math.abs(traits.setCriticalMultiplier))); + abilitymodifierinfo_change_critical_multiplier.setVisibility(View.VISIBLE); + } } else { - abilitymodifierinfo_change_maxap.setVisibility(View.GONE); + displayIfNonZero(traits.increaseAttackCost, abilitymodifierinfo_change_attack_cost, R.string.iteminfo_effect_increase_attack_cost, R.string.iteminfo_effect_decrease_attack_cost); + displayIfNonZero(traits.increaseAttackChance, abilitymodifierinfo_change_attack_chance, R.string.iteminfo_effect_increase_attack_chance, R.string.iteminfo_effect_decrease_attack_chance); } - if (traits != null && traits.maxHPBoost != 0) { - final int label = traits.maxHPBoost > 0 ? R.string.iteminfo_effect_increase_max_hp : R.string.iteminfo_effect_decrease_max_hp; - abilitymodifierinfo_change_maxhp.setText(res.getString(label, Math.abs(traits.maxHPBoost))); - abilitymodifierinfo_change_maxhp.setVisibility(View.VISIBLE); - } else { - abilitymodifierinfo_change_maxhp.setVisibility(View.GONE); + if (traits.increaseMinDamage != 0 || traits.increaseMaxDamage != 0) { + if (traits.increaseMinDamage == traits.increaseMaxDamage) { + int label = R.string.iteminfo_effect_increase_attack_damage; + if (traits.increaseMinDamage < 0) label = R.string.iteminfo_effect_decrease_attack_damage; + else if (isWeapon) label = R.string.iteminfo_effect_weapon_attack_damage; + abilitymodifierinfo_change_attack_damage.setText(res.getString(label, Math.abs(traits.increaseMinDamage))); + } else { + int label = R.string.iteminfo_effect_increase_attack_damage_minmax; + if (traits.increaseMinDamage < 0) label = R.string.iteminfo_effect_decrease_attack_damage_minmax; + else if (isWeapon) label = R.string.iteminfo_effect_weapon_attack_damage_minmax; + abilitymodifierinfo_change_attack_damage.setText(res.getString(label, Math.abs(traits.increaseMinDamage), Math.abs(traits.increaseMaxDamage))); + } + abilitymodifierinfo_change_attack_damage.setVisibility(View.VISIBLE); } + } + + private void displayIfNonZero(int statChange, TextView textView, int stringresource_increase, int stringresource_decrease) { + if (statChange == 0) return; - if (traits != null && traits.moveCostPenalty != 0) { - final int label = traits.moveCostPenalty > 0 ? R.string.iteminfo_effect_increase_movecost : R.string.iteminfo_effect_decrease_movecost; - abilitymodifierinfo_change_movecost.setText(res.getString(label, Math.abs(traits.moveCostPenalty))); - abilitymodifierinfo_change_movecost.setVisibility(View.VISIBLE); - } else { - abilitymodifierinfo_change_movecost.setVisibility(View.GONE); - } + final int label = statChange > 0 ? stringresource_increase : stringresource_decrease; + textView.setText(getResources().getString(label, Math.abs(statChange))); + textView.setVisibility(View.VISIBLE); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java index 2e3eba4..9467fb4 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemContainerAdapter.java @@ -8,6 +8,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.gpl.rpg.AndorsTrail.R; +import com.gpl.rpg.AndorsTrail.controller.ItemController; import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; import com.gpl.rpg.AndorsTrail.model.item.ItemContainer.ItemEntry; import com.gpl.rpg.AndorsTrail.resource.tiles.TileCollection; @@ -36,7 +37,7 @@ public final class ItemContainerAdapter extends ArrayAdapter { } tileManager.setImageViewTile((ImageView) result.findViewById(R.id.inv_image), item.itemType, tileCollection); - ((TextView) result.findViewById(R.id.inv_text)).setText(item.itemType.describeWearEffect(item.quantity)); + ((TextView) result.findViewById(R.id.inv_text)).setText(ItemController.describeItemForListView(item)); return result; } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView.java index f97e981..2831948 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView.java @@ -46,23 +46,26 @@ public final class ItemEffectsView extends LinearLayout { ItemTraits_OnEquip effects_equip, Collection effects_use, Collection effects_hit, - Collection effects_kill + Collection effects_kill, + boolean isWeapon ) { + itemeffect_onequip_title.setVisibility(View.GONE); + itemeffect_onequip_abilitymodifierinfo.setVisibility(View.GONE); + itemeffect_onequip_conditions.update(null); if (effects_equip != null) { itemeffect_onequip_title.setVisibility(View.VISIBLE); - } else { - itemeffect_onequip_title.setVisibility(View.GONE); - } - - itemeffect_onequip_abilitymodifierinfo.update(effects_equip); + + if (effects_equip.stats != null) { + itemeffect_onequip_abilitymodifierinfo.update(effects_equip.stats, isWeapon); + itemeffect_onequip_abilitymodifierinfo.setVisibility(View.VISIBLE); + } - if (effects_equip != null && effects_equip.addedConditions != null) { - itemeffect_onequip_conditions.update(Arrays.asList(effects_equip.addedConditions)); - } else { - itemeffect_onequip_conditions.update(null); + if (effects_equip.addedConditions != null) { + itemeffect_onequip_conditions.update(Arrays.asList(effects_equip.addedConditions)); + } } - + itemeffect_onuse.update(effects_use); if (effects_use != null) { itemeffect_onuse_title.setVisibility(View.VISIBLE); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java index d1fb9de..f4817d4 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ShopItemContainerAdapter.java @@ -48,7 +48,7 @@ public final class ShopItemContainerAdapter extends ArrayAdapter { } tileManager.setImageViewTile((ImageView) result.findViewById(R.id.shopitem_image), itemType, tileCollection); - ((TextView) result.findViewById(R.id.shopitem_text)).setText(itemType.describeWearEffect(item.quantity)); + ((TextView) result.findViewById(R.id.shopitem_text)).setText(ItemController.describeItemForListView(item)); Button b = (Button) result.findViewById(R.id.shopitem_shopbutton); if (isSelling) { b.setText(r.getString(R.string.shop_sellitem, ItemController.getSellingPrice(player, itemType))); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java index a076bcc..a69bf7f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java @@ -2,7 +2,6 @@ package com.gpl.rpg.AndorsTrail.view; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.model.CombatTraits; -import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; import com.gpl.rpg.AndorsTrail.model.actor.Actor; import com.gpl.rpg.AndorsTrail.model.actor.ActorTraits; @@ -60,7 +59,6 @@ public class TraitsInfoView extends TableLayout { public void update(Actor actor) { update(actor.combatTraits, true); } public void update(ActorTraits actorTraits) { update(actorTraits.baseCombatTraits, true); } - public void update(AbilityModifierTraits traits) { update(traits.combatProficiency, false); } private void update(CombatTraits traits, boolean showEffectiveCriticalChance) { if (traits != null && traits.attackCost != 0) { traitsinfo_attack_row1.setVisibility(View.VISIBLE);