public override void OnInspectorGUI()
    {
        WayPointNetwork network = (WayPointNetwork)target;

        network.pathMode = (PathDisplayMode)EditorGUILayout.EnumPopup("Display Mode ", network.pathMode);

        if (network.pathMode == PathDisplayMode.Path)
        {
            network.UIStart = EditorGUILayout.IntSlider("Start waypoint ", network.UIStart, 0, network.waypoint.Count - 1);
            network.UIEnd   = EditorGUILayout.IntSlider("End waypoint ", network.UIEnd, 0, network.waypoint.Count - 1);
        }
        DrawDefaultInspector();
    }
    void OnSceneGUI( )
    {
        WayPointNetwork network = (WayPointNetwork)target;

        for (int i = 0; i < network.waypoint.Count; i++)
        {
            if (network.waypoint [i] != null)
            {
                Handles.Label(network.waypoint [i].position, "Waypoint " + i.ToString());
            }
        }

        if (network.pathMode == PathDisplayMode.connection)
        {
            Vector3[] linePoint = new Vector3[network.waypoint.Count + 1];

            for (int i = 0; i < network.waypoint.Count; i++)
            {
                int index = i != network.waypoint.Count ? i : 0;
                if (network.waypoint [i] != null)
                {
                    linePoint [i] = network.waypoint [index].position;
                }
                else
                {
                    linePoint [i] = new Vector3(Mathf.Infinity, Mathf.Infinity, Mathf.Infinity);
                }
            }
            Handles.color = Color.cyan;
            Handles.DrawPolyLine(linePoint);
        }
        else if (network.pathMode == PathDisplayMode.Path)
        {
            NavMeshPath path = new NavMeshPath();
            Vector3     from = network.waypoint [network.UIStart].position;
            Vector3     to   = network.waypoint [network.UIEnd].position;
            NavMesh.CalculatePath(from, to, NavMesh.AllAreas, path);
            Handles.color = Color.yellow;
            Handles.DrawPolyLine(path.corners);
        }
    }