2024-12-15 01:39:39 +00:00
using System.Collections ;
using UnityEngine ;
public class Skill_Blizzard : ProjectileBase
{
[Header("눈보라 지속 시간")]
public float lifeTime = 5f ;
[Header("눈보라 효과 범위")]
2024-12-16 01:59:53 +00:00
public float effectArea = 3f ;
2024-12-15 01:39:39 +00:00
[Header("눈보라 데미지 간격")]
public float dmgDelay = 0.5f ;
public override void Set ( ProjectileData _data )
{
if ( ! DSUtil . CheckNull ( _data . target ) )
{
_data . eStartPos = eProjectileStartPos . Custom ;
2024-12-16 01:59:53 +00:00
_data . v3_StartPos = _data . target . Get_position ( ) ;
2024-12-15 01:39:39 +00:00
base . Set ( _data ) ;
2026-10-25 16:51:40 +00:00
if ( WL . Combat . Weapon . WLStaffLaser . Take ( this ) ) return ; // WL #986 훅(1줄) — 지팡이 기본: 손 내지른 자세 + 전방 레이저 3 초 · 0.5 초 다단 · 0.2 m 밀침 · 방향 전환 · 구르기 취소(WLStaffLaser.json) · 원본 눈보라 건너뜀
2024-12-15 01:39:39 +00:00
m_LifeTime = lifeTime + ( IsStep ( 1 ) ? Get_AwakenData ( 1 , 1 ) : 0f ) ;
transform . eulerAngles = Vector3 . zero ;
StartCoroutine ( Co_Update ( ) ) ;
}
else
Off ( ) ;
}
IEnumerator Co_Update ( )
{
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 ;
2024-12-25 06:30:52 +00:00
enemies [ i ] . Get_Damage ( Get_NewDamageInfo ( ) ) ;
2024-12-15 01:39:39 +00:00
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 ;
}
}
}
2024-12-16 01:59:53 +00:00
Off ( true ) ;
2024-12-15 01:39:39 +00:00
}
}