Project_WL/Assets/Script/Character/Projectile/Skill/Skill_Blizzard.cs

68 lines
2.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static UnityEngine.ParticleSystem;
public class Skill_Blizzard : ProjectileBase
{
public ParticleSystem MainPS;
MainModule m_MainModule;
[Header("눈보라 떨어질 높이")]
public Vector3 v3_Height = Vector3.up * 3f;
[Header("눈보라 지속 시간")]
public float lifeTime = 5f;
[Header("눈보라 효과 범위")]
public float effectArea = 8f;
[Header("눈보라 데미지 간격")]
public float dmgDelay = 0.5f;
public override void Set(ProjectileData _data)
{
if (!DSUtil.CheckNull(_data.target))
{
m_MainModule = MainPS.main;
_data.eStartPos = eProjectileStartPos.Custom;
_data.v3_StartPos = _data.target.Get_position() + v3_Height;
base.Set(_data);
m_LifeTime = lifeTime + (IsStep(1) ? Get_AwakenData(1, 1) : 0f);
transform.eulerAngles = Vector3.zero;
StartCoroutine(Co_Update());
}
else
Off();
}
IEnumerator Co_Update()
{
m_MainModule.loop = true;
float area = effectArea + (IsStep(2) ? Get_AwakenData(2, 1) : 0f);
bool step3 = IsStep(3);
var step3_val1 = Get_AwakenData(3, 1);
var step3_val2 = Get_AwakenData(3, 1);
while (m_LifeTime > 0f)
{
yield return new WaitForSeconds(dmgDelay);
m_LifeTime -= dmgDelay;
var enemies = Get_Enemies(transform, area);
for (int i = 0; i < enemies.Count; i++)
{
if (DSUtil.CheckNull(enemies[i])) continue;
if (i >= enemies.Count) break;
enemies[i].Get_Damage(Get_DamageInfo());
if (step3)
{
var ccData = enemies[i].Get_CCData(eCC.MOVSPD_Down);
if (ccData.CCTime > 0f) ccData.CCDmg += step3_val1;
ccData = enemies[i].Get_CCData(eCC.ATKSPD_Down);
if (ccData.CCTime > 0f) ccData.CCDmg += step3_val2;
}
}
}
m_MainModule.loop = false;
yield return new WaitForSeconds(10f);
Off();
}
}