Project_WL/Assets/Script/Character/Projectile/Skill/Skill_PhantomFrenzy.cs

97 lines
3.3 KiB
C#

using CodeStage.AntiCheat.ObscuredTypes;
using System.Collections;
using UnityEngine;
public class Skill_PhantomFrenzy : ProjectileBase
{
[Header("공격 애니메이션")]
public string attackAnimationName = "ass_skill3_attack";
[Header("공격 횟수")]
public int AttackCount = 7;
[Header("공격 거리")]
public float AttackDistance = 10f;
[Header("이동속도")]
public float m_speed = 3.5f;
public override void Set(ProjectileData _data)
{
base.Set(_data);
StartCoroutine(Co_Update());
}
// 아래는 순간이동 후 공격인데, 이펙트와 애님이 마땅한 게 없음(트레일)
IEnumerator Co_Update()
{
OptionInfo.Ins.PCMove = false;
var shooter = m_ProjecTileData.shooter;
ObscuredInt attackTimes = AttackCount; // 공격 횟수 설정
attackTimes.RandomizeCryptoKey();
Actor target = m_ProjecTileData.target;
float t = 0f;
shooter.AnimationPlay("idle");
shooter.AnimationPlay(attackAnimationName);
while (attackTimes > 0)
{
t += Time.deltaTime * m_speed;
shooter.Set_Warp(Vector3.Lerp(shooter.Get_position(), target.Get_PositionBack(), t));
if (t >= 1f)
{
shooter.AnimationPlay("idle");
shooter.AnimationPlay(attackAnimationName);
t = 0f;
InGameInfo.Ins.Show_Effect("Effect_Skill_PhantomFrenzy", target.Get_PositionBack());
// 남은 공격 횟수 감소
--attackTimes;
attackTimes.RandomizeCryptoKey();
target = ActorInfo.Ins.Get_Far_EnemyActor_orNull(shooter.IsEnemy(), shooter.Get_position(), AttackDistance);
if (DSUtil.CheckNull(target)) break;
}
yield return null;
}
// 이동 활성화 및 대기 상태로 전환
OptionInfo.Ins.PCMove = true;
shooter.Play_Idle();
}
//// 아래는 단순 이동이라 빠른 느낌 내기가 힘듬
//IEnumerator Co_Update()
//{
// // 이동 비활성화
// OptionInfo.Ins.PCMove = false;
// var shooter = m_ProjectTileData.shooter;
// ObscuredInt attackTimes = AttackCount; // 공격 횟수 설정
// attackTimes.RandomizeCryptoKey();
// Actor target = m_ProjectTileData.target;
// while (attackTimes > 0)
// {
// bool moveCompleted = false;
// // 목표 지점으로 이동 (이동 완료 시 moveCompleted = true)
// shooter.MoveToTarget(target, 0.5f, 100f, () => moveCompleted = true);
// // 공격 애니메이션 실행
// shooter.AnimationPlay(attackAnimationName);
// // 이동 완료 대기
// while (!moveCompleted || shooter.isPlaying()) yield return null;
// // 남은 공격 횟수 감소
// --attackTimes;
// attackTimes.RandomizeCryptoKey();
// target = ActorInfo.Ins.Get_Far_EnemyActor_orNull(shooter.IsEnemy(), shooter.Get_position(), AttackDistance);
// if (DSUtil.CheckNull(target)) break;
// }
// // 이동 활성화 및 대기 상태로 전환
// OptionInfo.Ins.PCMove = true;
// shooter.Play_Idle();
//}
}