using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.UI; public class RocketUpgradePanel : MonoBehaviour { public TMP_Text txtRocketLevel; public TMP_Text txtEnergyGain; public TMP_Text txtSpeed; public TMP_Text txtBoostConsumption; public Button btn_upgrade_speed; public Button btn_upgrade_energy; public Button btn_upgrade_boost; // RocketLevel CurrentLevel,NextLevel; string selectedRocket; public ParticleSystem[] fullscreenFX; // public bool Affordable => DBmanager.Metal >= NextLevel.metalCost && DBmanager.Coins >= NextLevel.goldCost; void Awake(){ btn_upgrade_speed.onClick.AddListener(OnUpgradeSpeed); btn_upgrade_energy.onClick.AddListener(OnUpgradeEnergy); btn_upgrade_boost.onClick.AddListener(OnUpgradeBoost); } int curSpeedLevel; int curEnergyLevel; int curBoostLevel; public int curRocketLevel => Mathf.Clamp(curSpeedLevel + curEnergyLevel + curBoostLevel+1,1,10); SkinType rarity; public float curSpeed => SkinShopManager.GetStatsForRarity(rarity)[curSpeedLevel].speedMultiplier; public float curEnergy => SkinShopManager.GetStatsForRarity(rarity)[curEnergyLevel].moonMultiplier; public float curBoost => SkinShopManager.GetStatsForRarity(rarity)[curBoostLevel].boostConsumption; public RocketLevel nextSpeedStats =>SkinShopManager.GetStatsForRarity(rarity)[curSpeedLevel]; public RocketLevel nextEnergyStats =>SkinShopManager.GetStatsForRarity(rarity)[curEnergyLevel]; public RocketLevel nextBoostStats =>SkinShopManager.GetStatsForRarity(rarity)[curBoostLevel]; public RocketLevel nextRocketLevel => (curRocketLevel < 10) ? SkinShopManager.GetPriceForRarity(rarity)[curRocketLevel] : null; public float nextSpeed => SkinShopManager.GetStatsForRarity(rarity)[curSpeedLevel+1].speedMultiplier; public float nextEnergy => SkinShopManager.GetStatsForRarity(rarity)[curEnergyLevel+1].moonMultiplier; public float nextBoost => SkinShopManager.GetStatsForRarity(rarity)[curBoostLevel+1].boostConsumption; public void Show(string rocketName){ PurchasedSkin data = DBmanager.GetSkinByName(rocketName); if(data==null){Debug.LogError("Couldn't find data for skin : " + rocketName);return;} selectedRocket = rocketName; rarity = SkinShopManager.GetRarityFromName(rocketName); // txtLevel.text = "Level " +currentLevel.Level; if(data == null){ Debug.LogError("You don't own this skin " + rocketName); return; } curSpeedLevel = data.speedLevel; curEnergyLevel = data.energyLevel; curBoostLevel = data.boostLevel; txtRocketLevel.text = "Level " + curRocketLevel; txtEnergyGain.text = $"{ curEnergy } per Crystal"; txtSpeed.text = $"{curSpeed*100}%"; txtBoostConsumption.text = $"{ curBoost *100}%"; int maxLevels =SkinShopManager.GetStatsForRarity(rarity).Length; // int maxleve bool boostAvailable = curBoostLevel < maxLevels-1; bool speedAvailable = curSpeedLevel < maxLevels-1; bool energyAvailable = curEnergyLevel < maxLevels-1; if(energyAvailable) {txtEnergyGain.text += $" -> {nextEnergy}";} if(speedAvailable) {txtSpeed.text += $" -> {nextSpeed*100}%";} if(boostAvailable) {txtBoostConsumption.text += $" -> {nextBoost*100}%";} if(curRocketLevel < 10){ txtRocketLevel.text += $" -> {curRocketLevel+1}"; }else{ txtRocketLevel.text += " MAX! "; } if(nextRocketLevel == null){ btn_upgrade_boost.interactable = false; btn_upgrade_energy.interactable = false; btn_upgrade_speed.interactable=false; btn_upgrade_boost.transform.GetChild(1).gameObject.SetActive(false); btn_upgrade_energy.transform.GetChild(1).gameObject.SetActive(false); btn_upgrade_speed.transform.GetChild(1).gameObject.SetActive(false); }else{ btn_upgrade_boost.interactable = DBmanager.Coins >= nextRocketLevel.goldCost && DBmanager.Metal >= nextRocketLevel.metalCost && curRocketLevel < 10 && boostAvailable && curBoostLevel < maxLevels-1; btn_upgrade_energy.interactable = DBmanager.Coins >= nextRocketLevel.goldCost && DBmanager.Metal >= nextRocketLevel.metalCost&& curRocketLevel < 10&& energyAvailable && curEnergyLevel < maxLevels -1; btn_upgrade_speed.interactable = DBmanager.Coins >= nextRocketLevel.goldCost && DBmanager.Metal >= nextRocketLevel.metalCost&& curRocketLevel < 10&& speedAvailable && curSpeedLevel < maxLevels-1; btn_upgrade_boost.GetComponentInChildren().text = curBoostLevel < maxLevels-1 ? "Upgrade" : "Max!"; btn_upgrade_boost.transform.GetChild(1).gameObject.SetActive(boostAvailable); btn_upgrade_boost.transform.GetChild(1).GetChild(0).gameObject.SetActive(nextRocketLevel.goldCost > 0); btn_upgrade_boost.transform.GetChild(1).GetChild(0).GetComponentInChildren().text = nextRocketLevel.goldCost.ToString(); btn_upgrade_boost.transform.GetChild(1).GetChild(1).gameObject.SetActive(nextRocketLevel.metalCost > 0); btn_upgrade_boost.transform.GetChild(1).GetChild(1).GetComponentInChildren().text = nextRocketLevel.metalCost.ToString(); btn_upgrade_speed.GetComponentInChildren().text = curSpeedLevel < maxLevels-1 ? "Upgrade" : "Max!"; btn_upgrade_speed.transform.GetChild(1).gameObject.SetActive(speedAvailable); btn_upgrade_speed.transform.GetChild(1).GetChild(0).gameObject.SetActive(nextRocketLevel.goldCost > 0); btn_upgrade_speed.transform.GetChild(1).GetChild(0).GetComponentInChildren().text = nextRocketLevel.goldCost.ToString(); btn_upgrade_speed.transform.GetChild(1).GetChild(1).gameObject.SetActive(nextRocketLevel.metalCost > 0); btn_upgrade_speed.transform.GetChild(1).GetChild(1).GetComponentInChildren().text = nextRocketLevel.metalCost.ToString(); btn_upgrade_energy.GetComponentInChildren().text = curEnergyLevel < maxLevels-1 ? "Upgrade" : "Max!"; btn_upgrade_energy.transform.GetChild(1).gameObject.SetActive(energyAvailable); btn_upgrade_energy.transform.GetChild(1).GetChild(0).gameObject.SetActive(nextRocketLevel.goldCost > 0); btn_upgrade_energy.transform.GetChild(1).GetChild(0).GetComponentInChildren().text = nextRocketLevel.goldCost.ToString(); btn_upgrade_energy.transform.GetChild(1).GetChild(1).gameObject.SetActive(nextRocketLevel.metalCost > 0); btn_upgrade_energy.transform.GetChild(1).GetChild(1).GetComponentInChildren().text = nextRocketLevel.metalCost.ToString(); } gameObject.SetActive(true); } void OnUpgradeSpeed(){ bool Affordable = DBmanager.Coins >= nextSpeedStats.goldCost && DBmanager.Metal >= nextSpeedStats.metalCost; if(!Affordable){ MessageDialog.instance.ShowMessage("Error","Not enough resources to upgrade."); return; } DBmanager.UpgradeRocketSpeed(selectedRocket, nextSpeedStats); SkinShopManager.instance.Populate(); // MessageDialog.instance.ShowMessage("Success","Rocket Upgraded Successfully!"); AudioManager.instnace.UpgradeRocket(); // Hide(); Show(selectedRocket); //UpgradeEffect.top_instance.Show(txtSpeed.rectTransform.position); foreach(ParticleSystem particle in fullscreenFX) { particle.Play(); } } void OnUpgradeBoost(){ bool Affordable = DBmanager.Coins >= nextBoostStats.goldCost && DBmanager.Metal >= nextBoostStats.metalCost; if(!Affordable){ MessageDialog.instance.ShowMessage("Error","Not enough resources to upgrade."); return; } DBmanager.UpgradeRocketBoost(selectedRocket, nextBoostStats); SkinShopManager.instance.Populate(); // MessageDialog.instance.ShowMessage("Success","Rocket Upgraded Successfully!"); AudioManager.instnace.UpgradeRocket(); // Hide(); Show(selectedRocket); // UpgradeEffect.top_instance.Show(txtBoostConsumption.rectTransform.position); foreach (ParticleSystem particle in fullscreenFX) { particle.Play(); } } void OnUpgradeEnergy(){ bool Affordable = DBmanager.Coins >= nextEnergyStats.goldCost && DBmanager.Metal >= nextEnergyStats.metalCost; if(!Affordable){ MessageDialog.instance.ShowMessage("Error","Not enough resources to upgrade."); return; } DBmanager.UpgradeRocketEnergy(selectedRocket, nextEnergyStats); SkinShopManager.instance.Populate(); // MessageDialog.instance.ShowMessage("Success","Rocket Upgraded Successfully!"); AudioManager.instnace.UpgradeRocket(); // Hide(); Show(selectedRocket); // UpgradeEffect.top_instance.Show(txtEnergyGain.rectTransform.position); foreach (ParticleSystem particle in fullscreenFX) { particle.Play(); } } public void Hide(){ gameObject.SetActive(false); } }