Project_WL/Assets/Script/Character/Projectile/SelectSkill/SelectFairyBase.cs

81 lines
2.5 KiB
C#

using System;
using System.Collections;
using System.Linq;
using CodeStage.AntiCheat.ObscuredTypes;
using UnityEngine;
using Random = UnityEngine.Random;
public class SelectFairyBase : ProjectileBase
{
public eCC m_Status;
public GameObject[] gos; // 0 요정, 1 cc 이펙트
public float CCTime = 3f;
bool MobLoad;
public override void Set(ProjectileData _data)
{
base.Set(_data);
StartCoroutine(Co_Update());
}
IEnumerator Co_Update()
{
float delay = CCTime;
ObscuredInt FairyCount = 1;
FairyCount.RandomizeCryptoKey();
while (true)
{
gos[1].SetActive(false);
gos[0].transform.position = gos[1].transform.position = MyValue.MyPC.Get_Center_position() + Random.insideUnitSphere * 1f + Vector3.up;
yield return new WaitForSeconds(delay);
if (MobLoad)
{
MobLoad = false;
yield return new WaitForSeconds(0.1f);
}
if (FairyCount == 1)
{
switch (m_Status)
{
case eCC.Freeze: FairyCount = Get_FairyCount(eEffect.Select_FrostFairy2); break;
case eCC.KnockedAirborne: FairyCount = Get_FairyCount(eEffect.Select_WindFairy2); break;
case eCC.KnockBack: FairyCount = Get_FairyCount(eEffect.Select_HikikomoriFairy2); break;
}
if (FairyCount > 1)
FairyCount.RandomizeCryptoKey();
}
gos[1].SetActive(true);
if (FairyCount == 1)
{
var mob = ActorInfo.Ins.Get_Nearest_EnemyActor_orNull(m_ProjectTileData.shooter.IsEnemy(), transform.position);
if (mob != null && !mob.IsDead())
Set_CC(mob);
}
else
{
for (int i = 0; i < FairyCount; i++)
{
var mobs = Get_Enemies();
mobs = mobs.OrderBy(o => Guid.NewGuid()).ToList();
if (mobs.Count > i)
Set_CC(mobs[i]);
}
}
yield return new WaitForSeconds(1f);
delay = CCTime - 1f;
}
}
void Set_CC(Actor _actor)
{
switch (m_Status)
{
case eCC.Freeze: _actor.Freeze(2f); break;
case eCC.KnockedAirborne: _actor.KnockedAirborne(1f); break;
case eCC.KnockBack: _actor.KnockBack(0.75f); break;
}
}
}