Actor traits refactoring - Reworked UI for displaying the actor stats tableview.

This commit is contained in:
Oskar Wiksten
2012-11-08 23:42:27 +01:00
parent 2ac6762f2f
commit a50c1a1279
17 changed files with 271 additions and 301 deletions

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TableRow>
<TextView android:text="@string/traitsinfo_base_max_hp" android:layout_marginRight="10sp" />
<TextView android:id="@+id/basetraitsinfo_max_hp" />
</TableRow>
<TableRow>
<TextView android:text="@string/traitsinfo_base_max_ap" android:layout_marginRight="10sp" />
<TextView android:id="@+id/basetraitsinfo_max_ap" />
</TableRow>
<include layout="@layout/traitsinfoview" />
</merge>

View File

@@ -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"
>
<TextView
android:id="@+id/heroinfo_title"
@@ -32,24 +34,14 @@
android:layout_marginBottom="@dimen/section_margin" >
<TableRow>
<TextView android:layout_marginRight="10sp" android:text="@string/heroinfo_level" />
<TextView style="@style/traitsinfo_label" android:text="@string/heroinfo_level" />
<TextView android:id="@+id/heroinfo_level" android:text="1" />
</TableRow>
<TableRow>
<TextView android:layout_marginRight="10sp" android:text="@string/heroinfo_totalexperience" />
<TextView style="@style/traitsinfo_label" android:text="@string/heroinfo_totalexperience" />
<TextView android:id="@+id/heroinfo_totalexperience" android:text="1" />
</TableRow>
<TableRow>
<TextView android:layout_marginRight="10sp" android:text="@string/heroinfo_actionpoints" />
<TextView android:id="@+id/heroinfo_ap" android:text="10/10" />
</TableRow>
<TableRow>
<TextView android:layout_marginRight="10sp" android:text="@string/actorinfo_movecost" />
<TextView android:id="@+id/heroinfo_movecost" android:text="6" />
</TableRow>
</TableLayout>
<com.gpl.rpg.AndorsTrail.view.RangeBar
@@ -69,38 +61,75 @@
android:layout_marginTop="@dimen/section_margin"
android:text="@string/actorinfo_currenttraits" />
<com.gpl.rpg.AndorsTrail.view.TraitsInfoView
android:id="@+id/heroinfo_currenttraits"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.gpl.rpg.AndorsTrail.view.ItemEffectsView
android:id="@+id/heroinfo_itemeffects"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/heroinfo_currentconditions_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/section_margin"
android:text="@string/actorinfo_currentconditions" />
<com.gpl.rpg.AndorsTrail.view.ActorConditionList
android:id="@+id/heroinfo_currentconditions"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/actorinfo_stats_table"
>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/heroinfo_actionpoints" />
<TextView android:id="@+id/heroinfo_ap" />
</TableRow>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/heroinfo_reequip_cost" />
<TextView android:id="@+id/heroinfo_reequip_cost" />
</TableRow>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/heroinfo_useitem_cost" />
<TextView android:id="@+id/heroinfo_useitem_cost" />
</TableRow>
<include layout="@layout/traitsinfoview" />
</TableLayout>
<com.gpl.rpg.AndorsTrail.view.ItemEffectsView
android:id="@+id/actorinfo_onhiteffects"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/actorinfo_currentconditions"
android:id="@+id/actorinfo_currentconditions_title"
android:layout_marginTop="@dimen/section_margin"
/>
<com.gpl.rpg.AndorsTrail.view.ActorConditionList
android:id="@+id/actorinfo_currentconditions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/section_margin"
android:text="@string/actorinfo_basetraits" />
android:text="@string/actorinfo_basetraits"
/>
<com.gpl.rpg.AndorsTrail.view.BaseTraitsInfoView
android:id="@+id/heroinfo_basetraits"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/heroinfo_basestats_table"
>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_base_max_hp" />
<TextView android:id="@+id/basetraitsinfo_max_hp" />
</TableRow>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_base_max_ap" />
<TextView android:id="@+id/basetraitsinfo_max_ap" />
</TableRow>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/heroinfo_reequip_cost" />
<TextView android:id="@+id/heroinfo_base_reequip_cost" />
</TableRow>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/heroinfo_useitem_cost" />
<TextView android:id="@+id/heroinfo_base_useitem_cost" />
</TableRow>
<include layout="@layout/traitsinfoview" />
</TableLayout>
</LinearLayout>
</ScrollView>

View File

@@ -16,6 +16,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/dialog_margin"
android:id="@+id/monsterinfo_container"
>
<TextView
@@ -54,19 +55,20 @@
android:layout_marginBottom="@dimen/section_margin"
/>
<com.gpl.rpg.AndorsTrail.view.TraitsInfoView
android:id="@+id/monsterinfo_currenttraits"
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/actorinfo_immune_criticals"
android:id="@+id/monsterinfo_immune_criticals"
/>
android:id="@+id/actorinfo_stats_table"
>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_base_max_ap" />
<TextView android:id="@+id/monsterinfo_max_ap" />
</TableRow>
<include layout="@layout/traitsinfoview" />
</TableLayout>
<com.gpl.rpg.AndorsTrail.view.ItemEffectsView
android:id="@+id/monsterinfo_onhiteffects"
android:id="@+id/actorinfo_onhiteffects"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
@@ -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"
/>
<com.gpl.rpg.AndorsTrail.view.ActorConditionList
android:id="@+id/monsterinfo_currentconditions"
android:id="@+id/actorinfo_currentconditions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>

