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(); } }