private void OnEnable()
 {
     _target = (GameModeProperties)target;
 }
    void ChoosePerspective()
    {
        EditorGUILayout.LabelField("Choose Perspective: ", subtitlestyle);
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();


        EditorGUILayout.BeginVertical();
        GUI.DrawTexture(GUILayoutUtility.GetRect(100, 100, 100, 100), isoExample);
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUI.BeginDisabledGroup(choseISO);
        if (GUI.Button(GUILayoutUtility.GetRect(50, 50, 50, 50), "Isometric"))
        {
            if (scriptable != null)
            {
                scriptable.pers = Perspective.iso;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            choseISO     = true;
            choseTP      = false;
            choseTD      = false;
            choseSIDE    = false;
            selectedPers = "ISOMETRIC";
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();



        EditorGUILayout.BeginVertical();
        GUI.DrawTexture(GUILayoutUtility.GetRect(100, 100, 100, 100), tpExample);
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        EditorGUI.BeginDisabledGroup(choseTP);
        if (GUI.Button(GUILayoutUtility.GetRect(50, 50, 50, 50), "Third Person"))
        {
            if (scriptable != null)
            {
                scriptable.pers = Perspective.third;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            choseISO     = false;
            choseTP      = true;
            choseTD      = false;
            choseSIDE    = false;
            selectedPers = "THIRD PERSON";
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginVertical();
        GUI.DrawTexture(GUILayoutUtility.GetRect(100, 100, 100, 100), sideExample);
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUI.BeginDisabledGroup(choseSIDE);
        if (GUI.Button(GUILayoutUtility.GetRect(50, 50, 50, 50), "Side-Scroller"))
        {
            if (scriptable != null)
            {
                scriptable.pers = Perspective.side;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            choseISO     = false;
            choseTP      = false;
            choseTD      = false;
            choseSIDE    = true;
            selectedPers = "SIDE-SCROLLER";
            Debug.Log(scriptable.pers);
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();



        EditorGUILayout.BeginVertical();
        GUI.DrawTexture(GUILayoutUtility.GetRect(100, 100, 100, 100), tdEcample);
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUI.BeginDisabledGroup(choseTD);
        if (GUI.Button(GUILayoutUtility.GetRect(50, 50, 50, 50), "Top Down"))
        {
            if (scriptable != null)
            {
                scriptable.pers = Perspective.top;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            choseISO     = false;
            choseTP      = false;
            choseTD      = true;
            choseSIDE    = false;
            selectedPers = "TOP DOWN";
            Debug.Log(scriptable.pers);
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();


        EditorGUILayout.EndHorizontal();
    }
    void CreateScriptable()
    {
        //ACA TE TIRA UN CARTEL DE UNITY QUE NO TE DEJA HACER NADA
        if (EditorUtility.DisplayDialog("Attention", "Is this information ok? " + "\n" + "\n" + selectedPers + "\n" + selectedMode + "\n" + selectedObj + "\n" + "LEVELS: " + howManyLevels, "Yes", "No"))
        {
            if (scriptable == null)
            {
                scriptable = CreateInstance <GameModeProperties>();                               //SI NO SE CREO ANTES, SE CREA AHORA EL SCRIPTABLEOBJ
            }
            scriptable.amountOfLevels = howManyLevels;

            if (!AssetDatabase.IsValidFolder("Assets/Resources/Data"))
            {
                AssetDatabase.CreateFolder("Assets/Resources", "Data");
                Debug.Log("The introduced folder doesn't exist, so I just created a default one for you.");
                AssetDatabase.Refresh();
            }
            var path = AssetDatabase.GenerateUniqueAssetPath("Assets/Resources/Data/Game Mode Properties/Level_Properties.asset"); //SE CREA UN PATH DONDE GUARDAR EL SCRIPTABLE



            gameModePage   = true;
            propertiesPage = false;                      //SE VUELVE A LA PAGINA DONDE SE ELIGE EL GAMEMODE
            AssetDatabase.CreateAsset(scriptable, path); //SE PONE EL SCRIPTABLE EN EL PATH


            for (int i = 0; i < howManyLevels; i++) //ACA SE CREAN LAS ESCENAS DEPENDIENDO LA PERSPECTIVA CON EL NOMBRE LEVEL0
            {
                if (scriptable.pers == Perspective.side)
                {
                    if (scriptable.gm == GameMode.endless)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestEndlessSide.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else if (scriptable.gm == GameMode.platform)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestPlatSide.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestSurSide.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                }
                if (scriptable.pers == Perspective.top)
                {
                    if (scriptable.gm == GameMode.endless)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestEndlessTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else if (scriptable.gm == GameMode.platform)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestPlatTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                }
                if (scriptable.pers == Perspective.third)
                {
                    if (scriptable.gm == GameMode.endless)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestEndlessTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else if (scriptable.gm == GameMode.platform)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestPlatTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                }
                if (scriptable.pers == Perspective.iso)
                {
                    if (scriptable.gm == GameMode.endless)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestEndlessTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else if (scriptable.gm == GameMode.platform)
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestPlatTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                    else
                    {
                        AssetDatabase.CopyAsset("Assets/Scenes/MatiTestTop.unity", "Assets/Resources/Prefabs/Level" + i + ".unity");
                    }
                }
            }
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();
            EditorSceneManager.OpenScene("Assets/Resources/Prefabs/Level0.unity"); //SE ABRE EL PRIMER NIVEL



            var manager = FindObjectOfType <GameManager>();// SETEO LOS VALORES DEL MANAGER DEL NUEVO NIVEL
            manager.scriptable = scriptable;
            if (scriptable.objPlatform == ObjectivePlatformer.CollectCoins)
            {
                manager.objPlatform.SetActive(false);
            }
            else if (scriptable.objPlatform == ObjectivePlatformer.GetToPointB)
            {
                manager.objPlatform.SetActive(false);
            }

            manager.myscenes     = new UnityEngine.SceneManagement.Scene[howManyLevels];
            manager.amountScenes = howManyLevels;
            for (int i = 0; i < howManyLevels; i++)  //ACA QUISE CONSEGUIR TODAS LAS ESCENAS CREADAS Y GUARDARLAS EN UNA VARIABLE EN EL MANAGER DEL NIVEL
            {
                manager.myscenes[i] = UnityEngine.SceneManagement.SceneManager.GetSceneByPath("Assets/Resources/Prefabs/Level" + i + ".unity");
            }
            PlayerGeneratorWindow.OpenWindow();

            scriptable = null; //EL SCRIPTABLE DE LA VENTANA SE HACE NULL, Y SE VA A CREAR UNA DE CERO
        }
    }
    void ChooseTypeOfGame()
    {
        //ME CANSE DE HACER COMENTARIOS

        EditorGUILayout.LabelField("Game Mode: ", subtitlestyle);
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.BeginVertical();
        GUI.DrawTexture(GUILayoutUtility.GetRect(100, 100, 100, 100), endlessExample);
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUI.BeginDisabledGroup(choseEndless);
        if (GUI.Button(GUILayoutUtility.GetRect(50, 50, 50, 50), "ENDLESS"))
        {
            choseEndless    = true;
            choseSurvival   = false;
            chosePlatformer = false;
            if (scriptable != null)
            {
                scriptable.gm = GameMode.endless;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }

            selectedMode = "ENDLESS";
            Repaint();
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginVertical();
        GUI.DrawTexture(GUILayoutUtility.GetRect(100, 100, 100, 100), platExample);
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUI.BeginDisabledGroup(chosePlatformer);
        if (GUI.Button(GUILayoutUtility.GetRect(50, 50, 50, 50), "PLATFORMER"))
        {
            choseEndless    = false;
            choseSurvival   = false;
            chosePlatformer = true;
            if (scriptable != null)
            {
                scriptable.gm = GameMode.platform;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            selectedMode = "PLATFORMER";
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        GUI.DrawTexture(GUILayoutUtility.GetRect(100, 100, 100, 100), survExample);
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUI.BeginDisabledGroup(choseSurvival);
        if (GUI.Button(GUILayoutUtility.GetRect(50, 50, 50, 50), "SURVIVAL"))
        {
            choseEndless    = false;
            choseSurvival   = true;
            chosePlatformer = false;
            if (scriptable != null)
            {
                scriptable.gm = GameMode.survival;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            selectedMode = "SURVIVAL";
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndVertical();

        EditorGUILayout.EndHorizontal();
    }
    void PropertiesGame()
    {
        EditorGUILayout.LabelField("Properties", titlestyle);

        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
        if (chosePlatformer) //SI ELIGIO PLATAFORMERO DIFERENTES OBJETIVOS PARA GANAR NIVEL
        {
            if (scriptable != null)
            {
                scriptable.gm = GameMode.platform;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            EditorGUILayout.LabelField("Choose Objective ", subtitlestyle);
            EditorGUILayout.Space();
            EditorGUILayout.Space();

            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);

            endLevelEnd = EditorGUILayout.Toggle("Collect Coins", endLevelEnd);               //GANAR COLECTANDO MONEDAS
            endLevelEnd = EditorGUILayout.Toggle("Get fom A point to B point", !endLevelEnd); //GANAR LLEGANDO AL OTRO PUNTO

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);

            EditorGUILayout.LabelField("How many Levels?", subtitlestyle);

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
            howManyLevels = EditorGUILayout.IntField("Levels: ", howManyLevels);

            if (endLevelEnd) //GANAR LLEGANDO AL OTRO PUNTO
            {
                selectedObj            = "Win by Finishing Level";
                scriptable.objPlatform = ObjectivePlatformer.GetToPointB;
            }
            if (!endLevelEnd)//GANAR COLECTANDO MONEDAS
            {
                selectedObj            = "Collect Coins";
                scriptable.objPlatform = ObjectivePlatformer.CollectCoins;
            }
        }

        if (choseSurvival)         //SI ELIGIO SURVIVAL DIFERENTES OBJETIVOS PARA GANAR NIVEL
        {
            if (scriptable != null)
            {
                scriptable.gm = GameMode.survival;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            EditorGUILayout.LabelField("Choose Objective ", subtitlestyle);
            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
            survTime = EditorGUILayout.Toggle("Kill Everyone", survTime);             //GANA MATANDO A CIERTA CANTIDAD DE ENMIES
            survTime = EditorGUILayout.Toggle("Survive at a giving Time", !survTime); // GANA SOBREVIVIENDO UN TIEMPO

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
            EditorGUILayout.LabelField("How many Levels?", subtitlestyle);

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
            howManyLevels = EditorGUILayout.IntField("Levels: ", howManyLevels);

            if (survTime) // GANA SOBREVIVIENDO UN TIEMPO
            {
                selectedObj            = "Win surviving at a giving time";
                scriptable.objPlatform = ObjectivePlatformer.BYTIME;
            }
            if (!survTime)//GANA MATANDO A CIERTA CANTIDAD DE ENMIES
            {
                selectedObj            = "Win Killing everyone";
                scriptable.objPlatform = ObjectivePlatformer.BYKILLING;
            }
        }

        if (choseEndless)
        {
            if (scriptable != null)
            {
                scriptable.gm = GameMode.endless;
            }
            else
            {
                scriptable = CreateInstance <GameModeProperties>();
            }
            EditorGUILayout.LabelField("Choose Objective ", subtitlestyle);
            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
            killEveryOnePlat = EditorGUILayout.Toggle("Based on Time", killEveryOnePlat);    // GANA SOBREVIVIENDO UN TIEMPO
            killEveryOnePlat = EditorGUILayout.Toggle("Based on Points", !killEveryOnePlat); //GANA CONSIGUIENDO PUNTOS

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
            EditorGUILayout.LabelField("How many Levels?", subtitlestyle);

            EditorGUILayout.Space();
            EditorGUILayout.Space();
            EditorGUILayout.LabelField("----------------------------------------------------------", titlestyle);
            howManyLevels = EditorGUILayout.IntField("Levels: ", howManyLevels);

            if (!killEveryOnePlat)
            {
                selectedObj            = "Based on Time";// GANA SOBREVIVIENDO UN TIEMPO
                scriptable.objPlatform = ObjectivePlatformer.BYTIME;
            }
            if (killEveryOnePlat)
            {
                selectedObj            = "Based on Points";// GANA CONSIGUIENDO PUNTOS
                scriptable.objPlatform = ObjectivePlatformer.BYPOINTS;
            }
        }

        //LO SELECCIONADO SE GUARDA EN UN ENUM QUE ES "GAMEMODE" y "PERSPECTIVE"
    }