private TaskInfo MoveToCoordinate(Coordinate[] path, TaskInputInfo unitIndexInput, TaskInputInfo playerIndexInput) { TaskInfo pathVar = TaskInfo.EvalExpression(ExpressionInfo.Val(path)); TaskInputInfo pathInput = new TaskInputInfo(pathVar, 0); TaskInfo moveTask = TaskInfo.Move(unitIndexInput, pathInput); return(TaskInfo.Procedure( pathVar, moveTask, TaskInfo.Return(ExpressionInfo.TaskStatus(moveTask)))); }
public static TaskInfo SearchAndMoveAnyway(Coordinate[] waypoints, TaskInputInfo unitIndexInput, TaskInputInfo playerIndexInput) { TaskInfo defineGoalTask = TaskInfo.EvalExpression(ExpressionInfo.Val(waypoints)); TaskInfo findPathTask = TaskInfo.FindPath(unitIndexInput, new TaskInputInfo(defineGoalTask, 0)); TaskInfo taskInfo = TaskInfo.Procedure ( defineGoalTask, findPathTask, TaskInfo.Move(unitIndexInput, new TaskInputInfo(findPathTask, 0)), TaskInfo.Return(ExpressionInfo.PrimitiveVal(TaskInfo.TaskSucceded)) ); taskInfo.Inputs = new TaskInputInfo[] { unitIndexInput, playerIndexInput }; return(taskInfo); }
public void ExpreessionInfoCloneTest2() { ExpressionInfo canRun = ExpressionInfo.Eq( ExpressionInfo.PrimitiveVal(CmdResultCode.Success), ExpressionInfo.Val(new TaskInputInfo())); Assert.DoesNotThrow(() => { TaskInfo task = new TaskInfo { Expression = canRun }; byte[] b = m_protobufSerializer.Serialize(SerializedTask.FromTaskInfo(task)); SerializedTask.ToTaskInfo(m_protobufSerializer.Deserialize <SerializedTask>(b)); }); }
public void SearchForPathCloneTest2() { TaskInfo searchForTask = TaskInfo.SearchFor(TaskType.SearchForFood, new TaskInputInfo()); ExpressionInfo searchForSucceded = ExpressionInfo.TaskSucceded(searchForTask); TaskInputInfo coordinateInput = new TaskInputInfo(searchForTask, 1); TaskInfo findPathTask = TaskInfo.FindPath(new TaskInputInfo(), coordinateInput); ExpressionInfo findPathSucceded = ExpressionInfo.TaskSucceded(findPathTask); TaskInputInfo pathVariableInput = new TaskInputInfo(findPathTask, 0); ExpressionInfo assignPathVariable = ExpressionInfo.Assign( TaskInfo.Var(), ExpressionInfo.Val(pathVariableInput)); ExpressionInfo whileTrue = ExpressionInfo.PrimitiveVal(true); TaskInfo task = TaskInfo.Procedure( TaskInfo.Repeat( whileTrue, searchForTask, TaskInfo.Branch( searchForSucceded, TaskInfo.Sequence( findPathTask, TaskInfo.Branch( findPathSucceded, TaskInfo.Sequence( TaskInfo.EvalExpression(assignPathVariable), TaskInfo.Return() ), TaskInfo.Continue() ) ), TaskInfo.Return(ExpressionInfo.PrimitiveVal(TaskInfo.TaskFailed)) ) ) ); Assert.DoesNotThrow(() => { SerializedTask.ToTaskInfo(m_protobufSerializer.DeepClone(SerializedTask.FromTaskInfo(task))); }); }
public void AssignPathVariableCloneTest() { TaskInfo findPathTask = TaskInfo.FindPath(new TaskInputInfo(), new TaskInputInfo()); TaskInputInfo pathVariableInput = new TaskInputInfo(findPathTask, 0); ExpressionInfo assignPathVariable = ExpressionInfo.Assign( TaskInfo.Var(), ExpressionInfo.Val(pathVariableInput)); TaskInfo task = TaskInfo.Sequence( findPathTask, TaskInfo.EvalExpression(assignPathVariable) ); Assert.DoesNotThrow(() => { SerializedTask.ToTaskInfo(m_protobufSerializer.DeepClone(SerializedTask.FromTaskInfo(task))); }); }
public void RepeatContinueTaskTest() { TaskInputInfo input = new TaskInputInfo { OutputIndex = 0 }; ExpressionInfo isTrue = ExpressionInfo.Val(PrimitiveContract.Create(true)); TaskInfo continueTask = new TaskInfo { TaskType = TaskType.Continue, }; TaskInfo branchTask = new TaskInfo { TaskType = TaskType.Branch, Expression = isTrue, Children = new[] { continueTask, null } }; int continueCounter = 0; RepeatTaskTest(branchTask, input, 2, 2, childTask => { if (continueTask.TaskId == childTask.TaskId && childTask.State == TaskState.Active) { continueCounter++; if (continueCounter == 1) { isTrue = TaskInfo.FindById(branchTask.TaskId, childTask.Root).Expression; isTrue.Value = false; } } }, () => { Assert.AreEqual(1, continueCounter); }); }
public void RepeatBreakTaskTest() { TaskInputInfo input = new TaskInputInfo { OutputIndex = 0 }; ExpressionInfo eqTo5 = ExpressionInfo.Eq( ExpressionInfo.Val(input), ExpressionInfo.Val(PrimitiveContract.Create(5))); TaskInfo branchTask = new TaskInfo { TaskType = TaskType.Branch, Expression = eqTo5, Children = new[] { new TaskInfo { TaskType = TaskType.Break, }, null } }; RepeatTaskTest(branchTask, input, 10, 5); }
public void IterateRepeatTest() { Assert.DoesNotThrow(() => { BeginTest(TestEnv0, 4); }); List <int> integers = new List <int>() { 1, 2, 3, 4, 5 }; TaskInfo iterateTask = new TaskInfo { TaskType = TaskType.EvalExpression, Expression = ExpressionInfo.Iterate(integers), OutputsCount = 1, }; TaskInputInfo input = new TaskInputInfo { OutputIndex = 0, OutputTask = iterateTask, }; ExpressionInfo isTrue = ExpressionInfo.Eq( ExpressionInfo.Val(PrimitiveContract.Create(true)), ExpressionInfo.Get( ExpressionInfo.Val(input), ExpressionInfo.PrimitiveVal("IsLast"))); TaskInfo breakIfCompleted = new TaskInfo { TaskType = TaskType.Branch, Expression = isTrue, Children = new[] { new TaskInfo { TaskType = TaskType.Break, }, null } }; TaskInfo repeat = new TaskInfo { TaskType = TaskType.Repeat, Expression = ExpressionInfo.PrimitiveVal(true), Children = new[] { iterateTask, breakIfCompleted, } }; repeat.SetParents(); input.SetScope(); const int playerId = 1; bool isIterated = false; int counter = 0; BeginCleanupCheck(playerId); FinializeTest(playerId, repeat, result => { Assert.IsTrue(isIterated); Assert.AreEqual(TaskState.Completed, result.State); Assert.IsFalse(result.IsFailed); CleanupCheck(playerId); Assert.Pass(); }, childTask => { if (childTask.TaskId == iterateTask.TaskId && childTask.State == TaskState.Completed) { counter++; ITaskMemory memory = m_engine.GetTaskEngine(playerId).Memory; IterationResult iterResult = (IterationResult)memory.ReadOutput(iterateTask.Parent.TaskId, iterateTask.TaskId, 0); if (iterResult.IsLast) { isIterated = true; Assert.IsNull(iterResult.Object); } else { Assert.AreEqual(counter, (int)iterResult.Object); } } }); }
public void RepeatTaskTest(TaskInfo repeatChildTask, TaskInputInfo input, int iterations, int expectedIterations, TaskEngineEvent <TaskInfo> childTaskCallback = null, Action pass = null) { Assert.DoesNotThrow(() => { BeginTest(TestEnv0, 4); }); ExpressionInfo setToZero = ExpressionInfo.Val(PrimitiveContract.Create(0)); ExpressionInfo add = ExpressionInfo.Add( ExpressionInfo.Val(input), ExpressionInfo.Val(PrimitiveContract.Create(1))); ExpressionInfo lessThanValue = ExpressionInfo.Lt( ExpressionInfo.Val(input), ExpressionInfo.Val(PrimitiveContract.Create(iterations))); TaskInfo setToZeroTask = new TaskInfo { TaskType = TaskType.EvalExpression, OutputsCount = 1, Expression = setToZero, }; input.OutputTask = setToZeroTask; ExpressionInfo increment = ExpressionInfo.Assign(setToZeroTask, add); TaskInfo incrementTask = new TaskInfo { TaskType = TaskType.EvalExpression, Expression = increment, OutputsCount = 1, Inputs = new[] { input }, }; TaskInfo repeatTask = new TaskInfo(); repeatTask.TaskType = TaskType.Repeat; repeatTask.Expression = lessThanValue; repeatTask.Children = new[] { repeatChildTask, incrementTask }; TaskInfo task = new TaskInfo { TaskType = TaskType.Sequence, Children = new[] { setToZeroTask, repeatTask } }; task.SetParents(); const int playerId = 1; task.Initialize(playerId); // //input.SetScope(); bool isIncremented = false; BeginCleanupCheck(playerId); FinializeTest(playerId, task, result => { Assert.IsTrue(isIncremented); Assert.AreEqual(TaskState.Completed, result.State); Assert.IsFalse(result.IsFailed); CleanupCheck(playerId); if (pass != null) { pass(); } Assert.Pass(); }, childTask => { if (childTask.TaskId == repeatTask.TaskId && childTask.State == TaskState.Completed) { ITaskMemory memory = m_engine.GetTaskEngine(playerId).Memory; Assert.AreEqual(expectedIterations, memory.ReadOutput(setToZeroTask.Parent.TaskId, setToZeroTask.TaskId, 0)); isIncremented = true; } else { if (childTaskCallback != null) { childTaskCallback(childTask); } } }); }
public void IncrementTaskTest() { Assert.DoesNotThrow(() => { BeginTest(TestEnv0, 4); }); TaskInputInfo input = new TaskInputInfo { OutputIndex = 0 }; ExpressionInfo setToZero = ExpressionInfo.Val(PrimitiveContract.Create(0)); ExpressionInfo add = ExpressionInfo.Add( ExpressionInfo.Val(input), ExpressionInfo.Val(PrimitiveContract.Create(1))); TaskInfo setToZeroTask = new TaskInfo { TaskType = TaskType.EvalExpression, OutputsCount = 1, Expression = setToZero, }; ExpressionInfo increment = ExpressionInfo.Assign(setToZeroTask, add); TaskInfo incrementTask = new TaskInfo { TaskType = TaskType.EvalExpression, Expression = increment, OutputsCount = 1, Inputs = new[] { input }, }; TaskInfo task = new TaskInfo { TaskType = TaskType.Sequence, Children = new[] { setToZeroTask, incrementTask } }; task.SetParents(); input.OutputTask = setToZeroTask; input.SetScope(); bool isIncremented = false; const int playerId = 1; BeginCleanupCheck(playerId); FinializeTest(playerId, task, result => { Assert.IsTrue(isIncremented); Assert.AreEqual(TaskState.Completed, result.State); Assert.IsFalse(result.IsFailed); CleanupCheck(playerId); Assert.Pass(); }, childTask => { if (childTask.TaskId == incrementTask.TaskId && childTask.State == TaskState.Completed) { ITaskMemory memory = m_engine.GetTaskEngine(playerId).Memory; Assert.AreEqual(1, memory.ReadOutput(setToZeroTask.Parent.TaskId, setToZeroTask.TaskId, 0)); isIncremented = true; } }); }