82 lines
2.3 KiB
C#
82 lines
2.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class BattleNPCActor : Actor
|
|
{
|
|
public int m_ActiveChapter;
|
|
public bool m_EnemyNPC;
|
|
|
|
Vector3 m_oriPos, m_oriRot;
|
|
bool IsUpdate;
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
|
|
m_oriPos = transform.position;
|
|
m_oriRot = transform.eulerAngles;
|
|
|
|
m_Stat = new ActorStatInfo(eRole.BattleNPC, ServerInfo.Ins.m_ServerData, null);
|
|
|
|
m_Enemy = m_EnemyNPC;
|
|
ActorInfo.Ins.Add_Actor(this, eRole.BattleNPC, 0, name);
|
|
}
|
|
|
|
protected override void Update()
|
|
{
|
|
if (!IsUpdate || IsStop || IsDead() || IsCC()) return;
|
|
|
|
if (m_HitTime > 0f)
|
|
{
|
|
m_HitTime -= Time.deltaTime;
|
|
return;
|
|
}
|
|
|
|
base.Update();
|
|
|
|
if (m_Target == null || m_Target.IsDead()) FindNextTarget();
|
|
if (m_Target == null) return;
|
|
|
|
m_attackCoolTime -= Time.deltaTime;
|
|
|
|
var dist = Vector3.Distance(Get_position(), m_Target.Get_position());
|
|
|
|
if (CurAnim < eAnim.Attack && dist > m_NavMeshAgent.stoppingDistance)
|
|
{
|
|
Play_Run();
|
|
Set_Path(m_Target.Get_position());
|
|
}
|
|
else if (CurAnim != eAnim.Attack && m_attackCoolTime > 0f)
|
|
Play_Idle();
|
|
else
|
|
Play_Attack(0, (float)m_Stat.Get_Stat(eStat.FinalAttackSpeed));
|
|
}
|
|
|
|
void FindNextTarget()
|
|
{
|
|
m_Target = ActorInfo.Ins.Get_Nearest_EnemyActor_orNull(IsEnemy(), Get_position());
|
|
}
|
|
|
|
public override void Set(bool isEnemy, Actor owner, ServerData sdata, int _id, bool _stop, bool _ui = false)
|
|
{
|
|
base.Set(isEnemy, owner, sdata, _id, _stop, _ui);
|
|
if (IsStop)
|
|
{
|
|
//var mobstat = table_monsterstat.Ins.Get_Data(1, InGameInfo.Ins.Get_CurStageData().Chapter, 6, 0);
|
|
|
|
//m_Stat.Set_Stat(eStat.Attack, 1);
|
|
//m_Stat.Set_Stat(true, eStat.Attack, mobstat.list_HP[0] * 0.2d);
|
|
//m_Stat.MaxHP = mobstat.list_Attack[0] * 200d;
|
|
//m_Stat.Set_Stat(true, eStat.HP, m_Stat.MaxHP);
|
|
//Set_Warp(m_oriPos);
|
|
//transform.eulerAngles = m_oriRot;
|
|
}
|
|
}
|
|
|
|
public bool IsActiveNPC()
|
|
{
|
|
//IsUpdate = m_ActiveChapter == InGameInfo.Ins.Get_CurStageData().Chapter;
|
|
return IsUpdate;
|
|
}
|
|
} |