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(); //} }