VisualTreeAsset SetUpSpawnFactory()
    {
        VisualTreeAsset aAsset = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Editor/UXML Files/SpawnFactoryEditor.uxml");

        mCurrentObjectElement  = aAsset.CloneTree();
        mSpawnEnemy            = mCurrentObjectElement.Q <ObjectField>("spawn_enemy");
        mSpawnEnemy.objectType = typeof(Enemy);
        mSpawnEnemy.RegisterCallback <ChangeEvent <Object> >((aEv) => GenHelpers.OnSpawnEnemySelection((Enemy)aEv.newValue, mSpawnEnemy));
        mSpawnSound            = mCurrentObjectElement.Q <ObjectField>("spawn_sound");
        mSpawnSound.objectType = typeof(AudioClip);
        mSpawnSound.RegisterCallback <ChangeEvent <Object> >((aEv) => GenHelpers.OnCollectSoundSelection((AudioClip)aEv.newValue, mSpawnSound));
        mFactorySprite            = mCurrentObjectElement.Q <ObjectField>("factory_sprite");
        mFactorySprite.objectType = typeof(Sprite);
        mFactorySprite.RegisterCallback <ChangeEvent <Object> >((aEv) => GenHelpers.OnSpriteSelection((Sprite)aEv.newValue, mFactorySprite));
        return(aAsset);
    }
    VisualTreeAsset SetUpPickable()
    {
        VisualTreeAsset aAsset = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/Editor/UXML Files/PickableEditor.uxml");

        mCurrentObjectElement = aAsset.CloneTree();
        mItemType             = mCurrentObjectElement.Q <EnumField>("item_type");
        mItemType.Init(Item.Type.HealthBoost);
        mItemType.RegisterCallback <ChangeEvent <System.Enum> >((aEv) => OnItemTypeChanged((Item.Type)aEv.newValue));
        mItemSound            = mCurrentObjectElement.Q <ObjectField>("item_collect_sound");
        mItemSound.objectType = typeof(AudioClip);
        mItemSound.RegisterCallback <ChangeEvent <Object> >((aEv) => GenHelpers.OnCollectSoundSelection((AudioClip)aEv.newValue, mItemSound));
        mItemSprite            = mCurrentObjectElement.Q <ObjectField>("item_idle_sprite");
        mItemSprite.objectType = typeof(Sprite);
        mItemSprite.RegisterCallback <ChangeEvent <Object> >((aEv) => GenHelpers.OnSpriteSelection((Sprite)aEv.newValue, mItemSprite));
        return(aAsset);
    }