Example #1
0
        private static bool CheckUsePropIntention(IIntention intention, ISectorUiState playerState, IProp usedProp)
        {
            var usePropIntention = (Intention <UsePropTask>)intention;
            var usePropTask      = usePropIntention.TaskFactory(playerState.ActiveActor.Actor);

            return(usePropTask.UsedProp == usedProp);
        }
        public IActorTask[] GetActorTasks(IActor actor)
        {
            if (actor != CurrentActor)
            {
                return(new IActorTask[0]);
            }

            var currentTaskIsComplete = _currentTask?.IsComplete;

            if (currentTaskIsComplete != null && !currentTaskIsComplete.Value && _currentIntention == null)
            {
                return(new[] { _currentTask });
            }

            if (CurrentActor == null)
            {
                throw new InvalidOperationException("Не выбран текущий ключевой актёр.");
            }

            if (_currentIntention == null)
            {
                return(new IActorTask[0]);
            }

            _currentTask      = _currentIntention.CreateActorTask(_currentTask, CurrentActor);
            _currentIntention = null;

            if (_currentTask != null)
            {
                return(new[] { _currentTask });
            }

            return(new IActorTask[0]);
        }
Example #3
0
        private static bool CheckAttackIntention(IIntention intention, ISectorUiState playerState, IActor target)
        {
            var attackIntention = (Intention <AttackTask>)intention;
            var attackTask      = attackIntention.TaskFactory(playerState.ActiveActor.Actor);

            return(attackTask.TargetObject == target);
        }
Example #4
0
        public void GlaiveParsedProblemIntentionsContentTest()
        {
            IIntention intention = testProblem.Intentions[0];

            Assert.AreEqual("arthur", intention.Character);
            Assert.AreEqual("has", intention.Predicate.Name);
            Assert.AreEqual("arthur", intention.Predicate.TermAt(0).Constant);
            Assert.AreEqual("excalibur", intention.Predicate.TermAt(1).Constant);
        }
        public async Task IntentAsync(IIntention intention, IActor activeActor)
        {
            if (CurrentControl != ActorTaskSourceControl.Human)
            {
                throw new InvalidOperationException("Intension available only under human control.");
            }

            await _humanActorTaskSource.IntentAsync(intention, activeActor);
        }
Example #6
0
        private static IActorTask[] SetHumanIntention(IActor actor,
                                                      IHumanActorTaskSource taskSource,
                                                      IIntention intention)
        {
            taskSource.Intent(intention);

            var tasks = taskSource.GetActorTasks(actor);

            return(tasks);
        }
        public Task IntentAsync(IIntention intention)
        {
            if (_intentionWait)
            {
                // Это может происходить, если в клиентском коде предварительно не выполнили проверку CanIntent().
                // Проверка нужна, чтобы не допустить получение очереди задач.
                // Текущая реализация не допускает переопределение задач.
                // Поэтому каждое новое намерение будет складывать по новой задаче в очередь, пока выполняется текущая задача
                // Текущая задача выполняется в основном игровом цикле, который накручивает счётчик итераций, чтобы выполнить предусловия задачи.
                throw new InvalidOperationException("Попытка задать новое намерение, пока не выполнена текущая задача.");
            }

            var currentIntention = intention ?? throw new ArgumentNullException(nameof(intention));

            var actorTask = currentIntention.CreateActorTask(ActiveActor);

            _intentionWait = true;

            return(_actorTaskSender.SendAsync(actorTask));
        }
 public void Intent(IIntention intention, IActor activeActor)
 {
     IntentAsync(intention, activeActor).Wait();
 }
 public void Intent(IIntention intention)
 {
     IntentAsync(intention).Wait();
 }
 public void Intent(IIntention intention)
 {
     _currentIntention = intention ?? throw new ArgumentNullException(nameof(intention));
 }