protected void OnGUI()
    {
        if (!Application.isPlaying)
        {
            EditorGUILayout.HelpBox("only runtime", MessageType.Warning);
            return;
        }

        switch (m_QuadtreeType)
        {
        case QuadtreeType.Notset:
            if (GUILayout.Button("Food"))
            {
                m_QuadtreeType   = QuadtreeType.Food;
                m_FoodEnumerator = new QuadtreeGizmosEnumerator <slFood>(slQuadtreeGizmos.FoodQuadtree);
            }
            else if (GUILayout.Button("Snake"))
            {
                m_QuadtreeType    = QuadtreeType.Snake;
                m_SnakeEnumerator = new QuadtreeGizmosEnumerator <slSnake.QuadtreeElement>(slQuadtreeGizmos.SnakeQuadtree);
            }
            break;

        case QuadtreeType.Food:
            OnGUIQuadtree(m_FoodEnumerator);
            break;

        case QuadtreeType.Snake:
            OnGUIQuadtree(m_SnakeEnumerator);
            break;
        }
    }
    private void OnGUIQuadtree <T>(QuadtreeGizmosEnumerator <T> enumerator) where T : hwmQuadtree <T> .IElement
    {
        if (GUILayout.Button("Back"))
        {
            if (enumerator != null)
            {
                enumerator.Dispose();
            }
            m_QuadtreeType = QuadtreeType.Notset;
        }

        if (enumerator == null)
        {
            EditorGUILayout.HelpBox("not have quadtree", MessageType.Warning);
            return;
        }

        if (m_QuadtreeGizmos == null)
        {
            GameObject go = new GameObject("Quadtree Gizmos");
            m_QuadtreeGizmos = go.AddComponent <slQuadtreeGizmos>();
            m_QuadtreeGizmos.OnBehaviourDrawGizmos += OnDrawGizmos;
        }

        enumerator.OnGUI();
    }
 protected void OnEnable()
 {
     m_QuadtreeType = QuadtreeType.Notset;
 }