using System.Collections; using System.Diagnostics; using System.Collections.Generic; using UnityEngine; using KTGMGemClient; /// /// 新手引导控制脚本 /// public class GuideCtrl : MonoBehaviour { private static GuideCtrl ins; public static GuideCtrl Ins { get { return ins; } } GuidePanel panel;//UI Dictionary allGuideDic; GuideEnum currentStep;//当前引导到了第几步 int currentIndex;//分解步骤 int needIndex;//当前步骤中需要多少分步 /// /// Awake is called when the script instance is being loaded. /// void Awake() { ins = this; AddDic(); currentStep = GuideEnum.None; currentIndex = -1; panel = gameObject.AddComponent(); } private void Start() { //int step = PlayerPrefs.GetInt("GemBattleGuide"); Init(0); EventCenter.Ins.Add((int)KTGMGemClient.EventType.AddCard, AddCard); EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateFireLv2, CreateFireLv2); EventCenter.Ins.Add((int)KTGMGemClient.EventType.ChargingEnd, ChargingEnd); EventCenter.Ins.Add((int)KTGMGemClient.EventType.KillDone, KillDone); EventCenter.Ins.Add((int)KTGMGemClient.EventType.GetOneTowerPos, GetOneTowerPos); EventCenter.Ins.Add((int)KTGMGemClient.EventType.CreateWaterLv1, CreateWaterLv1); EventCenter.Ins.Add((int)KTGMGemClient.EventType.SkillStep, SkillStep); EventCenter.Ins.Add((int)KTGMGemClient.EventType.SkillReleaseDone, SkillReleaseDone); } private void OnDestroy() { EventCenter.Ins.Remove((int)KTGMGemClient.EventType.AddCard, AddCard); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.CreateFireLv2, CreateFireLv2); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.ChargingEnd, ChargingEnd); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.KillDone, KillDone); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.GetOneTowerPos, GetOneTowerPos); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.CreateWaterLv1, CreateWaterLv1); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.SkillStep, SkillStep); EventCenter.Ins.Remove((int)KTGMGemClient.EventType.SkillReleaseDone, SkillReleaseDone); } public void Init(int step) { //Time.timeScale = 0;//游戏暂停,这样会导致协程停止了 ChangeStep(GuideEnum.Step0); GameConfig.CanOpenNewTower = false; // switch (step) // { // case 2: // case 3: // //生成两个火元素 // break; // case 4: // //生成1个2级火元素,标记上阵位置 // break; // case 5: // //生成2级火元素塔,第一关小怪出木元素小怪 // break; // } // ChangeStep((GuideEnum)(step + 1)); } /// /// 初始化字典 /// void AddDic() { allGuideDic = new Dictionary(); allGuideDic.Add(GuideEnum.Step0, new string[] { GuideConfig.showWords[0], GuideConfig.showWords[1] }); allGuideDic.Add(GuideEnum.Step1, new string[] { GuideConfig.showWords[2], GuideConfig.showWords[3] }); allGuideDic.Add(GuideEnum.Step2, new string[] { GuideConfig.showWords[4], GuideConfig.showWords[5] }); allGuideDic.Add(GuideEnum.Step3, new string[] { GuideConfig.showWords[6], GuideConfig.showWords[7] }); allGuideDic.Add(GuideEnum.Step4, new string[] { GuideConfig.showWords[8] }); allGuideDic.Add(GuideEnum.Step5, new string[] { GuideConfig.showWords[9], GuideConfig.showWords[10] }); allGuideDic.Add(GuideEnum.Step6, new string[] { GuideConfig.showWords[11], GuideConfig.showWords[12] }); allGuideDic.Add(GuideEnum.Step7, new string[] { GuideConfig.showWords[13] }); allGuideDic.Add(GuideEnum.Step8, new string[] { GuideConfig.showWords[14], GuideConfig.showWords[15] }); allGuideDic.Add(GuideEnum.Step9, new string[] { GuideConfig.showWords[16], GuideConfig.showWords[17] }); allGuideDic.Add(GuideEnum.Step10, new string[] { GuideConfig.showWords[18], GuideConfig.showWords[19] }); allGuideDic.Add(GuideEnum.Step11, new string[] { GuideConfig.showWords[20], GuideConfig.showWords[21] }); allGuideDic.Add(GuideEnum.Step12, new string[] { GuideConfig.showWords[22], GuideConfig.showWords[23], GuideConfig.showWords[24] }); } /// /// 引导步骤 /// /// public void ChangeStep(GuideEnum step) { //if (currentStep != step) { currentStep = step; switch (currentStep) { case GuideEnum.Step0: Step0(); break; case GuideEnum.Step1: Step1(); break; case GuideEnum.Step2: Step2(); break; case GuideEnum.Step3: Step3(); break; case GuideEnum.Step4: Step4(); break; case GuideEnum.Step5: Step5(); break; case GuideEnum.Step6: Step6(); break; case GuideEnum.Step7: Step7(); break; case GuideEnum.Step8: Step8(); break; case GuideEnum.Step9: Step9(); break; case GuideEnum.Step10: Step10(); break; case GuideEnum.Step11: Step11(); break; case GuideEnum.Step12: Step12(); break; case GuideEnum.Finish: Finish(); break; } } } #region 步骤分解 private void Step0() { isShowing = true; if (currentIndex == -1)//初始化本步 { CommonDebugHelper.DebugError("第1步开始"); currentIndex = 0; needIndex = 2; panel.SetGuideUI(true); panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } else if (currentIndex == 1) { panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } } private void Step1() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第2步开始"); currentIndex = 0; needIndex = 2; panel.SetGuideUI(false); panel.Step1(allGuideDic[currentStep][currentIndex], currentIndex, Step1_1); } else if (currentIndex == 1) { panel.Step1(allGuideDic[currentStep][currentIndex], currentIndex, Step1_2); currentIndex++; } } /// /// 分步1,购买1排1列的火元素 /// private void Step1_1() { panel.Step1_1(); OnFinishOneStep(); } /// /// 分步2,购买2排3列的火元素 /// private void Step1_2() { panel.Step1_2(); StartCoroutine(AfterCreateFire()); } IEnumerator AfterCreateFire() { yield return new WaitForSeconds(1f); OnFinishOneStep(); } //对话 private void Step2() { isShowing = true; if (currentIndex == -1) { CommonDebugHelper.DebugError("第3步开始"); currentIndex = 0; needIndex = 2; panel.Step2(currentIndex); panel.SetGuideUI(true); panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); //隐藏 } else if (currentIndex == 1) { panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); //currentIndex++; } } //引导合成 private void Step3() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第4步开始"); currentIndex = 0; needIndex = 2; panel.Step3(currentIndex, allGuideDic[currentStep][currentIndex]); } } //开始拖拽 public void BeginDrag() { panel.Step3_2(allGuideDic[currentStep][1]); } //结束推拽 没有合成,回到上一步 public void EndDrag() { panel.Step3(0, allGuideDic[currentStep][0]); } //合成了卡牌,开始下一步 private void AddCard() { currentIndex = -1; ChangeStep(GuideEnum.Step4); } private void Step4() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第5步开始"); currentIndex = 0; panel.Step4(currentIndex, allGuideDic[currentStep][currentIndex]); } } //建造了塔,开始下一步 private void CreateFireLv2() { currentIndex = -1; ChangeStep(GuideEnum.Step5); } private void Step5() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第6步开始"); EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.CreateFirstWave); panel.Step5(currentIndex, ""); } else if (currentIndex == 1) { isShowing = true; panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } } private void ChargingEnd() { currentIndex = 0; needIndex = 2; panel.SetGuideUI(true); isShowing = true; panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } private void Step6() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第7步开始"); panel.SetGuideUI(false); //恢复出怪 EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.RestartWave); } else if (currentIndex == 1) { isShowing = true; panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); //增加200金币 EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.AddGold, 200); } } private void KillDone() { currentIndex = 0; needIndex = 2; panel.SetGuideUI(true); isShowing = true; panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } private void Step7() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第8步开始"); currentIndex = 0; needIndex = 1; panel.SetGuideUI(false); GameConfig.CanOpenNewTower = true; //等待解锁塔 panel.Step7(currentIndex, allGuideDic[currentStep][currentIndex]); } } private void GetOneTowerPos() { currentIndex = -1; ChangeStep(GuideEnum.Step8); } private void Step8() { isShowing = true; if (currentIndex == -1)//初始化本步 { CommonDebugHelper.DebugError("第9步开始"); GameConfig.CanOpenNewTower = false; currentIndex = 0; needIndex = 2; panel.Step8(); panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } else if (currentIndex == 1) { panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } } private void Step9() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第10步开始"); currentIndex = 0; needIndex = 2; panel.SetGuideUI(false); panel.Step9(allGuideDic[currentStep][currentIndex], currentIndex, Step9_1); } else if (currentIndex == 1) { panel.Step9(allGuideDic[currentStep][currentIndex], currentIndex, null); } } /// /// 分步9,购买1排5列的水元素 /// private void Step9_1() { panel.Step9_1(); OnFinishOneStep(); } private void CreateWaterLv1() { panel.CleanMask(); EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.CreateSecondWave);//生成第二波小怪 } private void SkillStep() { currentIndex = -1; ChangeStep(GuideEnum.Step10); } private void Step10() { isShowing = true; if (currentIndex == -1)//初始化本步 { CommonDebugHelper.DebugError("第11步开始"); currentIndex = 0; needIndex = 2; panel.SetGuideUI(true); panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } else if (currentIndex == 1) { panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); panel.Step10(); } } private void Step11() { if (currentIndex == -1) { CommonDebugHelper.DebugError("第12步开始"); currentIndex = 0; needIndex = 1; panel.Step11(currentIndex, allGuideDic[currentStep][currentIndex]); } } //开始拖拽 public void BeginDrag11_1() { panel.Step11(1, allGuideDic[currentStep][1]); } //结束推拽 没有合成,回到上一步 public void EndDrag11_1() { panel.Step11(0, allGuideDic[currentStep][0]); } private void SkillReleaseDone() { currentIndex = -1; ChangeStep(GuideEnum.Step12); } private void Step12() { isShowing = true; if (currentIndex == -1)//初始化本步 { CommonDebugHelper.DebugError("第13步开始"); currentIndex = 0; needIndex = 3; panel.Step12(); panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } else { panel.StartShowWord(allGuideDic[currentStep][currentIndex], ShowWordCallBack); } } private void Finish() { UnityEngine.Debug.Log("新手指导已经完成了"); GameConfig.CanOpenNewTower = true; EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.GuideFinish); Destroy(gameObject); //gameObject.SetActive(false); } #endregion #region 点击事件 bool isShowing;//是否正在显示文字 /// /// 文字显示结束 /// public void ShowWordCallBack() { isShowing = false; if (needIndex - currentIndex == 1) { currentIndex = needIndex; } //currentIndex++; } /// /// 完成了当前步骤中的一个分步骤 /// public void OnFinishOneStep() { if (isShowing) { //正在显示文字,第一次点击,显示全部 panel.ShowWordImmediately(); } else if (needIndex - currentIndex > 0) { //说明当前步骤没完成,进行下一个分步 currentIndex++; ChangeStep(currentStep); } else { //开始新的步骤 currentIndex = -1; ChangeStep(currentStep + 1); } //Debug.LogError($"当前引导:{currentStep} 当前步数:{currentIndex} 总共有:{needIndex}步"); } #endregion }