2024-12-15 01:39:39 +00:00
using System.Collections ;
using System.Collections.Generic ;
using UnityEngine ;
public class Skill_Hurricane : ProjectileBase
{
[Header("소용돌이 유지 시간")]
public float lifeTime = 15f ;
[Header("소용돌이 데미지 범위")]
2024-12-16 06:01:17 +00:00
public BoxCollider m_Collider ;
2024-12-15 01:39:39 +00:00
[Header("데미지 간격")]
public float damageGap = 0.33f ;
[Header("소용돌이 이동속도")]
public float movespeed = 1f ;
2025-05-06 02:13:18 +00:00
public ParticleSystem [ ] particleSystems ;
2024-12-15 01:39:39 +00:00
public override void Set ( ProjectileData _data )
{
base . Set ( _data ) ;
2024-12-16 06:01:17 +00:00
transform . position = _data . target . Get_position ( ) ;
transform . eulerAngles = Vector3 . zero ;
2024-12-15 01:39:39 +00:00
movespeed + = IsStep ( 1 ) ? Get_AwakenData ( 1 , 1 ) : 0f ;
_data . LifeTime = lifeTime + ( IsStep ( 2 ) ? Get_AwakenData ( 2 , 1 ) : 0f ) ;
2025-05-06 02:13:18 +00:00
for ( int i = 0 ; i < particleSystems . Length ; i + + )
{
var main = particleSystems [ i ] . main ;
main . loop = true ;
}
2024-12-15 01:39:39 +00:00
2026-10-18 15:09:05 +00:00
if ( WL . Combat . Weapon . WLStaffEarth . TakeOver ( this ) ) return ; // WL #935 훅(1줄) — 지팡이 주력: 대상 발밑 대지 소환(Summon_04) · 광역 피해 · 기절 1.5 초(WLStaffEarth.json) · 원본 소용돌이 진행 건너뜀
2024-12-15 01:39:39 +00:00
StartCoroutine ( Co_Update ( ) ) ;
}
IEnumerator Co_Update ( )
{
2025-05-06 02:13:18 +00:00
// 고유 스킬 개화 없음
//if (IsStep(3)) m_Collider.size = new Vector3(1.70440888f, 3.86459613f, 1.84529209f);
//else m_Collider.size = new Vector3(1.37568462f, 3.86459613f, 1.46960735f);
2024-12-15 01:39:39 +00:00
2025-01-19 21:58:12 +00:00
while ( m_ProjecTileData . LifeTime > 0f )
2024-12-15 01:39:39 +00:00
{
2024-12-16 06:01:17 +00:00
m_Collider . enabled = true ;
yield return null ;
yield return null ;
m_Collider . enabled = false ;
2024-12-15 01:39:39 +00:00
yield return new WaitForSeconds ( damageGap ) ;
2025-01-19 21:58:12 +00:00
m_ProjecTileData . LifeTime - = damageGap ;
2024-12-15 01:39:39 +00:00
}
2025-05-06 02:13:18 +00:00
for ( int i = 0 ; i < particleSystems . Length ; i + + )
{
var main = particleSystems [ i ] . main ;
main . loop = false ;
}
yield return new WaitForSeconds ( 1f ) ;
2024-12-16 06:01:17 +00:00
Off ( true ) ;
2024-12-15 01:39:39 +00:00
}
private void Update ( )
{
2025-01-19 21:58:12 +00:00
if ( ! DSUtil . CheckNull ( m_ProjecTileData . target ) & & ! m_ProjecTileData . target . IsDead ( ) )
2024-12-15 01:39:39 +00:00
{
2025-01-19 21:58:12 +00:00
var targetpos = m_ProjecTileData . target . Get_position ( ) ;
2024-12-15 01:39:39 +00:00
transform . position = Vector3 . MoveTowards ( transform . position , targetpos , Time . deltaTime * movespeed ) ;
// Create a new position with the y value you want
Vector3 newPosition = transform . position ;
newPosition . y = 0.01f ; // Set the y-value
transform . position = newPosition ;
}
else
{
2025-01-19 21:58:12 +00:00
m_ProjecTileData . target = Get_NearstEnemy ( ) ;
if ( DSUtil . CheckNull ( m_ProjecTileData . target ) )
2024-12-15 01:39:39 +00:00
Off ( true ) ;
}
2025-01-19 21:58:12 +00:00
if ( m_ProjecTileData . shooter . IsDead ( ) ) Off ( ) ;
2024-12-15 01:39:39 +00:00
}
}