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]);
}
// 一次性死亡数量
int deathCount = 0;
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);
if (agent.isDead)
++deathCount;
}
else if (agent.AgentType == SpawnAgentType.BubbleBomb)
EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (agent as BubbleBombAgent).Id);
}
if (deathCount > 1)
EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount);
}
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();
}
}
}