using UnityEngine;
using Snxxz.UI;
using System.Collections.Generic;
using TableConfig;
///
/// 跑跑跑副本AI行为
/// 当追逐到终点的时候默认会回到起点从新开始选怪的逻辑
///
public class HeroAI_D3_BackToStartPos : HeroAI_Auto
{
private DungeonModel m_DungeonModel;
private DungeonModel DgModel
{
get { return m_DungeonModel ?? (m_DungeonModel = ModelCenter.Instance.GetModel()); }
}
private Vector3 m_StartPos;
private Vector3 m_EndPos;
private bool m_DoingMovingToStart;
#region 配置相关
#endregion
public sealed override bool Condition()
{
GA_Hero _hero = PlayerDatas.Instance.hero;
if (_hero == null)
{
return false;
}
if (_hero.aiHandler.currentType == E_HeroAIType.D3_BackToStartPos)
{
return true;
}
return base.Condition();
}
protected override void OnEnter()
{
m_LockTargetSID = 0;
m_DoingMovingToStart = false;
FuncConfigConfig func = Config.Instance.Get("AI197Point");
LitJson.JsonData _data = LitJson.JsonMapper.ToObject(func.Numerical1);
foreach (var _key in _data.Keys)
{
if (_key.Equals(PlayerDatas.Instance.baseData.MapID.ToString()))
{
m_StartPos = new Vector3(((int)_data[_key][0][0] - GA_Hero.MapOffset.x) * .5f, 0, ((int)_data[_key][0][1] - GA_Hero.MapOffset.z) * .5f);
m_EndPos = new Vector3(((int)_data[_key][1][0] - GA_Hero.MapOffset.x) * .5f, 0, ((int)_data[_key][1][1] - GA_Hero.MapOffset.z) * .5f);
}
}
m_HandupRange = 10;
}
protected override bool OnUpdate()
{
GA_Hero _hero = PlayerDatas.Instance.hero;
if (_hero == null)
{
return false;
}
float _chkDistSqrt;
if (m_DoingMovingToStart)
{
_chkDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, m_StartPos);
if (_chkDistSqrt > 1)
{
if (_hero.State != E_ActorState.AutoRun)
{
m_StartPos.y = _hero.Pos.y;
_hero.MoveToPosition(m_StartPos);
}
return true;
}
m_DoingMovingToStart = false;
}
else
{
if (m_EndPos != Vector3.zero)
{
_chkDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, m_EndPos);
if (_chkDistSqrt < 9)
{
m_DoingMovingToStart = true;
}
}
}
return false;
}
protected sealed override void OnExit()
{
}
public sealed override bool IsOver()
{
if (base.IsOver())
{
return true;
}
return PlayerDatas.Instance.hero.aiHandler.currentType
!= E_HeroAIType.D3_BackToStartPos;
}
protected sealed override GActorFight SelectTarget()
{
return DecideAttackTarget(PlayerDatas.Instance.hero.Pos,
m_HandupRange);
}
}