Пример #1
0
        private IActorTask HandleBypassMode()
        {
            if (_moveTask == null)
            {
                return(CreateBypassMoveTask());
            }
            else
            {
                if (!_moveTask.IsComplete)
                {
                    // Если команда на перемещение к целевой точке патруля не закончена, тогда продолжаем её.
                    return(_moveTask);
                }

                // Команда на перемещение к целевой точке патруля закончена.
                // Нужно выбрать следующую целевую точку и создать команду на простой.
                _patrolPointIndex++;
                if (_patrolPointIndex >= _patrolRoute.Points.Count())
                {
                    _patrolPointIndex = 0;
                }

                _moveTask = null;
                _idleTask = new IdleTask(_actor, _decisionSource);
                _mode     = PatrolMode.Idle;
                return(_idleTask);
            }
        }
Пример #2
0
        public void ExecuteTest()
        {
            // ARRANGE

            var actorMock = new Mock <IActor>();
            var actor     = actorMock.Object;

            var decisionSourceMock = new Mock <IDecisionSource>();

            decisionSourceMock.Setup(x => x.SelectIdleDuration(It.IsAny <int>(), It.IsAny <int>()))
            .Returns(1);
            var decisionSource = decisionSourceMock.Object;

            var task = new IdleTask(actor, decisionSource);



            // ACT
            task.Execute();



            // ASSERT
            task.IsComplete.Should().Be(true);
        }
Пример #3
0
        public void Test1()
        {
            IdleTask it = new IdleTask();

            it.TimerStart();
            Thread.Sleep(10000);
            it.TimerStop();
        }
Пример #4
0
        public void Test1()
        {
            IdleTask it = new IdleTask();
            Task     t  = new Task(() => it.TimerStart());

            t.Start();
            t.Wait(10000);
            it.TimerStop();
        }
Пример #5
0
 public virtual void InitializeTasks()
 {
     IdleTask.Enable();
     ProductionTask.Enable();
     WorkerTask.Enable();
     ConstructionTask.Enable();
     MorphingTask.Enable();
     WorkerDefenseTask.Enable();
 }
Пример #6
0
        private IActorTask HandleBypassMode()
        {
            if (_moveTask == null)
            {
                _moveTask = CreateBypassMoveTask();

                if (_moveTask != null)
                {
                    return(_moveTask);
                }
                else
                {
                    // Это может произойти, если актёр не выбрал следующий узел.
                    // Тогда переводим актёра в режим ожидания.

                    _idleTask = new IdleTask(Actor, DecisionSource);
                    _mode     = Mode.Idle;
                    return(_idleTask);
                }
            }
            else
            {
                if (!_moveTask.IsComplete)
                {
                    // Если команда на перемещение к целевой точке патруля не закончена,
                    // тогда продолжаем её.
                    // Предварительно проверяем, не мешает ли что-либо её продолжить выполнять.
                    if (!_moveTask.CanExecute())
                    {
                        _moveTask = CreateBypassMoveTask();
                    }

                    if (_moveTask != null)
                    {
                        return(_moveTask);
                    }

                    _idleTask = new IdleTask(Actor, DecisionSource);
                    _mode     = Mode.Idle;
                    return(_idleTask);
                }

                // Команда на перемещение к целевому узлу закончена.
                // Нужно выбрать следующую целевую точку и создать команду на простой.
                ProcessMovementComplete();

                _moveTask = null;
                _idleTask = new IdleTask(Actor, DecisionSource);
                _mode     = Mode.Idle;
                return(_idleTask);
            }
        }
Пример #7
0
 public virtual void InitializeTasks()
 {
     IdleTask.Enable();
     ProductionTask.Enable();
     WorkerTask.Enable();
     ConstructionTask.Enable();
     MorphingTask.Enable();
     WorkerDefenseTask.Enable();
     if (Tyr.Bot.MyRace == Race.Terran)
     {
         ConstructingSCVsTask.Enable();
     }
     GasWorkerTask.Enable();
 }
Пример #8
0
        public override IActorTask GetTask(IActor actor, ILogicStrategyData strategyData)
        {
            if (IdleTask == null)
            {
                IdleTask = new IdleTask(actor, _decisionSource);
            }

            if (IdleTask.IsComplete)
            {
                Complete = true;
                return(null);
            }

            return(IdleTask);
        }
