void DrawContext(GameStartContextEditing c, bool forceShow)
 {
     if(!c.dependencyEnabled)
         return;
     var en = c.enabled;
     if(!forceShow)
     {
         en = EditorGUILayout.Toggle (c.attribute.Name ?? c.type.Name, en);
         c.enabled = en;
     }
     if(forceShow || (!forceShow && en))
     {
         foreach(var f in c.fields)
         {
             f.DrawEditor();
         }
     }
 }
        void OnEnable()
        {
            engineStartParams = new GameStartContextEditing(typeof(GlobalConfig));
            customGameStartParams = new Dictionary<Type, GameStartContextEditing>();

            // search for custom GameStartParameters
            foreach(var type in AttributeHelper.GetTypesWithAttribute<ConfigAttribute>())
            {
                if(!customGameStartParams.ContainsKey(type))
                {
                    customGameStartParams.Add(type, new GameStartContextEditing(type));
                }
            }

            // find config dependency
            foreach(var c in customGameStartParams)
            {
                if(c.Value.attribute.Dependency != null)
                {
                    c.Value.dependency = customGameStartParams[c.Value.attribute.Dependency];
                }
            }

            Load ();
        }
 void OnDisable()
 {
     engineStartParams = null;
     customGameStartParams.Clear ();
     customGameStartParams = null;
 }