From a50c1a12799b426f0fe00f40eadf22d1d855cfed Mon Sep 17 00:00:00 2001 From: Oskar Wiksten Date: Thu, 8 Nov 2012 23:42:27 +0100 Subject: [PATCH] Actor traits refactoring - Reworked UI for displaying the actor stats tableview. --- AndorsTrail/res/layout/basetraitsinfoview.xml | 19 --- AndorsTrail/res/layout/heroinfo_stats.xml | 107 +++++++----- AndorsTrail/res/layout/monsterinfo.xml | 26 +-- AndorsTrail/res/layout/traitsinfoview.xml | 67 +++----- AndorsTrail/res/values/strings.xml | 7 +- .../values/{ui_theme.xml => ui_styles.xml} | 4 + .../com/gpl/rpg/AndorsTrail/Savegames.java | 2 +- .../activity/HeroinfoActivity_Stats.java | 79 +++++---- .../AndorsTrail/activity/LevelUpActivity.java | 3 +- .../activity/MonsterInfoActivity.java | 42 ++--- .../controller/ActorStatsController.java | 7 +- .../AndorsTrail/controller/Controller.java | 2 +- .../controller/ItemController.java | 4 +- .../rpg/AndorsTrail/model/actor/Actor.java | 4 - .../rpg/AndorsTrail/model/actor/Player.java | 5 +- .../AndorsTrail/view/BaseTraitsInfoView.java | 33 ---- .../rpg/AndorsTrail/view/TraitsInfoView.java | 161 +++++++++--------- 17 files changed, 271 insertions(+), 301 deletions(-) delete mode 100644 AndorsTrail/res/layout/basetraitsinfoview.xml rename AndorsTrail/res/values/{ui_theme.xml => ui_styles.xml} (90%) delete mode 100644 AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/BaseTraitsInfoView.java diff --git a/AndorsTrail/res/layout/basetraitsinfoview.xml b/AndorsTrail/res/layout/basetraitsinfoview.xml deleted file mode 100644 index 29e0fbf9f..000000000 --- a/AndorsTrail/res/layout/basetraitsinfoview.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/AndorsTrail/res/layout/heroinfo_stats.xml b/AndorsTrail/res/layout/heroinfo_stats.xml index 990fecc8a..5a53ab869 100644 --- a/AndorsTrail/res/layout/heroinfo_stats.xml +++ b/AndorsTrail/res/layout/heroinfo_stats.xml @@ -15,7 +15,9 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical" > + android:orientation="vertical" + android:id="@+id/heroinfo_container" + > - + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + android:text="@string/actorinfo_basetraits" + /> - + + + + + + + + + + + + + + + + + + + diff --git a/AndorsTrail/res/layout/monsterinfo.xml b/AndorsTrail/res/layout/monsterinfo.xml index ef76a987c..710ebc891 100644 --- a/AndorsTrail/res/layout/monsterinfo.xml +++ b/AndorsTrail/res/layout/monsterinfo.xml @@ -16,6 +16,7 @@ android:layout_height="wrap_content" android:orientation="vertical" android:padding="@dimen/dialog_margin" + android:id="@+id/monsterinfo_container" > - - + android:id="@+id/actorinfo_stats_table" + > + + + + + + + @@ -75,11 +77,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/actorinfo_currentconditions" - android:id="@+id/monsterinfo_currentconditions_title" + android:id="@+id/actorinfo_currentconditions_title" android:layout_marginTop="@dimen/section_margin" /> diff --git a/AndorsTrail/res/layout/traitsinfoview.xml b/AndorsTrail/res/layout/traitsinfoview.xml index c9f5c6e42..e3c869792 100644 --- a/AndorsTrail/res/layout/traitsinfoview.xml +++ b/AndorsTrail/res/layout/traitsinfoview.xml @@ -1,56 +1,45 @@ - - - - + + + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - + + + + \ No newline at end of file diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml index 08fe4cd88..075c1ca2f 100644 --- a/AndorsTrail/res/values/strings.xml +++ b/AndorsTrail/res/values/strings.xml @@ -559,5 +559,10 @@ Confirm overwriting savegames Gives a question about whether you want to overwrite when saving to a savegame slot that already contains a savegame. - + + + + Re-equip cost (AP): + Use item cost (AP): + diff --git a/AndorsTrail/res/values/ui_theme.xml b/AndorsTrail/res/values/ui_styles.xml similarity index 90% rename from AndorsTrail/res/values/ui_theme.xml rename to AndorsTrail/res/values/ui_styles.xml index ebe0c7fef..32324a9b4 100644 --- a/AndorsTrail/res/values/ui_theme.xml +++ b/AndorsTrail/res/values/ui_styles.xml @@ -34,4 +34,8 @@ wrap_content wrap_content + + \ No newline at end of file diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java index 89e93b4ff..6e6ccd1a6 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/Savegames.java @@ -127,7 +127,7 @@ public final class Savegames { } private static void onWorldLoaded(WorldContext world) { - ActorStatsController.recalculatePlayerCombatTraits(world.model.player); + ActorStatsController.recalculatePlayerStats(world.model.player); Controller.resetMapsNotRecentlyVisited(world); MovementController.moveBlockedActors(world); } 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 e223b2899..befcb3b0d 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Stats.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity_Stats.java @@ -10,8 +10,6 @@ import com.gpl.rpg.AndorsTrail.model.actor.Player; import com.gpl.rpg.AndorsTrail.model.item.Inventory; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.model.item.ItemType; -import com.gpl.rpg.AndorsTrail.view.ActorConditionList; -import com.gpl.rpg.AndorsTrail.view.BaseTraitsInfoView; import com.gpl.rpg.AndorsTrail.view.ItemEffectsView; import com.gpl.rpg.AndorsTrail.view.RangeBar; import com.gpl.rpg.AndorsTrail.view.TraitsInfoView; @@ -21,7 +19,9 @@ import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; +import android.view.ViewGroup; import android.widget.Button; +import android.widget.TableLayout; import android.widget.TextView; public final class HeroinfoActivity_Stats extends Activity { @@ -31,16 +31,19 @@ public final class HeroinfoActivity_Stats extends Activity { private Button levelUpButton; private TextView heroinfo_ap; - private TextView heroinfo_movecost; - private TraitsInfoView heroinfo_currenttraits; - private ItemEffectsView heroinfo_itemeffects; - private TextView heroinfo_currentconditions_title; - private ActorConditionList heroinfo_currentconditions; + private TextView heroinfo_reequip_cost; + private TextView heroinfo_useitem_cost; private TextView heroinfo_level; private TextView heroinfo_totalexperience; + private TextView basetraitsinfo_max_hp; + private TextView basetraitsinfo_max_ap; + private TextView heroinfo_base_reequip_cost; + private TextView heroinfo_base_useitem_cost; private RangeBar rangebar_hp; private RangeBar rangebar_exp; - private BaseTraitsInfoView heroinfo_basetraits; + private ItemEffectsView actorinfo_onhiteffects; + private TableLayout heroinfo_basestats_table; + private ViewGroup heroinfo_container; @Override public void onCreate(Bundle savedInstanceState) { @@ -55,15 +58,20 @@ public final class HeroinfoActivity_Stats extends Activity { TextView tv = (TextView) findViewById(R.id.heroinfo_title); tv.setText(player.getName()); world.tileManager.setImageViewTile(tv, player); + + heroinfo_container = (ViewGroup) findViewById(R.id.heroinfo_container); heroinfo_ap = (TextView) findViewById(R.id.heroinfo_ap); - heroinfo_movecost = (TextView) findViewById(R.id.heroinfo_movecost); - heroinfo_currenttraits = (TraitsInfoView) findViewById(R.id.heroinfo_currenttraits); - heroinfo_itemeffects = (ItemEffectsView) findViewById(R.id.heroinfo_itemeffects); - heroinfo_currentconditions_title = (TextView) findViewById(R.id.heroinfo_currentconditions_title); - heroinfo_currentconditions = (ActorConditionList) findViewById(R.id.heroinfo_currentconditions); + heroinfo_reequip_cost = (TextView) findViewById(R.id.heroinfo_reequip_cost); + heroinfo_useitem_cost = (TextView) findViewById(R.id.heroinfo_useitem_cost); + basetraitsinfo_max_hp = (TextView) findViewById(R.id.basetraitsinfo_max_hp); + basetraitsinfo_max_ap = (TextView) findViewById(R.id.basetraitsinfo_max_ap); + heroinfo_base_reequip_cost = (TextView) findViewById(R.id.heroinfo_base_reequip_cost); + heroinfo_base_useitem_cost = (TextView) findViewById(R.id.heroinfo_base_useitem_cost); heroinfo_level = (TextView) findViewById(R.id.heroinfo_level); heroinfo_totalexperience = (TextView) findViewById(R.id.heroinfo_totalexperience); - + actorinfo_onhiteffects = (ItemEffectsView) findViewById(R.id.actorinfo_onhiteffects); + heroinfo_basestats_table = (TableLayout) findViewById(R.id.heroinfo_basestats_table); + rangebar_hp = (RangeBar) findViewById(R.id.heroinfo_healthbar); rangebar_hp.init(R.drawable.ui_progress_health, R.string.status_hp); rangebar_exp = (RangeBar) findViewById(R.id.heroinfo_expbar); @@ -81,8 +89,6 @@ public final class HeroinfoActivity_Stats extends Activity { levelUpButton.setEnabled(false); } }); - - heroinfo_basetraits = (BaseTraitsInfoView) findViewById(R.id.heroinfo_basetraits); } @Override @@ -90,7 +96,6 @@ public final class HeroinfoActivity_Stats extends Activity { super.onResume(); updateTraits(); updateLevelup(); - updateConditions(); } @Override @@ -105,17 +110,35 @@ public final class HeroinfoActivity_Stats extends Activity { private void updateLevelup() { levelUpButton.setEnabled(player.canLevelup()); } - + private void updateTraits() { heroinfo_level.setText(Integer.toString(player.getLevel())); heroinfo_totalexperience.setText(Integer.toString(player.getTotalExperience())); heroinfo_ap.setText(player.ap.toString()); - heroinfo_movecost.setText(Integer.toString(player.getMoveCost())); + heroinfo_reequip_cost.setText(Integer.toString(player.getReequipCost())); + heroinfo_useitem_cost.setText(Integer.toString(player.getUseItemCost())); + basetraitsinfo_max_hp.setText(Integer.toString(player.baseTraits.maxHP)); + basetraitsinfo_max_ap.setText(Integer.toString(player.baseTraits.maxAP)); + heroinfo_base_reequip_cost.setText(Integer.toString(player.baseTraits.reequipCost)); + heroinfo_base_useitem_cost.setText(Integer.toString(player.baseTraits.useItemCost)); rangebar_hp.update(player.health); rangebar_exp.update(player.levelExperience); - heroinfo_currenttraits.update(player); - ArrayList effects_hit = new ArrayList(); + TraitsInfoView.update(heroinfo_container, player); + TraitsInfoView.updateTraitsTable( + heroinfo_basestats_table + , player.baseTraits.moveCost + , player.baseTraits.attackCost + , player.baseTraits.attackChance + , player.baseTraits.damagePotential + , player.baseTraits.criticalSkill + , player.baseTraits.criticalMultiplier + , player.baseTraits.blockChance + , player.baseTraits.damageResistance + , false + ); + + ArrayList effects_hit = new ArrayList(); ArrayList effects_kill = new ArrayList(); for (int i = 0; i < Inventory.NUM_WORN_SLOTS; ++i) { ItemType type = player.inventory.wear[i]; @@ -125,18 +148,6 @@ 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, false); - heroinfo_basetraits.update(player.baseTraits); + actorinfo_onhiteffects.update(null, null, effects_hit, effects_kill, false); } - - private void updateConditions() { - if (player.conditions.isEmpty()) { - heroinfo_currentconditions_title.setVisibility(View.GONE); - heroinfo_currentconditions.setVisibility(View.GONE); - } else { - heroinfo_currentconditions_title.setVisibility(View.VISIBLE); - heroinfo_currentconditions.setVisibility(View.VISIBLE); - heroinfo_currentconditions.update(player.conditions); - } - } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java index 8ce0a6ad3..973bdbc28 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/LevelUpActivity.java @@ -138,7 +138,6 @@ public final class LevelUpActivity extends Activity { player.baseTraits.maxHP += hpIncrease; player.health.current += hpIncrease; - player.recalculateLevelExperience(); - ActorStatsController.recalculatePlayerCombatTraits(player); + ActorStatsController.recalculatePlayerStats(player); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java index 766fd26ac..21069760b 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MonsterInfoActivity.java @@ -6,7 +6,6 @@ import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.context.WorldContext; import com.gpl.rpg.AndorsTrail.controller.CombatController; import com.gpl.rpg.AndorsTrail.model.actor.Monster; -import com.gpl.rpg.AndorsTrail.view.ActorConditionList; import com.gpl.rpg.AndorsTrail.view.ItemEffectsView; import com.gpl.rpg.AndorsTrail.view.RangeBar; import com.gpl.rpg.AndorsTrail.view.TraitsInfoView; @@ -14,6 +13,7 @@ import com.gpl.rpg.AndorsTrail.view.TraitsInfoView; import android.app.Activity; import android.os.Bundle; import android.view.View; +import android.view.ViewGroup; import android.view.Window; import android.view.View.OnClickListener; import android.widget.Button; @@ -21,16 +21,16 @@ import android.widget.TextView; public final class MonsterInfoActivity extends Activity { - private TextView monsterinfo_title; - private TextView monsterinfo_difficulty; - private TraitsInfoView monsterinfo_currenttraits; - private ItemEffectsView monsterinfo_onhiteffects; - private TextView monsterinfo_currentconditions_title; - private TextView monsterinfo_immune_criticals; - private ActorConditionList monsterinfo_currentconditions; - private RangeBar hp; private WorldContext world; + private TextView monsterinfo_title; + private TextView monsterinfo_difficulty; + private ItemEffectsView monsterinfo_onhiteffects; + private RangeBar hp; + private ViewGroup monsterinfo_container; + private TextView monsterinfo_max_ap; + + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -43,7 +43,7 @@ public final class MonsterInfoActivity extends Activity { monsterinfo_title = (TextView) findViewById(R.id.monsterinfo_title); monsterinfo_difficulty = (TextView) findViewById(R.id.monsterinfo_difficulty); - monsterinfo_immune_criticals = (TextView) findViewById(R.id.monsterinfo_immune_criticals); + monsterinfo_max_ap = (TextView) findViewById(R.id.monsterinfo_max_ap); Button b = (Button) findViewById(R.id.monsterinfo_close); b.setOnClickListener(new OnClickListener() { @@ -53,12 +53,10 @@ public final class MonsterInfoActivity extends Activity { } }); - monsterinfo_currenttraits = (TraitsInfoView) findViewById(R.id.monsterinfo_currenttraits); - monsterinfo_onhiteffects = (ItemEffectsView) findViewById(R.id.monsterinfo_onhiteffects); - monsterinfo_currentconditions_title = (TextView) findViewById(R.id.monsterinfo_currentconditions_title); - monsterinfo_currentconditions = (ActorConditionList) findViewById(R.id.monsterinfo_currentconditions); + monsterinfo_onhiteffects = (ItemEffectsView) findViewById(R.id.actorinfo_onhiteffects); hp = (RangeBar) findViewById(R.id.monsterinfo_healthbar); hp.init(R.drawable.ui_progress_health, R.string.status_hp); + monsterinfo_container = (ViewGroup) findViewById(R.id.monsterinfo_container); } @Override @@ -73,7 +71,6 @@ public final class MonsterInfoActivity extends Activity { updateTitle(monster); updateTraits(monster); - updateConditions(monster); } private void updateTitle(Monster monster) { @@ -83,7 +80,7 @@ public final class MonsterInfoActivity extends Activity { } private void updateTraits(Monster monster) { - monsterinfo_currenttraits.update(monster); + TraitsInfoView.update(monsterinfo_container, monster); monsterinfo_onhiteffects.update( null, null, @@ -91,7 +88,7 @@ public final class MonsterInfoActivity extends Activity { null, false); hp.update(monster.health); - monsterinfo_immune_criticals.setVisibility(monster.isImmuneToCriticalHits() ? View.VISIBLE : View.GONE); + monsterinfo_max_ap.setText(Integer.toString(monster.ap.max)); } public static int getMonsterDifficultyResource(WorldContext world, Monster monster) { @@ -103,15 +100,4 @@ public final class MonsterInfoActivity extends Activity { else if (difficulty == 0) return R.string.monster_difficulty_impossible; else return R.string.monster_difficulty_veryhard; } - - private void updateConditions(Monster monster) { - if (monster.conditions.isEmpty()) { - monsterinfo_currentconditions_title.setVisibility(View.GONE); - monsterinfo_currentconditions.setVisibility(View.GONE); - } else { - monsterinfo_currentconditions_title.setVisibility(View.VISIBLE); - monsterinfo_currentconditions.setVisibility(View.VISIBLE); - monsterinfo_currentconditions.update(monster.conditions); - } - } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java index 8f8385cae..007b5c5b3 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java @@ -185,8 +185,9 @@ public class ActorStatsController { if (actor.damagePotential.max < 0) actor.damagePotential.set(0, 0); } - public static void recalculatePlayerCombatTraits(Player player) { + public static void recalculatePlayerStats(Player player) { player.resetStatsToBaseTraits(); + player.recalculateLevelExperience(); ItemController.applyInventoryEffects(player); SkillController.applySkillEffects(player); applyEffectsFromCurrentConditions(player); @@ -201,7 +202,7 @@ public class ActorStatsController { monster.ap.capAtMax(); } private static void recalculateActorCombatTraits(Actor actor) { - if (actor.isPlayer) recalculatePlayerCombatTraits((Player) actor); + if (actor.isPlayer) recalculatePlayerStats((Player) actor); else recalculateMonsterCombatTraits((Monster) actor); } @@ -232,7 +233,7 @@ public class ActorStatsController { player.conditions.remove(i); player.conditionListener.onActorConditionRemoved(player, c); } - recalculatePlayerCombatTraits(player); + recalculatePlayerStats(player); } } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java index f2ed76c73..4672b3f75 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/Controller.java @@ -78,7 +78,7 @@ public final class Controller { public static void playerRested(final WorldContext world, MapObject area) { final Player player = world.model.player; ActorStatsController.removeAllTemporaryConditions(player); - ActorStatsController.recalculatePlayerCombatTraits(player); + ActorStatsController.recalculatePlayerStats(player); player.setMaxAP(); player.setMaxHP(); if (area != null) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java index 0a5dd35a3..7ad6e2636 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java @@ -53,7 +53,7 @@ public final class ItemController { player.inventory.wear[slot] = type; ActorStatsController.addConditionsFromEquippedItem(player, type); - ActorStatsController.recalculatePlayerCombatTraits(player); + ActorStatsController.recalculatePlayerStats(player); } public void unequipSlot(ItemType type, int slot) { @@ -66,7 +66,7 @@ public final class ItemController { } unequipSlot(player, slot); - ActorStatsController.recalculatePlayerCombatTraits(player); + ActorStatsController.recalculatePlayerStats(player); } private static void unequipSlot(Player player, int slot) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java index 3549e4140..ee39db03c 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java @@ -60,9 +60,6 @@ public class Actor { public ItemTraits_OnUse[] getOnHitEffects() { return onHitEffects; } public List getOnHitEffectsAsList() { return onHitEffects == null ? null : Arrays.asList(onHitEffects); } - public boolean hasAttackChanceEffect_() { return getAttackChance() != 0; } - public boolean hasAttackDamageEffect_() { return getDamagePotential().max != 0; } - public boolean hasBlockEffect_() { return getBlockChance() != 0; } public boolean hasCriticalSkillEffect() { return getCriticalSkill() != 0; } public boolean hasCriticalMultiplierEffect() { float m = getCriticalMultiplier(); return m != 0 && m != 1; } public boolean hasCriticalAttacks() { return hasCriticalSkillEffect() && hasCriticalMultiplierEffect(); } @@ -75,7 +72,6 @@ public class Actor { if (v < 0) return 0; return v; } - public boolean isDead() { return health.current <= 0; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java index 24733f0a1..2a551243a 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java @@ -126,7 +126,6 @@ public final class Player extends Actor { this.skillLevels.clear(); this.availableSkillIncreases = 0; this.alignments.clear(); - recalculateLevelExperience(); Loot startItems = new Loot(); dropLists.getDropList(DropListCollection.DROPLIST_STARTITEMS).createRandomLoot(startItems, this); @@ -140,7 +139,7 @@ public final class Player extends Actor { this.spawnPlace = "rest"; } - ActorStatsController.recalculatePlayerCombatTraits(this); + ActorStatsController.recalculatePlayerStats(this); } public boolean hasExactQuestProgress(QuestProgress progress) { return hasExactQuestProgress(progress.questID, progress.progress); } @@ -193,7 +192,7 @@ public final class Player extends Actor { } public void addSkillLevel(int skillID) { skillLevels.put(skillID, skillLevels.get(skillID) + 1); - ActorStatsController.recalculatePlayerCombatTraits(this); + ActorStatsController.recalculatePlayerStats(this); } public boolean nextLevelAddsNewSkillpoint() { return thisLevelAddsNewSkillpoint(level + 1); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/BaseTraitsInfoView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/BaseTraitsInfoView.java deleted file mode 100644 index b8435ae46..000000000 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/BaseTraitsInfoView.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.gpl.rpg.AndorsTrail.view; - -import com.gpl.rpg.AndorsTrail.R; -import com.gpl.rpg.AndorsTrail.model.actor.Player.PlayerBaseTraits; - -import android.content.Context; -import android.util.AttributeSet; -import android.widget.TextView; - -public final class BaseTraitsInfoView extends TraitsInfoView { - private final TextView basetraitsinfo_max_hp; - private final TextView basetraitsinfo_max_ap; - - public BaseTraitsInfoView(Context context, AttributeSet attr) { - super(context, attr, R.layout.basetraitsinfoview); - - basetraitsinfo_max_hp = (TextView) findViewById(R.id.basetraitsinfo_max_hp); - basetraitsinfo_max_ap = (TextView) findViewById(R.id.basetraitsinfo_max_ap); - } - - public void update(PlayerBaseTraits traits) { - super.update( - traits.attackCost - ,traits.attackChance - ,traits.damagePotential - ,traits.criticalSkill - ,traits.criticalMultiplier - ,traits.blockChance - ,traits.damageResistance); - basetraitsinfo_max_hp.setText(Integer.toString(traits.maxHP)); - basetraitsinfo_max_ap.setText(Integer.toString(traits.maxAP)); - } -} diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java index 98294835f..8a13a6ddd 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/TraitsInfoView.java @@ -4,125 +4,126 @@ import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.model.actor.Actor; import com.gpl.rpg.AndorsTrail.util.Range; -import android.content.Context; -import android.util.AttributeSet; import android.view.View; +import android.view.ViewGroup; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; -public class TraitsInfoView extends TableLayout { - private final TableRow traitsinfo_attack_row1; - private final TableRow traitsinfo_attack_row2; - private final TableRow traitsinfo_attack_row3; - private final TableRow traitsinfo_critical_row1; - private final TableRow traitsinfo_critical_row2; - private final TableRow traitsinfo_critical_row3; - private final TableRow traitsinfo_defense_row1; - private final TableRow traitsinfo_defense_row2; - private final TextView traitsinfo_attack_cost; - private final TextView traitsinfo_attack_chance; - private final TextView traitsinfo_attack_damage; - private final TextView traitsinfo_criticalhit_skill; - private final TextView traitsinfo_criticalhit_multiplier; - private final TextView traitsinfo_criticalhit_effectivechance; - private final TextView traitsinfo_defense_chance; - private final TextView traitsinfo_defense_damageresist; +public final class TraitsInfoView { - public TraitsInfoView(Context context, AttributeSet attr) { - this(context, attr, R.layout.traitsinfoview); - } - - public TraitsInfoView(Context context, AttributeSet attr, int layoutResourceID) { - super(context, attr); - setFocusable(false); - inflate(context, layoutResourceID, this); - - traitsinfo_attack_row1 = (TableRow) findViewById(R.id.traitsinfo_attack_row1); - traitsinfo_attack_row2 = (TableRow) findViewById(R.id.traitsinfo_attack_row2); - traitsinfo_attack_row3 = (TableRow) findViewById(R.id.traitsinfo_attack_row3); - traitsinfo_critical_row1 = (TableRow) findViewById(R.id.traitsinfo_critical_row1); - traitsinfo_critical_row2 = (TableRow) findViewById(R.id.traitsinfo_critical_row2); - traitsinfo_critical_row3 = (TableRow) findViewById(R.id.traitsinfo_critical_row3); - traitsinfo_defense_row1 = (TableRow) findViewById(R.id.traitsinfo_defense_row1); - traitsinfo_defense_row2 = (TableRow) findViewById(R.id.traitsinfo_defense_row2); - traitsinfo_attack_cost = (TextView) findViewById(R.id.traitsinfo_attack_cost); - traitsinfo_attack_chance = (TextView) findViewById(R.id.traitsinfo_attack_chance); - traitsinfo_attack_damage = (TextView) findViewById(R.id.traitsinfo_attack_damage); - traitsinfo_criticalhit_skill = (TextView) findViewById(R.id.traitsinfo_criticalhit_skill); - traitsinfo_criticalhit_multiplier = (TextView) findViewById(R.id.traitsinfo_criticalhit_multiplier); - traitsinfo_criticalhit_effectivechance = (TextView) findViewById(R.id.traitsinfo_criticalhit_effectivechance); - traitsinfo_defense_chance = (TextView) findViewById(R.id.traitsinfo_defense_chance); - traitsinfo_defense_damageresist = (TextView) findViewById(R.id.traitsinfo_defense_damageresist); - } - - public void update(Actor actor) { - update( - actor.getAttackCost() + public static void update(ViewGroup group, Actor actor) { + TableLayout actorinfo_stats_table = (TableLayout) group.findViewById(R.id.actorinfo_stats_table); + + updateTraitsTable( + actorinfo_stats_table + ,actor.getMoveCost() + ,actor.getAttackCost() ,actor.getAttackChance() ,actor.getDamagePotential() ,actor.getCriticalSkill() ,actor.getCriticalMultiplier() ,actor.getBlockChance() - ,actor.getDamageResistance()); + ,actor.getDamageResistance() + ,actor.isImmuneToCriticalHits()); + + TextView actorinfo_currentconditions_title = (TextView) group.findViewById(R.id.actorinfo_currentconditions_title); + ActorConditionList actorinfo_currentconditions = (ActorConditionList) group.findViewById(R.id.actorinfo_currentconditions); + if (actor.conditions.isEmpty()) { + actorinfo_currentconditions_title.setVisibility(View.GONE); + actorinfo_currentconditions.setVisibility(View.GONE); + } else { + actorinfo_currentconditions_title.setVisibility(View.VISIBLE); + actorinfo_currentconditions.setVisibility(View.VISIBLE); + actorinfo_currentconditions.update(actor.conditions); + } } - public void update( - int attackCost + public static void updateTraitsTable( + ViewGroup group + ,int moveCost + ,int attackCost ,int attackChance ,Range damagePotential ,int criticalSkill ,float criticalMultiplier ,int blockChance ,int damageResistance - ) { - if (attackCost != 0) { - traitsinfo_attack_row1.setVisibility(View.VISIBLE); - traitsinfo_attack_cost.setText(Integer.toString(attackCost)); - } else { - traitsinfo_attack_row1.setVisibility(View.GONE); - } + ,boolean isImmuneToCriticalHits + ) { + TableRow row; + TextView tv; + + tv = (TextView) group.findViewById(R.id.traitsinfo_move_cost); + tv.setText(Integer.toString(moveCost)); + + tv = (TextView) group.findViewById(R.id.traitsinfo_attack_cost); + tv.setText(Integer.toString(attackCost)); + + row = (TableRow) group.findViewById(R.id.traitsinfo_attack_chance_row); if (attackChance != 0) { - traitsinfo_attack_row2.setVisibility(View.VISIBLE); - traitsinfo_attack_chance.setText(Integer.toString(attackChance) + "%"); + row.setVisibility(View.VISIBLE); + tv = (TextView) group.findViewById(R.id.traitsinfo_attack_chance); + tv.setText(Integer.toString(attackChance) + "%"); } else { - traitsinfo_attack_row2.setVisibility(View.GONE); + row.setVisibility(View.GONE); } + + row = (TableRow) group.findViewById(R.id.traitsinfo_attack_damage_row); if (damagePotential != null && damagePotential.max != 0) { - traitsinfo_attack_row3.setVisibility(View.VISIBLE); - traitsinfo_attack_damage.setText(damagePotential.toMinMaxString()); + row.setVisibility(View.VISIBLE); + tv = (TextView) group.findViewById(R.id.traitsinfo_attack_damage); + tv.setText(damagePotential.toMinMaxString()); } else { - traitsinfo_attack_row3.setVisibility(View.GONE); + row.setVisibility(View.GONE); } + + row = (TableRow) group.findViewById(R.id.traitsinfo_criticalhit_skill_row); if (criticalSkill != 0) { - traitsinfo_critical_row1.setVisibility(View.VISIBLE); - traitsinfo_criticalhit_skill.setText(Integer.toString(criticalSkill)); + row.setVisibility(View.VISIBLE); + tv = (TextView) group.findViewById(R.id.traitsinfo_criticalhit_skill); + tv.setText(Integer.toString(criticalSkill)); } else { - traitsinfo_critical_row1.setVisibility(View.GONE); + row.setVisibility(View.GONE); } + + row = (TableRow) group.findViewById(R.id.traitsinfo_criticalhit_multiplier_row); if (criticalMultiplier != 0 && criticalMultiplier != 1) { - traitsinfo_critical_row2.setVisibility(View.VISIBLE); - traitsinfo_criticalhit_multiplier.setText(Float.toString(criticalMultiplier)); + row.setVisibility(View.VISIBLE); + tv = (TextView) group.findViewById(R.id.traitsinfo_criticalhit_multiplier); + tv.setText(Float.toString(criticalMultiplier)); } else { - traitsinfo_critical_row2.setVisibility(View.GONE); + row.setVisibility(View.GONE); } + + row = (TableRow) group.findViewById(R.id.traitsinfo_criticalhit_effectivechance_row); if (criticalSkill != 0 && criticalMultiplier != 0 && criticalMultiplier != 1) { - traitsinfo_critical_row3.setVisibility(View.VISIBLE); - traitsinfo_criticalhit_effectivechance.setText(Integer.toString(Actor.getEffectiveCriticalChance(criticalSkill)) + "%"); + row.setVisibility(View.VISIBLE); + tv = (TextView) group.findViewById(R.id.traitsinfo_criticalhit_effectivechance); + tv.setText(Integer.toString(Actor.getEffectiveCriticalChance(criticalSkill)) + "%"); } else { - traitsinfo_critical_row3.setVisibility(View.GONE); + row.setVisibility(View.GONE); } + + row = (TableRow) group.findViewById(R.id.traitsinfo_block_chance_row); if (blockChance != 0) { - traitsinfo_defense_row1.setVisibility(View.VISIBLE); - traitsinfo_defense_chance.setText(Integer.toString(blockChance) + "%"); + row.setVisibility(View.VISIBLE); + tv = (TextView) group.findViewById(R.id.traitsinfo_block_chance); + tv.setText(Integer.toString(blockChance) + "%"); } else { - traitsinfo_defense_row1.setVisibility(View.GONE); + row.setVisibility(View.GONE); } + + row = (TableRow) group.findViewById(R.id.traitsinfo_damageresist_row); if (damageResistance != 0) { - traitsinfo_defense_row2.setVisibility(View.VISIBLE); - traitsinfo_defense_damageresist.setText(Integer.toString(damageResistance)); + row.setVisibility(View.VISIBLE); + tv = (TextView) group.findViewById(R.id.traitsinfo_damageresist); + tv.setText(Integer.toString(damageResistance)); } else { - traitsinfo_defense_row2.setVisibility(View.GONE); + row.setVisibility(View.GONE); } + + row = (TableRow) group.findViewById(R.id.traitsinfo_is_immune_to_critical_hits_row); + row.setVisibility(isImmuneToCriticalHits ? View.VISIBLE : View.GONE); } }