internal static void DoPatrolCommandState(EntityInfo entity, long deltaTime, AbstractAiStateLogic logic)
{
AiStateInfo info = entity.GetAiStateInfo();
info.Time += deltaTime;
if (info.Time > 100)
{
info.Time = 0;
EntityInfo target = null;
if (info.IsExternalTarget)
{
target = AiLogicUtility.GetSeeingLivingCharacterInfoHelper(entity, info.Target);
if (null == target)
{
target = AiLogicUtility.GetNearstTargetHelper(entity, CharacterRelation.RELATION_ENEMY);
if (null != target)
{
info.Target = target.GetId();
}
}
}
else
{
target = AiLogicUtility.GetNearstTargetHelper(entity, CharacterRelation.RELATION_ENEMY);
if (null != target)
{
info.Target = target.GetId();
}
}
if (null != target)
{
logic.AiSendStoryMessage(entity, "obj_patrol_exit", entity.GetId());
logic.AiSendStoryMessage(entity, string.Format("npc_patrol_exit:{0}", entity.GetUnitId()), entity.GetId());
logic.ChangeToState(entity, (int)AiStateId.Idle);
}
else
{
AiData_ForPatrolCommand data = GetAiDataForPatrolCommand(entity);
if (null != data)
{
ScriptRuntime.Vector3 srcPos = entity.GetMovementStateInfo().GetPosition3D();
if (data.PatrolPath.HavePathPoint && !data.PatrolPath.IsReached(srcPos))
{
logic.NotifyAiPursue(entity, data.PatrolPath.CurPathPoint);
}
else
{
data.PatrolPath.UseNextPathPoint();
if (data.PatrolPath.HavePathPoint)
{
logic.NotifyAiPursue(entity, data.PatrolPath.CurPathPoint);
}
else
{
if (data.IsLoopPatrol)
{
logic.AiSendStoryMessage(entity, "obj_patrol_restart", entity.GetId());
logic.AiSendStoryMessage(entity, string.Format("npc_patrol_restart:{0}", entity.GetUnitId()), entity.GetId());
data.PatrolPath.Restart();
}
else
{
logic.AiSendStoryMessage(entity, "obj_patrol_finish", entity.GetId());
logic.AiSendStoryMessage(entity, string.Format("npc_patrol_finish:{0}", entity.GetUnitId()), entity.GetId());
logic.NotifyAiStopPursue(entity);
logic.ChangeToState(entity, (int)AiStateId.Idle);
}
}
}
info.HomePos = entity.GetMovementStateInfo().GetPosition3D();
}
else
{
logic.NotifyAiStopPursue(entity);
logic.ChangeToState(entity, (int)AiStateId.Idle);
}
}
}
}