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);
// 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);
//等待解锁塔
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步开始");
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("新手指导已经完成了");
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
}