using KTGMGemClient;
using System;
using TMPro;
using TowerDefense.Level;
using TowerDefense.Towers.Placement;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
///
/// 当前类用于开启新的TowerPlacementGrid,用于无尽模式。当前类附加在对应的购买开启按钮上。
///
public class EndlessTowerGridOpen : MonoBehaviour
{
// 当前Button对应的Cash Text数据
public TextMeshPro cashText;
// 当前Button对应的image.
public Image mImage;
// 当前的Grid按钮对应的xy坐标.
protected int gridX;
protected int gridY;
///
/// 是否处于等待开启的状态.
///
protected bool bWaitOpen;
protected float waitOpenCDTime;
// 对应放置TowerGrid的类.
protected TowerPlacementGridEndless towerGrid;
private bool isOpenTower = false;
// Start is called before the first frame update
void Start()
{
bWaitOpen = false;
}
///
/// Subscribe to the level manager
///
protected virtual void OnEnable()
{
if (EndlessLevelManager.instanceExists)
EndlessLevelManager.instance.Currency.currencyChanged += OnCurrencyChanged;
}
///
/// Unsubscribe from the level manager
///
protected virtual void OnDisable()
{
if (EndlessLevelManager.instanceExists)
EndlessLevelManager.instance.Currency.currencyChanged -= OnCurrencyChanged;
}
private void OnCurrencyChanged()
{
CheckCurrencyEnough();
}
public void CheckCurrencyEnough()
{
int result;
int.TryParse(cashText.text.ToString(), out result);
int current = EndlessLevelManager.instance.Currency.currentCurrency;
if (current >= result)
cashText.color = new Color(1f, 1f, 1f);
else
cashText.color = new Color(0.5f, 0.5f, 0.5f);
}
public void SetBuyBtnInfo(int x, int y, TowerPlacementGridEndless tpg, string cost)
{
gridX = x;
gridY = y;
towerGrid = tpg;
TowerDefense.UI.HUD.PlacementTile tile = TowerPlacementGridEndless.instance.GetOneTile(x, y);
if (tile != null && tile.BuyMesh != null)
{
//cashText.gameObject.SetActive(false);
Transform ts = tile.BuyMesh.transform.Find("CashText");
cashText = ts.GetComponent();
}
cashText.SetText(cost);
}
///
/// 当前类附加的按钮被点击,需要开启当前按钮所在的塔位.
///
public void OnClick()
{
if (bWaitOpen) return;
// if (GameConfig.IsNewbie)
// {
// if (!GameConfig.CanOpenNewTower) return;
// if (!isOpenTower)
// {
// isOpenTower = true;
// EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.GetOneTowerPos);
// }
// }
if (towerGrid != null)
{
float cashToOpen = TowerPlacementGridEndless.GRID_OPENCASH;
if (EndlessLevelManager.instance.Currency.currentCurrency < cashToOpen)
{
AudioSourceManager.Ins.Play(AudioEnum.UIDisable);
cashText.color = new Color(218f / 255f, 32f / 255f, 32f / 255f);
DOTween.To(() => cashText.color, (Color v) => cashText.color = v, cashText.color, 0.2f)
.OnComplete(CheckCurrencyEnough);
return;
}
// 减少Cash并开启相应塔防管理器的兵线
bool bsucc = EndlessLevelManager.instance.Currency.TryPurchase((int)cashToOpen);
if (bsucc)
{
++GameConfig.EndlessOpenAttackTowerCount;
towerGrid.updateGridOpenCoin(gridX, gridY);
if (mImage)
mImage.color = new Color(1.0f, 1.0f, 1.0f, 0.0f);
bWaitOpen = true;
waitOpenCDTime = JsonDataCenter.GRIDOPEN_CDTIME;
Vector3 tpos = cashText.transform.position;
tpos.y += 20;
cashText.transform.position = tpos;
SetWaitOpenTime();
}
}
}
///
/// 删除当前的界面.
///
public void Release()
{
GameObject.Destroy(gameObject);
}
protected void SetWaitOpenTime()
{
string distime = ((int)Math.Ceiling(waitOpenCDTime)).ToString() + "s";
cashText.text = distime;
}
// Update is called once per frame
void Update()
{
if (bWaitOpen)
{
waitOpenCDTime -= Time.deltaTime;
if (waitOpenCDTime <= 0)
{
// 购买当前的格子.
towerGrid.BuyTowerGrid(gridX, gridY);
Release();
return;
}
SetWaitOpenTime();
}
}
}