Пример #9
0
        public override IActorTask GetTask(IActor actor, ILogicStrategyData strategyData)
        {
            if (MoveTask == null)
            {
                MoveTask = CreateBypassMoveTask(actor, strategyData);

                if (MoveTask != null)
                {
                    return(MoveTask);
                }
                else
                {
                    // Это может произойти, если актёр не выбрал следующий узел.
                    // Тогда переводим актёра в режим ожидания.

                    IdleTask = new IdleTask(actor, DecisionSource);
                    return(IdleTask);
                }
            }
            else
            {
                if (!MoveTask.IsComplete)
                {
                    // Если команда на перемещение к целевой точке патруля не закончена,
                    // тогда продолжаем её.
                    // Предварительно проверяем, не мешает ли что-либо её продолжить выполнять.
                    if (!MoveTask.CanExecute())
                    {
                        MoveTask = CreateBypassMoveTask(actor, strategyData);
                    }

                    if (MoveTask != null)
                    {
                        return(MoveTask);
                    }

                    IdleTask = new IdleTask(actor, DecisionSource);
                    return(IdleTask);
                }
                else
                {
                    Complete = true;
                    return(null);
                }
            }
        }
Пример #10
0
    AIBehaviour m_aibehaviourThis;              //The Behaviour to be used for this AI

    // Use this for initialization
    void Start()
    {
        m_aimodelThis = GetComponent <AIModel>();    //Initialize the model


#pragma warning disable 0219
        //From here on the Behaviourtree is constructed; For more info on this you can find a graphic of the tree:
        m_aibehaviourThis = new AIBehaviour(m_aimodelThis);
        {
            Selector selectorIdleOrAction = new Selector(m_aibehaviourThis);
            {
                Sequence sequenceConditionsOrIdle = new Sequence(selectorIdleOrAction);
                {
                    //if the player is dead => idle
                    //if the player is not dead and not in range => idle
                    //if the payer is not dead and in range => idle
                    Selector                   selectorDeadOrNotInRange = new Selector(sequenceConditionsOrIdle);
                    Condition_PlayerDead       conditionDead            = new Condition_PlayerDead(selectorDeadOrNotInRange, m_aibehaviourThis);
                    Inverter                   inverterNotInRange       = new Inverter(selectorDeadOrNotInRange);
                    Condition_InDetectionRange conditionInRange         = new Condition_InDetectionRange(inverterNotInRange, m_aibehaviourThis);
                    IdleTask                   idleTask = new IdleTask(sequenceConditionsOrIdle, m_aibehaviourThis);
                }
                Selector selectorFleeOrFight = new Selector(selectorIdleOrAction);
                {
                    Sequence sequenceConditionsThenFlee = new Sequence(selectorFleeOrFight);
                    {
                        Selector selectorTimerOrHealth = new Selector(sequenceConditionsThenFlee);
                        {
                            Condition_FleeTimerRunning conditionFleeDelay        = new Condition_FleeTimerRunning(selectorTimerOrHealth, m_aibehaviourThis);
                            Condition_HealthLow        conditionHealthHighEnough = new Condition_HealthLow(selectorTimerOrHealth, m_aibehaviourThis);
                        }
                        FleeTask fleetask = new FleeTask(sequenceConditionsThenFlee, m_aibehaviourThis);
                    }
                    AttackTask attackTask = new AttackTask(selectorFleeOrFight, m_aibehaviourThis);
                }
            }
        }
#pragma warning restore 0219
        m_aibehaviourThis.StartBehaviour();                             //After constructing the Behaviour, start it
        InvokeRepeating("UpdateAIBehaviour", m_fTickRate, m_fTickRate); //Start regularly updating the AI after one "tick"

        //Subscribe to the Model to see if it is Dead in order to stop ticking
        m_aimodelThis.m_modelstateCurrent
        .Where(m_modelstateCurrent => m_modelstateCurrent == ModelState.Dead)
        .Subscribe(m_modelstateCurrent => CancelInvoke());
    }
