97 lines
3.3 KiB
C#
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();
|
|
//}
|
|
}
|