private static ActionPoint RandomDestination( AgentActor agent, EventType eventType, List <ActionPoint> sourceList, List <ActionPoint> list, bool isFollow, bool isRain, out bool changeWarp) { changeWarp = false; if (eventType == EventType.Play && !isFollow) { List <ActionPoint> actionPointList = ListPool <ActionPoint> .Get(); SetDesiredRandomAction.CreateList(agent, sourceList, actionPointList, EventType.Warp, false, isRain); if (list.IsNullOrEmpty <ActionPoint>() && actionPointList.IsNullOrEmpty <ActionPoint>()) { return((ActionPoint)null); } int index = Random.Range(0, list.Count + actionPointList.Count); ListPool <ActionPoint> .Release(actionPointList); changeWarp = index >= list.Count; return(!changeWarp?list.GetElement <ActionPoint>(index) : (ActionPoint)null); } return(list.IsNullOrEmpty <ActionPoint>() ? (ActionPoint)null : list.GetElement <ActionPoint>(Random.Range(0, list.Count))); }
public virtual void OnStart() { ((Task)this).OnStart(); AgentActor agent = this.Agent; Chunk chunk; Singleton <Manager.Map> .Instance.ChunkTable.TryGetValue(agent.ChunkID, out chunk); Vector3 position = agent.Position; List <ActionPoint> actionPointList = ListPool <ActionPoint> .Get(); this._changeWarp = false; switch (Singleton <Manager.Map> .Instance.Simulator.Weather) { case Weather.Rain: case Weather.Storm: if (!agent.ChaControl.fileGameInfo.normalSkill.ContainsValue(16)) { SetDesiredRandomAction.CreateList(agent, chunk.AppendActionPoints, actionPointList, this._eventType, this._checkFollowType, true); this._destination = SetDesiredRandomAction.RandomDestination(agent, this._eventType, chunk.AppendActionPoints, actionPointList, this._checkFollowType, true, out this._changeWarp); if (Object.op_Equality((Object)this._destination, (Object)null) && !this._changeWarp) { actionPointList.Clear(); SetDesiredRandomAction.CreateList(agent, chunk.ActionPoints, actionPointList, this._eventType, this._checkFollowType, true); this._destination = SetDesiredRandomAction.RandomDestination(agent, this._eventType, chunk.ActionPoints, actionPointList, this._checkFollowType, true, out this._changeWarp); break; } break; } break; } if (Object.op_Equality((Object)this._destination, (Object)null) && !this._changeWarp && !agent.ChaControl.fileGameInfo.normalSkill.ContainsValue(17)) { actionPointList.Clear(); SetDesiredRandomAction.CreateList(agent, chunk.AppendActionPoints, actionPointList, this._eventType, this._checkFollowType, false); this._destination = SetDesiredRandomAction.RandomDestination(agent, this._eventType, chunk.AppendActionPoints, actionPointList, this._checkFollowType, false, out this._changeWarp); } if (Object.op_Equality((Object)this._destination, (Object)null) && !this._changeWarp) { actionPointList.Clear(); SetDesiredRandomAction.CreateList(agent, chunk.ActionPoints, actionPointList, this._eventType, this._checkFollowType, false); this._destination = SetDesiredRandomAction.RandomDestination(agent, this._eventType, chunk.ActionPoints, actionPointList, this._checkFollowType, false, out this._changeWarp); } ListPool <ActionPoint> .Release(actionPointList); }