From 452c75675679c44cc39b04bdb7d330d7c5c14d5c Mon Sep 17 00:00:00 2001
From: wangguan <wangguan@kt007.com>
Date: Tue, 29 Dec 2020 10:48:06 +0800
Subject: [PATCH] 增加多SDK支持。常规使用SDKChannel.KTGM 偶哈游的是空SDK

---
 Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs |  136 ++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 122 insertions(+), 14 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs
index 5a757bb..56090e5 100644
--- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs
+++ b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs
@@ -1,7 +1,7 @@
-using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Core.Utilities;
+using TowerDefense.UI.HUD;
 
 /**
  * 无尽模式boss技能管理器
@@ -33,10 +33,29 @@
         private List<EndlessBossSkill> waitList;
 
         /// <summary>
+        /// boss技能状态
+        /// </summary>
+        private EndlessBossSkillState skillState;
+
+        /// <summary>
         /// 是否终止使用技能
         /// </summary>
-        /// <value></value>
         private bool isPaused { get; set; }
+
+        /// <summary>
+        /// 当前正在处理的技能
+        /// </summary>
+        private EndlessBossSkill currentSkill;
+
+        /// <summary>
+        /// 飘字是否完成
+        /// </summary>
+        private bool isFloatWordCompleted { get; set; } = true;
+
+        /// <summary>
+        /// boss技能动作是否完成
+        /// </summary>
+        private bool isSkillActionCompleted { get; set; } = true;
 
         // Start is called before the first frame update
         private void Start()
@@ -49,24 +68,90 @@
         // Update is called once per frame
         private void Update()
         {
-            if (isPaused) return;
+            if (isPaused || EndlessGameUI.instance.state == EndlessGameUI.State.GameOver || !EndlessUIStart.instance.IsGameRunning) return;
 
             for (int i = 0; i < skillList.Count; ++i)
             {
                 skillList[i].Update(Time.deltaTime);
-
-                if (skillList[i].IsCDCompleted)
-                    AddSkill(skillList[i]);
             }
 
+            for (int i = 0; i < waitList.Count; ++i)
+            {
+                if (waitList[i].IsCDCompleted)
+                    AddSkill(waitList[i]);
+            }
+
+            switch (skillState)
+            {
+                case EndlessBossSkillState.Init:
+                    break;
+                case EndlessBossSkillState.Wait:
+                    HandleWait(Time.deltaTime);
+                    break;
+                case EndlessBossSkillState.FloatWord:
+                    if (isFloatWordCompleted)
+                    {
+                        EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossActionEnd);
+                        EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Summon);
+                        isSkillActionCompleted = false;
+                        ChangeState(EndlessBossSkillState.PerformAction);
+                    }
+                    break;
+                case EndlessBossSkillState.PerformAction:
+                    if (isSkillActionCompleted)
+                        ChangeState(EndlessBossSkillState.ReleaseSkill);
+                    break;
+                case EndlessBossSkillState.ReleaseSkill:
+                    if (currentSkill != null)
+                    {
+                        RemoveSkill(currentSkill);
+                        currentSkill.ReleaseSkill();
+                        currentSkill = null;
+                    }
+                    ChangeState(EndlessBossSkillState.Wait);
+                    break;
+            }
+        }
+
+        /// <summary>
+        /// boss技能动作完成
+        /// </summary>
+        private void OnEndlessBossActionEnd()
+        {
+            EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossActionEnd);
+            isSkillActionCompleted = true;
+        }
+
+        private void HandleWait(float deltaTime)
+        {
             for (int i = 0; i < cdList.Count; ++i)
             {
                 if (cdList[i].IsConditionOK)
                 {
-                    cdList[i].ReleaseSkill();
-                    RemoveSkill(cdList[i]);
+                    currentSkill = cdList[i];
+                    EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted, OnGlintTitleCompleted);
+                    EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitle, (int)cdList[i].SkillType);
+                    isFloatWordCompleted = false;
+                    ChangeState(EndlessBossSkillState.FloatWord);
+                    break;
                 }
             }
+        }
+
+        /// <summary>
+        /// 飘字闪烁完成
+        /// </summary>
+        private void OnGlintTitleCompleted()
+        {
+            EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted, OnGlintTitleCompleted);
+            isFloatWordCompleted = true;
+        }
+
+        private void ChangeState(EndlessBossSkillState newState)
+        {
+            if (newState == skillState) return;
+
+            skillState = newState;
         }
 
         /// <summary>
@@ -75,7 +160,6 @@
         /// <param name="idList"></param>
         public void Init(List<int> idList)
         {
-            Debug.Log("--------------------- 初始化boss技能列表 ---------------------");
             skillIdList = idList;
 
             for (int i = 0; i < idList.Count; ++i)
@@ -86,10 +170,12 @@
                 {
                     skillList.Add(skill);
                     skill.Init();
+                    waitList.Add(skill);
                 }
             }
 
             isPaused = false;
+            ChangeState(EndlessBossSkillState.Wait);
         }
 
         /// <summary>
@@ -97,7 +183,6 @@
         /// </summary>
         public void ClearSkillList()
         {
-            Debug.Log("--------------------- 关卡结束,清空技能列表 ---------------------");
             for (int i = 0; i < skillList.Count; ++i)
             {
                 skillList[i].Clear();
@@ -107,6 +192,8 @@
             cdList.Clear();
             waitList.Clear();
             isPaused = true;
+            ChangeState(EndlessBossSkillState.Init);
+            ClearEvent();
         }
 
         /// <summary>
@@ -114,14 +201,32 @@
         /// </summary>
         public void Reset()
         {
-            for (int i = 0; i < skillList.Count; ++i)
-            {
-                skillList[i].Reset();
-            }
+            if (isPaused) return;
 
             cdList.Clear();
             waitList.Clear();
+
+            for (int i = 0; i < skillList.Count; ++i)
+            {
+                skillList[i].Reset();
+                waitList.Add(skillList[i]);
+            }
+
             isPaused = true;
+            ChangeState(EndlessBossSkillState.Init);
+            ClearEvent();
+        }
+
+        private void ClearEvent()
+        {
+            if (!isFloatWordCompleted)
+                EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted, OnGlintTitleCompleted);
+
+            if (!isSkillActionCompleted)
+            {
+                EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossActionEnd);
+                EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Standing);
+            }
         }
 
         /// <summary>
@@ -130,6 +235,7 @@
         public void Restart()
         {
             isPaused = false;
+            ChangeState(EndlessBossSkillState.Wait);
         }
 
         /// <summary>
@@ -155,6 +261,8 @@
                     return new BossSkillBubbleBomb(data);
                 case EndlessBossSkillType.WoodPile:
                     return new BossSkillWoodPile(data);
+                case EndlessBossSkillType.BondageBubble:
+                    return new BossSkillBondageBubble(data);
             }
 
             return null;

--
Gitblit v1.9.1