Пример #11
0
        public override IActorTask GetTask(IActor actor, ISectorTaskSourceContext context,
                                           ILogicStrategyData strategyData)
        {
            if (_idleTask == null)
            {
                var taskContext = new ActorTaskContext(context.Sector);
                _idleTask = new IdleTask(actor, taskContext, _decisionSource);
            }

            if (_idleTask.IsComplete)
            {
                Complete = true;
                return(null);
            }

            return(_idleTask);
        }
Пример #12
0
        //TODO На этот метод нужен тест.
        private IActorTask HandleIdleMode()
        {
            if (_idleTask == null)
            {
                _idleTask = new IdleTask(_actor, _decisionSource);
            }
            else
            {
                // Ожидание окончено, нужно двигаться к следующей точке.
                if (_idleTask.IsComplete)
                {
                    _idleTask = null;
                    return(HandleBypassMode());
                }
            }

            return(_idleTask);
        }
Пример #13
0
        private IActorTask HandleBypassMode()
        {
            if (_roamingTask == null)
            {
                return(CreateBypassMoveTask());
            }
            else
            {
                if (!_roamingTask.IsComplete)
                {
                    // Если команда на перемещение к целевой точке патруля не закончена, тогда продолжаем её.
                    return(_roamingTask);
                }

                _roamingTask = null;
                _idleTask    = new IdleTask(_actor, _decisionSource);
                _mode        = IdleMode.Idle;
                return(_idleTask);
            }
        }
Пример #14
0
        public IActorTask GetCurrentTask()
        {
            // На каждом шаге осматриваем окрестности
            // на предмет нарушителей.
            var intruders = CheckForIntruders();

            var orderedIntruders = intruders.OrderBy(x => Map.DistanceBetween(Actor.Node, x.Node));
            var nearbyIntruder   = orderedIntruders.FirstOrDefault();

            if (nearbyIntruder != null)
            {
                _mode           = Mode.Pursuit;
                _targetIntruder = nearbyIntruder;
                _idleTask       = null;
                ProcessIntruderDetected();
            }
            else
            {
                if (_idleTask == null || _idleTask.IsComplete)
                {
                    _mode           = Mode.Bypass;
                    _targetIntruder = null;
                    _idleTask       = null;
                }
            }

            switch (_mode)
            {
            case Mode.Bypass:
                return(HandleBypassMode());

            case Mode.Pursuit:
                return(HandlePersuitMode());

            case Mode.Idle:
                return(HandleIdleMode());

            default:
                throw new InvalidOperationException($"Неизвестный режим {_mode}");
            }
        }
Пример #15
0
        public IActorTask GetCurrentTask()
        {
            // На каждом шаге осматриваем окрестности
            // напредмет нарушителей.
            var intruders = CheckForIntruders();

            var nearbyIntruder = intruders.FirstOrDefault();

            if (nearbyIntruder != null)
            {
                _mode             = PatrolMode.Pursuit;
                _targetIntruder   = nearbyIntruder;
                _idleTask         = null;
                _patrolPointIndex = null;
            }
            else if (_idleTask?.IsComplete == true)
            {
                _mode           = PatrolMode.Bypass;
                _targetIntruder = null;
                _idleTask       = null;
            }

            switch (_mode)
            {
            case PatrolMode.Bypass:
                return(HandleBypassMode());

            case PatrolMode.Pursuit:
                return(HandlePersiutMode());

            case PatrolMode.Idle:
                return(HandleIdleMode());

            default:
                throw new InvalidOperationException($"Неизвестный режим патруллирования {_mode}");
            }
        }
Пример #16
0
 public CmdManager(IdleTask idleTask) : base(idleTask)
 {
 }
Пример #17
0
 protected override void ResetData()
 {
     _moveTask = null;
     _idleTask = null;
 }
Пример #18
0
        /// <summary>
        /// Создаёт задачу на произвольное брожение.
        /// </summary>
        /// <returns> Возвращает команду на перемещение. </returns>
        private IActorTask CreateBypassMoveTask()
        {
            _roamingTask = new IdleTask(_actor, _decisionSource);

            return(_roamingTask);
        }
Пример #19
0
 protected override void ResetData()
 {
     IdleTask = null;
 }