using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; using static UnityEditor.Progress; 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; [SerializeField] 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; ItemPrefab selectItemPrefab; DeckUnitInfo selectUnit; UnitPrefab selectUnitPrefab; 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.equipment) { //ÀåÂøµÈ ¾ÆÀÌÅÛ ½ºÅµ if (item.equip_unit != 0) continue; ItemPrefab prefab = itemPrefabList.pop(); prefab.SetData(item); prefab.gameObject.SetActive(true); onItemPrefabList.Add(prefab); } foreach (var item in Statics.deckUnit) { UnitPrefab prefab = unitPrefabList.pop(); prefab.SetData(item.Value); prefab.gameObject.SetActive(true); onUnitPrefabList.Add(prefab); } onUnitPrefabList[0].SelectUnit(); } 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 ButtoncHaracteristic() { 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%"; int index = -1; if (deckUnitInfo.equip0_id == 0) { equipItems[0].color = Color.clear; } else { equipItems[0].color = Color.white; index = Statics.equipment.FindIndex(n => (n.id == deckUnitInfo.equip0_id)); if (index == -1) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[0].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[Statics.equipment[index].equipment_data_id].name]; } if (deckUnitInfo.equip1_id == 0) { equipItems[1].color = Color.clear; } else { equipItems[1].color = Color.white; index = Statics.equipment.FindIndex(n => (n.id == deckUnitInfo.equip1_id)); if (index == -1) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[1].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[Statics.equipment[index].equipment_data_id].name]; } if (deckUnitInfo.equip2_id == 0) { equipItems[2].color = Color.clear; } else { equipItems[2].color = Color.white; index = Statics.equipment.FindIndex(n => (n.id == deckUnitInfo.equip2_id)); if(index == -1) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[2].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[Statics.equipment[index].equipment_data_id].name]; } if (deckUnitInfo.equip3_id == 0) { equipItems[3].color = Color.clear; } else { equipItems[3].color = Color.white; index = Statics.equipment.FindIndex(n => (n.id == deckUnitInfo.equip3_id)); if (index == -1) { Debug.LogError("notData : " + deckUnitInfo.equip3_id); equipItems[2].color = Color.clear; } else equipItems[3].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[Statics.equipment[index].equipment_data_id].name]; } if (deckUnitInfo.equip4_id == 0) { equipItems[4].color = Color.clear; } else { equipItems[4].color = Color.white; index = Statics.equipment.FindIndex(n => (n.id == deckUnitInfo.equip4_id)); if (index == -1) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[4].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[Statics.equipment[index].equipment_data_id].name]; } if (deckUnitInfo.equip5_id == 0) { equipItems[5].color = Color.clear; } else { equipItems[5].color = Color.white; index = Statics.equipment.FindIndex(n => (n.id == deckUnitInfo.equip5_id)); if (index == -1) { Debug.LogError("notData"); equipItems[2].color = Color.clear; } else equipItems[5].sprite = Statics.stringIcons[Statics.excelDatas.equipmentData[Statics.equipment[index].equipment_data_id].name]; } //Ä«¸Þ¶ó À¯´Ö »ý¼º if (UnitObject != null) Destroy(UnitObject); UnitObject = Instantiate(unitCtrl.gameObject, CamContent); UnitObject.GetComponent().enabled = false; } public void ItemSet(ItemPrefab 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; int index = -1; switch (part) { case ePart.Weapon: index = Statics.equipment.FindIndex(n => n.id == selectUnit.equip0_id); equipment = Statics.equipment[index]; break; case ePart.Armor: index = Statics.equipment.FindIndex(n => n.id == selectUnit.equip1_id); equipment = Statics.equipment[index]; break; case ePart.Gloves: index = Statics.equipment.FindIndex(n => n.id == selectUnit.equip2_id); equipment = Statics.equipment[index]; break; case ePart.Headpiece: index = Statics.equipment.FindIndex(n => n.id == selectUnit.equip3_id); equipment = Statics.equipment[index]; break; case ePart.Shield: index = Statics.equipment.FindIndex(n => n.id == selectUnit.equip4_id); equipment = Statics.equipment[index]; break; case ePart.Ring: index = Statics.equipment.FindIndex(n => n.id == selectUnit.equip5_id); equipment = Statics.equipment[index]; break; default: Debug.LogError("Not Data"); 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 "Ä¡¸íŸ ´ë¹ÌÁö"; default: return ""; } case ePart.Armor: //°©¿Ê switch (randStats) { case 0: return "¹æ¾î·Â"; case 1: return "ü·Â"; case 2: return "´ë¹ÌÁö °¨¼Ò"; default: return ""; } case ePart.Gloves: //Àå°© switch (randStats) { case 0: return "À̵¿¼Óµµ"; case 1: return "°ø°Ý¼Óµµ"; case 2: return "°ø°Ý·Â"; default: return ""; } case ePart.Headpiece: //Åõ±¸ switch (randStats) { case 0: return "°ø°Ý·Â"; case 1: return "¹æ¾î°üÅë·Â"; case 2: return "ü·Â"; default: return ""; } case ePart.Shield: //º¸Á¶Àåºñ switch (randStats) { case 0: return "¹æ¾î·Â"; case 1: return "´ë¹ÌÁö°¨¼Ò"; case 2: return "ü·Â"; default: return ""; } case ePart.Ring: //¹ÝÁö switch (randStats) { case 0: return "Ä¡¸íŸȮ·ü"; case 1: return "À̵¿¼Óµµ"; case 2: return "°ø°Ý¼Óµµ"; default: return ""; } default: 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) => { //½Å±Ô Á¤º¸·Î µ¥ÀÌÅÍ ±³Ã¼ for(int n = 0; n < Statics.equipment.Count; n++) { if (Statics.equipment[n].id == data.equipment.id) { Statics.equipment[n] = data.equipment; break; } } Statics.deckUnit.Remove(data.deck_unit_info.id); Statics.deckUnit.Add(data.deck_unit_info.id, data.deck_unit_info); //¼¼ÆÃµÇ¾îÀÖ´Â µ¥ÀÌÅÍ ¼öÁ¤ selectUnitPrefab.SetData(data.deck_unit_info); if(data.equipment.equip_unit == 0) { //»ý¼º ItemPrefab 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) { for (int n = 0; n < Statics.equipment.Count; n++) { if (Statics.equipment[n].id == data.change_equipment.id) { Statics.equipment[n] = data.change_equipment; break; } } //À̰÷Àº ÀåÂø ÇØÁ¦ ¿©ºÎ¹Û¿¡ ³ª¿Ã¼ö ¾ø¾î ÀÌ·¸°Ô ÀÛ¾÷µÊ. ItemPrefab 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); } }