示例#1
0
        public void OnEnable()
        {
            maze = (Maze_e)target;
            LevelEditor.CurrentMaze = maze.gameObject;
            LevelEditor.CurrentMaze.GetComponent <Maze.Maze_e>().ID = LevelEditor.CurrentMaze.name.Split(' ')[1];
            if (LevelEditor.Mazes != null)
            {
                Selection.SetActiveObjectWithContext(maze, maze);
                SceneView.lastActiveSceneView.FrameSelected();
                if (maze.transform.parent != LevelEditor.Mazes)
                {
                    LevelEditor.SetMazeParent();
                }
                LevelEditor.ReCalculateAllItems();
                LevelEditor.ReCalculateAllMazeCubes();
            }

            StartNode = null;
            EndNode   = null;
        }
示例#2
0
        private void CreateMazeStructureHandle(GameObject mazeCube)
        {
            RaycastHit hit;

            for (int i = 0; i < mazeCube.transform.childCount; i++)
            {
                Game.Maze.Node node = mazeCube.transform.GetChild(i).gameObject.GetComponent <Game.Maze.Node>();
                if (node == null)
                {
                    continue;
                }

                Handles.zTest = UnityEngine.Rendering.CompareFunction.Less;

                Handles.color = Color.black;

                if (node.rightPath)
                {
                    Handles.DrawAAPolyLine(Texture2D.whiteTexture, 10, node.transform.position + node.transform.forward * 0.01f,
                                           node.transform.position + node.transform.forward * 0.01f + node.transform.right * 0.52f);
                }
                if (node.leftPath)
                {
                    Handles.DrawAAPolyLine(Texture2D.whiteTexture, 10, node.transform.position + node.transform.forward * 0.01f,
                                           node.transform.position + node.transform.forward * 0.01f - node.transform.right * 0.52f);
                }
                if (node.upPath)
                {
                    Handles.DrawAAPolyLine(Texture2D.whiteTexture, 10, node.transform.position + node.transform.forward * 0.01f,
                                           node.transform.position + node.transform.forward * 0.01f + node.transform.up * 0.52f);
                }
                if (node.downPath)
                {
                    Handles.DrawAAPolyLine(Texture2D.whiteTexture, 10, node.transform.position + node.transform.forward * 0.01f,
                                           node.transform.position + node.transform.forward * 0.01f - node.transform.up * 0.52f);
                }

                if (StartNode != node)
                {
                    Handles.color = new Color(0.99f, 0.99f, 1f);
                }
                else
                {
                    Handles.color = new Color(1f, 0.57f, 0.34f);
                }

                if (node.inactive)
                {
                    Handles.color = Color.black;
                }


                if (Handles.Button(node.transform.position, Quaternion.Euler(node.transform.eulerAngles), 0.15f, 0.15f, Handles.SphereCap))
                {
                    if (!LevelEditor.InactiveNodeEditing)
                    {
                        EndNode = node;


                        if (StartNode != null)
                        {
                            StartNode.CalculatePathDirection(EndNode);
                            EndNode.CalculatePathDirection(StartNode);
                        }
                        else
                        {
                            LevelEditor.ReCalculateNodes();
                        }

                        if (StartNode == EndNode)
                        {
                            StartNode = null;
                            EndNode   = null;
                        }
                        else
                        {
                            EndNode   = null;
                            StartNode = node;
                        }
                    }
                    else
                    {
                        if (!node.inactive)
                        {
                            node.Reset();
                            node.inactive = true;
                        }
                        else
                        {
                            node.inactive = false;
                            StartNode     = node;
                        }
                    }
                }
            }
        }