public IActorTask[] GetActorTasks(IActor actor) { // TODO Лучше сразу отдавать на обработку актёров текущего игрока. if (actor.Owner != _player) { return(new IActorTask[0]); } var actorTasks = new List <IActorTask>(); if (actor.Person.Survival.IsDead) { _logicDict.Remove(actor); //TODO Избавиться от этой зависимости. // Лучше в секторе подписаться на смерть актёра и удалять там из списка маршрутов. _sectorManager.CurrentSector.PatrolRoutes.Remove(actor); } else { if (!_logicDict.TryGetValue(actor, out var logic)) { if (_sectorManager.CurrentSector.PatrolRoutes.TryGetValue(actor, out var partolRoute)) { var patrolLogic = new PatrolLogic(actor, partolRoute, _sectorManager.CurrentSector.Map, _actorManager, _decisionSource, _actService); _logicDict[actor] = patrolLogic; logic = patrolLogic; } else { var idleLogic = new RoamingLogic(actor, _sectorManager.CurrentSector.Map, _actorManager, _decisionSource, _actService); _logicDict[actor] = idleLogic; logic = idleLogic; } } var currentTask = logic.GetCurrentTask(); actorTasks.Add(currentTask); } return(actorTasks.ToArray()); }
public IActorTask[] GetActorTasks(IActor actor) { if (actor.Owner != _player) { return(new IActorTask[0]); } var actorTasks = new List <IActorTask>(); if (actor.State.IsDead) { _logicDict.Remove(actor); _sector.PatrolRoutes.Remove(actor); } else { if (!_logicDict.TryGetValue(actor, out var logic)) { if (_sector.PatrolRoutes.TryGetValue(actor, out var partolRoute)) { var patrolLogic = new PatrolLogic(actor, partolRoute, _sector.Map, _actorManager, _decisionSource, _actService); _logicDict[actor] = patrolLogic; logic = patrolLogic; } else { var idleLogic = new RoamingLogic(actor, _sector.Map, _actorManager, _decisionSource, _actService); _logicDict[actor] = idleLogic; logic = idleLogic; } } var currentTask = logic.GetCurrentTask(); actorTasks.Add(currentTask); } return(actorTasks.ToArray()); }