2025-02-20 06:54:35 +00:00
|
|
|
using System;
|
2025-02-09 23:50:15 +00:00
|
|
|
using System.Collections;
|
2025-02-10 00:50:00 +00:00
|
|
|
using UnityEngine;
|
2025-02-09 23:50:15 +00:00
|
|
|
|
|
|
|
|
public class BullRushMobActor : MobActor
|
|
|
|
|
{
|
2025-02-16 00:14:00 +00:00
|
|
|
public override void Change_MobStatus(eMobStatus mobStatus)
|
2025-02-10 00:50:00 +00:00
|
|
|
{
|
|
|
|
|
if (mobStatus == eMobStatus.Battle)
|
2025-02-10 02:56:16 +00:00
|
|
|
Play_Attack(0, (float)m_Stat.Get_Stat(eStat.FinalAttackSpeed));
|
2025-02-10 00:50:00 +00:00
|
|
|
else
|
|
|
|
|
base.Change_MobStatus(mobStatus);
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-01 21:41:01 +00:00
|
|
|
public override void Play_Attack(int _attack, float _as, Action actsuccess = null)
|
2025-02-09 23:50:15 +00:00
|
|
|
{
|
|
|
|
|
AnimationPlay(MyValue.Get_AnimName(eAnim.Attack));
|
|
|
|
|
StartCoroutine(Co_Attack());
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-12 00:24:26 +00:00
|
|
|
public override void KnockBack(double _time, float speed = 4, Action after = null, bool ignorePreknockback = false)
|
2025-02-09 23:50:15 +00:00
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IEnumerator Co_Attack()
|
2025-02-10 00:50:00 +00:00
|
|
|
{
|
|
|
|
|
FindNextTarget(10000f);
|
|
|
|
|
|
2025-02-09 23:50:15 +00:00
|
|
|
Change_MobStatus(eMobStatus.None);
|
|
|
|
|
|
2025-02-10 00:50:00 +00:00
|
|
|
while (true)
|
|
|
|
|
{
|
2025-03-03 23:58:34 +00:00
|
|
|
if (!isTarget) yield break;
|
2025-02-10 00:50:00 +00:00
|
|
|
Vector3 directionToTarget = (m_Target.Get_position() - transform.position).normalized;
|
|
|
|
|
Quaternion lookRotation = Quaternion.LookRotation(new Vector3(directionToTarget.x, 0, directionToTarget.z));
|
|
|
|
|
transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * 5f);
|
|
|
|
|
if (Quaternion.Angle(transform.rotation, lookRotation) < 5f)
|
|
|
|
|
break;
|
|
|
|
|
yield return null;
|
|
|
|
|
}
|
|
|
|
|
transform.LookAt(m_Target.transform);
|
|
|
|
|
|
|
|
|
|
// 네비메시 비활성화
|
|
|
|
|
m_NavMeshAgent.enabled = false;
|
|
|
|
|
|
|
|
|
|
yield return new WaitForSeconds(1f);
|
|
|
|
|
|
|
|
|
|
ProjectileInfo.Ins.Shoot_Projectile(m_MonsterTableData.s_Porjectile1, this, m_Target, 1f, Get_CenterPositionFoward(),
|
2025-02-20 00:40:21 +00:00
|
|
|
m_MonsterTableData.f_ProjectileLifeTime1, pb => { (pb as Projectile_Stop).Set_FollowShooter(); });
|
2025-02-09 23:50:15 +00:00
|
|
|
|
2025-02-10 00:50:00 +00:00
|
|
|
// 돌진 실행
|
|
|
|
|
float dashDistance = 10f;
|
|
|
|
|
Vector3 startPos = transform.position;
|
|
|
|
|
Vector3 dashDirection = transform.forward; // 현재 바라보는 방향으로 돌진
|
|
|
|
|
float traveledDistance = 0f;
|
|
|
|
|
|
|
|
|
|
while (traveledDistance < dashDistance)
|
|
|
|
|
{
|
|
|
|
|
float moveStep = m_NavSpeed * Time.deltaTime;
|
|
|
|
|
transform.position += dashDirection * moveStep;
|
|
|
|
|
traveledDistance += moveStep;
|
2025-02-09 23:50:15 +00:00
|
|
|
yield return null;
|
2025-02-10 00:50:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 네비메시 다시 활성화
|
|
|
|
|
m_NavMeshAgent.enabled = true;
|
|
|
|
|
|
2025-02-09 23:50:15 +00:00
|
|
|
Change_MobStatus(eMobStatus.PatrolWait);
|
|
|
|
|
}
|
|
|
|
|
}
|