Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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;
            }
        }