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]); }
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); }
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); }
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)); }