Example #1
0
        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());
        }
Example #2
0
        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());
        }