using UnityEngine;
using TableConfig;
using System.Collections.Generic;
public class HeroAI_D4_Qlzf : HeroAI_Auto
{
///
/// 配置路点集合
///
private List m_PointList = new List();
///
/// 搜寻路点索引
///
private int m_Index;
public sealed override bool Condition()
{
GA_Hero _hero = PlayerDatas.Instance.hero;
if (_hero == null)
{
return false;
}
if (_hero.aiHandler.currentType == E_HeroAIType.D4_QLZF)
{
return true;
}
return base.Condition();
}
protected override void OnEnter()
{
m_PointList.Clear();
m_Index = 0;
FuncConfigConfig func = Config.Instance.Get("AI198Point");
LitJson.JsonData _data = LitJson.JsonMapper.ToObject(func.Numerical1);
string _chkKey = (PlayerDatas.Instance.baseData.MapID * 100 + PlayerDatas.Instance.baseData.dungeonLineId).ToString();
#if UNITY_EDITOR
Debug.Log("客户端AI检测配置ID: " + _chkKey);
#endif
foreach (var _key in _data.Keys)
{
if (_key.Equals(_chkKey))
{
for (int j = 0; j < _data[_key].Count; ++j)
{
Vector3 _pos = new Vector3((int)_data[_key][j][0] * .5f,
0,
(int)_data[_key][j][1] * .5f);
m_PointList.Add(_pos);
}
}
}
m_HandupRange = 10;
}
protected override bool OnUpdate()
{
GA_Hero _hero = PlayerDatas.Instance.hero;
if (_hero == null)
{
return false;
}
// 实时判断英雄当前的目标
GActorFight _actor = _hero.SelectTarget as GActorFight;
// 没有可选择目标
if (_actor == null
|| !_actor.CanAtked())
{
// 自动帮其选择一个
_actor = SelectTarget();
// 选不到
if (_actor == null)
{
if (m_Index > m_PointList.Count - 1)
{
m_Index = 0;
}
// 开始判断路点距离
float _chkDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, m_PointList[m_Index]);
// 未到达路点则寻路至路点
if (_chkDistSqrt > .25f)
{
_hero.MoveToPosition(m_PointList[m_Index]);
}
// 到达路点就去往下一个路点
else
{
m_Index += 1;
if (m_Index > m_PointList.Count - 1)
{
m_Index = 1;
}
}
return true;
}
else
{
_hero.SelectTarget = _actor;
_hero.LockTarget = _actor;
}
}
return false;
}
protected sealed override void OnExit()
{
m_PointList.Clear();
}
public sealed override bool IsOver()
{
if (base.IsOver())
{
return true;
}
return PlayerDatas.Instance.hero.aiHandler.currentType
!= E_HeroAIType.D4_QLZF;
}
protected sealed override GActorFight SelectTarget()
{
return DecideAttackTarget(PlayerDatas.Instance.hero.Pos,
m_HandupRange);
}
}