wangguan
2020-12-29 452c75675679c44cc39b04bdb7d330d7c5c14d5c
Assets/Scripts/TowerDefense/UI/EndlessBossCtrl.cs
@@ -1,9 +1,8 @@
using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Core.Utilities;
using TowerDefense.Level;
/**
 * 无尽模式boss控制器
@@ -17,7 +16,7 @@
        /// <summary>
        /// boss动作
        /// </summary>
        public Animator BossAnimator;
        private Animator BossAnimator;
        /// <summary>
        /// 动作状态
@@ -28,7 +27,11 @@
        private string titlePath = "UI/Endless/SkillTitle/";
        public ParticleSystem deadPS, deadMoney;
        private ParticleSystem deadPS, deadMoney;
        private string prefabPath = "Prefabs/Boss/Boss_";
        private GameObject Body;
        // Start is called before the first frame update
        private void Start()
@@ -37,10 +40,36 @@
            EventCenter.Ins.Add<int>((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitle, Glint);
        }
        // Update is called once per frame
        private void Update()
        private void LateUpdate()
        {
            if (BossAnimator == null) return;
            AnimatorStateInfo stateInfo = BossAnimator.GetCurrentAnimatorStateInfo(0);
            if (stateInfo.IsName("Boss_Summon") && stateInfo.normalizedTime >= 1f)
            {
                EventCenter.Ins.BroadCast((int)EventType.EndlessBossSummonEnd);
                // 召唤动作结束后自动切换到站立状态
                ChangeState(EndlessBossActionState.Standing);
            }
            else if (stateInfo.IsName("Boss_Death") && stateInfo.normalizedTime >= 1f)
            {
                ClearBoss();
                EndlessLevelManager.instance.WaveManager.HideTunel();
            }
        }
        public void ClearBoss()
        {
            BossAnimator = null;
            deadPS = null;
            deadMoney = null;
            if (Body != null)
            {
                Destroy(Body);
                Body = null;
            }
        }
        private void Glint(int skillType)
@@ -75,25 +104,6 @@
        }
        /// <summary>
        /// 帧事件
        /// </summary>
        /// <param name="frameName"></param>
        public void FireAnimationEvent(string frameName)
        {
            if (frameName == "summonEnd")
            {
                EventCenter.Ins.BroadCast((int)EventType.EndlessBossSummonEnd);
                // 召唤动作结束后自动切换到站立状态
                ChangeState(EndlessBossActionState.Standing);
            }
            else if (frameName == "death")
            {
                BossAnimator.speed = 0;
                EventCenter.Ins.BroadCast((int)EventType.EndlessBossDeathActionEnd);
            }
        }
        /// <summary>
        /// 切换状态
        /// </summary>
        /// <param name="newState"></param>
@@ -101,18 +111,31 @@
        {
            ActionState = newState;
            if (newState == EndlessBossActionState.Standing || newState == EndlessBossActionState.Summon)
                BossAnimator.speed = 1;
            else if (newState == EndlessBossActionState.Death)
            if (newState == EndlessBossActionState.Death)
            {
                //Debug.Log("BOSS死亡特效");
                //播放特效
                deadPS.Play();
                deadMoney.Play();
                deadPS?.Play();
                deadMoney?.Play();
            }
            BossAnimator.SetInteger("State", (int)newState);
        }
        /// <summary>
        /// 刷新boss形象
        /// </summary>
        /// <param name="resId"></param>
        public void RefreshBody(int resId)
        {
            GameObject prefab = Resources.Load<GameObject>($"{prefabPath}{resId}");
            if (prefab == null)
            {
                Debug.LogError($"---- 加载boss资源出错,resId: {resId} ----");
                return;
            }
            Body = Instantiate(prefab);
            Body.transform.SetParent(transform, false);
            BossAnimator = Body.GetComponent<Animator>();
        }
    }
}