using DG.Tweening; using UnityEngine; using UnityEngine.UI; using Core.Utilities; using TowerDefense.Level; /** * 无尽模式boss控制器 * @Author: chenxin * @Date: 2020-10-30 16:40:54 */ namespace KTGMGemClient { public class EndlessBossCtrl : Singleton { /// /// boss动作 /// private Animator BossAnimator; /// /// 动作状态 /// public EndlessBossActionState ActionState { get; set; } public Image Title; private string titlePath = "UI/Endless/SkillTitle/"; private ParticleSystem deadPS, deadMoney; private string prefabPath = "Prefabs/Boss/Boss_"; private GameObject Body; // Start is called before the first frame update private void Start() { ColorVal = 0; EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitle, Glint); } 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) { Title.sprite = Resources.Load($"{titlePath}{skillType}"); //设置一个DOTween队列 Sequence flashSeq = DOTween.Sequence(); Color c = Title.color; c.a = 0; Title.color = c; Title.gameObject.SetActive(true); flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 1, 0.3f)); flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 0, 0.15f)); flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 1, 0.3f)); flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 0, 0.15f)); flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 1, 0.3f)); flashSeq.Append(DOTween.To(() => ColorVal, (v) => ColorVal = v, 0, 0.15f)); flashSeq.AppendCallback(() => { EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted); }); } private float ColorVal { get { return Title.color.a; } set { Title.gameObject.SetActive(value != 0); Color c = Title.color; c.a = value; Title.color = c; } } /// /// 切换状态 /// /// public void ChangeState(EndlessBossActionState newState) { ActionState = newState; if (newState == EndlessBossActionState.Death) { deadPS?.Play(); deadMoney?.Play(); } BossAnimator.SetInteger("State", (int)newState); } /// /// 刷新boss形象 /// /// public void RefreshBody(int resId) { GameObject prefab = Resources.Load($"{prefabPath}{resId}"); if (prefab == null) { Debug.LogError($"---- 加载boss资源出错,resId: {resId} ----"); return; } Body = Instantiate(prefab); Body.transform.SetParent(transform, false); BossAnimator = Body.GetComponent(); } } }