private void SelectNavNode(NavigatorNode selected) { if (_selectedNode != null) { _selectedNode.Deselect(); } if (!selected.selected) { selected.SelectBy(); } float delta = selected.transform.localPosition.x + selected.nodeSide * (selected.nodeSize.x / 2f); if (Mathf.Abs(delta) > 0f && _selectedNode != null) { if (selected.nodeData.children.Count > 0) { ClearSameChildNodes(selected); } ClearUpLevel(selected, _selectedNode); NavigatorNode mainLineParent = null; while (mainLineParent == null && _selectedNode.nodeData.nodeId != 1000) { if (_selectedNode.nodeLevel == 0) { mainLineParent = _selectedNode; } else { _selectedNode = _selectedNode.parent; } } int row = (mainLineParent == null) ? 0 : mainLineParent.nodeRow; _selectedNode = selected; Action postAction = () => { RestoreDefaultNodes(row, mainLineParent, selected); ClearFarNodes(selected); CreateNodesAfterSelected(); _selectedNode = selected; _selectedNode.nodeState = NavigatorNode.Navigator_state.Selected; _homeNode.Deselect(); RepositoryController.Instance.isAction = true; }; StartCoroutine(MoveNodes(-delta, postAction)); } else { _selectedNode = selected; RepositoryController.Instance.isAction = true; } }
private void CreateUnexist(Node _node) { List <Node> nodesChain = new List <Node>(); NavigatorNode mainParent = null; Node currentChild = _node; while (mainParent == null) { nodesChain.Add(currentChild); Node currentParent = RepositoryController.Instance.nodes.Find(x => x.children.Contains(currentChild.nodeId)); int cci = currentParent.children.IndexOf(currentChild.nodeId); for (int i = currentParent.children.Count - 1; i >= 0; i--) { if (i < cci) { Node cousin = RepositoryController.Instance.nodes.Find(x => x.nodeId.Equals(currentParent.children[i])); nodesChain.Add(cousin); } } NavigatorNode parentOnScene = _sceneNodes.Find(x => x.nodeData.Equals(currentParent)); if (parentOnScene != null && parentOnScene.nodeLevel == 0) { mainParent = parentOnScene; } else { currentChild = currentParent; } } float xPoint = mainParent.transform.localPosition.x + mainParent.nodeSize.x * mainParent.nodeSide; List <NavigatorNode> nodesForDel = _sceneNodes.FindAll(x => x.nodeRow.Equals(mainParent.nodeRow) && x.nodeSide.Equals(mainParent.nodeSide) && x.nodeLevel > 0); if (nodesForDel != null && nodesForDel.Count > 0) { for (int i = 0; i < nodesForDel.Count; i++) { if (nodesChain.Contains(nodesForDel[i].nodeData) || nodesForDel[i].nodeLevel <= 0) { xPoint = nodesForDel[i].transform.localPosition.x + nodesForDel[i].nodeSize.x * nodesForDel[i].nodeSide; continue; } Destroy(nodesForDel[i].gameObject); _sceneNodes.Remove(nodesForDel[i]); } } for (int i = nodesChain.Count - 1; i >= 0; i--) { NavigatorNode nodeOnScene = _sceneNodes.Find(x => x.nodeData.Equals(nodesChain[i])); if (nodeOnScene != null) { xPoint = nodeOnScene.transform.localPosition.x + nodeOnScene.nodeSize.x * nodeOnScene.nodeSide; continue; } NavigatorNode parent = _sceneNodes.Find(x => x.nodeData.children.Contains(nodesChain[i].nodeId)); CreateNodeUnit(parent, nodesChain[i], ref xPoint, false); } NavigatorNode selected = _sceneNodes[_sceneNodes.Count - 1]; if (!selected.selected) { selected.SelectBy(); } float delta = selected.transform.localPosition.x + selected.nodeSide * (selected.nodeSize.x / 2f); //int row = -1; if (Mathf.Abs(delta) > 0f && _selectedNode != null) { if (selected.nodeData.children.Count > 0) { ClearSameChildNodes(selected); } ClearUpLevel(selected, _selectedNode); NavigatorNode mainLineParent = null; while (mainLineParent == null && _selectedNode.nodeData.nodeId != 1000) { if (_selectedNode.nodeLevel == 0) { mainLineParent = _selectedNode; } else { if (_selectedNode != null) { _selectedNode.Deselect(); } _selectedNode = _selectedNode.parent; } } int row = (mainLineParent == null) ? 0 : mainLineParent.nodeRow; _selectedNode = selected; Action postAction = () => { RestoreDefaultNodes(row, mainLineParent, selected); ClearFarNodes(selected); CreateNodesAfterSelected(); _selectedNode = selected; _selectedNode.nodeState = NavigatorNode.Navigator_state.Selected; _homeNode.Deselect(); RepositoryController.Instance.isAction = true; }; StartCoroutine(MoveNodes(-delta, postAction)); } else { if (_selectedNode != null) { _selectedNode.Deselect(); } _selectedNode = selected; RepositoryController.Instance.isAction = true; } }