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