From 21fca91ca7e2f78d3d3c3f4600991bfa63f08314 Mon Sep 17 00:00:00 2001 From: Oskar Wiksten Date: Sun, 21 Oct 2012 09:56:53 +0200 Subject: [PATCH] WIP 3 refactoring actor traits - moved iconID && tileSize to Actor. --- .../activity/ConversationActivity.java | 2 +- .../controller/ActorStatsController.java | 6 ++-- .../controller/MovementController.java | 2 +- .../rpg/AndorsTrail/model/actor/Actor.java | 8 +++++ .../rpg/AndorsTrail/model/actor/Monster.java | 2 +- .../rpg/AndorsTrail/model/actor/Player.java | 30 +++++++++---------- .../model/item/ItemTraits_OnUse.java | 13 +++++--- .../resource/parsers/ItemTraitsParser.java | 9 ++++-- .../resource/tiles/TileManager.java | 8 ++--- .../view/ItemEffectsView_OnUse.java | 2 +- .../gpl/rpg/AndorsTrail/view/MainView.java | 4 +-- .../gpl/rpg/AndorsTrail/view/StatusView.java | 2 +- 12 files changed, 53 insertions(+), 35 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java index 45509ff41..451692279 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ConversationActivity.java @@ -343,7 +343,7 @@ public final class ConversationActivity extends Activity implements OnKeyListene ConversationStatement s = new ConversationStatement(); if (displayActors) { assert(actor != null); - s.iconID = actor.baseTraits.iconID; + s.iconID = actor.iconID; s.actorName = actor.getName(); } else { s.iconID = ConversationStatement.NO_ICON; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java index d4eb21c42..3aaa96253 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ActorStatsController.java @@ -311,8 +311,10 @@ public class ActorStatsController { } } } - VisualEffect effectToStart = applyStatsModifierEffect(source, effect, 1, null); - startVisualEffect(source, effectToStart); + if (effect.changedStats != null) { + VisualEffect effectToStart = applyStatsModifierEffect(source, effect.changedStats, 1, null); + startVisualEffect(source, effectToStart); + } } private static void rollForConditionEffect(Actor actor, ActorConditionEffect conditionEffect) { diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java index 33e4ffa0c..3f5a8a609 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/MovementController.java @@ -257,7 +257,7 @@ public final class MovementController implements TimedMessageTask.Callback { for (MonsterSpawnArea a : map.spawnAreas) { for (Monster m : a.monsters) { if (!map.isWalkable(m.rectPosition)) { - Coord p = map.getRandomFreePosition(a.area, m.baseTraits.tileSize, playerPosition); + Coord p = map.getRandomFreePosition(a.area, m.tileSize, playerPosition); if (p == null) continue; m.position.set(p); } 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 d9b0f806a..360275962 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Actor.java @@ -12,10 +12,13 @@ import com.gpl.rpg.AndorsTrail.model.listeners.ActorConditionListeners; import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.util.CoordRect; import com.gpl.rpg.AndorsTrail.util.Range; +import com.gpl.rpg.AndorsTrail.util.Size; public class Actor { public final ActorTraits baseTraits; public final CombatTraits combatTraits; + public final int iconID; + public final Size tileSize; public final Range ap; public final Range health; public final Coord position; @@ -28,6 +31,8 @@ public class Actor { public Actor(ActorTraits baseTraits, boolean isPlayer, boolean isImmuneToCriticalHits) { this.combatTraits = new CombatTraits(baseTraits); this.baseTraits = baseTraits; + this.iconID = baseTraits.iconID; + this.tileSize = baseTraits.tileSize; this.ap = new Range(baseTraits.maxAP, baseTraits.maxAP); this.health = new Range(baseTraits.maxHP, baseTraits.maxHP); this.position = new Coord(); @@ -86,6 +91,9 @@ public class Actor { if (readCombatTraits) combatTraits = new CombatTraits(src, fileversion); this.baseTraits = isPlayer ? new ActorTraits(src, world, fileversion) : baseTraits; + this.iconID = baseTraits.iconID; + this.tileSize = baseTraits.tileSize; + if (!readCombatTraits) combatTraits = new CombatTraits(this.baseTraits); this.combatTraits = combatTraits; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java index 5c1bc8412..224a85278 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Monster.java @@ -34,7 +34,7 @@ public final class Monster extends Actor { this.monsterTypeID = monsterType.id; this.position.set(position); this.millisecondsPerMove = Constants.MONSTER_MOVEMENT_TURN_DURATION_MS / monsterType.baseTraits.getMovesPerTurn(); - this.nextPosition = new CoordRect(new Coord(), baseTraits.tileSize); + this.nextPosition = new CoordRect(new Coord(), monsterType.baseTraits.tileSize); this.phraseID = monsterType.phraseID; this.exp = monsterType.exp; this.dropList = monsterType.dropList; 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 e90cecb8a..51f21286a 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/actor/Player.java @@ -45,21 +45,21 @@ public final class Player extends Actor { public Player() { super( - new ActorTraits( - TileManager.CHAR_HERO - , new Size(1, 1) - , 0 // attackCost - , 0 // attackChance - , 0 // criticalSkill - , 0 // criticalMultiplier - , new Range() // damagePotential - , 0 // blockChance - , 0 // damageResistance - , DEFAULT_PLAYER_MOVECOST - , null) - , true // isPlayer - , false // isImmuneToCriticalHits - ); + new ActorTraits( + TileManager.CHAR_HERO + , new Size(1, 1) + , 0 // attackCost + , 0 // attackChance + , 0 // criticalSkill + , 0 // criticalMultiplier + , new Range() // damagePotential + , 0 // blockChance + , 0 // damageResistance + , DEFAULT_PLAYER_MOVECOST + , null) + , true // isPlayer + , false // isImmuneToCriticalHits + ); this.lastPosition = new Coord(); this.nextPosition = new Coord(); this.levelExperience = new Range(); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnUse.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnUse.java index 0a77fcc8c..60ebd4640 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnUse.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/ItemTraits_OnUse.java @@ -2,15 +2,20 @@ package com.gpl.rpg.AndorsTrail.model.item; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect; import com.gpl.rpg.AndorsTrail.model.ability.traits.StatsModifierTraits; -import com.gpl.rpg.AndorsTrail.util.ConstRange; -public final class ItemTraits_OnUse extends StatsModifierTraits { +public final class ItemTraits_OnUse { + public final StatsModifierTraits changedStats; public final ActorConditionEffect[] addedConditions_source; public final ActorConditionEffect[] addedConditions_target; - public ItemTraits_OnUse(int visualEffectID, ConstRange currentHPBoost, ConstRange currentAPBoost, ActorConditionEffect[] addedConditions_source, ActorConditionEffect[] addedConditions_target) { - super(visualEffectID, currentHPBoost, currentAPBoost); + public ItemTraits_OnUse(StatsModifierTraits changedStats, ActorConditionEffect[] addedConditions_source, ActorConditionEffect[] addedConditions_target) { + this.changedStats = changedStats; this.addedConditions_source = addedConditions_source; this.addedConditions_target = addedConditions_target; } + + public int calculateCost() { + final int costStats = changedStats == null ? 0 : changedStats.calculateCost(); + return costStats; + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java index 5e5704ace..86ad89889 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/parsers/ItemTraitsParser.java @@ -7,6 +7,7 @@ import com.gpl.rpg.AndorsTrail.model.ability.ActorCondition; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect; import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection; import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits; +import com.gpl.rpg.AndorsTrail.model.ability.traits.StatsModifierTraits; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip; import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse; import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer; @@ -68,9 +69,11 @@ public final class ItemTraitsParser { return null; } else { return new ItemTraits_OnUse( - ItemTraits_OnUse.VISUAL_EFFECT_NONE - ,boostCurrentHP - ,boostCurrentAP + new StatsModifierTraits( + StatsModifierTraits.VISUAL_EFFECT_NONE + ,boostCurrentHP + ,boostCurrentAP + ) ,listToArray(addedConditions_source) ,listToArray(addedConditions_target) ); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java index 118512687..8bed39258 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/resource/tiles/TileManager.java @@ -125,8 +125,8 @@ public final class TileManager { - public void setImageViewTile(TextView textView, Monster monster) { setImageViewTileForMonster(textView, monster.baseTraits.iconID); } - public void setImageViewTile(TextView textView, Player player) { setImageViewTileForPlayer(textView, player.baseTraits.iconID); } + public void setImageViewTile(TextView textView, Monster monster) { setImageViewTileForMonster(textView, monster.iconID); } + public void setImageViewTile(TextView textView, Player player) { setImageViewTileForPlayer(textView, player.iconID); } public void setImageViewTileForMonster(TextView textView, int iconID) { setImageViewTile(textView, currentMapTiles.getBitmap(iconID)); } public void setImageViewTileForPlayer(TextView textView, int iconID) { setImageViewTile(textView, preloadedTiles.getBitmap(iconID)); } public void setImageViewTile(TextView textView, ActorConditionType conditionType) { setImageViewTile(textView, preloadedTiles.getBitmap(conditionType.iconID)); } @@ -155,8 +155,8 @@ public final class TileManager { } } - public void setImageViewTile(ImageView imageView, Monster monster) { setImageViewTileForMonster(imageView, monster.baseTraits.iconID); } - public void setImageViewTile(ImageView imageView, Player player) { setImageViewTileForPlayer(imageView, player.baseTraits.iconID); } + public void setImageViewTile(ImageView imageView, Monster monster) { setImageViewTileForMonster(imageView, monster.iconID); } + public void setImageViewTile(ImageView imageView, Player player) { setImageViewTileForPlayer(imageView, player.iconID); } public void setImageViewTileForMonster(ImageView imageView, int iconID) { imageView.setImageBitmap(currentMapTiles.getBitmap(iconID)); } public void setImageViewTileForPlayer(ImageView imageView, int iconID) { imageView.setImageBitmap(preloadedTiles.getBitmap(iconID)); } public void setImageViewTile(ImageView imageView, ActorConditionType conditionType) { imageView.setImageBitmap(preloadedTiles.getBitmap(conditionType.iconID)); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView_OnUse.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView_OnUse.java index e9ffdf4d3..e368220d5 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView_OnUse.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/ItemEffectsView_OnUse.java @@ -48,7 +48,7 @@ public final class ItemEffectsView_OnUse extends LinearLayout { if (t.addedConditions_source != null) sourceEffects.addAll(Arrays.asList(t.addedConditions_source)); if (t.addedConditions_target != null) targetEffects.addAll(Arrays.asList(t.addedConditions_target)); - describeStatsModifierTraits(t, context, res, itemeffect_onuse_list); + describeStatsModifierTraits(t.changedStats, context, res, itemeffect_onuse_list); } } itemeffect_onuse_conditions_source.update(sourceEffects); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java index bba359173..177ba4c89 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/MainView.java @@ -278,10 +278,10 @@ public final class MainView extends SurfaceView implements SurfaceHolder.Callbac } } - drawFromMapPosition(canvas, area, playerPosition, model.player.baseTraits.iconID); + drawFromMapPosition(canvas, area, playerPosition, model.player.iconID); for (MonsterSpawnArea a : currentMap.spawnAreas) { for (Monster m : a.monsters) { - drawFromMapPosition(canvas, area, m.rectPosition, m.baseTraits.iconID); + drawFromMapPosition(canvas, area, m.rectPosition, m.iconID); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java index b46ecdff5..c6edb3ce6 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/StatusView.java @@ -56,7 +56,7 @@ public final class StatusView extends RelativeLayout { expBar.init(R.drawable.ui_progress_exp, R.string.status_exp); levelupDrawable = new LayerDrawable(new Drawable[] { - new BitmapDrawable(world.tileManager.preloadedTiles.getBitmap(player.baseTraits.iconID)) + new BitmapDrawable(world.tileManager.preloadedTiles.getBitmap(player.iconID)) ,new BitmapDrawable(world.tileManager.preloadedTiles.getBitmap(TileManager.iconID_moveselect)) });