wangguan
2020-10-27 1cc976d33bfbe7488c85df9d35f28aa6e4360294
Assets/Scripts/Guide/GuideCtrl.cs
@@ -1,12 +1,17 @@
using System.Collections;
using System.Diagnostics;
using System.Collections.Generic;
using UnityEngine;
using KTGMGemClient;
/// <summary>
/// 新手引导控制脚本
/// </summary>
public class GuideCtrl : MonoBehaviour
{
    private static GuideCtrl ins;
    public static GuideCtrl Ins { get { return ins; } }
    GuidePanel panel;//UI
    Dictionary<GuideEnum, string[]> allGuideDic;
    GuideEnum currentStep;//当前引导到了第几步
@@ -18,6 +23,7 @@
    /// </summary>
    void Awake()
    {
        ins = this;
        AddDic();
        currentStep = GuideEnum.None;
        currentIndex = -1;
@@ -26,13 +32,56 @@
    private void Start()
    {
        Init();
        //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);
    }
    public void Init()
    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));
    }
    /// <summary>
@@ -108,6 +157,9 @@
                case GuideEnum.Step12:
                    Step12();
                    break;
                case GuideEnum.Finish:
                    Finish();
                    break;
            }
@@ -122,6 +174,9 @@
        isShowing = true;
        if (currentIndex == -1)//初始化本步
        {
            CommonDebugHelper.DebugError("第1步开始");
            GA_SDK_Manager.Ins.Statistics(5);//埋点
            currentIndex = 0;
            needIndex = 2;
            panel.SetGuideUI(true);
@@ -136,23 +191,56 @@
    {
        if (currentIndex == -1)
        {
            panel.SetGuideUI(false);
            CommonDebugHelper.DebugError("第2步开始");
            GA_SDK_Manager.Ins.Statistics(6);//埋点
            GA_SDK_Manager.Ins.GuideStep(1);//埋点
            currentIndex = 0;
            needIndex = 2;
            panel.Step1(allGuideDic[currentStep][currentIndex], currentIndex, OnFinishOneStep);
            panel.SetGuideUI(false);
            panel.Step1(allGuideDic[currentStep][currentIndex], currentIndex, Step1_1);
        }
        else if (currentIndex == 1)
        {
            panel.Step1(allGuideDic[currentStep][currentIndex], currentIndex, OnFinishOneStep);
            panel.Step1(allGuideDic[currentStep][currentIndex], currentIndex, Step1_2);
            currentIndex++;
        }
    }
    /// <summary>
    /// 分步1,购买1排1列的火元素
    /// </summary>
    private void Step1_1()
    {
        panel.Step1_1();
        OnFinishOneStep();
    }
    /// <summary>
    /// 分步2,购买2排3列的火元素
    /// </summary>
    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步开始");
            GA_SDK_Manager.Ins.GuideStep(2);//埋点
            currentIndex = 0;
            needIndex = 2;
            panel.Step2(currentIndex);
@@ -167,76 +255,295 @@
        }
    }
    //引导合成
    private void Step3()
    {
        if (currentIndex == -1)
        {
            CommonDebugHelper.DebugError("第4步开始");
            GA_SDK_Manager.Ins.GuideStep(3);//埋点
            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步开始");
            GA_SDK_Manager.Ins.GuideStep(4);//埋点
            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步开始");
            GA_SDK_Manager.Ins.GuideStep(5);//埋点
            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步开始");
            GA_SDK_Manager.Ins.GuideStep(6);//埋点
            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>((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步开始");
            GA_SDK_Manager.Ins.GuideStep(7);//埋点
            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()
    {
        if (currentIndex == -1)
        isShowing = true;
        if (currentIndex == -1)//初始化本步
        {
            CommonDebugHelper.DebugError("第9步开始");
            GA_SDK_Manager.Ins.GuideStep(8);//埋点
            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步开始");
            GA_SDK_Manager.Ins.GuideStep(9);//埋点
            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);
        }
    }
    /// <summary>
    /// 分步9,购买1排5列的水元素
    /// </summary>
    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()
    {
        if (currentIndex == -1)
        isShowing = true;
        if (currentIndex == -1)//初始化本步
        {
            CommonDebugHelper.DebugError("第11步开始");
            GA_SDK_Manager.Ins.GuideStep(10);//埋点
            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步开始");
            GA_SDK_Manager.Ins.GuideStep(11);//埋点
            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()
    {
        if (currentIndex == -1)
        isShowing = true;
        if (currentIndex == -1)//初始化本步
        {
            CommonDebugHelper.DebugError("第13步开始");
            GA_SDK_Manager.Ins.GuideStep(12);//埋点
            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("新手指导已经完成了");
        GA_SDK_Manager.Ins.GuideStep(13);//埋点
        GameConfig.CanOpenNewTower = true;
        EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.GuideFinish);
        Destroy(gameObject);
        //gameObject.SetActive(false);
    }
    #endregion
    #region 点击事件