using KTGMGemClient;
|
using System;
|
using TMPro;
|
using TowerDefense.Level;
|
using TowerDefense.Towers.Placement;
|
using UnityEngine;
|
using UnityEngine.UI;
|
using DG.Tweening;
|
|
/// <summary>
|
/// 当前类用于开启新的TowerPlacementGrid,用于无尽模式。当前类附加在对应的购买开启按钮上。
|
/// </summary>
|
public class EndlessTowerGridOpen : MonoBehaviour
|
{
|
// 当前Button对应的Cash Text数据
|
public TextMeshPro cashText;
|
|
// 当前Button对应的image.
|
public Image mImage;
|
|
// 当前的Grid按钮对应的xy坐标.
|
protected int gridX;
|
|
protected int gridY;
|
|
/// <summary>
|
/// 是否处于等待开启的状态.
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// Subscribe to the level manager
|
/// </summary>
|
protected virtual void OnEnable()
|
{
|
if (EndlessLevelManager.instanceExists)
|
EndlessLevelManager.instance.Currency.currencyChanged += OnCurrencyChanged;
|
}
|
|
/// <summary>
|
/// Unsubscribe from the level manager
|
/// </summary>
|
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<TextMeshPro>();
|
}
|
|
cashText.SetText(cost);
|
|
}
|
|
/// <summary>
|
/// 当前类附加的按钮被点击,需要开启当前按钮所在的塔位.
|
/// </summary>
|
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();
|
}
|
}
|
}
|
|
/// <summary>
|
/// 删除当前的界面.
|
/// </summary>
|
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();
|
}
|
}
|
}
|