using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class SelectedItemMenu : MonoBehaviour { public Text nameTxt; public Button upgradeMenuBtn; public Button infoBtn; public CollectBtn collectBtn; // public Button joinHallBtn; public Button repairRocketsBtn; [Header("info menu")] public GameObject infoMenu; public GameObject[] tierIndicators; public TMP_Text buildingName; public TMP_Text descriptionTxt; [Header("upgrade menu")] public GameObject upgradeMenu; public GameObject goldmineUpgradeMenu; public Button btn_gold_prod; public Button btn_gold_cap; public Transform upgrade_statParent; public GameObject[] upgrade_tierIndicators; public TMP_Text upgrade_buildingName; public TMP_Text extraDetailsTxt; public Button upgradeBtn; [Header("Special buildings")] public BuildingData mainHall; public BuildingData rocketRepair; void Start() { Selector.OnSelectedChanged.AddListener(OnSelectionChanged); upgradeMenuBtn.onClick.AddListener(OnUpgradeMenuClicked); infoBtn.onClick.AddListener(OnInfoClicked); upgradeBtn.onClick.AddListener(OnUpgrade); collectBtn.btn.onClick.AddListener(OnCollect); repairRocketsBtn.onClick.AddListener(OpenSkinMenu); btn_gold_cap.onClick.AddListener(OnGoldmineCapUpgrade); btn_gold_prod.onClick.AddListener(OnGoldmineProdUpgrade); } void OnSelectionChanged() { if (Selector.selectedBuilding != null) { infoBtn.gameObject.SetActive(true); if (Selector.selectedData.levels.Count <= 1) { upgradeMenuBtn.gameObject.SetActive(false); } else { upgradeMenuBtn.gameObject.SetActive(true); } if(Selector.selectedData.collectable){ collectBtn.gameObject.SetActive(true); Debug.Log("Last collected : " +Selector.selectedBuilding.lastCollected ); collectBtn.Set(Selector.selectedData.buildingName,Selector.selectedBuilding.lastCollected,Selector.selectedData.productinoRates[Selector.selectedBuilding.curLevel],Selector.selectedData.resourceType); }else{ collectBtn.gameObject.SetActive(false); } // joinHallBtn.gameObject.SetActive((Selector.selectedData == mainHall)); repairRocketsBtn.gameObject.SetActive((Selector.selectedData == rocketRepair)); } else { upgradeMenuBtn.gameObject.SetActive(false); infoBtn.gameObject.SetActive(false); collectBtn.gameObject.SetActive(false); // joinHallBtn.gameObject.SetActive(false); repairRocketsBtn.gameObject.SetActive(false); } upgradeMenu.SetActive(false); infoMenu.SetActive(false); } public void OnUpgradeMenuClicked() { extraDetailsTxt.gameObject.SetActive(false); // Debug.Log("Opening Upgrade Menu for : " + Selector.selectedBuilding.buildingData.name); AudioManager.instnace.UIPopup(); upgradeMenu.SetActive(true); upgrade_buildingName.text = Selector.selectedBuilding.buildingData.buildingName; bool isGoldMine = Selector.selectedBuilding.GetComponent()!=null; List stats = Selector.selectedBuilding.buildingData.levels[Selector.selectedBuilding.curLevel].stats; for (int i = 0; i < upgrade_statParent.childCount; i++) { bool hasDataForThis = i < stats.Count; upgrade_statParent.GetChild(i).gameObject.SetActive(hasDataForThis); if (hasDataForThis) { upgrade_statParent.GetChild(i).GetChild(0).GetComponent().text = stats[i].name; string nextLevelStat = ((Selector.selectedBuilding.buildingData.levels.Count-1 > Selector.selectedBuilding.curLevel) ? $" -> {Selector.selectedBuilding.buildingData.levels[Selector.selectedBuilding.curLevel+1].stats[i].value}" : ""); upgrade_statParent.GetChild(i).GetChild(1).GetComponent().text = stats[i].value + (isGoldMine? "":nextLevelStat); upgrade_statParent.GetChild(i).GetChild(2).GetComponent().sprite = stats[i].image; } } if(isGoldMine){ //Special path for gold mine for(int i=0; i < upgrade_tierIndicators.Length;i++){ //No rarity tag for you upgrade_tierIndicators[i].SetActive(false); } if (Selector.selectedBuilding.curLevel < Selector.selectedData.levels.Count - 1){ upgradeBtn.interactable = true; upgradeBtn.GetComponentInChildren().text = "Upgrade"; } return; } for(int i=0; i < upgrade_tierIndicators.Length;i++){ upgrade_tierIndicators[i].SetActive( Selector.selectedBuilding.curLevel == i); } if (Selector.selectedBuilding.curLevel < Selector.selectedData.levels.Count - 1) { upgradeBtn.interactable = (Selector.selectedData.levels[Selector.selectedBuilding.curLevel + 1].price < DBmanager.Coins); upgradeBtn.GetComponentInChildren().text = Selector.selectedData.levels[Selector.selectedBuilding.curLevel + 1].price.ToString(); } else { upgradeBtn.interactable = false; upgradeBtn.GetComponentInChildren().text = "MAX!"; Debug.Log("Already max"); } if(Selector.selectedData == rocketRepair){ SkinShopManager.instance.Populate(); upgradeBtn.interactable= (SkinShopManager.availableToUpgrade); if(!SkinShopManager.availableToUpgrade && Selector.selectedBuilding.curLevel < Selector.selectedData.levels.Count-1){ // MessageDialog.instance.ShowMessage("Notice!","You have to purchase half of the best rarity skins available to upgrade"); extraDetailsTxt.gameObject.SetActive(true); extraDetailsTxt.text = "You have to purchase half of the best rarity skins available to upgrade"; extraDetailsTxt.color = Color.red; } } if (upgrade_statParent.childCount < stats.Count) { Debug.LogError("Please add another slot for stats in upgrade menu.\nSlots not enough for " + Selector.selectedBuilding.buildingData.name + " , " + upgrade_statParent.childCount + " slots for " + stats.Count + " stats"); } } public void OnUpgrade() { if(Selector.selectedBuilding.GetComponent()!=null){ AudioManager.instnace.UIPopup(); goldmineUpgradeMenu.SetActive(true); int L = Selector.selectedBuilding.curLevel+1; int C = GoldMine.GetCapacityRateByLevel(L); int P = GoldMine.GetProductionRateByLevel(L); //Calculate prices if(P>=GoldMine.LevelsCount){ btn_gold_prod.interactable=false; btn_gold_prod.transform.Find("txt_price").GetComponent().text = "Max!"; } else{ bool affroadable = DBmanager.Coins >= GoldMine.GetCostForProduction(L); btn_gold_prod.interactable=affroadable; btn_gold_prod.transform.Find("txt_price").GetComponent().text = GoldMine.GetCostForProduction(L).ToString(); } if(C>=GoldMine.LevelsCount){ btn_gold_cap.interactable = false; btn_gold_cap.transform.Find("txt_price").GetComponent().text = "Max!"; } else{ bool affroadable = DBmanager.Coins >= GoldMine.GetCostForCapacity(L); btn_gold_cap.interactable=affroadable; btn_gold_cap.transform.Find("txt_price").GetComponent().text = GoldMine.GetCostForCapacity(L).ToString(); } return; } upgradeBtn.interactable= false; Selector.selectedBuilding.Upgrade(); OnUpgradeMenuClicked(); } public void OnGoldmineCapUpgrade(){ int L = Selector.selectedBuilding.curLevel+1; int C = GoldMine.GetCapacityRateByLevel(L); if(C >=GoldMine.LevelsCount){return;} int P = GoldMine.GetProductionRateByLevel(L); int newLevel = GoldMine.GetLevelByRates(C + 1, P); upgradeBtn.interactable= false; Selector.selectedBuilding.Upgrade(newLevel:newLevel-1, cost:GoldMine.GetCostForCapacity(L) ); goldmineUpgradeMenu.SetActive(false); OnUpgradeMenuClicked(); } public void OnGoldmineProdUpgrade(){ int L = Selector.selectedBuilding.curLevel+1; int C = GoldMine.GetCapacityRateByLevel(L); int P = GoldMine.GetProductionRateByLevel(L); if(P >=GoldMine.LevelsCount){return;} int newLevel = GoldMine.GetLevelByRates(C, P+1); upgradeBtn.interactable= false; Selector.selectedBuilding.Upgrade(newLevel:newLevel-1, cost: GoldMine.GetCostForProduction(L)); goldmineUpgradeMenu.SetActive(false); OnUpgradeMenuClicked(); } void OnInfoClicked() { Debug.Log("Opening Info Menu for : " + Selector.selectedBuilding.buildingData.name); infoMenu.SetActive(true); buildingName.text = Selector.selectedBuilding.buildingData.buildingName; for(int i=0; i < tierIndicators.Length;i++){ tierIndicators[i].SetActive( Selector.selectedBuilding.curLevel == i); } descriptionTxt.text = Selector.selectedBuilding.buildingData.description; AudioManager.instnace.UIPopup(); } public void OpenSkinMenu(){ SkinShopManager.instance.Show(); AudioManager.instnace.UIPopup(); } void OnCollect(){ Debug.Log("Collecting from : " + Selector.selectedData.buildingName); } }