using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; using TowerDefense.Level; using Core.Utilities; using TowerDefense.Agents; using Core.Health; using TowerDefense.UI.HUD; /** * 水精灵技能-冷冻气息控制脚本 * @Author: chenxin * @Date: 2020-11-12 14:41:23 */ namespace KTGMGemClient { public class FreezeBreath : MonoBehaviour { public Image ProgressImg; private int currentProgress; /// /// 充能时间(s) /// public static float ChargeTime { get; private set; } = 10f; /// /// 伤害时间 /// public float EffectTime { get; private set; } = 2f; /// /// 伤害结算次数 /// /// public int DamageCount { get; private set; } = 6; /// /// 整个技能时间 /// public float SkillTime { get; private set; } = 2.5f; /// /// 当前的充能进度 /// public int CurrentProgress { get; private set; } /// /// 喷冰特效 /// public GameObject FreezeJet; public int ReleaseCount { get; set; } public void SetCtrlProgress(int progress) { if (progress == (int)Mathf.Floor(ChargeTime)) progress = 0; ProgressImg.rectTransform.DOKill(); SetProgress(progress, false); } public void SetProgress(int progress, bool ani = true) { if (CurrentProgress == progress) return; CurrentProgress = progress; ProgressImg.rectTransform.DOScaleY(progress / ChargeTime, ani ? 0.3f : 0); } public void SetProgress(float progress) { ProgressImg.rectTransform.DOScaleY(progress / ChargeTime, 0); CurrentProgress = (int)Mathf.Floor(progress); } /// /// 释放冷冻气息 /// /// 哪条兵线 /// 伤害值 public void ReleaseFreeze(int waveLineId, float damage, IAlignmentProvider alignmentProvider) { WaveLineAgentInsMgr[] agentInsMgrs = AgentInsManager.instance.GetWaveLineList(); WaveLineAgentInsMgr waveLineAgentInsMgr = agentInsMgrs[waveLineId]; List list = waveLineAgentInsMgr.listAgent; if (list.Count == 0) return; List agentList = new List(); for (int i = 0; i < list.Count; ++i) { agentList.Add(list[i]); } while (agentList.Count > 0) { Agent agent = agentList[0]; agentList.Remove(agentList[0]); if (agent.isDead) continue; if (agent.AgentType == SpawnAgentType.Normal) { agent.addSpeedSlowRate(0.15f); agent.PlayOnHitImmediately(); EndlessGameUI.instance.generateBloodText(agent.position, damage); agent.TakeDamage(damage, agent.position, alignmentProvider); } else if (agent.AgentType == SpawnAgentType.BubbleBomb) EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (agent as BubbleBombAgent).Id); } } public void PlayFreezeEffect(int waveLineId) { WaveLineAgentInsMgr[] agentInsMgrs = AgentInsManager.instance.GetWaveLineList(); WaveLineAgentInsMgr waveLineAgentInsMgr = agentInsMgrs[waveLineId]; List list = waveLineAgentInsMgr.listAgent; if (list.Count == 0) return; GameObject obj = Poolable.TryGetPoolable(FreezeJet); ParticleSystem ps = obj.GetComponent(); if (ps == null) ps = obj.transform.GetChild(0).GetComponent(); ps.transform.position = EndlessLevelManager.instance.WaveManager.GetWaveEndPos(waveLineId); ps.Play(); } } }