View File

@@ -1,56 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<TableRow
android:id="@+id/traitsinfo_attack_row1"
>
<TextView android:text="@string/traitsinfo_attack_cost" android:layout_marginRight="10sp" />
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/actorinfo_movecost" />
<TextView android:id="@+id/traitsinfo_move_cost" />
</TableRow>
<TableRow>
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_attack_cost" />
<TextView android:id="@+id/traitsinfo_attack_cost" />
</TableRow>
<TableRow
android:id="@+id/traitsinfo_attack_row2"
>
<TextView android:text="@string/traitsinfo_attack_chance" android:layout_marginRight="10sp" />
<TableRow android:id="@+id/traitsinfo_attack_chance_row">
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_attack_chance" />
<TextView android:id="@+id/traitsinfo_attack_chance" />
</TableRow>
<TableRow
android:id="@+id/traitsinfo_attack_row3"
>
<TextView android:text="@string/traitsinfo_attack_damage" android:layout_marginRight="10sp" />
<TableRow android:id="@+id/traitsinfo_attack_damage_row" >
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_attack_damage" />
<TextView android:id="@+id/traitsinfo_attack_damage" />
</TableRow>
<TableRow
android:id="@+id/traitsinfo_critical_row1"
>
<TextView android:text="@string/traitsinfo_criticalhit_skill" android:layout_marginRight="10sp" />
<TableRow android:id="@+id/traitsinfo_criticalhit_skill_row">
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_criticalhit_skill" />
<TextView android:id="@+id/traitsinfo_criticalhit_skill" />
</TableRow>
<TableRow
android:id="@+id/traitsinfo_critical_row2"
>
<TextView android:text="@string/traitsinfo_criticalhit_multiplier" android:layout_marginRight="10sp" />
<TableRow android:id="@+id/traitsinfo_criticalhit_multiplier_row">
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_criticalhit_multiplier" />
<TextView android:id="@+id/traitsinfo_criticalhit_multiplier" />
</TableRow>
<TableRow
android:id="@+id/traitsinfo_critical_row3"
>
<TextView android:text="@string/traitsinfo_criticalhit_effectivechance" android:layout_marginRight="10sp" />
<TableRow android:id="@+id/traitsinfo_criticalhit_effectivechance_row">
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_criticalhit_effectivechance" />
<TextView android:id="@+id/traitsinfo_criticalhit_effectivechance" />
</TableRow>
<TableRow
android:id="@+id/traitsinfo_defense_row1"
>
<TextView android:text="@string/traitsinfo_defense_chance" android:layout_marginRight="10sp" />
<TextView android:id="@+id/traitsinfo_defense_chance" />
<TableRow android:id="@+id/traitsinfo_block_chance_row">
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_defense_chance" />
<TextView android:id="@+id/traitsinfo_block_chance" />
</TableRow>
<TableRow
android:id="@+id/traitsinfo_defense_row2"
>
<TextView android:text="@string/traitsinfo_defense_damageresist" android:layout_marginRight="10sp" />
<TextView android:id="@+id/traitsinfo_defense_damageresist" />
<TableRow android:id="@+id/traitsinfo_damageresist_row">
<TextView style="@style/traitsinfo_label" android:text="@string/traitsinfo_defense_damageresist" />
<TextView android:id="@+id/traitsinfo_damageresist" />
</TableRow>
</merge>
<TableRow android:id="@+id/traitsinfo_is_immune_to_critical_hits_row">
<TextView android:text="@string/actorinfo_immune_criticals" android:layout_span="2" />
</TableRow>
</merge>

View File

@@ -559,5 +559,10 @@
<string name="preferences_dialog_overwrite_savegame_title">Confirm overwriting savegames</string>
<string name="preferences_dialog_overwrite_savegame">Gives a question about whether you want to overwrite when saving to a savegame slot that already contains a savegame.</string>
<!-- =========================================== -->
<!-- Added in v0.7.0 -->
<string name="heroinfo_reequip_cost">Re-equip cost (AP):</string>
<string name="heroinfo_useitem_cost">Use item cost (AP):</string>
</resources>

View File

@@ -34,4 +34,8 @@
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
<style name="traitsinfo_label" parent="android:Widget.TextView">
<item name="android:layout_marginRight">10sp</item>
</style>
</resources>

View File

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

View File

@@ -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<ItemTraits_OnUse> effects_hit = new ArrayList<ItemTraits_OnUse>();
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<ItemTraits_OnUse> effects_hit = new ArrayList<ItemTraits_OnUse>();
ArrayList<ItemTraits_OnUse> effects_kill = new ArrayList<ItemTraits_OnUse>();
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);
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -60,9 +60,6 @@ public class Actor {
public ItemTraits_OnUse[] getOnHitEffects() { return onHitEffects; }
public List<ItemTraits_OnUse> 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;

View File

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

View File

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

View File

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