void OnSceneGUI()
    {
        Ferr2DT_PathTerrain collider = (Ferr2DT_PathTerrain)target;
        Ferr2D_Path         path     = collider.gameObject.GetComponent <Ferr2D_Path>();

        EditorUtility.SetSelectedWireframeHidden(collider.gameObject.GetComponent <Renderer>(), Ferr2DT_Menu.HideMeshes);

        if (!(collider.enabled == false || path == null || path.pathVerts.Count <= 1 || !collider.createCollider || multiSelect) && Ferr2DT_SceneOverlay.showCollider)
        {
            Handles.color = new Color(0, 1, 0, 1);
            DrawColliderEdge(collider);
        }

        Ferr2DT_SceneOverlay.OnGUI();
    }
    void LegacySceneGUI()
    {
        if (!Ferr2DT_PathTerrain.showGUI)
        {
            return;
        }

            #if UNITY_5_5_OR_NEWER
        EditorUtility.SetSelectedRenderState(terrain.gameObject.GetComponent <Renderer>(), Ferr2DT_Menu.HideMeshes ? EditorSelectedRenderState.Hidden : EditorSelectedRenderState.Highlight);
                #else
        EditorUtility.SetSelectedWireframeHidden(terrain.gameObject.GetComponent <Renderer>(), Ferr2DT_Menu.HideMeshes);
                #endif

        Ferr2DT_SceneOverlay.OnGUI();
    }
    private void OnSceneGUI()
    {
        if (!Ferr2DT_PathTerrain.showGUI || multiEdit)
        {
            return;
        }

        terrain = (Ferr2DT_PathTerrain)target;
        if (terrain.IsLegacy)
        {
            LegacySceneGUI();
            return;
        }

        // make sure our visual settings are up to date
        if (currVertScale != Ferr2DT_Menu.PathScale)
        {
            UpdateVisuals();
        }

        // hide Unity's current tool if we're overriding it with DragSelect
        Tools.hidden = Ferr2DT_Menu.DragSelect;

        if (Event.current.type == EventType.MouseDown)
        {
            mouseDown = true;
        }
        if (Event.current.type == EventType.MouseUp)
        {
            mouseDown = false;
        }

        EditorUtility.SetSelectedRenderState(terrain.gameObject.GetComponent <Renderer>(), Ferr2DT_Menu.HideMeshes ? EditorSelectedRenderState.Hidden : EditorSelectedRenderState.Highlight);

        // create a serialized object, the one provided by Editor isn't valid in OnSceneGUI
        SerializedObject targetObj = new SerializedObject(target);

        targetObj.Update();
        SerializedProperty path = targetObj.FindProperty("pathData");

        // show the collider lines
        ShowColliders();

        // and do the actual path GUI
        ShowPathGUI(terrain.transform, terrain.PathData, path);

        // Do this last so it goes above all our handles and lines
        Ferr2DT_SceneOverlay.OnGUI();

        // build the terrain if we need to
        if (targetObj.ApplyModifiedProperties() || (usedLowQualityBuild && !mouseDown))
        {
            terrain.PathData.SetDirty();
            if (mouseDown)
            {
                if (!Ferr2DT_Menu.BuildOnRelease)
                {
                    terrain.Build(false);
                }
                usedLowQualityBuild = true;
            }
            else
            {
                terrain.Build(true);
                usedLowQualityBuild = false;
            }
            cachedColliders = null;
        }
    }