Exemplo n.º 1
0
        public void Setup()
        {
            int mapSize = 1000;
            int baseX   = 50;
            int baseY   = 50;

            _radius = 5;

            // ARRANGE

            var map = new SectorHexMap(1000);

            for (var i = 0; i < mapSize; i++)
            {
                for (var j = 0; j < mapSize; j++)
                {
                    var hexNode = new HexNode(i, j);
                    map.AddNode(hexNode);
                }
            }

            _fowData = new HumanSectorFowData();

            _baseNode = map.HexNodes.Single(x => x.OffsetCoords.X == baseX && x.OffsetCoords.Y == baseY);

            _fowContextMock = new TestFowContext(map);
        }
Exemplo n.º 2
0
        public ISectorFowData GetSectorFowData(ISector sector)
        {
            if (!_sectorFows.TryGetValue(sector, out var sectorFowData))
            {
                sectorFowData       = new HumanSectorFowData();
                _sectorFows[sector] = sectorFowData;
            }

            return(sectorFowData);
        }
Exemplo n.º 3
0
    private ActorViewModel CreateHumanActorViewModel([NotNull] IPlayer player,
                                                     [NotNull] IActorManager actorManager,
                                                     [NotNull] IPerkResolver perkResolver,
                                                     [NotNull] IGraphNode startNode,
                                                     [NotNull] IEnumerable <MapNodeVM> nodeVMs)
    {
        if (_humanPlayer.MainPerson == null)
        {
            if (!_progressStorageService.LoadPerson())
            {
                var playerPerson = _humanPersonFactory.Create("human-person");

                _humanPlayer.MainPerson = playerPerson;

                ShowCreatePersonModal(playerPerson);
            }
        }

        var fowData = new HumanSectorFowData();

        var actor = new Actor(_humanPlayer.MainPerson, player, startNode, perkResolver, fowData);

        _playerEventLogService.Actor = actor;

        actorManager.Add(actor);

        var actorViewModelObj = _container.InstantiatePrefab(ActorPrefab, transform);
        var actorViewModel    = actorViewModelObj.GetComponent <ActorViewModel>();

        actorViewModel.PlayerState = _playerState;
        var actorGraphic = Instantiate(HumanoidGraphicPrefab, actorViewModel.transform);

        actorGraphic.transform.position = new Vector3(0, 0.2f, -0.27f);
        actorViewModel.SetGraphicRoot(actorGraphic);

        var graphicController = actorViewModel.gameObject.AddComponent <HumanActorGraphicController>();

        graphicController.Actor   = actor;
        graphicController.Graphic = actorGraphic;

        var actorNodeVm   = nodeVMs.Single(x => x.Node == actor.Node);
        var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1);

        actorViewModel.transform.position = actorPosition;
        actorViewModel.Actor = actor;

        if (!actor.Person.GetModule <IInventoryModule>().CalcActualItems().Any(x => x.Scheme.Sid == "camp-tools"))
        {
            AddResourceToCurrentPerson("camp-tools");
        }

        return(actorViewModel);
    }
Exemplo n.º 4
0
        public void UpdateFowData_RealHumanSectorFowData_ObseringNodesIsNotEmpty(int mapSize, int baseX, int baseY,
                                                                                 int radius)
        {
            // ARRANGE

            var map = new SectorHexMap(1000);

            for (var i = 0; i < mapSize; i++)
            {
                for (var j = 0; j < mapSize; j++)
                {
                    var hexNode = new HexNode(i, j);
                    map.AddNode(hexNode);
                }
            }

            var fowData = new HumanSectorFowData();

            var baseNode = map.HexNodes.Single(x => x.OffsetCoords.CompsEqual(baseX, baseY));

            var fowContextMock = new Mock <IFowContext>();

            fowContextMock.Setup(x => x.IsTargetVisible(It.IsAny <IGraphNode>(), It.IsAny <IGraphNode>()))
            .Returns <IGraphNode, IGraphNode>((baseNode, targetNode) => map.TargetIsOnLine(baseNode, targetNode));
            fowContextMock.Setup(x => x.GetNext(It.IsAny <IGraphNode>()))
            .Returns <IGraphNode>(node => map.GetNext(node));
            var fowContext = fowContextMock.Object;

            var expectedObservingNodes = map.HexNodes.Where(x => map.DistanceBetween(x, baseNode) <= radius).ToArray();

            // ACT

            FowHelper.UpdateFowData(fowData, fowContext, baseNode, radius);

            // ARRANGE
            var factObservingNodes = fowData.GetFowNodeByState(SectorMapNodeFowState.Observing).Select(x => x.Node);

            factObservingNodes.Should().BeEquivalentTo(expectedObservingNodes);
        }
Exemplo n.º 5
0
    private ActorViewModel CreateHumanActorViewModelFromMainPerson(
        [NotNull] IActorManager actorManager,
        [NotNull] IPerkResolver perkResolver,
        [NotNull] IGraphNode startNode,
        [NotNull] IEnumerable <MapNodeVM> nodeVMs)
    {
        var fowData = new HumanSectorFowData();
        var actor   = new Actor(_humanPlayer.MainPerson, _humanPlayer, startNode, perkResolver, fowData);

        actorManager.Add(actor);

        var actorViewModelObj = _container.InstantiatePrefab(ActorPrefab, TargetObject);

        // Задаём имя объекта для отладки через редактор.
        // Чтобы визуально можно было проще найти вью-модель персонажа игрока в секторе.
        actorViewModelObj.name = "PlayerActor";
        var actorViewModel = actorViewModelObj.GetComponent <ActorViewModel>();

        var actorGraphic = Instantiate(HumanoidGraphicPrefab, actorViewModel.transform);

        actorGraphic.transform.position = new Vector3(0, 0.2f, -0.27f);
        actorViewModel.SetGraphicRoot(actorGraphic);

        var graphicController = actorViewModel.gameObject.AddComponent <HumanActorGraphicController>();

        graphicController.Actor   = actor;
        graphicController.Graphic = actorGraphic;

        var actorNodeVm   = nodeVMs.Single(x => x.Node == actor.Node);
        var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1);

        actorViewModel.transform.position = actorPosition;
        actorViewModel.Actor = actor;

        return(actorViewModel);
    }