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); }
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); }
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); }
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); } }