Beispiel #1
0
        /// <summary>
        /// Road Root is an editor helper object during authoring.
        /// </summary>
        /// <returns>The road root.</returns>
        public static RoadRoot GetRoadRoot()
        {
            // RoadRoot is removed during gameplay (for avoiding false collision detection)
            if (Application.isPlaying)
            {
                return(null);
            }

            GameObject root = GameObject.Find("__UnityRoadRoot");

            if (root != null)
            {
                return(root.GetComponent <RoadRoot>());
            }
            else
            {
                GameObject obj = new GameObject();
                obj.name      = "__UnityRoadRoot";
                obj.hideFlags = HideFlags.HideAndDontSave;
                RoadRoot    rr = obj.AddComponent <RoadRoot>();
                BoxCollider bc = obj.GetComponent <BoxCollider>();
                bc.size = new Vector3(1000000.0f, 0.0f, 1000000.0f);
                return(rr);
            }
        }
Beispiel #2
0
        private static void _EditRoad_Create_DrawNextPathPreview(RoadRoot root, Event e, int controlID)
        {
            RoadCreateOperation op = root.currentOperation as RoadCreateOperation;

            if (op == null)
            {
                return;
            }

            Ray        r = HandleUtility.GUIPointToWorldRay(e.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(r, out hit))
            {
                Waypoint from   = op.lastWaypoint;
                Vector3  curPos = hit.point;

                Vector3 tangent = Vector3.Lerp(from.transform.position, curPos, 0.5f);
                Handles.DrawBezier(from.transform.position,             // start pos
                                   curPos,                              // end pos
                                   tangent,                             // start tangent
                                   tangent,                             // end tangent
                                   Color.magenta,                       // color
                                   null,                                // Texture
                                   3.0f);                               // width
            }
        }
Beispiel #3
0
        public static void DoSceneGUI()
        {
            int      controlID = GUIUtility.GetControlID(FocusType.Passive);
            Event    e         = Event.current;
            RoadRoot root      = RoadUtility.GetRoadRoot();

            switch (root.selectedTool)
            {
            case RoadRoot.ToolType.Select:
                break;

            case RoadRoot.ToolType.Road:
                _EditRoad(root, e, controlID);
                break;

            case RoadRoot.ToolType.Decal:
                break;

            case RoadRoot.ToolType.SidePoints:
                break;

            case RoadRoot.ToolType.Wall:
                break;
            }
        }
Beispiel #4
0
        /// <summary>
        /// HACK: force invoke Repaint Event in SceneView.
        /// OnSceneGUI() will not be redrawn unless Repaint Event is kicked,
        /// so moving last waypoint by zero to force make repaint happen.
        /// </summary>
        private static void _EditRoad_Create_ForceInvokeRepaint(RoadRoot root)
        {
            RoadCreateOperation op = root.currentOperation as RoadCreateOperation;

            if (op != null)
            {
                op.lastWaypoint.transform.Translate(new Vector3(0, 0, 0));
            }
        }
Beispiel #5
0
        void OnGUI()
        {
            if (m_root == null)
            {
                m_root = RoadUtility.GetRoadRoot();
            }
            if (m_root != null)
            {
                EditorGUILayout.BeginVertical();

                GUILayout.Label("Tool:", EditorStyles.boldLabel);
                m_root.selectedTool = (RoadRoot.ToolType)GUILayout.SelectionGrid((int)m_root.selectedTool, toolLabel, 1);

                if (m_root.selectedTool == RoadRoot.ToolType.Road)
                {
                    Selection.activeGameObject = m_root.gameObject;
                }

                switch (m_root.selectedTool)
                {
                case RoadRoot.ToolType.Select:
                    break;

                case RoadRoot.ToolType.Road:
                    GUILayout.Label("Mode:", EditorStyles.boldLabel);
                    if (m_root.activeRoad == null)
                    {
                        m_root.selectedRoadToolMode = (RoadRoot.RoadToolType)GUILayout.SelectionGrid((int)m_root.selectedRoadToolMode, roadToolModeLabel_NoRoadSelected, 1);
                    }
                    else
                    {
                        m_root.selectedRoadToolMode = (RoadRoot.RoadToolType)GUILayout.SelectionGrid((int)m_root.selectedRoadToolMode, roadToolModeLabel_RoadSelected, 1);
                    }
                    break;

                case RoadRoot.ToolType.Decal:
                    break;

                case RoadRoot.ToolType.SidePoints:
                    break;

                case RoadRoot.ToolType.Wall:
                    break;
                }

                EditorGUILayout.EndVertical();
            }
            else
            {
                EditorGUILayout.HelpBox("RoadTool is not available during gameplay.", MessageType.Info);
            }
        }
