Beispiel #1
0
        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);
        }
Beispiel #2
0
        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>();
        }
Beispiel #3
0
        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;
        });
    }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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();
        }
Beispiel #8
0
        /// <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);
        }