From b56ee0aac15ae720dfdc5391dda1d3a5e8ab1934 Mon Sep 17 00:00:00 2001 From: "oskar.wiksten" Date: Sun, 15 May 2011 08:45:49 +0000 Subject: [PATCH] Quickitem patch by Oli Samyn (issue 6). git-svn-id: https://andors-trail.googlecode.com/svn/trunk@90 08aca716-68be-ccc6-4d58-36f5abd142ac --- .../gen/com/gpl/rpg/AndorsTrail/R.java | 155 ++++++++++-------- AndorsTrail/res/layout-land/quickitemview.xml | 25 +++ AndorsTrail/res/layout/main.xml | 8 + AndorsTrail/res/layout/quickitemview.xml | 26 +++ AndorsTrail/res/menu/inventoryitem.xml | 7 + AndorsTrail/res/values-fr/itemlist.xml | 6 - AndorsTrail/res/values/strings.xml | 6 + .../AndorsTrail/AndorsTrailApplication.java | 2 +- .../activity/HeroinfoActivity.java | 20 ++- .../AndorsTrail/activity/MainActivity.java | 9 + .../controller/CombatController.java | 3 + .../controller/ItemController.java | 12 ++ .../rpg/AndorsTrail/model/item/Inventory.java | 20 +++ .../rpg/AndorsTrail/view/QuickitemView.java | 95 +++++++++++ 14 files changed, 315 insertions(+), 79 deletions(-) create mode 100644 AndorsTrail/res/layout-land/quickitemview.xml create mode 100644 AndorsTrail/res/layout/quickitemview.xml create mode 100644 AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/QuickitemView.java diff --git a/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java b/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java index 78ca1c987..567ae917a 100644 --- a/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java +++ b/AndorsTrail/gen/com/gpl/rpg/AndorsTrail/R.java @@ -174,12 +174,16 @@ public final class R { public static final int heroinfo_worn_ringright=0x7f0b001e; public static final int heroinfo_worn_shield=0x7f0b001d; public static final int heroinfo_worn_weapon=0x7f0b001b; + public static final int inv_assign_slot1=0x7f0b009f; + public static final int inv_assign_slot2=0x7f0b00a0; + public static final int inv_assign_slot3=0x7f0b00a1; public static final int inv_image=0x7f0b0031; - public static final int inv_menu_drop=0x7f0b0099; - public static final int inv_menu_equip=0x7f0b0096; - public static final int inv_menu_info=0x7f0b0095; - public static final int inv_menu_unequip=0x7f0b0097; - public static final int inv_menu_use=0x7f0b0098; + public static final int inv_menu_assign=0x7f0b009e; + public static final int inv_menu_drop=0x7f0b009d; + public static final int inv_menu_equip=0x7f0b009a; + public static final int inv_menu_info=0x7f0b0099; + public static final int inv_menu_unequip=0x7f0b009b; + public static final int inv_menu_use=0x7f0b009c; public static final int inv_text=0x7f0b0032; public static final int inventorylist_root=0x7f0b001f; public static final int itemeffect_onequip_change_maxap=0x7f0b0036; @@ -220,66 +224,70 @@ public final class R { public static final int loadsave_slot_4=0x7f0b0058; public static final int loadsave_title=0x7f0b0053; public static final int loadsave_titlelayout=0x7f0b0051; - public static final int main_combatview=0x7f0b005b; + public static final int main_combatview=0x7f0b005c; public static final int main_container=0x7f0b0059; - public static final int main_mainview=0x7f0b005c; + public static final int main_mainview=0x7f0b005d; + public static final int main_quickitemview=0x7f0b005b; public static final int main_statusview=0x7f0b005a; - public static final int monsterencounter_attack=0x7f0b0062; - public static final int monsterencounter_cancel=0x7f0b0064; - public static final int monsterencounter_description=0x7f0b0061; - public static final int monsterencounter_image=0x7f0b005f; - public static final int monsterencounter_info=0x7f0b0063; - public static final int monsterencounter_title=0x7f0b0060; - public static final int monsterinfo_close=0x7f0b006b; - public static final int monsterinfo_currenttraits=0x7f0b0069; - public static final int monsterinfo_difficulty=0x7f0b0067; - public static final int monsterinfo_healthbar=0x7f0b0068; - public static final int monsterinfo_image=0x7f0b0065; - public static final int monsterinfo_onhiteffects=0x7f0b006a; - public static final int monsterinfo_title=0x7f0b0066; - public static final int questlog_contents=0x7f0b006d; - public static final int questlog_entrytext=0x7f0b006e; - public static final int questlog_includecompleted=0x7f0b006c; - public static final int rangebar_label=0x7f0b006f; - public static final int rangebar_progress=0x7f0b0070; - public static final int rangebar_text=0x7f0b0071; - public static final int shop_buy_gc=0x7f0b0073; - public static final int shop_buy_list=0x7f0b0074; - public static final int shop_sell_gc=0x7f0b0076; - public static final int shop_sell_list=0x7f0b0077; - public static final int shop_tab1=0x7f0b0072; - public static final int shop_tab2=0x7f0b0075; - public static final int shopitem_image=0x7f0b0078; - public static final int shopitem_infobutton=0x7f0b007a; - public static final int shopitem_shopbutton=0x7f0b0079; - public static final int shopitem_text=0x7f0b007b; - public static final int startscreen_about=0x7f0b0082; - public static final int startscreen_continue=0x7f0b007f; - public static final int startscreen_currenthero=0x7f0b007c; - public static final int startscreen_enterheroname=0x7f0b007d; - public static final int startscreen_load=0x7f0b0081; - public static final int startscreen_newgame=0x7f0b0080; - public static final int startscreen_quit=0x7f0b0083; - public static final int startscreen_version=0x7f0b007e; - public static final int status_image=0x7f0b0084; - public static final int statusview_activeconditions=0x7f0b005e; - public static final int statusview_exp=0x7f0b0086; - public static final int statusview_health=0x7f0b0085; - public static final int statusview_statustext=0x7f0b005d; - public static final int traitsinfo_attack_chance=0x7f0b008a; - public static final int traitsinfo_attack_cost=0x7f0b0088; - public static final int traitsinfo_attack_damage=0x7f0b008c; - public static final int traitsinfo_attack_row1=0x7f0b0087; - public static final int traitsinfo_attack_row2=0x7f0b0089; - public static final int traitsinfo_attack_row3=0x7f0b008b; - public static final int traitsinfo_critical_row1=0x7f0b008d; - public static final int traitsinfo_critical_row2=0x7f0b008f; - public static final int traitsinfo_criticalhit_chance=0x7f0b008e; - public static final int traitsinfo_criticalhit_multiplier=0x7f0b0090; - public static final int traitsinfo_defense_chance=0x7f0b0092; - public static final int traitsinfo_defense_damageresist=0x7f0b0094; - public static final int traitsinfo_defense_row1=0x7f0b0091; - public static final int traitsinfo_defense_row2=0x7f0b0093; + public static final int monsterencounter_attack=0x7f0b0063; + public static final int monsterencounter_cancel=0x7f0b0065; + public static final int monsterencounter_description=0x7f0b0062; + public static final int monsterencounter_image=0x7f0b0060; + public static final int monsterencounter_info=0x7f0b0064; + public static final int monsterencounter_title=0x7f0b0061; + public static final int monsterinfo_close=0x7f0b006c; + public static final int monsterinfo_currenttraits=0x7f0b006a; + public static final int monsterinfo_difficulty=0x7f0b0068; + public static final int monsterinfo_healthbar=0x7f0b0069; + public static final int monsterinfo_image=0x7f0b0066; + public static final int monsterinfo_onhiteffects=0x7f0b006b; + public static final int monsterinfo_title=0x7f0b0067; + public static final int questlog_contents=0x7f0b006e; + public static final int questlog_entrytext=0x7f0b006f; + public static final int questlog_includecompleted=0x7f0b006d; + public static final int quickitemview_item1=0x7f0b0070; + public static final int quickitemview_item2=0x7f0b0071; + public static final int quickitemview_item3=0x7f0b0072; + public static final int rangebar_label=0x7f0b0073; + public static final int rangebar_progress=0x7f0b0074; + public static final int rangebar_text=0x7f0b0075; + public static final int shop_buy_gc=0x7f0b0077; + public static final int shop_buy_list=0x7f0b0078; + public static final int shop_sell_gc=0x7f0b007a; + public static final int shop_sell_list=0x7f0b007b; + public static final int shop_tab1=0x7f0b0076; + public static final int shop_tab2=0x7f0b0079; + public static final int shopitem_image=0x7f0b007c; + public static final int shopitem_infobutton=0x7f0b007e; + public static final int shopitem_shopbutton=0x7f0b007d; + public static final int shopitem_text=0x7f0b007f; + public static final int startscreen_about=0x7f0b0086; + public static final int startscreen_continue=0x7f0b0083; + public static final int startscreen_currenthero=0x7f0b0080; + public static final int startscreen_enterheroname=0x7f0b0081; + public static final int startscreen_load=0x7f0b0085; + public static final int startscreen_newgame=0x7f0b0084; + public static final int startscreen_quit=0x7f0b0087; + public static final int startscreen_version=0x7f0b0082; + public static final int status_image=0x7f0b0088; + public static final int statusview_activeconditions=0x7f0b005f; + public static final int statusview_exp=0x7f0b008a; + public static final int statusview_health=0x7f0b0089; + public static final int statusview_statustext=0x7f0b005e; + public static final int traitsinfo_attack_chance=0x7f0b008e; + public static final int traitsinfo_attack_cost=0x7f0b008c; + public static final int traitsinfo_attack_damage=0x7f0b0090; + public static final int traitsinfo_attack_row1=0x7f0b008b; + public static final int traitsinfo_attack_row2=0x7f0b008d; + public static final int traitsinfo_attack_row3=0x7f0b008f; + public static final int traitsinfo_critical_row1=0x7f0b0091; + public static final int traitsinfo_critical_row2=0x7f0b0093; + public static final int traitsinfo_criticalhit_chance=0x7f0b0092; + public static final int traitsinfo_criticalhit_multiplier=0x7f0b0094; + public static final int traitsinfo_defense_chance=0x7f0b0096; + public static final int traitsinfo_defense_damageresist=0x7f0b0098; + public static final int traitsinfo_defense_row1=0x7f0b0095; + public static final int traitsinfo_defense_row2=0x7f0b0097; } public static final class layout { public static final int about=0x7f030000; @@ -302,12 +310,13 @@ public final class R { public static final int monsterinfo=0x7f030011; public static final int questlog=0x7f030012; public static final int questlogentry=0x7f030013; - public static final int rangebar=0x7f030014; - public static final int shop=0x7f030015; - public static final int shopitemview=0x7f030016; - public static final int startscreen=0x7f030017; - public static final int statusview=0x7f030018; - public static final int traitsinfoview=0x7f030019; + public static final int quickitemview=0x7f030014; + public static final int rangebar=0x7f030015; + public static final int shop=0x7f030016; + public static final int shopitemview=0x7f030017; + public static final int startscreen=0x7f030018; + public static final int statusview=0x7f030019; + public static final int traitsinfoview=0x7f03001a; } public static final class menu { public static final int inventoryitem=0x7f0a0000; @@ -391,7 +400,7 @@ public final class R { public static final int conversation_rewardgold=0x7f0500cd; public static final int conversation_rewarditem=0x7f0500cf; public static final int conversation_rewarditems=0x7f0500d0; - public static final int conversation_title=0x7f05011d; + public static final int conversation_title=0x7f050121; public static final int conversationlist_alynndir=0x7f050025; public static final int conversationlist_ambelie=0x7f050029; public static final int conversationlist_crossglen=0x7f050004; @@ -486,6 +495,10 @@ public final class R { public static final int heroinfo_totalexperience=0x7f050072; public static final int heroinfo_wear=0x7f05006d; public static final int heroinfo_wornequipment=0x7f050073; + public static final int inventory_assign=0x7f05011c; + public static final int inventory_assign_slot1=0x7f05011d; + public static final int inventory_assign_slot2=0x7f05011e; + public static final int inventory_assign_slot3=0x7f05011f; public static final int inventory_drop=0x7f050090; public static final int inventory_equip=0x7f05008d; public static final int inventory_info=0x7f05008c; @@ -546,7 +559,7 @@ public final class R { public static final int itemlist_rings=0x7f050039; public static final int itemlist_v068=0x7f050041; public static final int itemlist_weapons=0x7f050038; - public static final int key_required=0x7f05011c; + public static final int key_required=0x7f050120; public static final int levelup_add_attackchance=0x7f0500e0; public static final int levelup_add_attackchance_description=0x7f0500e1; public static final int levelup_add_attackdamage=0x7f0500e2; diff --git a/AndorsTrail/res/layout-land/quickitemview.xml b/AndorsTrail/res/layout-land/quickitemview.xml new file mode 100644 index 000000000..923965a8a --- /dev/null +++ b/AndorsTrail/res/layout-land/quickitemview.xml @@ -0,0 +1,25 @@ + + + + + + diff --git a/AndorsTrail/res/layout/main.xml b/AndorsTrail/res/layout/main.xml index 40753b441..2c5b65697 100644 --- a/AndorsTrail/res/layout/main.xml +++ b/AndorsTrail/res/layout/main.xml @@ -12,6 +12,14 @@ android:layout_alignParentBottom="true" /> + + + + + + + diff --git a/AndorsTrail/res/menu/inventoryitem.xml b/AndorsTrail/res/menu/inventoryitem.xml index e7ec8a7a6..f8195a944 100644 --- a/AndorsTrail/res/menu/inventoryitem.xml +++ b/AndorsTrail/res/menu/inventoryitem.xml @@ -6,4 +6,11 @@ + + + + + + + diff --git a/AndorsTrail/res/values-fr/itemlist.xml b/AndorsTrail/res/values-fr/itemlist.xml index 0b5549728..d5ab9e5ad 100644 --- a/AndorsTrail/res/values-fr/itemlist.xml +++ b/AndorsTrail/res/values-fr/itemlist.xml @@ -5,12 +5,6 @@ {gold|items_tiles:220|Pièces d\'or|30|1|||||||||||||||||||||||||||||||||}; - -[searchTag|iconID|name|category|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|]; -{debug_dagger1|items_tiles:90|Dague coeur noir|0|6|1||||2|100|30|3|5|10|||||||||||||||||||||||}; -{debug_ring1|items_tiles:270|Anneau coeur noir|7|3|1|||||50|||10|10|||||||||||||||||||||||}; - - [searchTag|iconID|name|category|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|]; {club1|items_tiles:126|Massue en bois|0|7|1||||5|10|||0|1|||||||||||||||||||||||}; diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml index 0a978dc76..31c2e1bcb 100644 --- a/AndorsTrail/res/values/strings.xml +++ b/AndorsTrail/res/values/strings.xml @@ -210,6 +210,7 @@ Additional maps done by michischmid<br /> Additional programming by Samuel Plentz<br /> Additional programming by Uwe Jugel<br /> + Additional programming by Oli Samyn<br /> Additional graphics by Karvis<br /> Russian translation by Dreamer...<br /> Italian translation by k6blue and liogiu<br /> @@ -348,4 +349,9 @@ 2.0f + Assign quick slot + Slot 1 + Slot 2 + Slot 3 + diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java index 3c507df77..4a310eade 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/AndorsTrailApplication.java @@ -19,7 +19,7 @@ public final class AndorsTrailApplication extends Application { public static final boolean DEVELOPMENT_DEBUGBUTTONS = true; public static final boolean DEVELOPMENT_VALIDATEDATA = true; public static final boolean DEVELOPMENT_DEBUGMESSAGES = true; - public static final int CURRENT_VERSION = 18; + public static final int CURRENT_VERSION = 19; public static final String CURRENT_VERSION_DISPLAY = "0.6.9dev"; public final WorldContext world = new WorldContext(); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java index 4163e42e6..6d02e56b4 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/HeroinfoActivity.java @@ -62,6 +62,8 @@ public final class HeroinfoActivity extends TabActivity { private TextView heroinfo_stats_defense; private RangeBar rangebar_hp; private RangeBar rangebar_exp; + + private ItemType last_selected_item; // Workaround android bug #7139 private final ImageView[] wornItemImage = new ImageView[Inventory.NUM_WORN_SLOTS]; private final int[] defaultWornItemImageResourceIDs = new int[Inventory.NUM_WORN_SLOTS]; @@ -289,10 +291,14 @@ public final class HeroinfoActivity extends TabActivity { switch (v.getId()) { case R.id.inventorylist_root: inflater.inflate(R.menu.inventoryitem, menu); - if (type.isUsable()) menu.findItem(R.id.inv_menu_use).setVisible(true); + if (type.isUsable()){ + menu.findItem(R.id.inv_menu_use).setVisible(true); + menu.findItem(R.id.inv_menu_assign).setVisible(true); + } if (type.isEquippable()) menu.findItem(R.id.inv_menu_equip).setVisible(true); break; } + last_selected_item = null; } private int getSelectedID(AdapterContextMenuInfo info) { @@ -321,6 +327,18 @@ public final class HeroinfoActivity extends TabActivity { case R.id.inv_menu_use: view.itemController.useItem(getSelectedItemType(info)); break; + case R.id.inv_menu_assign: + last_selected_item = getSelectedItemType(info); + break; + case R.id.inv_assign_slot1: + view.itemController.setQuickItem(last_selected_item, 0); + break; + case R.id.inv_assign_slot2: + view.itemController.setQuickItem(last_selected_item, 1); + break; + case R.id.inv_assign_slot3: + view.itemController.setQuickItem(last_selected_item, 2); + break; default: return super.onContextItemSelected(item); } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java index b2b86722d..e4b34378f 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/MainActivity.java @@ -17,6 +17,7 @@ import com.gpl.rpg.AndorsTrail.util.Coord; import com.gpl.rpg.AndorsTrail.util.L; import com.gpl.rpg.AndorsTrail.view.CombatView; import com.gpl.rpg.AndorsTrail.view.MainView; +import com.gpl.rpg.AndorsTrail.view.QuickitemView; import com.gpl.rpg.AndorsTrail.view.StatusView; import android.app.Activity; @@ -50,6 +51,7 @@ public final class MainActivity extends Activity { public MainView mainview; public StatusView statusview; public CombatView combatview; + public QuickitemView quickitemview; public LinearLayout activeConditions; private static final int NUM_MESSAGES = 3; @@ -73,6 +75,7 @@ public final class MainActivity extends Activity { mainview = (MainView) findViewById(R.id.main_mainview); statusview = (StatusView) findViewById(R.id.main_statusview); combatview = (CombatView) findViewById(R.id.main_combatview); + quickitemview = (QuickitemView) findViewById(R.id.main_quickitemview); activeConditions = (LinearLayout) findViewById(R.id.statusview_activeconditions); statusText = (TextView) findViewById(R.id.statusview_statustext); @@ -131,6 +134,8 @@ public final class MainActivity extends Activity { }) }); } + quickitemview.refreshQuickitems(); + } @Override @@ -139,6 +144,7 @@ public final class MainActivity extends Activity { switch (requestCode) { case INTENTREQUEST_HEROINFO: combatview.updatePlayerAP(world.model.player.ap); + quickitemview.refreshQuickitems(); break; case INTENTREQUEST_MONSTERENCOUNTER: if (resultCode == Activity.RESULT_OK) { @@ -303,6 +309,9 @@ public final class MainActivity extends Activity { statusText.setText(sb.toString()); statusText.setVisibility(View.VISIBLE); } + public void refreshQuickitems() { + quickitemview.refreshQuickitems(); + } public void clearMessages() { for(int i = 0; i < NUM_MESSAGES; ++i) { messages[i] = ""; diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java index 34b8c76cd..f0adea187 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/CombatController.java @@ -46,6 +46,8 @@ public final class CombatController { public void enterCombat(int beginTurnAs) { context.mainActivity.combatview.setVisibility(View.VISIBLE); + context.mainActivity.quickitemview.setVisibility(View.VISIBLE); + context.mainActivity.quickitemview.bringToFront(); context.mainActivity.combatview.bringToFront(); model.uiSelections.isInCombat = true; killedMonsterBags.clear(); @@ -58,6 +60,7 @@ public final class CombatController { public void exitCombat(boolean pickupLootBags) { context.effectController.waitForCurrentEffect(); setCombatSelection(null, null); + context.mainActivity.quickitemview.setVisibility(View.GONE); context.mainActivity.combatview.setVisibility(View.GONE); model.uiSelections.isInCombat = false; context.mainActivity.clearMessages(); diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java index a5465908b..f25883599 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/controller/ItemController.java @@ -219,4 +219,16 @@ public final class ItemController { merchant.removeItem(itemType.id); model.statistics.addGoldSpent(price); } + + public void quickitemUse(int quickSlotId) { + useItem(model.player.inventory.quickitem[quickSlotId]); + view.mainActivity.statusview.updateStatus(); + view.mainActivity.combatview.updatePlayerAP(model.player.ap); + view.mainActivity.refreshQuickitems(); + } + + public void setQuickItem(ItemType itemType, int quickSlotId) { + model.player.inventory.quickitem[quickSlotId] = itemType; + view.mainActivity.refreshQuickitems(); + } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java index 4fc8d21a6..f5165d777 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/model/item/Inventory.java @@ -5,12 +5,14 @@ import java.io.DataOutputStream; import java.io.IOException; import com.gpl.rpg.AndorsTrail.context.WorldContext; +import com.gpl.rpg.AndorsTrail.view.QuickitemView; public final class Inventory extends ItemContainer { public int gold = 0; public static final int NUM_WORN_SLOTS = ItemType.MAX_CATEGORY_WEAR+1+1; // +1 for 0 based index. +1 for left+right rings. public final ItemType[] wear = new ItemType[NUM_WORN_SLOTS]; + public final ItemType[] quickitem = new ItemType[QuickitemView.NUM_QUICK_SLOTS]; public Inventory() { } @@ -37,6 +39,15 @@ public final class Inventory extends ItemContainer { wear[i] = null; } } + if (fileversion < 19) return; + final int quickSlots = src.readInt(); + for(int i = 0; i < quickSlots; ++i) { + if (src.readBoolean()) { + quickitem[i] = world.itemTypes.getItemTypeByTag(src.readUTF()); + } else { + quickitem[i] = null; + } + } } public void writeToParcel(DataOutputStream dest, int flags) throws IOException { @@ -51,5 +62,14 @@ public final class Inventory extends ItemContainer { dest.writeBoolean(false); } } + dest.writeInt(QuickitemView.NUM_QUICK_SLOTS); + for(int i = 0; i < QuickitemView.NUM_QUICK_SLOTS; ++i) { + if (quickitem[i] != null) { + dest.writeBoolean(true); + dest.writeUTF(quickitem[i].searchTag); + } else { + dest.writeBoolean(false); + } + } } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/QuickitemView.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/QuickitemView.java new file mode 100644 index 000000000..1c26d3c65 --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/view/QuickitemView.java @@ -0,0 +1,95 @@ +package com.gpl.rpg.AndorsTrail.view; + +import android.R.color; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.ColorFilter; +import android.graphics.ColorMatrixColorFilter; +import android.util.AttributeSet; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageButton; + +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.model.item.ItemType; +import com.gpl.rpg.AndorsTrail.resource.TileStore; + +public class QuickitemView extends FrameLayout{ + public static final int NUM_QUICK_SLOTS = 3; + + private final WorldContext world; + private final ViewContext view; + private final ImageButton[] items = new ImageButton[NUM_QUICK_SLOTS]; + private final ColorFilter grayScaleFilter = new ColorMatrixColorFilter( + new float[] { 0.30f, 0.59f, 0.11f, 0.0f, 0.0f, + 0.30f, 0.59f, 0.11f, 0.0f, 0.0f, + 0.30f, 0.59f, 0.11f, 0.0f, 0.0f, + 0.00f, 0.00f, 0.00f, 1.0f, 0.0f + }); + + public QuickitemView(Context context, AttributeSet attrs) { + super(context, attrs); + AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivityContext(context); + this.world = app.world; + this.view = app.currentView.get(); + setFocusable(false); + + inflate(context, R.layout.quickitemview, this); + Resources res = getResources(); + this.setBackgroundColor(res.getColor(color.transparent)); + + items[0] = (ImageButton)findViewById(R.id.quickitemview_item1); + items[1] = (ImageButton)findViewById(R.id.quickitemview_item2); + items[2] = (ImageButton)findViewById(R.id.quickitemview_item3); + + for(int i = 0; i < items.length; ++i) { + final int slotId = i; + ImageButton item = items[i]; + item.setImageBitmap(world.tileStore.getBitmap(TileStore.iconID_shop)); + item.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + view.itemController.quickitemUse(slotId); + } + }); + disableButton(item); + } + } + + private void disableButton(ImageButton imageButton) { + imageButton.setEnabled(false); + imageButton.setColorFilter(grayScaleFilter); + } + + private void enableButton(ImageButton imageButton) { + imageButton.setEnabled(true); + imageButton.setColorFilter(null); + } + + @Override + public void setVisibility(int visibility) { + refreshQuickitems(); + super.setVisibility(visibility); + } + + public void refreshQuickitems() { + for (int i = 0; i < NUM_QUICK_SLOTS; ++i){ + ImageButton item = items[i]; + ItemType type = world.model.player.inventory.quickitem[i]; + if(type==null){ + item.setImageBitmap(world.tileStore.getBitmap(TileStore.iconID_shop)); + disableButton(item); + } else { + item.setImageBitmap(world.tileStore.getBitmap(type.iconID)); + if(world.model.player.inventory.hasItem(type.id)){ + enableButton(item); + } else { + disableButton(item); + } + } + } + } +}