using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class UnitSetUiCtrl : SingletonMonoBehaviour { //½ºÅÝ Á¤º¸ ui [SerializeField] TMP_Text name; [SerializeField] TMP_Text attribute; [SerializeField] TMP_Text hp; [SerializeField] TMP_Text defense; [SerializeField] TMP_Text attack; [SerializeField] TMP_Text defensePenetration; [SerializeField] TMP_Text attackSpeed; [SerializeField] TMP_Text moveSpeed; [SerializeField] TMP_Text critical; [SerializeField] TMP_Text criticalDamage; [SerializeField] TMP_Text damageReduction; [SerializeField] TMP_Text level; [SerializeField] TMP_Text maxLevel; //À¯´Ö ÇÁ¸®Æé¹× À§Ä¡ [SerializeField] GameObject itemPrefab; [SerializeField] Transform itemContent; [SerializeField] GameObject unitPrefab; [SerializeField] Transform unitContent; //°¢Á¾ ¼¼ÆÃ ui [SerializeField] GameObject objInfo; [SerializeField] GameObject objItemView; [SerializeField] GameObject objEquipment; [SerializeField] GameObject objDeck; //Äɸ¯ÅÍ Ä«¸Þ¶ó [SerializeField] Transform CamContent; GameObject UnitObject; //¾ÆÀÌÅÛ Á¤º¸ [SerializeField] GameObject itemInfo; [SerializeField] Image itemImage; [SerializeField] TMP_Text itemName; [SerializeField] TMP_Text equipType; [SerializeField] GameObject status0; [SerializeField] TMP_Text status0Status; [SerializeField] TMP_Text status0Value; [SerializeField] GameObject status1; [SerializeField] TMP_Text status1Status; [SerializeField] TMP_Text status1Value; [SerializeField] GameObject status2; [SerializeField] TMP_Text status2Status; [SerializeField] TMP_Text status2Value; [SerializeField] GameObject status3; [SerializeField] TMP_Text status3Status; [SerializeField] TMP_Text status3Value; //À¯´Ö ÀåÂø ¾ÆÀÌÅÛ Á¤º¸ [SerializeField] Image[] equipItems; GameObjectPool itemPrefabList; GameObjectPool unitPrefabList; List onItemPrefabList; List onUnitPrefabList; Equipment selectItem; EquipmentItemPrefab selectItemPrefab; DeckUnitInfo selectUnit; UnitPrefab selectUnitPrefab; //µ¦ À¯´Öµé [SerializeField] DeckPrefab[] DeckPrefabs; protected override void OnAwake() { maxLevel.text = Statics.dynamic["maxLevel"]; onItemPrefabList = new List(); onUnitPrefabList = new List(); itemPrefabList = new GameObjectPool(5, () => { var obj = Instantiate(itemPrefab, itemContent); obj.SetActive(false); var clone = obj.GetComponent(); return clone; }); unitPrefabList = new GameObjectPool(5, () => { var obj = Instantiate(unitPrefab, unitContent); obj.SetActive(false); var clone = obj.GetComponent(); return clone; }); } private void OnEnable() { ButtonStatus(); onItemPrefabList.Clear(); foreach (var item in Statics.itemManager.box.equipment) { //ÀåÂøµÈ ¾ÆÀÌÅÛ ½ºÅµ if (item.equip_unit != 0) continue; EquipmentItemPrefab prefab = itemPrefabList.pop(); prefab.SetData(item); prefab.gameObject.SetActive(true); prefab.GetComponent().SetAsLastSibling(); onItemPrefabList.Add(prefab); } foreach (var item in Statics.itemManager.box.deckUnitInfo) { UnitPrefab prefab = unitPrefabList.pop(); prefab.SetData(item); prefab.gameObject.SetActive(true); onUnitPrefabList.Add(prefab); } onUnitPrefabList[0].SelectUnit(); for(int n = 0; n < DeckPrefabs.Length; n++) { DeckPrefabs[n].UnitSet(); } } private void OnDisable() { foreach (var item in onItemPrefabList) { item.gameObject.SetActive(false); itemPrefabList.push(item); } foreach (var item in onUnitPrefabList) { item.gameObject.SetActive(false); unitPrefabList.push(item); } } public void ButtonStatus() { objInfo.SetActive(true); objItemView.SetActive(false); objEquipment.SetActive(false); objDeck.SetActive(false); itemInfo.SetActive(false); } public void ButtonEquipment() { objInfo.SetActive(false); objItemView.SetActive(true); objEquipment.SetActive(true); objDeck.SetActive(false); itemInfo.SetActive(false); } public void ButtonDeck() { objInfo.SetActive(false); objItemView.SetActive(false); objEquipment.SetActive(false); objDeck.SetActive(true); itemInfo.SetActive(false); } public void ButtonHaracteristic() { objInfo.SetActive(false); objItemView.SetActive(false); objEquipment.SetActive(false); objDeck.SetActive(false); itemInfo.SetActive(false); } public void StatusSet(UnitPrefab unitPrefab, UnitData unitData, DeckUnitInfo deckUnitInfo, UnitCtrl unitCtrl) { this.selectUnitPrefab = unitPrefab; this.selectUnit = deckUnitInfo; level.text = deckUnitInfo.level.ToString(); name.text = unitData.name; attribute.text = "None"; hp.text = (unitData.hp).ToString(); defense.text = (unitData.defense).ToString(); attack.text = (unitData.attack).ToString(); defensePenetration.text = "0%"; attackSpeed.text = (unitData.attack_speed).ToString(); moveSpeed.text = (unitData.move_speed).ToString(); critical.text = "0%"; criticalDamage.text = "50%"; damageReduction.text = "0%"; Equipment index = null; if (deckUnitInfo.equip0_id == 0) { equipItems[0].color = Color.clear; } else { equipItems[0].color = Color.white; index = Statics.itemManager.box.FindEquipment(deckUnitInfo.equip0_id); if (index == null) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[0].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[index.equipment_data_id].name]; } if (deckUnitInfo.equip1_id == 0) { equipItems[1].color = Color.clear; } else { equipItems[1].color = Color.white; index = Statics.itemManager.box.FindEquipment(deckUnitInfo.equip1_id); if (index == null) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[1].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[index.equipment_data_id].name]; } if (deckUnitInfo.equip2_id == 0) { equipItems[2].color = Color.clear; } else { equipItems[2].color = Color.white; index = Statics.itemManager.box.FindEquipment(deckUnitInfo.equip2_id); if (index == null) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[2].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[index.equipment_data_id].name]; } if (deckUnitInfo.equip3_id == 0) { equipItems[3].color = Color.clear; } else { equipItems[3].color = Color.white; index = Statics.itemManager.box.FindEquipment(deckUnitInfo.equip3_id); if (index == null) { Debug.LogError("notData : " + deckUnitInfo.equip3_id); equipItems[2].color = Color.clear; } else equipItems[3].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[index.equipment_data_id].name]; } if (deckUnitInfo.equip4_id == 0) { equipItems[4].color = Color.clear; } else { equipItems[4].color = Color.white; index = Statics.itemManager.box.FindEquipment(deckUnitInfo.equip4_id); if (index == null) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[4].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[index.equipment_data_id].name]; } if (deckUnitInfo.equip5_id == 0) { equipItems[5].color = Color.clear; } else { equipItems[5].color = Color.white; index = Statics.itemManager.box.FindEquipment(deckUnitInfo.equip5_id); if (index == null) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[5].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[index.equipment_data_id].name]; } //Ä«¸Þ¶ó À¯´Ö »ý¼º if (UnitObject != null) Destroy(UnitObject); UnitObject = Instantiate(unitCtrl.gameObject, CamContent); UnitObject.GetComponent().enabled = false; } public void ItemSet(EquipmentItemPrefab itemPrefab, Equipment equipment, EquipmentData equipmentData) { this.selectItemPrefab = itemPrefab; this.selectItem = equipment; equipType.text = "ÀåÂø"; itemInfo.SetActive(true); itemImage.sprite = Statics.stringIcons[equipmentData.name]; itemName.text = equipmentData.name; status0.SetActive(true); status0Status.text = StatusText(equipmentData.part, equipment.rand_stats); status0Value.text = ValueText(equipmentData, equipment.rand_stats); status1.SetActive(false); status2.SetActive(false); status3.SetActive(false); } public void ItemSet(ePart part) { Equipment equipment; switch (part) { case ePart.Weapon: equipment = Statics.itemManager.box.FindEquipment(selectUnit.equip0_id); break; case ePart.Armor: equipment = Statics.itemManager.box.FindEquipment(selectUnit.equip1_id); break; case ePart.Gloves: equipment = Statics.itemManager.box.FindEquipment(selectUnit.equip2_id); break; case ePart.Headpiece: equipment = Statics.itemManager.box.FindEquipment(selectUnit.equip3_id); break; case ePart.Shield: equipment = Statics.itemManager.box.FindEquipment(selectUnit.equip4_id); break; case ePart.Ring: equipment = Statics.itemManager.box.FindEquipment(selectUnit.equip5_id); break; default: Debug.LogError("Not Data"); return; } if (equipment == null) return; EquipmentData equipmentData = Statics.excelDatas.equipmentData[equipment.equipment_data_id]; this.selectItem = equipment; equipType.text = "ÇØÁ¦"; itemInfo.SetActive(true); itemImage.sprite = Statics.stringIcons[equipmentData.name]; itemName.text = equipmentData.name; status0.SetActive(true); status0Status.text = StatusText(equipmentData.part, equipment.rand_stats); status0Value.text = ValueText(equipmentData, equipment.rand_stats); status1.SetActive(false); status2.SetActive(false); status3.SetActive(false); } private string StatusText(ePart part, int randStats) { switch (part) { case ePart.Weapon: //¹«±â switch (randStats) { case 0: return "°ø°Ý·Â"; case 1: return "¹æ¾î°üÅë·Â"; case 2: return "Ä¡¸íŸ È®·ü"; case 3: return "Ä¡¸íŸ ´ë¹ÌÁö"; default: Debug.Log("¾Ë¼ö¾ø´Â ´É·ÂÄ¡ : " + randStats); return ""; } case ePart.Armor: //°©¿Ê switch (randStats) { case 0: return "ü·Â"; case 1: return "¹æ¾î·Â"; case 2: return "À̵¿¼Óµµ"; case 3: return "´ë¹ÌÁö °¨¼Ò"; default: Debug.Log("¾Ë¼ö¾ø´Â ´É·ÂÄ¡ : " + randStats); return ""; } case ePart.Gloves: //Àå°© switch (randStats) { case 0: return "°ø°Ý·Â"; case 1: return "¹æ¾î °üÅë·Â"; case 2: return "Ä¡¸íŸ È®·ü"; case 3: return "Ä¡¸íŸ ´ë¹ÌÁö"; default: Debug.Log("¾Ë¼ö¾ø´Â ´É·ÂÄ¡ : " + randStats); return ""; } case ePart.Headpiece: //Åõ±¸ switch (randStats) { case 0: return "ü·Â"; case 1: return "¹æ¾î·Â"; case 2: return "À̵¿¼Óµµ"; case 3: return "´ë¹ÌÁö °¨¼Ò"; default: Debug.Log("¾Ë¼ö¾ø´Â ´É·ÂÄ¡ : " + randStats); return ""; } case ePart.Shield: //º¸Á¶Àåºñ switch (randStats) { case 0: return "°ø°Ý¼Óµµ"; case 1: return "À̵¿¼Óµµ"; case 2: return "¹æ¾î °üÅë·Â"; case 3: return "°ø°Ý·Â"; default: Debug.Log("¾Ë¼ö¾ø´Â ´É·ÂÄ¡ : " + randStats); return ""; } case ePart.Ring: //¹ÝÁö switch (randStats) { case 0: return "°ø°Ý¼Óµµ"; case 1: return "À̵¿¼Óµµ"; case 2: return "´ë¹ÌÁö °¨¼Ò"; case 3: return "¹æ¾î·Â"; default: Debug.Log("¾Ë¼ö¾ø´Â ´É·ÂÄ¡ : " + randStats); return ""; } default: Debug.Log("¾Ë¼ö¾ø´Â ÆÄÃ÷ : " + part); return ""; } } private string ValueText(EquipmentData equipmentData, int randStats) { switch (randStats) { case 1: return equipmentData.stats1.ToString(); case 2: return equipmentData.stats2.ToString(); case 3: return equipmentData.stats3.ToString(); case 4: return equipmentData.stats4.ToString(); default: return "0"; } } public void equipItem() { itemInfo.SetActive(false); EquipChangeResp request = new EquipChangeResp(); request.Request((data) => { Statics.itemManager.box.UpdateEquipment(data.equipment); Statics.itemManager.box.UpdateDeckUnitInfo(data.deck_unit_info); //¼¼ÆÃµÇ¾îÀÖ´Â µ¥ÀÌÅÍ ¼öÁ¤ selectUnitPrefab.SetData(data.deck_unit_info); if(data.equipment.equip_unit == 0) { //»ý¼º EquipmentItemPrefab prefab = itemPrefabList.pop(); prefab.SetData(data.equipment); prefab.gameObject.SetActive(true); onItemPrefabList.Add(prefab); } else { //»èÁ¦ for(int n = 0; n < onItemPrefabList.Count; n++) { if (onItemPrefabList[n].getId == data.equipment.id) { onItemPrefabList[n].gameObject.SetActive(false); itemPrefabList.push(onItemPrefabList[n]); onItemPrefabList.RemoveAt(n); break; } } } //Ãß°¡ µ¥ÀÌÅÍ Ã³¸® if (data.change_equipment != null) { Statics.itemManager.box.UpdateEquipment(data.change_equipment); //À̰÷Àº ÀåÂø ÇØÁ¦ ¿©ºÎ¹Û¿¡ ³ª¿Ã¼ö ¾ø¾î ÀÌ·¸°Ô ÀÛ¾÷µÊ. EquipmentItemPrefab prefab = itemPrefabList.pop(); prefab.SetData(data.change_equipment); prefab.gameObject.SetActive(true); onItemPrefabList.Add(prefab); } selectUnitPrefab.SelectUnit(); }, selectUnit.id, selectItem.id, selectItem.equip_unit == 0); } public int DeckSwap(int index, int unit_id) { int selectUnitId = selectUnitPrefab.GetUnitId; for (int n = 0; n < DeckPrefabs.Length; n++) { if (DeckPrefabs[n].GetIndex == index) continue; if (DeckPrefabs[n].GetUnitId == selectUnitId)//À¯´ÖÁ¤º¸°¡ µé¾î¿Í¾ßÇÔ { DeckPrefabs[n].UnitChange(unit_id); } } return selectUnitId; } public void DeckSaveButton() { //³×Æ®¿öÅ© Åë½Å ÇÊ¿ä DeckChangeResp request = new DeckChangeResp(); int[] deckUnits = new int[9]; for(int n = 0; n < DeckPrefabs.Length; n++) { deckUnits[n] = DeckPrefabs[n].GetUnitId; } request.Request((data) => { int n = Statics.deck_info.FindIndex(n => n.id == data.deck_info.id); if (n == -1) { Debug.LogError($"null Data id : {data.deck_info.id}"); return; } Statics.deck_info[n].newDataSet(data.deck_info); }, Statics.deck_info[0].id, deckUnits); } public void DeckResetButton() { for (int n = 0; n < DeckPrefabs.Length; n++) { DeckPrefabs[n].UnitSet(); } } }