public void _eventHierarchyGUI(FmodEventGroup curGroup)
    {
        List <FmodEvent> events = curGroup.getEvents();

        if (m_style == null)
        {
            m_style = new GUIStyle(GUI.skin.label);
        }

        curGroup.showEventsInEditor = EditorGUILayout.Foldout(curGroup.showEventsInEditor, curGroup.getName());
        if (curGroup.showEventsInEditor)
        {
            EditorGUI.indentLevel += 1;
            foreach (FmodEvent e in events)
            {
                if (e.WasLoaded())
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(e.getName(), m_style, GUILayout.ExpandWidth(true));
                    if (Event.current.type == EventType.Repaint)
                    {
                        Rect lastRect = GUILayoutUtility.GetLastRect();
                        m_eventsRectangle[m_curNbEvents].Set(lastRect.xMin, lastRect.yMin, lastRect.width, lastRect.height);
                        m_events[m_curNbEvents] = e;
                    }
                    EditorGUILayout.LabelField((e.getSourceType() == FmodEvent.SourceType.SOURCE_2D ? "2D" : "3D"));
                    EditorGUILayout.EndHorizontal();
                    m_curNbEvents++;
                }
                else
                {
                    EditorGUILayout.HelpBox("Could not load this event. Are you missing a .fsb ?", MessageType.Error);
                }
            }
            foreach (FmodEventGroup child in curGroup.getChildrenGroups())
            {
                _eventHierarchyGUI(child);
            }
            EditorGUI.indentLevel -= 1;
        }
    }
    /// <summary>
    /// Gets an event based on the full path from the root of the asset. A starting slash is not required.
    /// Double slashes, i.e. "Group1//Group2/Event" are ignored.
    /// </summary>
    /// <returns>
    /// The event, or null if not found.
    /// </returns>
    /// <param name='fullName'>
    /// Full name of an event, meaning path from the root of the asset, e.g. "FeatureDemonstration/Basics/BasicSoundWithLooping"
    /// </param>
    public FmodEvent getEventWithFullName(string fullName)
    {
        List <FmodEventGroup> curChildrenGroups;
        List <FmodEvent>      curChildrenEvents;

        string[] explodedPath;

        explodedPath = fullName.Split(new char[1] {
            '/'
        });
        curChildrenGroups = m_eventGroups;
        curChildrenEvents = m_events;

        for (int i = 0; i < explodedPath.Length - 1; i++)
        {
            string pathElement = explodedPath[i];

            if (pathElement != "")               // we skip null paths in things such as "elem1/elem2//elem3". Also, enables not caring about a starting /
            {
                FmodEventGroup grp = _getChildGroupWithName(curChildrenGroups, pathElement);

                if (grp == null)
                {
                    Debug.LogWarning("FmodEventAsset (" + getName() + "): getEventWithFullName: Could not find event group with name '" + pathElement + "'");
                    return(null);
                }
                curChildrenGroups = grp.getChildrenGroups();
                curChildrenEvents = grp.getEvents();
            }
        }
        string    eventName = explodedPath[explodedPath.Length - 1];
        FmodEvent ret       = _getEventFromListWithName(curChildrenEvents, eventName);

        if (ret != null)
        {
            return(ret);
        }
        Debug.LogWarning("FmodEventAsset (" + getName() + "): getEventWithFullName: Could not find event with name '" + eventName + "'");
        return(null);
    }
    public void _eventHierarchyGUI(FmodEventGroup curGroup)
    {
        List<FmodEvent> events = curGroup.getEvents();

        if (m_style == null) {
            m_style = new GUIStyle(GUI.skin.label);
        }

        curGroup.showEventsInEditor = EditorGUILayout.Foldout(curGroup.showEventsInEditor, curGroup.getName());
        if (curGroup.showEventsInEditor) {
            EditorGUI.indentLevel += 1;
            foreach (FmodEvent e in events) {
                if (e.WasLoaded()) {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField(e.getName(), m_style, GUILayout.ExpandWidth(true));
                    if (Event.current.type == EventType.Repaint) {
                        Rect lastRect = GUILayoutUtility.GetLastRect();
                        m_eventsRectangle[m_curNbEvents].Set(lastRect.xMin, lastRect.yMin, lastRect.width, lastRect.height);
                        m_events[m_curNbEvents] = e;
                    }
                    EditorGUILayout.LabelField((e.getSourceType() == FmodEvent.SourceType.SOURCE_2D ? "2D" : "3D"));
                    EditorGUILayout.EndHorizontal();
                    m_curNbEvents++;
                } else {
                    EditorGUILayout.HelpBox("Could not load this event. Are you missing a .fsb ?", MessageType.Error);
                }
            }
            foreach (FmodEventGroup child in curGroup.getChildrenGroups()) {
                _eventHierarchyGUI(child);
            }
            EditorGUI.indentLevel -= 1;
        }
    }