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);
}
}