public void CreateActorTask_CurrentMoveTaskWithSameTarget_ReturnsCurrentMoveTask() { // ARRANGE var mapMock = new Mock <IMap>(); var map = mapMock.Object; var nodeMock = new Mock <IMapNode>(); var node = nodeMock.Object; var actorMock = new Mock <IActor>(); var actor = actorMock.Object; var currentTask = new MoveTask(actor, node, map); var intention = new MoveIntention(node, map); // ACT var factTask = intention.CreateActorTask(currentTask, actor); // ASSERT factTask.Should().Be(currentTask); }
public void Intent_TargetToStartPoint_GenerateMoveCommand() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); var moveIntention = new MoveIntention(startNode, map); // ACT var tasks = SetHumanIntention(actor, taskSource, moveIntention); // ASSERT tasks.Should().NotBeNullOrEmpty(); tasks[0].Should().BeOfType <MoveTask>(); }
public void CreateActorTask_CurrentIsNotMoveTask_ReturnsMoveTask() { // ARRANGE var mapMock = new Mock <IMap>(); var map = mapMock.Object; var nodeMock = new Mock <IMapNode>(); var node = nodeMock.Object; var actorMock = new Mock <IActor>(); var actor = actorMock.Object; var currentTaskMock = new Mock <IActorTask>(); var currentTask = currentTaskMock.Object; var intention = new MoveIntention(node, map); // ACT var factTask = intention.CreateActorTask(currentTask, actor); // ASSERT factTask.Should().BeOfType <MoveTask>() .And.Subject.As <MoveTask>().TargetNode.Should().Be(node); }
protected override void OnUpdate() { Entities.WithAll <ActorComponent, ReadyToHandleFlag>().WithNone <PlayerComponent>().ForEach((Entity id) => { var direction = UnityEngine.Random.value > 0.5f ? new int2(UnityEngine.Random.value > 0.5f ? 1 : -1, 0) : new int2(0, UnityEngine.Random.value > 0.5f ? 1 : -1); var intent = new MoveIntention() { direction_xz = direction }; PostUpdateCommands.AddComponent <MoveIntention>(id, intent); //UnityEditor.EditorApplication.isPaused = true; }); }
public void Intent_AssignAfterTaskComplete_NoNullCommand() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var finishNode = map.Nodes.Cast <HexNode>().SelectBy(1, 5); var finishNode2 = map.Nodes.Cast <HexNode>().SelectBy(3, 2); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); var actorManager = CreateActorManager(actor); var moveIntention = new MoveIntention(finishNode, map); var moveIntention2 = new MoveIntention(finishNode2, map); // ACT // 1. Ждём, пока задача на перемещение не отработает. // В конце текущая задача актёра будет IsComplete. var tasks = SetHumanIntention(actor, taskSource, moveIntention); for (var i = 0; i < 3; i++) { foreach (var task in tasks) { task.Execute(); } } foreach (var task in tasks) { task.IsComplete.Should().Be(true); } // 2. Указываем намерение на ещё одну задачу. var factTasks = SetHumanIntention(actor, taskSource, moveIntention2); // ASSERT factTasks.Should().NotBeNullOrEmpty(); }
protected override void ExecuteTacticCommand() { var selectedNodeVm = GetSelectedNodeViewModel(); if (selectedNodeVm == null) { throw new InvalidOperationException("Невозможно выполнить команду на перемещение, если не указан целевой узел."); } var targetNode = selectedNodeVm.Node; var targetMap = _sectorManager.CurrentSector.Map; var moveIntetion = new MoveIntention(targetNode, targetMap); _playerState.TaskSource.Intent(moveIntetion); }
public void Intent_AssignTaskBeforeCurrentTaskComplete_NoNullCommand() { // ARRANGE var map = new TestGridGenMap(); var startNode = map.Nodes.Cast <HexNode>().SelectBy(3, 3); var finishNode = map.Nodes.Cast <HexNode>().SelectBy(1, 5); var finishNode2 = map.Nodes.Cast <HexNode>().SelectBy(3, 2); var actor = CreateActor(map, startNode); var taskSource = InitTaskSource(actor); var actorManager = CreateActorManager(actor); var moveIntention = new MoveIntention(finishNode, map); var moveIntention2 = new MoveIntention(finishNode2, map); // ACT // 1. Продвигаем выполнение текущего намерения. НО НЕ ДО ОКОНЧАНИЯ. var tasks = SetHumanIntention(actor, taskSource, moveIntention); for (var i = 0; i < 1; i++) { foreach (var task in tasks) { task.Execute(); } } foreach (var task in tasks) { task.IsComplete.Should().Be(false); } // 2. Указываем другое намерение до того, как текущая задача на перемещение выполнена до конца. var factTasks = SetHumanIntention(actor, taskSource, moveIntention2); // ASSERT factTasks.Should().NotBeNullOrEmpty(); }
/// <summary> /// Выполнение команды на перемещение и обновление игрового цикла. /// </summary> protected override void ExecuteTacticCommand() { var selectedNodeVm = GetSelectedNodeViewModel(); if (selectedNodeVm == null) { throw new InvalidOperationException( "Невозможно выполнить команду на перемещение, если не указан целевой узел."); } CreatePath(selectedNodeVm); var targetNode = selectedNodeVm.Node; var currentSector = _player.SectorNode.Sector; var moveIntetion = new MoveIntention(targetNode, currentSector); PlayerState.TaskSource.Intent(moveIntetion, PlayerState.ActiveActor.Actor); }