68 lines
2.2 KiB
C#
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();
|
|
}
|
|
} |