void DrawActionList(AbilityEventData abilityEvent)
    {
        var eventActions = abilityEvent.Actions;

        GUILayout.BeginHorizontal();
        abilityEvent.showActionsInEditor = EditorGUILayout.Foldout(abilityEvent.showActionsInEditor, "Actions", _foldout);
        if (GUILayout.Button("+", GUILayout.Width(20)))
        {
            eventActions.Add(new AbilityActionData());
        }
        GUILayout.Space(310);         // hack!
        GUILayout.EndHorizontal();

        if (abilityEvent.showActionsInEditor)
        {
            for (int i = 0; i < eventActions.Count; i++)
            {
                GUILayout.BeginHorizontal();
                eventActions[i].showInEditor = EditorGUILayout.Foldout(eventActions[i].showInEditor, eventActions[i].Type.ToString());

                if (GUILayout.Button("-", GUILayout.Width(20)))
                {
                    eventActions[i].tobeRemoved = true;
                }
                GUILayout.EndHorizontal();

                AbilityActionData action = eventActions[i];

                DrawAction(action);
            }
            eventActions.RemoveAll((a) => a.tobeRemoved);
        }
    }
    void DrawModiferList(AbilityEventData abilityEvent)
    {
        var eventModifiers = abilityEvent.Modifiers;

        GUILayout.BeginHorizontal();
        abilityEvent.showModifiersInEditor = EditorGUILayout.Foldout(abilityEvent.showModifiersInEditor, "Modifier", _foldout);
        if (GUILayout.Button("+", GUILayout.Width(20)))
        {
            eventModifiers.Add(new AbilityModifierData());
        }
        GUILayout.Space(310);         // hack!
        GUILayout.EndHorizontal();

        if (abilityEvent.showModifiersInEditor)
        {
            for (int i = 0; i < eventModifiers.Count; i++)
            {
                GUILayout.BeginHorizontal();
                eventModifiers[i].showInEditor = EditorGUILayout.Foldout(eventModifiers[i].showInEditor, eventModifiers[i].Type.ToString());

                if (GUILayout.Button("-", GUILayout.Width(20)))
                {
                    eventModifiers[i].tobeRemoved = true;
                }
                GUILayout.EndHorizontal();
                DrawModifier(eventModifiers[i]);
            }
            eventModifiers.RemoveAll((a) => a.tobeRemoved);
        }
    }
    void DrawEvent(AbilityEventData abilityEvent)
    {
        if (abilityEvent.showInEditor)
        {
            EditorGUILayout.BeginVertical();

            EditorGUILayout.BeginHorizontal();
            abilityEvent.Type = (AbilityEventData.Event)EditorGUILayout.EnumPopup(new GUIContent("Type", abilityEvent.Type.ToDescription()), abilityEvent.Type);
            EditorGUILayout.EndHorizontal();

            DrawActionList(abilityEvent);
            DrawModiferList(abilityEvent);

            EditorGUILayout.EndVertical();
        }
    }