/// <summary>
        /// display a particular task detail. case by case depending on the task type
        /// </summary>
        public void DisplayTaskDetail(Task t)
        {
            GUILayout.BeginVertical(EditorStyles.helpBox);

            // task type
            GUILayout.Label(t.GetType().Name, EditorStyles.boldLabel);

            GUILayout.BeginHorizontal();
            GUILayout.Label("GO", GUILayout.Width(50));
            t.GameObject = (GameObject)EditorGUILayout.ObjectField(t.GameObject, typeof(GameObject), true);
            GUILayout.EndHorizontal();

            // go name
            GUILayout.BeginHorizontal();
            GUILayout.Label("GOName", GUILayout.Width(50));
            t.GOName = GUILayout.TextField(t.GOName);
            GUILayout.EndHorizontal();

            // task name
            GUILayout.BeginHorizontal();
            GUILayout.Label("Name", GUILayout.Width(50));
            t.TaskName = GUILayout.TextField(t.TaskName);
            GUILayout.EndHorizontal();

            // task delay
            GUILayout.BeginHorizontal();
            GUILayout.Label("Delay", GUILayout.Width(50));
            t.TaskDelay = EditorGUILayout.FloatField(t.TaskDelay);
            GUILayout.EndHorizontal();

            // task description
            GUILayout.BeginHorizontal();
            GUILayout.Label("Description");
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            GUILayout.Space(20);
            t.Description = GUILayout.TextArea(t.Description, GUILayout.Height(100));
            GUILayout.EndHorizontal();

            switch (t.GetType().Name)
            {
            case "MovingTask":
            {
                DisplayMovingTaskDetail(t);
            }
            break;
            }
            GUILayout.EndVertical();

            // for task events
            GUILayout.BeginVertical(EditorStyles.helpBox);
            for (int i = 0; i < t.TaskEvents.Count; i++)
            {
                GUILayout.BeginHorizontal();

                var tevent = t.TaskEvents[i];

                GUIStyle style = new GUIStyle(EditorStyles.toolbarButton);
                style.alignment = TextAnchor.MiddleLeft;
                bool clicked = GUILayout.Toggle(i == SelectedTaskEventId, i + 1 + ". " + tevent.GetType().Name, style);
                if (clicked != (i == SelectedTaskEventId))
                {
                    if (clicked)
                    {
                        SelectedTaskEventId = i;
                        GUI.FocusControl(null);
                    }
                    else
                    {
                        SelectedTaskEventId = -1;
                    }
                }

                // remove task from task event list
                if (GUILayout.Button("-", EditorStyles.toolbarButton, GUILayout.Width(30)))
                {
                    if (SelectedTaskEventId != -1)
                    {
                        SelectedTaskEventId = -1;
                    }
                    t.TaskEvents.RemoveAt(i);
                }

                GUILayout.EndHorizontal();

                // display task detail if task is selected
                if (i == SelectedTaskEventId)
                {
                    switch (tevent.GetType().Name)
                    {
                    case "TransformTaskEvent":
                    {
                        DisplayTransformTaskEventIOfTask(t, i);
                    }
                    break;

                    case "AnimationTaskEvent":
                    {
                        DisplayAnimationTaskEventIOfTask(t, i);
                    }
                    break;
                    }
                }

                /*if (GUILayout.Button("Remove Task Event"))
                 * {
                 *  t.TaskEvents.Remove(tevent);
                 * }*/
            }

            if (GUILayout.Button("Add Task Event"))
            {
                GenericMenu genericMenu = new GenericMenu();
                for (int eventTypeId = 0; eventTypeId < TaskListEditorUtility.EventTypes().Length; eventTypeId++)
                {
                    genericMenu.AddItem(new GUIContent(TaskListEditorUtility.EventTypes()[eventTypeId]), false,
                                        (param) =>
                    {
                        int index = (int)param;
                        switch (index)
                        {
                        case 0:
                            {
                                t.TaskEvents.Add(new TransformTaskEvent());
                            }
                            break;

                        case 1:
                            {
                                t.TaskEvents.Add(new AnimationTaskEvent());
                            }
                            break;
                        }
                    }
                                        , eventTypeId);
                }
                genericMenu.ShowAsContext();
            }
            GUILayout.EndVertical();
        }
Пример #2
0
        /// <summary>
        /// display a particular task detail. case by case depending on the task type
        /// </summary>
        public void DisplayTaskDetail(Task t)
        {
            GUILayout.BeginVertical(EditorStyles.helpBox);

            // task type
            GUILayout.Label(t.GetType().Name, EditorStyles.boldLabel);

            GUILayout.BeginHorizontal();
            GUILayout.Label("GO", GUILayout.Width(50));
            t.GameObject = (GameObject)EditorGUILayout.ObjectField(t.GameObject, typeof(GameObject), true);
            GUILayout.EndHorizontal();

            // go name
            GUILayout.BeginHorizontal();
            GUILayout.Label("GOName", GUILayout.Width(50));
            t.GOName = GUILayout.TextField(t.GOName);
            GUILayout.EndHorizontal();

            // task name
            GUILayout.BeginHorizontal();
            GUILayout.Label("Name", GUILayout.Width(50));
            t.TaskName = GUILayout.TextField(t.TaskName);
            GUILayout.EndHorizontal();

            // task description
            GUILayout.BeginHorizontal();
            GUILayout.Label("Description");
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            GUILayout.Space(20);
            t.Description = GUILayout.TextArea(t.Description, GUILayout.Height(100));
            GUILayout.EndHorizontal();

            switch (t.GetType().Name)
            {
            case "MovingTask":
            {
                DisplayMovingTaskDetail(t);
            }
            break;
            }
            GUILayout.EndVertical();

            // for task event
            GUILayout.BeginVertical(EditorStyles.helpBox);
            if (t.TaskEvent != null)
            {
                // task event type
                GUILayout.Label(t.TaskEvent.GetType().Name, EditorStyles.boldLabel);

                switch (t.TaskEvent.GetType().Name)
                {
                case "TransformTaskEvent":
                {
                    DisplayTransformTaskEventOfTask(t);
                } break;
                }

                if (GUILayout.Button("Remove Task Event"))
                {
                    t.TaskEvent = null;
                }
            }
            else
            {
                if (GUILayout.Button("Add Task Event"))
                {
                    GenericMenu genericMenu = new GenericMenu();
                    for (int eventTypeId = 0; eventTypeId < TaskListEditorUtility.EventTypes().Length; eventTypeId++)
                    {
                        genericMenu.AddItem(new GUIContent(TaskListEditorUtility.EventTypes()[eventTypeId]), false,
                                            (param) =>
                        {
                            int index = (int)param;
                            switch (index)
                            {
                            case 0:
                                {
                                    t.TaskEvent = new TransformTaskEvent();
                                }
                                break;
                            }
                        }
                                            , eventTypeId);
                    }
                    genericMenu.ShowAsContext();
                }
            }

            GUILayout.EndVertical();
        }