using TowerDefense.Towers; using Core.Utilities; using System; using TMPro; using UnityEngine; using UnityEngine.UI; using MoreMountains.NiceVibrations; using TowerDefense.Level; using KTGMGemClient; using TowerDefense.UI.HUD; using System.Collections; /// /// 无尽模式用自己的EndlessUIStart /// public class EndlessUIStart : Singleton { public TextMeshProUGUI countDownTextNew = null; public TextMeshProUGUI timeTextNew = null; public TextMeshProUGUI timeStatic = null; /// /// 结算界面 /// public GameObject SettlementUI; /// /// 倒计时整体的背景图片Mask /// public Image uiStartMssk = null; public AudioSource bgMusic; public static bool bFirstLoaded = false; public static bool bGameStart = false; protected float secToDo = 3f; protected float startTime = 0.0f; protected bool bossCreate = false; protected bool[] bVibrate; private bool isPause; public bool beginSkillStep = false; // Start is called before the first frame update void Start() { GA_SDK_Manager.Ins.ArriveBattle();//埋点 GA_SDK_Manager.Ins.Statistics(4);//埋点 bVibrate = new bool[4]; bVibrate[0] = bVibrate[1] = bVibrate[2] = bVibrate[3] = false; // 设置为顶层渲染: countDownTextNew.transform.SetAsLastSibling(); if (timeStatic) timeStatic.gameObject.SetActive(false); EndlessBuffSelect.instance.HideBuffUI(); EndlessBossHPManager.instance.HideHP(); EndlessSettlement settlement = SettlementUI.transform.GetChild(0).GetComponent(); settlement.Init(); SettlementUI.SetActive(false); //查询是否已经做过了新手引导 int guide = PlayerPrefs.GetInt("GemBattleGuide"); GameConfig.IsNewbie = guide == 0; if (GameConfig.IsNewbie) { Pause(); uiStartMssk.gameObject.SetActive(false); countDownTextNew.text = ""; countDownTextNew.gameObject.SetActive(false); Instantiate(Resources.Load("UI/Guide/GuidePanel"), this.transform); AddGuideEvent(); } } /// /// 添加新手引导事件 /// private void AddGuideEvent() { EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateFireLv2, CreateFireLv2); EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateFirstWave, CreateFirstWave); EventCenter.Ins.Add((int)KTGMGemClient.EventType.RestartWave, RestartWave); EventCenter.Ins.Add((int)KTGMGemClient.EventType.AddGold, AddGold); EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateWaterLv1, CreateWaterLv1); EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateSecondWave, CreateSecondWave); EventCenter.Ins.Add((int)KTGMGemClient.EventType.SkillRelease, SkillRelease); EventCenter.Ins.Add((int)KTGMGemClient.EventType.GuideFinish, NewbieGuideEnd); } /// /// 在(2,3)位置放置一个火元素的塔 /// private void CreateFireLv2() { Tower aTower = EndlessRandomTower.instance.getTowerByName("GrowUpTower"); EndlessGameUI.instance.PlaceTowerForce(aTower, new IntVector2(2, 3), 2); } /// /// 开始第一关的第一个波次 /// private void CreateFirstWave() { Restart(); EventCenter.Ins.Add((int)KTGMGemClient.EventType.FireTowerChargeEnd, OnFireTowerChargeEnd); } /// /// 火塔充能释放完成 /// private void OnFireTowerChargeEnd() { Pause(); EndlessLevelManager.instance.PauseWave(); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.FireTowerChargeEnd, OnFireTowerChargeEnd); EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.ChargingEnd); } /// /// 恢复波次 /// private void RestartWave() { Restart(); EndlessLevelManager.instance.RestartWave(); } /// /// 获得金币 /// /// private void AddGold(int gold) { EndlessLevelManager.instance.Currency.AddCurrency(gold); } /// /// 在攻击位置上创建一个1级的水塔 /// private void CreateWaterLv1() { Tower aTower = EndlessRandomTower.instance.getTowerByName("CopyCatTower"); EndlessGameUI.instance.PlaceTowerForce(aTower, new IntVector2(1, 3), 1); } /// /// 开始第二关 /// private void CreateSecondWave() { EndlessLevelManager.instance.NewbieUpdateLevel(); beginSkillStep = true; } /// /// 在第三条兵线释放技能宝石 /// private void SkillRelease() { EndlessLevelManager.instance.RestartWave(); int attributeId = 99902; int level = 1; int waveLineIndex = 2; // 播放特效,并处理伤害. EndlessWaveLineManager.instance.PlayWaveLineEffect(waveLineIndex); AgentInsManager.instance.ExecWavelineAttack(waveLineIndex, attributeId, level, false); StartCoroutine(Delay1()); } private IEnumerator Delay1() { yield return new WaitForSeconds(1f); EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.SkillReleaseDone); GameConfig.IsNewbie = false; EndlessLevelManager.instance.PauseWave(); } /// /// 新手引导结束 /// private void NewbieGuideEnd() { EndlessLevelManager.instance.RestartWave(); GameConfig.IsNewbie = false; } /// /// 当前游戏局的开始时间. /// public float GameStartTime { get { return startTime; } } protected string ConvertSec(float sec) { if (sec < 10) return "0" + Math.Floor(sec).ToString(); else return Math.Floor(sec).ToString(); } /// /// 把当前的秒数变成字符串. /// /// /// protected string ConvertTime(float sec) { if (sec < 60) { return "00:" + ConvertSec(sec); } else { float min = sec / 60; if (min < 10) { return "0" + Math.Floor(min).ToString() + ":" + ConvertSec(sec % 60); } else { return Math.Floor(min).ToString() + ":" + ConvertSec(sec % 60); } } } public void Pause() { isPause = true; } public void Restart() { isPause = false; } public bool IsGameRunning { get { return !isPause; } } // Update is called once per frame void Update() { if (isPause) return; if (bGameStart) { startTime += Time.deltaTime; timeTextNew.text = ConvertTime((float)Math.Ceiling(startTime)); } if (!GameConfig.IsNewbie) { if (!bFirstLoaded && !bGameStart) { bFirstLoaded = true; secToDo = 4; } if (bFirstLoaded && !bGameStart) { secToDo -= Time.deltaTime; countDownTextNew.gameObject.SetActive(true); if (secToDo >= 3) { countDownTextNew.text = "3"; if (!bVibrate[3]) { bVibrate[3] = true; MMVibrationManager.Haptic(HapticTypes.SoftImpact); } } else if (secToDo >= 2) { countDownTextNew.text = "2"; if (!bVibrate[2]) { bVibrate[2] = true; MMVibrationManager.Haptic(HapticTypes.MediumImpact); } } else if (secToDo >= 1) { countDownTextNew.text = "1"; if (!bVibrate[1]) { bVibrate[1] = true; MMVibrationManager.Haptic(HapticTypes.HeavyImpact); } } else if (secToDo < 1) { countDownTextNew.text = "GO!"; if (!bVibrate[0]) { bVibrate[0] = true; MMVibrationManager.Haptic(HapticTypes.HeavyImpact); } } // 开启游戏,且隐藏中间的数字. if (secToDo <= 0) { uiStartMssk.gameObject.SetActive(false); countDownTextNew.text = ""; countDownTextNew.gameObject.SetActive(false); bGameStart = true; // 开始关卡 EndlessLevelManager.instance.StartLevel(); timeTextNew.gameObject.SetActive(true); // 开始播放背景音乐. if (bgMusic != null) bgMusic.Play(); } } } else { // 新手走的流程 if (!bFirstLoaded && !bGameStart) bFirstLoaded = true; if (bFirstLoaded && !bGameStart) { bGameStart = true; EndlessLevelManager.instance.StartLevel(); timeTextNew.gameObject.SetActive(true); if (bgMusic != null) bgMusic.Play(); } } } }