From daebe87c7ae26bf275f422185cac9a9f844a8d14 Mon Sep 17 00:00:00 2001 From: arnaudcoj Date: Sat, 21 Feb 2015 17:40:33 +0100 Subject: [PATCH 1/4] added an inventory tab to the shop activity --- AndorsTrail/res/values-de/strings.xml | 1 + AndorsTrail/res/values-fr/strings.xml | 3 +- AndorsTrail/res/values-it/strings.xml | 3 +- AndorsTrail/res/values-iw/strings.xml | 2 + AndorsTrail/res/values-ja/strings.xml | 3 +- AndorsTrail/res/values-pl/strings.xml | 3 +- AndorsTrail/res/values-pt-rBR/strings.xml | 3 +- AndorsTrail/res/values-pt/strings.xml | 3 +- AndorsTrail/res/values-ru/strings.xml | 3 +- AndorsTrail/res/values/strings.xml | 1 + .../AndorsTrail/activity/ShopActivity.java | 6 +- .../fragment/ShopActivity_Inventory.java | 349 ++++++++++++++++++ 12 files changed, 372 insertions(+), 8 deletions(-) create mode 100644 AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java diff --git a/AndorsTrail/res/values-de/strings.xml b/AndorsTrail/res/values-de/strings.xml index 4b877b171..7fffa2a29 100644 --- a/AndorsTrail/res/values-de/strings.xml +++ b/AndorsTrail/res/values-de/strings.xml @@ -141,6 +141,7 @@ Deine Goldmünzen: %1$d %1$s gekauft. %1$s verkauft. + Inventar Aufsteigen Du hast Level %1$d erreicht! diff --git a/AndorsTrail/res/values-fr/strings.xml b/AndorsTrail/res/values-fr/strings.xml index a4c3ffc1d..735975297 100644 --- a/AndorsTrail/res/values-fr/strings.xml +++ b/AndorsTrail/res/values-fr/strings.xml @@ -141,7 +141,8 @@ Votre or : %1$d %1$s acheté. %1$s vendu. - + Inventaire + Niveau supérieur Bienvenue au niveau %1$d ! Niveau supérieur diff --git a/AndorsTrail/res/values-it/strings.xml b/AndorsTrail/res/values-it/strings.xml index b06e566ff..e9e9de667 100644 --- a/AndorsTrail/res/values-it/strings.xml +++ b/AndorsTrail/res/values-it/strings.xml @@ -137,7 +137,8 @@ Tuo Oro: %1$d %1$s Comprato. %1$s Venduo. - + Inventario + Nuovo Livello Benvenuto nel livello %1$d! Nuovo Livello diff --git a/AndorsTrail/res/values-iw/strings.xml b/AndorsTrail/res/values-iw/strings.xml index fb9b2aeb5..fad069a13 100644 --- a/AndorsTrail/res/values-iw/strings.xml +++ b/AndorsTrail/res/values-iw/strings.xml @@ -90,5 +90,7 @@ תקיפה: הגנה: עלות תנועה (פעילות): + + ציוד diff --git a/AndorsTrail/res/values-ja/strings.xml b/AndorsTrail/res/values-ja/strings.xml index ca3f944e1..e4aa2b2c7 100644 --- a/AndorsTrail/res/values-ja/strings.xml +++ b/AndorsTrail/res/values-ja/strings.xml @@ -141,7 +141,8 @@ 所持金: %1$d gold %1$s を買った。 %1$s を売った。 - + アイテム + Level up Level %1$d に到達しました! Level up diff --git a/AndorsTrail/res/values-pl/strings.xml b/AndorsTrail/res/values-pl/strings.xml index 2c13a1417..1d3bf5ca9 100644 --- a/AndorsTrail/res/values-pl/strings.xml +++ b/AndorsTrail/res/values-pl/strings.xml @@ -141,7 +141,8 @@ Twoje złoto: %1$d Kupiłeś %1$s. Sprzedałeś %1$s. - + Inwentarz + Podnieś poziom Witaj na poziomie %1$d! Podnieś poziom diff --git a/AndorsTrail/res/values-pt-rBR/strings.xml b/AndorsTrail/res/values-pt-rBR/strings.xml index 9fa330d30..88984a33a 100644 --- a/AndorsTrail/res/values-pt-rBR/strings.xml +++ b/AndorsTrail/res/values-pt-rBR/strings.xml @@ -141,7 +141,8 @@ As suas moedas: %1$d %1$s comprados. %1$s vendidos. - + Inventário + Aumento de nível Benvindo ao nível %1$d! Aumento de nível diff --git a/AndorsTrail/res/values-pt/strings.xml b/AndorsTrail/res/values-pt/strings.xml index 19fd9beca..7f520edc7 100644 --- a/AndorsTrail/res/values-pt/strings.xml +++ b/AndorsTrail/res/values-pt/strings.xml @@ -141,7 +141,8 @@ As tuas moedas: %1$d %1$s comprados. %1$s vendidos. - + Inventário + Aumento de nível Benvindo ao nível %1$d! Aumento de nível diff --git a/AndorsTrail/res/values-ru/strings.xml b/AndorsTrail/res/values-ru/strings.xml index 80287272a..2ee80cdf3 100644 --- a/AndorsTrail/res/values-ru/strings.xml +++ b/AndorsTrail/res/values-ru/strings.xml @@ -141,7 +141,8 @@ Ваше золото: %1$d %1$s куплен. %1$s продан. - + Инвентарь + Уровень повышен Добро пожаловать на уровень %1$d! Новый уровень diff --git a/AndorsTrail/res/values/strings.xml b/AndorsTrail/res/values/strings.xml index 5b95c043b..53b20d743 100644 --- a/AndorsTrail/res/values/strings.xml +++ b/AndorsTrail/res/values/strings.xml @@ -141,6 +141,7 @@ Your gold: %1$d %1$s bought. %1$s sold. + Inventory Level up Welcome to level %1$d! diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java index 3ef0821c7..e36dbe014 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java @@ -7,6 +7,7 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; import com.gpl.rpg.AndorsTrail.R; import com.gpl.rpg.AndorsTrail.activity.fragment.ShopActivity_Buy; +import com.gpl.rpg.AndorsTrail.activity.fragment.ShopActivity_Inventory; import com.gpl.rpg.AndorsTrail.activity.fragment.ShopActivity_Sell; public final class ShopActivity extends FragmentActivity { @@ -24,7 +25,7 @@ public void onCreate(Bundle savedInstanceState) { final Resources res = getResources(); FragmentTabHost tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); - tabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); + tabHost.setup(this, getSupportFragmentManager(), R .id.realtabcontent); tabHost.addTab(tabHost.newTabSpec("buy") .setIndicator(res.getString(R.string.shop_buy)) @@ -32,5 +33,8 @@ public void onCreate(Bundle savedInstanceState) { tabHost.addTab(tabHost.newTabSpec("sell") .setIndicator(res.getString(R.string.shop_sell)) ,ShopActivity_Sell.class, null); + tabHost.addTab(tabHost.newTabSpec("inventory") + .setIndicator(res.getString(R.string.shop_inventory)) + ,ShopActivity_Inventory.class, null); } } diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java new file mode 100644 index 000000000..7eede4a8f --- /dev/null +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java @@ -0,0 +1,349 @@ +package com.gpl.rpg.AndorsTrail.activity.fragment; + +import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; +import com.gpl.rpg.AndorsTrail.Dialogs; +import com.gpl.rpg.AndorsTrail.R; +import com.gpl.rpg.AndorsTrail.activity.ItemInfoActivity; +import com.gpl.rpg.AndorsTrail.context.ControllerContext; +import com.gpl.rpg.AndorsTrail.context.WorldContext; +import com.gpl.rpg.AndorsTrail.controller.ItemController; +import com.gpl.rpg.AndorsTrail.model.actor.Player; +import com.gpl.rpg.AndorsTrail.model.item.Inventory; +import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; +import com.gpl.rpg.AndorsTrail.model.item.ItemType; +import com.gpl.rpg.AndorsTrail.resource.tiles.TileCollection; +import com.gpl.rpg.AndorsTrail.view.ItemContainerAdapter; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.ContextMenu; +import android.view.LayoutInflater; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.AdapterView.AdapterContextMenuInfo; +import android.widget.AdapterView.OnItemClickListener; + +public final class ShopActivity_Inventory extends Fragment { + + private static final int INTENTREQUEST_ITEMINFO = 3; + private static final int INTENTREQUEST_BULKSELECT_DROP = 11; + + private WorldContext world; + private ControllerContext controllers; + private TileCollection wornTiles; + + private Player player; + private ItemContainerAdapter inventoryListAdapter; + + private TextView heroinfo_stats_gold; + private TextView heroinfo_stats_attack; + private TextView heroinfo_stats_defense; + + private ItemType lastSelectedItem; // Workaround android bug #7139 + + private final ImageView[] wornItemImage = new ImageView[Inventory.WearSlot.values().length]; + private final int[] defaultWornItemImageResourceIDs = new int[Inventory.WearSlot.values().length]; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity()); + if (!app.isInitialized()) return; + this.world = app.getWorld(); + this.controllers = app.getControllerContext(); + this.player = world.model.player; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.heroinfo_inventory, container, false); + + ListView inventoryList = (ListView) v.findViewById(R.id.inventorylist_root); + registerForContextMenu(inventoryList); + inventoryList.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View v, int position, long id) { + ItemType itemType = inventoryListAdapter.getItem(position).itemType; + showInventoryItemInfo(itemType.id); + } + }); + ItemContainer inv = player.inventory; + wornTiles = world.tileManager.loadTilesFor(player.inventory, getResources()); + inventoryListAdapter = new ItemContainerAdapter(getActivity(), world.tileManager, inv, player, wornTiles); + inventoryList.setAdapter(inventoryListAdapter); + + heroinfo_stats_gold = (TextView) v.findViewById(R.id.heroinfo_stats_gold); + heroinfo_stats_attack = (TextView) v.findViewById(R.id.heroinfo_stats_attack); + heroinfo_stats_defense = (TextView) v.findViewById(R.id.heroinfo_stats_defense); + + setWearSlot(v, Inventory.WearSlot.weapon, R.id.heroinfo_worn_weapon, R.drawable.equip_weapon); + setWearSlot(v, Inventory.WearSlot.shield, R.id.heroinfo_worn_shield, R.drawable.equip_shield); + setWearSlot(v, Inventory.WearSlot.head, R.id.heroinfo_worn_head, R.drawable.equip_head); + setWearSlot(v, Inventory.WearSlot.body, R.id.heroinfo_worn_body, R.drawable.equip_body); + setWearSlot(v, Inventory.WearSlot.feet, R.id.heroinfo_worn_feet, R.drawable.equip_feet); + setWearSlot(v, Inventory.WearSlot.neck, R.id.heroinfo_worn_neck, R.drawable.equip_neck); + setWearSlot(v, Inventory.WearSlot.hand, R.id.heroinfo_worn_hand, R.drawable.equip_hand); + setWearSlot(v, Inventory.WearSlot.leftring, R.id.heroinfo_worn_ringleft, R.drawable.equip_ring); + setWearSlot(v, Inventory.WearSlot.rightring, R.id.heroinfo_worn_ringright, R.drawable.equip_ring); + + return v; + } + + @Override + public void onStart() { + super.onStart(); + update(); + } + + private void setWearSlot(final View v, final Inventory.WearSlot inventorySlot, int viewId, int resourceId) { + final ImageView imageView = (ImageView) v.findViewById(viewId); + wornItemImage[inventorySlot.ordinal()] = imageView; + defaultWornItemImageResourceIDs[inventorySlot.ordinal()] = resourceId; + imageView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (player.inventory.isEmptySlot(inventorySlot)) return; + imageView.setClickable(false); // Will be enabled again on update() + showEquippedItemInfo(player.inventory.getItemTypeInWearSlot(inventorySlot), inventorySlot); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case INTENTREQUEST_ITEMINFO: + if (resultCode != Activity.RESULT_OK) break; + + ItemType itemType = world.itemTypes.getItemType(data.getExtras().getString("itemTypeID")); + ItemInfoActivity.ItemInfoAction actionType = ItemInfoActivity.ItemInfoAction.valueOf(data.getExtras().getString("actionType")); + if (actionType == ItemInfoActivity.ItemInfoAction.unequip) { + Inventory.WearSlot slot = Inventory.WearSlot.valueOf(data.getExtras().getString("inventorySlot")); + controllers.itemController.unequipSlot(itemType, slot); + } else if (actionType == ItemInfoActivity.ItemInfoAction.equip) { + Inventory.WearSlot slot = suggestInventorySlot(itemType); + controllers.itemController.equipItem(itemType, slot); + } else if (actionType == ItemInfoActivity.ItemInfoAction.use) { + controllers.itemController.useItem(itemType); + } + break; + case INTENTREQUEST_BULKSELECT_DROP: + if (resultCode != Activity.RESULT_OK) break; + + int quantity = data.getExtras().getInt("selectedAmount"); + String itemTypeID = data.getExtras().getString("itemTypeID"); + dropItem(itemTypeID, quantity); + break; + } + update(); + } + + private Inventory.WearSlot suggestInventorySlot(ItemType itemType) { + Inventory.WearSlot slot = itemType.category.inventorySlot; + if (player.inventory.isEmptySlot(slot)) return slot; + + if (slot == Inventory.WearSlot.leftring) return Inventory.WearSlot.rightring; + if (itemType.isOffhandCapableWeapon()) { + ItemType mainWeapon = player.inventory.getItemTypeInWearSlot(Inventory.WearSlot.weapon); + if (mainWeapon != null && mainWeapon.isTwohandWeapon()) return slot; + else if (player.inventory.isEmptySlot(Inventory.WearSlot.shield)) return Inventory.WearSlot.shield; + } + return slot; + } + + private void dropItem(String itemTypeID, int quantity) { + ItemType itemType = world.itemTypes.getItemType(itemTypeID); + controllers.itemController.dropItem(itemType, quantity); + } + + private void update() { + updateTraits(); + updateWorn(); + updateItemList(); + } + + private void updateTraits() { + heroinfo_stats_gold.setText(getResources().getString(R.string.heroinfo_gold, player.inventory.gold)); + + StringBuilder sb = new StringBuilder(10); + ItemController.describeAttackEffect( + player.getAttackChance(), + player.getDamagePotential().current, + player.getDamagePotential().max, + player.getCriticalSkill(), + player.getCriticalMultiplier(), + sb); + heroinfo_stats_attack.setText(sb.toString()); + + sb = new StringBuilder(10); + ItemController.describeBlockEffect(player.getBlockChance(), player.getDamageResistance(), sb); + heroinfo_stats_defense.setText(sb.toString()); + } + + private void updateWorn() { + for(Inventory.WearSlot slot : Inventory.WearSlot.values()) { + updateWornImage(wornItemImage[slot.ordinal()], defaultWornItemImageResourceIDs[slot.ordinal()], player.inventory.getItemTypeInWearSlot(slot)); + } + } + + private void updateWornImage(ImageView imageView, int resourceIDEmptyImage, ItemType type) { + if (type != null) { + world.tileManager.setImageViewTile(getResources(), imageView, type, wornTiles); + } else { + imageView.setImageResource(resourceIDEmptyImage); + } + imageView.setClickable(true); + } + + private void updateItemList() { + inventoryListAdapter.notifyDataSetChanged(); + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + ItemType type = getSelectedItemType((AdapterContextMenuInfo) menuInfo); + MenuInflater inflater = getActivity().getMenuInflater(); + 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); + menu.findItem(R.id.inv_menu_assign).setVisible(true); + } + if (type.isEquippable()) { + menu.findItem(R.id.inv_menu_equip).setVisible(true); + if (type.isOffhandCapableWeapon()) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true); + else if (type.category.inventorySlot == Inventory.WearSlot.leftring) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true); + } + break; + } + lastSelectedItem = null; + } + + private ItemType getSelectedItemType(AdapterContextMenuInfo info) { + return inventoryListAdapter.getItem(info.position).itemType; + } + @Override + public boolean onContextItemSelected(MenuItem item) { + ItemType itemType; + AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); + switch (item.getItemId()) { + case R.id.inv_menu_info: + showInventoryItemInfo(getSelectedItemType(info)); + //context.mapController.itemInfo(this, getSelectedItemType(info)); + break; + case R.id.inv_menu_drop: + String itemTypeID = getSelectedItemType(info).id; + int quantity = player.inventory.getItemQuantity(itemTypeID); + if (quantity > 1) { + Intent intent = Dialogs.getIntentForBulkDroppingInterface(getActivity(), itemTypeID, quantity); + startActivityForResult(intent, INTENTREQUEST_BULKSELECT_DROP); + } else { + dropItem(itemTypeID, quantity); + } + break; + case R.id.inv_menu_equip: + itemType = getSelectedItemType(info); + controllers.itemController.equipItem(itemType, itemType.category.inventorySlot); + break; + case R.id.inv_menu_equip_offhand: + itemType = getSelectedItemType(info); + if (itemType.category.inventorySlot == Inventory.WearSlot.weapon) { + controllers.itemController.equipItem(itemType, Inventory.WearSlot.shield); + } else if (itemType.category.inventorySlot == Inventory.WearSlot.leftring) { + controllers.itemController.equipItem(itemType, Inventory.WearSlot.rightring); + } + break; + /*case R.id.inv_menu_unequip: + context.mapController.unequipItem(this, getSelectedItemType(info)); + break;*/ + case R.id.inv_menu_use: + controllers.itemController.useItem(getSelectedItemType(info)); + break; + case R.id.inv_menu_assign: + lastSelectedItem = getSelectedItemType(info); + break; + case R.id.inv_assign_slot1: + controllers.itemController.setQuickItem(lastSelectedItem, 0); + break; + case R.id.inv_assign_slot2: + controllers.itemController.setQuickItem(lastSelectedItem, 1); + break; + case R.id.inv_assign_slot3: + controllers.itemController.setQuickItem(lastSelectedItem, 2); + break; + case R.id.inv_menu_movetop: + player.inventory.sortToTop(getSelectedItemType(info).id); + break; + case R.id.inv_menu_movebottom: + player.inventory.sortToBottom(getSelectedItemType(info).id); + break; + default: + return super.onContextItemSelected(item); + } + update(); + return true; + } + + private void showEquippedItemInfo(ItemType itemType, Inventory.WearSlot inventorySlot) { + String text; + boolean enabled = true; + + if (world.model.uiSelections.isInCombat) { + int ap = world.model.player.getReequipCost(); + text = getResources().getString(R.string.iteminfo_action_unequip_ap, ap); + if (ap > 0) { + enabled = world.model.player.hasAPs(ap); + } + } else { + text = getResources().getString(R.string.iteminfo_action_unequip); + } + Intent intent = Dialogs.getIntentForItemInfo(getActivity(), itemType.id, ItemInfoActivity.ItemInfoAction.unequip, text, enabled, inventorySlot); + startActivityForResult(intent, INTENTREQUEST_ITEMINFO); + } + private void showInventoryItemInfo(String itemTypeID) { + showInventoryItemInfo(world.itemTypes.getItemType(itemTypeID)); + } + private void showInventoryItemInfo(ItemType itemType) { + String text = ""; + int ap = 0; + boolean enabled = true; + ItemInfoActivity.ItemInfoAction action = ItemInfoActivity.ItemInfoAction.none; + final boolean isInCombat = world.model.uiSelections.isInCombat; + if (itemType.isEquippable()) { + if (isInCombat) { + ap = world.model.player.getReequipCost(); + text = getResources().getString(R.string.iteminfo_action_equip_ap, ap); + } else { + text = getResources().getString(R.string.iteminfo_action_equip); + } + action = ItemInfoActivity.ItemInfoAction.equip; + } else if (itemType.isUsable()) { + if (isInCombat) { + ap = world.model.player.getUseItemCost(); + text = getResources().getString(R.string.iteminfo_action_use_ap, ap); + } else { + text = getResources().getString(R.string.iteminfo_action_use); + } + action = ItemInfoActivity.ItemInfoAction.use; + } + if (isInCombat && ap > 0) { + enabled = world.model.player.hasAPs(ap); + } + + Intent intent = Dialogs.getIntentForItemInfo(getActivity(), itemType.id, action, text, enabled, null); + startActivityForResult(intent, INTENTREQUEST_ITEMINFO); + } +} From d86808031364ca396b15b489ae245b49eb894f8d Mon Sep 17 00:00:00 2001 From: arnaudcoj Date: Mon, 23 Feb 2015 15:08:50 +0100 Subject: [PATCH 2/4] Deleted unwanted spaces Deleted some spaces I previously added unvoluntarly. --- .../src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java index e36dbe014..931c713af 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/ShopActivity.java @@ -25,7 +25,7 @@ public void onCreate(Bundle savedInstanceState) { final Resources res = getResources(); FragmentTabHost tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); - tabHost.setup(this, getSupportFragmentManager(), R .id.realtabcontent); + tabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); tabHost.addTab(tabHost.newTabSpec("buy") .setIndicator(res.getString(R.string.shop_buy)) From bdeac6f2fd754675ce2f79c668a8763a2007fda4 Mon Sep 17 00:00:00 2001 From: arnaudcoj Date: Sun, 1 Mar 2015 18:29:16 +0100 Subject: [PATCH 3/4] the class is no longer final --- .../activity/fragment/HeroinfoActivity_Inventory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java index 679bcaaed..0b3094025 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/HeroinfoActivity_Inventory.java @@ -27,7 +27,7 @@ import com.gpl.rpg.AndorsTrail.resource.tiles.TileCollection; import com.gpl.rpg.AndorsTrail.view.ItemContainerAdapter; -public final class HeroinfoActivity_Inventory extends Fragment { +public class HeroinfoActivity_Inventory extends Fragment { private static final int INTENTREQUEST_ITEMINFO = 3; private static final int INTENTREQUEST_BULKSELECT_DROP = 11; From e61c80ee3afb639e1a11e0038d2dc8f4f7ab4e74 Mon Sep 17 00:00:00 2001 From: arnaudcoj Date: Sun, 1 Mar 2015 18:29:52 +0100 Subject: [PATCH 4/4] ShopActivity_Inventory now extends Heroinfo_Inventory --- .../fragment/ShopActivity_Inventory.java | 346 +----------------- 1 file changed, 1 insertion(+), 345 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java index 7eede4a8f..1c2bb2937 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/activity/fragment/ShopActivity_Inventory.java @@ -1,349 +1,5 @@ package com.gpl.rpg.AndorsTrail.activity.fragment; -import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; -import com.gpl.rpg.AndorsTrail.Dialogs; -import com.gpl.rpg.AndorsTrail.R; -import com.gpl.rpg.AndorsTrail.activity.ItemInfoActivity; -import com.gpl.rpg.AndorsTrail.context.ControllerContext; -import com.gpl.rpg.AndorsTrail.context.WorldContext; -import com.gpl.rpg.AndorsTrail.controller.ItemController; -import com.gpl.rpg.AndorsTrail.model.actor.Player; -import com.gpl.rpg.AndorsTrail.model.item.Inventory; -import com.gpl.rpg.AndorsTrail.model.item.ItemContainer; -import com.gpl.rpg.AndorsTrail.model.item.ItemType; -import com.gpl.rpg.AndorsTrail.resource.tiles.TileCollection; -import com.gpl.rpg.AndorsTrail.view.ItemContainerAdapter; -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.ContextMenu; -import android.view.LayoutInflater; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.view.ContextMenu.ContextMenuInfo; -import android.view.View.OnClickListener; -import android.widget.AdapterView; -import android.widget.ImageView; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.AdapterView.AdapterContextMenuInfo; -import android.widget.AdapterView.OnItemClickListener; - -public final class ShopActivity_Inventory extends Fragment { - - private static final int INTENTREQUEST_ITEMINFO = 3; - private static final int INTENTREQUEST_BULKSELECT_DROP = 11; - - private WorldContext world; - private ControllerContext controllers; - private TileCollection wornTiles; - - private Player player; - private ItemContainerAdapter inventoryListAdapter; - - private TextView heroinfo_stats_gold; - private TextView heroinfo_stats_attack; - private TextView heroinfo_stats_defense; - - private ItemType lastSelectedItem; // Workaround android bug #7139 - - private final ImageView[] wornItemImage = new ImageView[Inventory.WearSlot.values().length]; - private final int[] defaultWornItemImageResourceIDs = new int[Inventory.WearSlot.values().length]; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this.getActivity()); - if (!app.isInitialized()) return; - this.world = app.getWorld(); - this.controllers = app.getControllerContext(); - this.player = world.model.player; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.heroinfo_inventory, container, false); - - ListView inventoryList = (ListView) v.findViewById(R.id.inventorylist_root); - registerForContextMenu(inventoryList); - inventoryList.setOnItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View v, int position, long id) { - ItemType itemType = inventoryListAdapter.getItem(position).itemType; - showInventoryItemInfo(itemType.id); - } - }); - ItemContainer inv = player.inventory; - wornTiles = world.tileManager.loadTilesFor(player.inventory, getResources()); - inventoryListAdapter = new ItemContainerAdapter(getActivity(), world.tileManager, inv, player, wornTiles); - inventoryList.setAdapter(inventoryListAdapter); - - heroinfo_stats_gold = (TextView) v.findViewById(R.id.heroinfo_stats_gold); - heroinfo_stats_attack = (TextView) v.findViewById(R.id.heroinfo_stats_attack); - heroinfo_stats_defense = (TextView) v.findViewById(R.id.heroinfo_stats_defense); - - setWearSlot(v, Inventory.WearSlot.weapon, R.id.heroinfo_worn_weapon, R.drawable.equip_weapon); - setWearSlot(v, Inventory.WearSlot.shield, R.id.heroinfo_worn_shield, R.drawable.equip_shield); - setWearSlot(v, Inventory.WearSlot.head, R.id.heroinfo_worn_head, R.drawable.equip_head); - setWearSlot(v, Inventory.WearSlot.body, R.id.heroinfo_worn_body, R.drawable.equip_body); - setWearSlot(v, Inventory.WearSlot.feet, R.id.heroinfo_worn_feet, R.drawable.equip_feet); - setWearSlot(v, Inventory.WearSlot.neck, R.id.heroinfo_worn_neck, R.drawable.equip_neck); - setWearSlot(v, Inventory.WearSlot.hand, R.id.heroinfo_worn_hand, R.drawable.equip_hand); - setWearSlot(v, Inventory.WearSlot.leftring, R.id.heroinfo_worn_ringleft, R.drawable.equip_ring); - setWearSlot(v, Inventory.WearSlot.rightring, R.id.heroinfo_worn_ringright, R.drawable.equip_ring); - - return v; - } - - @Override - public void onStart() { - super.onStart(); - update(); - } - - private void setWearSlot(final View v, final Inventory.WearSlot inventorySlot, int viewId, int resourceId) { - final ImageView imageView = (ImageView) v.findViewById(viewId); - wornItemImage[inventorySlot.ordinal()] = imageView; - defaultWornItemImageResourceIDs[inventorySlot.ordinal()] = resourceId; - imageView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (player.inventory.isEmptySlot(inventorySlot)) return; - imageView.setClickable(false); // Will be enabled again on update() - showEquippedItemInfo(player.inventory.getItemTypeInWearSlot(inventorySlot), inventorySlot); - } - }); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - switch (requestCode) { - case INTENTREQUEST_ITEMINFO: - if (resultCode != Activity.RESULT_OK) break; - - ItemType itemType = world.itemTypes.getItemType(data.getExtras().getString("itemTypeID")); - ItemInfoActivity.ItemInfoAction actionType = ItemInfoActivity.ItemInfoAction.valueOf(data.getExtras().getString("actionType")); - if (actionType == ItemInfoActivity.ItemInfoAction.unequip) { - Inventory.WearSlot slot = Inventory.WearSlot.valueOf(data.getExtras().getString("inventorySlot")); - controllers.itemController.unequipSlot(itemType, slot); - } else if (actionType == ItemInfoActivity.ItemInfoAction.equip) { - Inventory.WearSlot slot = suggestInventorySlot(itemType); - controllers.itemController.equipItem(itemType, slot); - } else if (actionType == ItemInfoActivity.ItemInfoAction.use) { - controllers.itemController.useItem(itemType); - } - break; - case INTENTREQUEST_BULKSELECT_DROP: - if (resultCode != Activity.RESULT_OK) break; - - int quantity = data.getExtras().getInt("selectedAmount"); - String itemTypeID = data.getExtras().getString("itemTypeID"); - dropItem(itemTypeID, quantity); - break; - } - update(); - } - - private Inventory.WearSlot suggestInventorySlot(ItemType itemType) { - Inventory.WearSlot slot = itemType.category.inventorySlot; - if (player.inventory.isEmptySlot(slot)) return slot; - - if (slot == Inventory.WearSlot.leftring) return Inventory.WearSlot.rightring; - if (itemType.isOffhandCapableWeapon()) { - ItemType mainWeapon = player.inventory.getItemTypeInWearSlot(Inventory.WearSlot.weapon); - if (mainWeapon != null && mainWeapon.isTwohandWeapon()) return slot; - else if (player.inventory.isEmptySlot(Inventory.WearSlot.shield)) return Inventory.WearSlot.shield; - } - return slot; - } - - private void dropItem(String itemTypeID, int quantity) { - ItemType itemType = world.itemTypes.getItemType(itemTypeID); - controllers.itemController.dropItem(itemType, quantity); - } - - private void update() { - updateTraits(); - updateWorn(); - updateItemList(); - } - - private void updateTraits() { - heroinfo_stats_gold.setText(getResources().getString(R.string.heroinfo_gold, player.inventory.gold)); - - StringBuilder sb = new StringBuilder(10); - ItemController.describeAttackEffect( - player.getAttackChance(), - player.getDamagePotential().current, - player.getDamagePotential().max, - player.getCriticalSkill(), - player.getCriticalMultiplier(), - sb); - heroinfo_stats_attack.setText(sb.toString()); - - sb = new StringBuilder(10); - ItemController.describeBlockEffect(player.getBlockChance(), player.getDamageResistance(), sb); - heroinfo_stats_defense.setText(sb.toString()); - } - - private void updateWorn() { - for(Inventory.WearSlot slot : Inventory.WearSlot.values()) { - updateWornImage(wornItemImage[slot.ordinal()], defaultWornItemImageResourceIDs[slot.ordinal()], player.inventory.getItemTypeInWearSlot(slot)); - } - } - - private void updateWornImage(ImageView imageView, int resourceIDEmptyImage, ItemType type) { - if (type != null) { - world.tileManager.setImageViewTile(getResources(), imageView, type, wornTiles); - } else { - imageView.setImageResource(resourceIDEmptyImage); - } - imageView.setClickable(true); - } - - private void updateItemList() { - inventoryListAdapter.notifyDataSetChanged(); - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - ItemType type = getSelectedItemType((AdapterContextMenuInfo) menuInfo); - MenuInflater inflater = getActivity().getMenuInflater(); - 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); - menu.findItem(R.id.inv_menu_assign).setVisible(true); - } - if (type.isEquippable()) { - menu.findItem(R.id.inv_menu_equip).setVisible(true); - if (type.isOffhandCapableWeapon()) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true); - else if (type.category.inventorySlot == Inventory.WearSlot.leftring) menu.findItem(R.id.inv_menu_equip_offhand).setVisible(true); - } - break; - } - lastSelectedItem = null; - } - - private ItemType getSelectedItemType(AdapterContextMenuInfo info) { - return inventoryListAdapter.getItem(info.position).itemType; - } - @Override - public boolean onContextItemSelected(MenuItem item) { - ItemType itemType; - AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); - switch (item.getItemId()) { - case R.id.inv_menu_info: - showInventoryItemInfo(getSelectedItemType(info)); - //context.mapController.itemInfo(this, getSelectedItemType(info)); - break; - case R.id.inv_menu_drop: - String itemTypeID = getSelectedItemType(info).id; - int quantity = player.inventory.getItemQuantity(itemTypeID); - if (quantity > 1) { - Intent intent = Dialogs.getIntentForBulkDroppingInterface(getActivity(), itemTypeID, quantity); - startActivityForResult(intent, INTENTREQUEST_BULKSELECT_DROP); - } else { - dropItem(itemTypeID, quantity); - } - break; - case R.id.inv_menu_equip: - itemType = getSelectedItemType(info); - controllers.itemController.equipItem(itemType, itemType.category.inventorySlot); - break; - case R.id.inv_menu_equip_offhand: - itemType = getSelectedItemType(info); - if (itemType.category.inventorySlot == Inventory.WearSlot.weapon) { - controllers.itemController.equipItem(itemType, Inventory.WearSlot.shield); - } else if (itemType.category.inventorySlot == Inventory.WearSlot.leftring) { - controllers.itemController.equipItem(itemType, Inventory.WearSlot.rightring); - } - break; - /*case R.id.inv_menu_unequip: - context.mapController.unequipItem(this, getSelectedItemType(info)); - break;*/ - case R.id.inv_menu_use: - controllers.itemController.useItem(getSelectedItemType(info)); - break; - case R.id.inv_menu_assign: - lastSelectedItem = getSelectedItemType(info); - break; - case R.id.inv_assign_slot1: - controllers.itemController.setQuickItem(lastSelectedItem, 0); - break; - case R.id.inv_assign_slot2: - controllers.itemController.setQuickItem(lastSelectedItem, 1); - break; - case R.id.inv_assign_slot3: - controllers.itemController.setQuickItem(lastSelectedItem, 2); - break; - case R.id.inv_menu_movetop: - player.inventory.sortToTop(getSelectedItemType(info).id); - break; - case R.id.inv_menu_movebottom: - player.inventory.sortToBottom(getSelectedItemType(info).id); - break; - default: - return super.onContextItemSelected(item); - } - update(); - return true; - } - - private void showEquippedItemInfo(ItemType itemType, Inventory.WearSlot inventorySlot) { - String text; - boolean enabled = true; - - if (world.model.uiSelections.isInCombat) { - int ap = world.model.player.getReequipCost(); - text = getResources().getString(R.string.iteminfo_action_unequip_ap, ap); - if (ap > 0) { - enabled = world.model.player.hasAPs(ap); - } - } else { - text = getResources().getString(R.string.iteminfo_action_unequip); - } - Intent intent = Dialogs.getIntentForItemInfo(getActivity(), itemType.id, ItemInfoActivity.ItemInfoAction.unequip, text, enabled, inventorySlot); - startActivityForResult(intent, INTENTREQUEST_ITEMINFO); - } - private void showInventoryItemInfo(String itemTypeID) { - showInventoryItemInfo(world.itemTypes.getItemType(itemTypeID)); - } - private void showInventoryItemInfo(ItemType itemType) { - String text = ""; - int ap = 0; - boolean enabled = true; - ItemInfoActivity.ItemInfoAction action = ItemInfoActivity.ItemInfoAction.none; - final boolean isInCombat = world.model.uiSelections.isInCombat; - if (itemType.isEquippable()) { - if (isInCombat) { - ap = world.model.player.getReequipCost(); - text = getResources().getString(R.string.iteminfo_action_equip_ap, ap); - } else { - text = getResources().getString(R.string.iteminfo_action_equip); - } - action = ItemInfoActivity.ItemInfoAction.equip; - } else if (itemType.isUsable()) { - if (isInCombat) { - ap = world.model.player.getUseItemCost(); - text = getResources().getString(R.string.iteminfo_action_use_ap, ap); - } else { - text = getResources().getString(R.string.iteminfo_action_use); - } - action = ItemInfoActivity.ItemInfoAction.use; - } - if (isInCombat && ap > 0) { - enabled = world.model.player.hasAPs(ap); - } - - Intent intent = Dialogs.getIntentForItemInfo(getActivity(), itemType.id, action, text, enabled, null); - startActivityForResult(intent, INTENTREQUEST_ITEMINFO); - } +public final class ShopActivity_Inventory extends HeroinfoActivity_Inventory { }