using Newtonsoft.Json.Linq; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace Assets.Scripts { public class Inventory : MonoBehaviour { public GameObject head; public GameObject chest; public GameObject shoulders; public GameObject feet; public GameObject ring; public GameObject amulet; public GameObject leftHand; public GameObject rightHand; public GameObject itemDisplay; public GameObject[] bags; public GameObject[] slots; Dictionary statBoost; public int currentBag = -1; TooltipHandler tooltip; public GameObject currentSlot; // Start is called before the first frame update void Start() { createStatBoost(); tooltip = GameObject.Find("TooltipHandler").GetComponent(); itemDisplay.transform.localScale = new Vector3(0,0,0); changeCurrentBag(0); } // Update is called once per frame void Update() { checkInventoryColors(); checkEquipColors(); } private void createStatBoost() { if (statBoost == null) { statBoost = new Dictionary(); statBoost.Add("HP", 0); statBoost.Add("MP", 0); statBoost.Add("HPR", 0); statBoost.Add("MPR", 0); statBoost.Add("STR", 0); statBoost.Add("DEX", 0); statBoost.Add("INT", 0); statBoost.Add("LCK", 0); } } public void addItem(Item item) { if (item != null) { bool itemAdded = false; for (int i = 0; i < bags.Length; i++) { for (int j = 0; j < slots.Length; j++) { if (slots[j].GetComponent().getItem(i) == null) { slots[j].GetComponent().setItem(item, i); itemAdded = true; slots[j].GetComponent().color = item.rarityColor; slots[j].GetComponent().texture = item.image; break; } } if (itemAdded) { GameObject.Find("UIHandler").GetComponent().showMessage("SUCCESS;"+TextHandler.getText("gotItem")); GameObject.Find("QuestLog").GetComponent().updateQuests("collect", item, 1); SteamWorksHandler.getItemAchievement(item); break; } } if (!itemAdded) { GameObject.Find("UIHandler").GetComponent().showMessage("ERROR;"+TextHandler.getText("noSpace")); } } } public void changeCurrentBag(int index) { if (currentBag != -1) { bags[currentBag].transform.parent.Find("Selected").GetComponent().color = Color.white; } currentBag = index; bags[currentBag].transform.parent.Find("Selected").GetComponent().color = Color.cyan; checkInventoryColors(); foreach(GameObject slot in slots) { slot.GetComponent().updateCurrentBag(currentBag); } } private void checkInventoryColors() { Item item; for (int i = 0; i < slots.Length; i++) { item = slots[i].GetComponent().getItem(currentBag); if (item != null) { slots[i].GetComponent().color = item.rarityColor; slots[i].GetComponent().texture = item.image; } else { slots[i].GetComponent().color = Color.white; slots[i].GetComponent().texture = null; } } } private void checkEquipColors() { GameObject slot = head; Item item; for (int i = 0; i < 8; i++) { switch (i) { case 0: slot = head; break; case 1: slot = rightHand; break; case 2: slot = leftHand; break; case 3: slot = amulet; break; case 4: slot = feet; break; case 5: slot = shoulders; break; case 6: slot = chest; break; case 7: slot = ring; break; } item = slot.GetComponent().getEquip(); if (item != null) { slot.GetComponent().color = item.rarityColor; slot.GetComponent().texture = item.image; } else { slot.GetComponent().color = Color.white; } } } public void calculateStatBoost(Dictionary attributes, bool isAddition) { foreach (string key in attributes.Keys) { if (isAddition) { statBoost[key] = statBoost[key] + attributes[key]; } else { statBoost[key] = statBoost[key] - attributes[key]; } } } public Dictionary getEquipmentBonus() { createStatBoost(); return statBoost; } public string saveGame() { string result = ""; int counter = 0; GameObject equip = head; string slotname = ""; result = result + "\"equipment\": {\r\n"; for (int i = 0; i < 8; i++) { switch (i) { case 0: equip = head; slotname = "head"; break; case 1: equip = rightHand; slotname = "rightHand"; break; case 2: equip = leftHand; slotname = "leftHand"; break; case 3: equip = amulet; slotname = "amulet"; break; case 4: equip = feet; slotname = "feet"; break; case 5: equip = shoulders; slotname = "shoulders"; break; case 6: equip = chest; slotname = "chest"; break; case 7: equip = ring; slotname = "ring"; break; } if (equip.GetComponent().getEquip() != null) { result = result + "\""+slotname+"\": {\r\n"; result = result + equip.GetComponent().saveGame(); result = result + "\r\n}"; } else { result = result + "\"" + slotname + "\": \"empty\""; } if (i != 7) { result = result + ",\r\n"; } } result = result + "\r\n},\r\n"; result = result + "\"bags\": {\r\n"; foreach (GameObject slot in slots) { result = result + "\"slot" + counter + "\": {\r\n"; result = result + slot.GetComponent().saveGame(); result = result + "\r\n}"; if (counter < slots.Length - 1) { result = result + ",\r\n"; } counter++; } result = result + "\r\n}"; return result; } public void loadInventory(JToken json) { loadEquipment(json["equipment"]); var jsonData = JObject.Parse(json["bags"].ToString()).Children(); List tokens = jsonData.Children().ToList(); int counter = 0; foreach (JToken slot in tokens) { if (slot["bag1"].ToString() != "empty") { slots[counter].GetComponent().loadSlot(slot["bag1"], 0); } if (slot["bag2"].ToString() != "empty") { slots[counter].GetComponent().loadSlot(slot["bag2"], 1); } if (slot["bag3"].ToString() != "empty") { slots[counter].GetComponent().loadSlot(slot["bag3"], 2); } counter++; } } private void loadEquipment(JToken slot) { GameObject equip = head; string slotname = ""; for (int i = 0; i < 8; i++) { switch (i) { case 0: equip = head; slotname = "head"; break; case 1: equip = rightHand; slotname = "rightHand"; break; case 2: equip = leftHand; slotname = "leftHand"; break; case 3: equip = amulet; slotname = "amulet"; break; case 4: equip = feet; slotname = "feet"; break; case 5: equip = shoulders; slotname = "shoulders"; break; case 6: equip = chest; slotname = "chest"; break; case 7: equip = ring; slotname = "ring"; break; } if (slot[slotname].ToString() != "empty") { equip.GetComponent().loadSlot(slot[slotname], -1); createStatBoost(); calculateStatBoost(equip.GetComponent().getEquip().getAttributes(), true); } } } public void trashItem(){ InventorySlot invSlot = currentSlot.GetComponent(); if (invSlot.place == ItemPlace.BAG) { GameObject.Find("QuestLog").GetComponent().updateQuests("collect", invSlot.getItem(invSlot.getCurrentBag()), -1); invSlot.removeItem(); } else { GameObject.Find("QuestLog").GetComponent().updateQuests("collect", invSlot.getEquip(), -1); invSlot.removeEquip(); } hideSlotOptions(); } public void equipItem(){ InventorySlot invSlot = currentSlot.GetComponent(); if(invSlot.place == ItemPlace.BAG){ Equipment save = (Equipment)invSlot.getItem(currentBag); InventorySlot equipSlot; switch(save.getPlace()){ case ItemPlace.HELMET: equipSlot = head.GetComponent(); break; case ItemPlace.SHOULDER: equipSlot = shoulders.GetComponent(); break; case ItemPlace.BOOTS: equipSlot = feet.GetComponent(); break; case ItemPlace.AMULET: equipSlot = amulet.GetComponent(); break; case ItemPlace.ARMOR: equipSlot = chest.GetComponent(); break; case ItemPlace.RING: equipSlot = ring.GetComponent(); break; case ItemPlace.RIGHTHAND: equipSlot = rightHand.GetComponent(); break; case ItemPlace.LEFTHAND: equipSlot = leftHand.GetComponent(); break; default: equipSlot = invSlot; break; } if(equipSlot.getEquip() != null){ invSlot.setItem(equipSlot.getEquip(), currentBag); calculateStatBoost(equipSlot.getEquip().getAttributes(), false); } else{ invSlot.removeItem(); } equipSlot.setEquip(save); calculateStatBoost(equipSlot.getEquip().getAttributes(), true); } else{ addItem(invSlot.getEquip()); calculateStatBoost(invSlot.getEquip().getAttributes(), false); invSlot.removeEquip(); } hideSlotOptions(); } public void hideSlotOptions(){ GameObject.Find("pnlInventoryActions").transform.localScale = new Vector3(0,0,0); GameObject.Find("btnEquip").transform.Find("Text").GetComponent().text = TextHandler.getText("equip"); GameObject.Find("btnEquip").GetComponent