コード例 #1
0
        private (List <NodeViewModel> addedNodes, List <NodeViewModel> removedNodes) SyncNodes()
        {
            var addedNodes   = new List <NodeViewModel>();
            var removedNodes = new List <NodeViewModel>();

            foreach (var viewModel in NodeViewModels)
            {
                if (!Model.ContainsNode(viewModel.Model))
                {
                    removedNodes.Add(viewModel);
                }
            }

            foreach (var viewModelToRemove in removedNodes)
            {
                NodeViewModels.Remove(viewModelToRemove);
            }

            foreach (var node in Model.Nodes)
            {
                if (NodeViewModels.Any(vm => vm.Model.Id == node.Id))
                {
                    continue;
                }
                else
                {
                    var nodeToAdd = new NodeViewModel(node);
                    NodeViewModels.Add(nodeToAdd);
                    addedNodes.Add(nodeToAdd);
                }
            }
            return(addedNodes, removedNodes);
        }
コード例 #2
0
        public NodeMapViewModel()
        {
            Model = new NodeMap();
            foreach (var node in Model.Nodes)
            {
                NodeViewModels.Add(new NodeViewModel(node));
            }
            var attackCursorStream = new MemoryStream(Properties.Resources.attackCursor);

            _attackCursor = new Cursor(attackCursorStream);
            var fortifyCursorStream = new MemoryStream(Properties.Resources.fortifyCursor);

            _fortifyCursor = new Cursor(fortifyCursorStream);
        }
コード例 #3
0
        private (List <EdgeViewModel> addedEdges, List <EdgeViewModel> removedEdges) SyncEdges()
        {
            var removedEdges = new List <EdgeViewModel>();
            var addedEdges   = new List <EdgeViewModel>();

            foreach (var viewModel in EdgeViewModels)
            {
                if (!Model.ContainsEdge(viewModel.Model))
                {
                    removedEdges.Add(viewModel);
                }
            }

            foreach (var viewModelToRemove in removedEdges)
            {
                EdgeViewModels.Remove(viewModelToRemove);
            }

            foreach (var edge in Model.Edges)
            {
                if (EdgeViewModels.Any(vm => vm.Model.GetHashCode() == edge.GetHashCode()))
                {
                    continue;
                }
                else
                {
                    var nodeVm1 = NodeViewModels.First(n => n.Model.Id == edge.Node1.Id);
                    var nodeVm2 = NodeViewModels.First(n => n.Model.Id == edge.Node2.Id);
                    var newEdge = new EdgeViewModel(edge, nodeVm1, nodeVm2);
                    EdgeViewModels.Add(newEdge);
                    addedEdges.Add(newEdge);
                }
            }

            return(addedEdges, removedEdges);
        }
コード例 #4
0
ファイル: SectorVM.cs プロジェクト: nf2g/Zilon_Roguelike
    private void CreateMonsterViewModels(IEnumerable <MapNodeVM> nodeViewModels)
    {
        var monsters = Sector.ActorManager.Items.Where(x => x.Person is MonsterPerson).ToArray();

        foreach (var monsterActor in monsters)
        {
            var actorViewModelObj = _container.InstantiatePrefab(ActorPrefab, transform);
            var actorViewModel    = actorViewModelObj.GetComponent <ActorViewModel>();

            var actorGraphicObj = _container.InstantiatePrefab(MonoGraphicPrefab, actorViewModel.transform);
            var actorGraphic    = actorGraphicObj.GetComponent <ActorGraphicBase>();

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

            var graphicController = actorViewModel.gameObject.AddComponent <MonsterSingleActorGraphicController>();
            graphicController.Actor   = monsterActor;
            graphicController.Graphic = actorGraphic;

            var actorNodeVm   = nodeViewModels.Single(x => ReferenceEquals(x.Node, monsterActor.Node));
            var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1);
            actorViewModel.transform.position = actorPosition;
            actorViewModel.Actor = monsterActor;

            actorViewModel.Selected   += EnemyActorVm_OnSelected;
            actorViewModel.MouseEnter += EnemyViewModel_MouseEnter;
            monsterActor.UsedAct      += ActorOnUsedAct;
            monsterActor.Person.GetModule <ISurvivalModule>().Dead += Monster_Dead;

            var fowController = actorViewModel.gameObject.AddComponent <FowActorController>();
            // Контроллеру тумана войны скармливаем только графику.
            // Потому что на основтой объект акёра завязаны блокировки (на перемещение, например).
            // Если основной объект создаст блокировку и будет отключен,
            // то он не сможет её снять в результате своих Update.
            // Это создаст всеобщую неснимаемую блокировку.
            fowController.Graphic = actorGraphic.gameObject;
            // Передаём коллайдер, чтобы в случае отключения графики скрытого актёра нельзя было выбрать.
            fowController.Collider = actorViewModel.GetComponent <Collider2D>();

            ActorViewModels.Add(actorViewModel);
        }

        var humanActors = Sector.ActorManager.Items.Where(x => x.Person is HumanPerson && x.Person != _humanPlayer.MainPerson).ToArray();

        foreach (var actor in humanActors)
        {
            var actorViewModelObj = _container.InstantiatePrefab(ActorPrefab, transform);
            var actorViewModel    = actorViewModelObj.GetComponent <ActorViewModel>();
            actorViewModel.PlayerState = _playerState;

            var actorGraphicObj = _container.InstantiatePrefab(HumanoidGraphicPrefab, actorViewModel.transform);
            var actorGraphic    = actorGraphicObj.GetComponent <ActorGraphicBase>();

            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   = NodeViewModels.Single(x => x.Node == actor.Node);
            var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1);
            actorViewModel.transform.position = actorPosition;
            actorViewModel.Actor = actor;

            actorViewModel.Selected   += EnemyActorVm_OnSelected;
            actorViewModel.MouseEnter += EnemyViewModel_MouseEnter;
            actor.UsedAct             += ActorOnUsedAct;
            actor.Person.GetModule <ISurvivalModule>().Dead += Monster_Dead;

            var fowController = actorViewModel.gameObject.AddComponent <FowActorController>();
            // Контроллеру тумана войны скармливаем только графику.
            // Потому что на основтой объект акёра завязаны блокировки (на перемещение, например).
            // Если основной объект создаст блокировку и будет отключен,
            // то он не сможет её снять в результате своих Update.
            // Это создаст всеобщую неснимаемую блокировку.
            fowController.Graphic = actorGraphic.gameObject;
            // Передаём коллайдер, чтобы в случае отключения графики скрытого актёра нельзя было выбрать.
            fowController.Collider = actorViewModel.GetComponent <Collider2D>();

            ActorViewModels.Add(actorViewModel);
        }
    }