public void OnSceneGUI()
    {
        PoPCameraEvent camEvent = (PoPCameraEvent)target;

        if (camEvent.eventPath.Count > 0)
        {
            if (camEvent.eventPath.Count == 4)
            {
                Handles.Label(camEvent.eventPath[0], "Cam Position Start");
                for (int i = 0; i < camEvent.eventPath.Count; i++)
                {
                    if (i == 1)
                    {
                        Handles.Label(camEvent.eventPath[i], "Start Bezeir");
                    }
                    else if (i == 2)
                    {
                        Handles.Label(camEvent.eventPath[i], "End Bezier");
                    }
                    else if (i == 3)
                    {
                        Handles.Label(camEvent.eventPath[i], "Cam Position End");
                    }
                    camEvent.eventPath[i] = Handles.PositionHandle(camEvent.eventPath[i], Quaternion.identity);
                }
            }
            else if (camEvent.eventPath.Count > 4)
            {
                Handles.Label(camEvent.eventPath[0], "Start Bezier");
                for (int i = 0; i < camEvent.eventPath.Count; i++)
                {
                    camEvent.eventPath[i] = Handles.PositionHandle(camEvent.eventPath[i], Quaternion.identity);
                    if (i < camEvent.eventPath.Count - 2)
                    {
                        Handles.Label(camEvent.eventPath[i + 1], "Position " + (i + 1));
                    }
                    else if (i < camEvent.eventPath.Count - 1)
                    {
                        Handles.Label(camEvent.eventPath[i + 1], "End Bezier");
                    }
                }
            }
            else if (camEvent.eventPath.Count == 3)
            {
                Handles.Label(camEvent.eventPath[0], "Cam Position Start");
                for (int i = 0; i < 3; i++)
                {
                    camEvent.eventPath[i] = Handles.PositionHandle(camEvent.eventPath[i], Quaternion.identity);
                    if (i == 0)
                    {
                        Handles.Label(camEvent.eventPath[i + 1], "Path Bezier");
                    }
                    else if (i < camEvent.eventPath.Count - 1)
                    {
                        Handles.Label(camEvent.eventPath[i + 1], "Cam Position End");
                    }
                }
            }
            else
            {
                Handles.Label(camEvent.eventPath[0], "Cam Position Start");
                for (int i = 0; i < 2; i++)
                {
                    camEvent.eventPath[i] = Handles.PositionHandle(camEvent.eventPath[i], Quaternion.identity);
                    if (i < 1)
                    {
                        Handles.Label(camEvent.eventPath[i + 1], "Cam Position End");
                    }
                }
            }
        }

        if (!camEvent.multipleTargets)
        {
            Handles.Label(camEvent.singleTargetPos, "Event Focus");
            camEvent.singleTargetPos = Handles.PositionHandle(camEvent.singleTargetPos, Quaternion.identity);
        }
        else
        {
            for (int i = 0; i < camEvent.focusPoints.Count; i++)
            {
                Handles.Label(camEvent.focusPoints[i].focus, "Focus " + (i + 1));
                camEvent.focusPoints[i].focus = Handles.PositionHandle(camEvent.focusPoints[i].focus, Quaternion.identity);
            }
        }

        Repaint();
    }
    public override void OnInspectorGUI()
    {
        PoPCameraEvent camEvent = (PoPCameraEvent)target;

        int columnWidth = Mathf.FloorToInt(Screen.width);
        int halfWidth   = columnWidth / 2;
        int sixthWidth  = columnWidth / 6;

        if (camEvent.eventPath.Count == 0)
        {
            if (GUILayout.Button("Create Event Path"))
            {
                camEvent.Initialize();
            }
        }
        else
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Multiple Camera Focus");
            camEvent.multipleTargets = EditorGUILayout.Toggle(camEvent.multipleTargets, GUILayout.MaxWidth(halfWidth + sixthWidth));
            GUILayout.EndHorizontal();

            showWaypoints = EditorGUILayout.Foldout(showWaypoints, "Event Path");
            if (showWaypoints)
            {
                for (int i = 0; i < camEvent.eventPath.Count; i++)
                {
                    GUILayout.Label("Waypoint " + (i + 1));

                    GUILayout.BeginHorizontal();
                    GUILayout.Space(20f);
                    camEvent.eventPath[i] = EditorGUILayout.Vector3Field("Position", camEvent.eventPath[i]);
                    GUILayout.EndHorizontal();

                    //if(i < camEvent.path.Count - 1 && camEvent.multipleTargets && i < camEvent.focusPoints.Count) {
                    //    GUILayout.BeginHorizontal();
                    //    GUILayout.Space(20f);
                    //    camEvent.focusPoints[i].focus = EditorGUILayout.Vector3Field("Focus", camEvent.focusPoints[i].focus);
                    //    GUILayout.EndHorizontal();
                    //}

                    if (GUILayout.Button("Delete Waypoint"))
                    {
                        camEvent.DeleteNode(i);
                    }
                }
            }

            if (!camEvent.multipleTargets)
            {
                EditorGUILayout.Vector3Field("Event Focus", camEvent.singleTargetPos);
            }
            else
            {
                showfocus = EditorGUILayout.Foldout(showfocus, "Focus Points");
                if (showfocus)
                {
                    for (int i = 0; i < camEvent.focusPoints.Count; i++)
                    {
                        GUILayout.Label("Focus " + (i + 1));
                        GUILayout.BeginHorizontal();
                        GUILayout.Space(20f);
                        camEvent.focusPoints[i].focus = EditorGUILayout.Vector3Field("Position", camEvent.focusPoints[i].focus);
                        GUILayout.EndHorizontal();
                        GUILayout.BeginHorizontal();
                        GUILayout.Space(20f);
                        camEvent.focusPoints[i].time = EditorGUILayout.FloatField("Time", camEvent.focusPoints[i].time);
                        GUILayout.EndHorizontal();

                        if (GUILayout.Button("Delete Focus"))
                        {
                            camEvent.DeleteFocus(i);
                        }
                    }
                }
            }

            camEvent.pathLength = EditorGUILayout.FloatField("Path Time Length", camEvent.pathLength);

            if (!showWaypoints)
            {
                if (GUILayout.Button("Delete Last Waypoint"))
                {
                    camEvent.DeleteNode(camEvent.eventPath.Count - 1);
                }
            }

            if (!showfocus)
            {
                if (GUILayout.Button("Delete Last Focus"))
                {
                    camEvent.DeleteFocus(camEvent.focusPoints.Count - 1);
                }
            }

            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("Add Waypoint"))
            {
                camEvent.AddNode();
            }

            if (GUILayout.Button("Add Focus"))
            {
                camEvent.AddFocus();
            }
            EditorGUILayout.EndHorizontal();

            if (GUILayout.Button("Dump Path"))
            {
                camEvent.DumpPath();
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(camEvent);
        }
    }