Beispiel #6
0
        void OnEnable()
        {
            m_target = target as Path;

            RoadRoot rr = RoadUtility.GetRoadRoot();

            if (!serializedObject.isEditingMultipleObjects)
            {
                rr.SetActivePath(m_target);
            }
            else
            {
                rr.SetActivePath(null);
            }
        }
Beispiel #7
0
        private static void _EditRoad(RoadRoot root, Event e, int controlID)
        {
            switch (root.selectedRoadToolMode)
            {
            case RoadRoot.RoadToolType.Create:
                _EditRoad_Create(root, e, controlID);
                break;

            case RoadRoot.RoadToolType.AddWaypoint:
                _EditRoad_AddWaypoint(root, e, controlID);
                break;

            case RoadRoot.RoadToolType.RemoveWaypoint:
                _EditRoad_RemoveWaypoint(root, e, controlID);
                break;
            }
        }
Beispiel #8
0
        private static void _EditRoad_RemoveWaypoint(RoadRoot root, Event e, int controlID)
        {
            switch (e.GetTypeForControl(controlID))
            {
            case EventType.MouseDown:
                GUIUtility.hotControl = controlID;
                Debug.Log("[RemoveWaypoint]Mouse Down" + e.mousePosition);
                Event.current.Use();
                break;

            case EventType.MouseUp:
                GUIUtility.hotControl = 0;
                Debug.Log("[RemoveWaypoint]Mouse Up" + e.mousePosition);
                Event.current.Use();
                break;
            }
        }
Beispiel #9
0
        private static void _EditRoad_Create(RoadRoot root, Event e, int controlID)
        {
            switch (e.GetTypeForControl(controlID))
            {
            case EventType.mouseMove:
                // to draw preview line in scene, invoke repaint event when mouse is moved.
                _EditRoad_Create_ForceInvokeRepaint(root);
                break;

            case EventType.Repaint:
                _EditRoad_Create_DrawNextPathPreview(root, e, controlID);
                break;

            case EventType.MouseDown:
                GUIUtility.hotControl = controlID;
                if (e.clickCount == 2)
                {
                    RoadCreateOperation op = root.currentOperation as RoadCreateOperation;
                    if (op != null)
                    {
                        Selection.activeGameObject = op.End();
                    }
                }
                Event.current.Use();
                break;

            case EventType.MouseUp:
                GUIUtility.hotControl = 0;
                Ray        ray = HandleUtility.GUIPointToWorldRay(e.mousePosition);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))
                {
                    RoadCreateOperation op = root.currentOperation as RoadCreateOperation;
                    if (op == null)
                    {
                        root.BeginCreateRoadOperation(hit.point);
                    }
                    else
                    {
                        op.Continue(hit.point);
                    }
                }
                Event.current.Use();
                break;
            }
        }
Beispiel #10
0
        void OnEnable()
        {
            root            = serializedObject.FindProperty("m_root");
            roadMesh        = serializedObject.FindProperty("m_roadMesh");
            meshQuality     = serializedObject.FindProperty("m_meshQuality");
            roadWidth       = serializedObject.FindProperty("defaultWidth");
            defaultMaterial = serializedObject.FindProperty("m_defaultMaterial");
            m_target        = target as Road;

            RoadRoot rr = RoadUtility.GetRoadRoot();

            if (!serializedObject.isEditingMultipleObjects)
            {
                rr.SetActiveRoad(m_target);
            }
            else
            {
                rr.SetActiveRoad(null);
            }
        }
Beispiel #11
0
        void OnEnable()
        {
            centerRatio = serializedObject.FindProperty("centerRatio");
            angle       = serializedObject.FindProperty("angle");
            width       = serializedObject.FindProperty("m_width");

            last = serializedObject.FindProperty("m_last");
            next = serializedObject.FindProperty("m_next");

            m_target = serializedObject.targetObject as Waypoint;

            RoadRoot rr = RoadUtility.GetRoadRoot();

            if (!serializedObject.isEditingMultipleObjects)
            {
                rr.SetActiveWaypoint(m_target);
            }
            else
            {
                rr.SetActiveRoad(null);
            }
        }
Beispiel #12
0
 public RemoveWaypointOperation(RoadRoot r)
 {
     m_parent = r;
 }
Beispiel #13
0
 public AddWaypointOperation(RoadRoot r)
 {
     m_parent = r;
 }
Beispiel #14
0
 public RoadCreateOperation(RoadRoot r)
 {
     m_parent = r;
 }
Beispiel #15
0
 void OnEnable()
 {
     m_target = target as RoadRoot;
 }