2024-12-15 01:39:39 +00:00
using System.Collections ;
using System.Collections.Generic ;
using UnityEngine ;
public class Skill_EnergyBall : ProjectileBase
{
[Header("에너지볼 프리팹")]
2024-12-16 01:59:53 +00:00
public GameObject go_projectile ;
2024-12-15 01:39:39 +00:00
[Header("에너지볼 생성 갯수")]
public int amount = 5 ;
[Header("에너지볼 생성 간격")]
public float gapTime = 0.1f ;
2024-12-16 01:59:53 +00:00
List < Transform > list_energyball = new List < Transform > ( ) ;
2024-12-15 01:39:39 +00:00
public override void Set ( ProjectileData _data )
{
2024-12-16 04:00:50 +00:00
_data . eStartPos = eProjectileStartPos . Custom ;
_data . v3_StartPos = _data . shooter . Get_Center_position ( ) ;
2024-12-15 01:39:39 +00:00
base . Set ( _data ) ;
StartCoroutine ( Co_Shoot ( ) ) ;
}
IEnumerator Co_Shoot ( )
{
var count = amount ;
if ( IsStep ( 1 ) ) count + = ( int ) Get_AwakenData ( 1 , 1 ) ;
if ( IsStep ( 2 ) ) count + = ( int ) Get_AwakenData ( 2 , 1 ) ;
if ( IsStep ( 3 ) ) count + = ( int ) Get_AwakenData ( 3 , 1 ) ;
2024-12-16 01:59:53 +00:00
if ( list_energyball . Count < count )
{
int additionalCount = count - list_energyball . Count ;
for ( int i = 0 ; i < additionalCount ; i + + )
{
var temp = DSUtil . Get_Clone ( go_projectile , transform ) ;
list_energyball . Add ( temp . transform ) ;
}
}
2024-12-16 04:00:50 +00:00
Set_Checkers ( ) ;
2024-12-16 01:59:53 +00:00
float angleStep = 360f / list_energyball . Count ;
for ( int i = 0 ; i < list_energyball . Count ; i + + )
{
float angle = i * angleStep ;
list_energyball [ i ] . eulerAngles = new Vector3 ( 0f , angle , 0f ) ; // 방사형으로 회전 적용
list_energyball [ i ] . gameObject . SetActive ( false ) ;
list_energyball [ i ] . localPosition = Vector3 . zero ;
}
2024-12-16 04:00:50 +00:00
for ( int i = 0 ; i < count ; i + + )
list_energyball [ i ] . gameObject . SetActive ( true ) ;
2026-10-24 11:40:41 +00:00
if ( WL . Combat . Weapon . WLOrbReturn . Take ( this , list_energyball , count ) ) yield break ; // WL #977 훅(1줄) — 구슬 3 m 나갔다 되돌아와 몸에 흡수 · 나갈 때 · 돌아올 때 판정(WLOrbReturn.json)
2024-12-16 01:59:53 +00:00
// 에너지볼 이동
while ( m_LifeTime > 0f )
{
2025-01-19 21:58:12 +00:00
if ( DSUtil . CheckNull ( m_ProjecTileData . shooter ) ) break ;
2024-12-16 01:59:53 +00:00
2024-12-16 04:00:50 +00:00
for ( int i = 0 ; i < count ; i + + )
2025-01-19 21:58:12 +00:00
list_energyball [ i ] . Translate ( m_ProjecTileData . Speed * Time . deltaTime * list_energyball [ i ] . forward ) ;
2024-12-16 01:59:53 +00:00
m_LifeTime - = Time . deltaTime ;
yield return null ;
2024-12-15 01:39:39 +00:00
}
Off ( ) ;
}
}