예제 #1
0
        public void MoveOnceActiveActor(OffsetCoords targetCoords)
        {
            var playerState = Container.GetInstance <IPlayerState>();
            var moveCommand = Container.GetInstance <ICommand>("move");
            var map         = Container.GetInstance <IMap>();

            var targetNode    = map.Nodes.Cast <HexNode>().SelectBy(targetCoords.X, targetCoords.Y);
            var nodeViewModel = new TestNodeViewModel
            {
                Node = targetNode
            };

            playerState.HoverViewModel = nodeViewModel;

            moveCommand.Execute();
        }
예제 #2
0
        public void MoveOnceActiveActor(OffsetCoords targetCoords)
        {
            var playerState   = ServiceProvider.GetRequiredService <ISectorUiState>();
            var moveCommand   = ServiceProvider.GetRequiredService <MoveCommand>();
            var sectorManager = ServiceProvider.GetRequiredService <ISectorManager>();

            var targetNode = sectorManager
                             .CurrentSector
                             .Map
                             .Nodes
                             .SelectByHexCoords(targetCoords.X, targetCoords.Y);

            var nodeViewModel = new TestNodeViewModel
            {
                Node = targetNode
            };

            playerState.HoverViewModel    = nodeViewModel;
            playerState.SelectedViewModel = nodeViewModel;

            moveCommand.Execute();
        }
        public void MoveOnceActiveActor(OffsetCoords targetCoords)
        {
            var playerState   = Container.GetInstance <ISectorUiState>();
            var moveCommand   = Container.GetInstance <ICommand>("move");
            var sectorManager = Container.GetInstance <ISectorManager>();

            var targetNode = sectorManager
                             .CurrentSector
                             .Map
                             .Nodes
                             .Cast <HexNode>()
                             .SelectBy(targetCoords.X, targetCoords.Y);

            var nodeViewModel = new TestNodeViewModel
            {
                Node = targetNode
            };

            playerState.HoverViewModel    = nodeViewModel;
            playerState.SelectedViewModel = nodeViewModel;

            moveCommand.Execute();
        }
예제 #4
0
        public async System.Threading.Tasks.Task MoveCommandTestAsync()
        {
            var sectorManager        = _container.GetInstance <ISectorManager>();
            var playerState          = _container.GetInstance <ISectorUiState>();
            var moveCommand          = _container.GetInstance <ICommand>("move-command");
            var schemeService        = _container.GetInstance <ISchemeService>();
            var humanPlayer          = _container.GetInstance <HumanPlayer>();
            var actorManager         = _container.GetInstance <IActorManager>();
            var humanActorTaskSource = _container.GetInstance <IHumanActorTaskSource>();
            var commandManger        = _container.GetInstance <ICommandManager>();

            var sectorGenerator = _container.GetInstance <ISectorGenerator>();

            var locationScheme = new TestLocationScheme
            {
                SectorLevels = new ISectorSubScheme[]
                {
                    new TestSectorSubScheme
                    {
                        RegularMonsterSids = new[] { "rat" },

                        RegionCount = 20,
                        RegionSize  = 20,

                        IsStart = true,

                        ChestDropTableSids    = new[] { "default" },
                        RegionChestCountRatio = 9
                    }
                }
            };

            var globeNode = new GlobeRegionNode(0, 0, locationScheme);

            humanPlayer.GlobeNode = globeNode;

            await sectorManager.CreateSectorAsync();

            var personScheme = schemeService.GetScheme <IPersonScheme>("human-person");

            var playerActorStartNode = sectorManager.CurrentSector.Map.Regions
                                       .SingleOrDefault(x => x.IsStart).Nodes
                                       .First();
            var playerActorVm = CreateHumanActorVm(humanPlayer,
                                                   personScheme,
                                                   actorManager,
                                                   playerActorStartNode);

            //Лучше централизовать переключение текущего актёра только в playerState
            playerState.ActiveActor = playerActorVm;
            humanActorTaskSource.SwitchActor(playerState.ActiveActor.Actor);

            var currentActorNode = (HexNode)playerState.ActiveActor.Actor.Node;
            var nextNodes        = HexNodeHelper.GetSpatialNeighbors(currentActorNode, sectorManager.CurrentSector.Map.Nodes.Cast <HexNode>());
            var moveTargetNode   = nextNodes.First();

            var nodeViewModel = new TestNodeViewModel
            {
                Node = moveTargetNode
            };

            playerState.HoverViewModel    = nodeViewModel;
            playerState.SelectedViewModel = nodeViewModel;

            commandManger.Push(moveCommand);

            ICommand command = null;

            do
            {
                command = commandManger.Pop();

                try
                {
                    command?.Execute();
                }
                catch (Exception exception)
                {
                    throw new InvalidOperationException($"Не удалось выполнить команду {command}.", exception);
                }
            } while (command != null);
        }