예제 #1
0
    /// <summary>
    /// Draws one element of the list (ListItemExample)
    /// </summary>
    /// <param name="rect"></param>
    /// <param name="index"></param>
    /// <param name="active"></param>
    /// <param name="focused"></param>
    private void DrawElement(Rect rect, int index, bool active, bool focused)
    {
        PokemonSalvaje pokemon = zona.pokemons[index];

        EditorGUI.BeginChangeCheck();
        List <string> ataquesTexto = new List <string>();
        Pokemon       p            = (Pokemon)Resources.Load(vinculador.ObtenerNombreFicheroPokemon(pokemon.id));

        pokemon.id = (PokemonID)EditorGUI.EnumPopup(new Rect(rect.x, rect.y, rect.width, 18), new GUIContent("Pokemon ID"), pokemon.id);
        if (p != null)
        {
            List <AtaqueID> ataques = p.listaDeAtaques.Where(x => x.nivelAprender <= zona.nivelMaximoPokemonSalvaje).Select(y => y.ataque).ToList();

            if (ataques.Count > 0)
            {
                if (!ataquesTexto.Contains(AtaqueID.NINGUNO.ToString()))
                {
                    ataquesTexto.Add(AtaqueID.NINGUNO.ToString());
                }
                for (int i = 0; i < ataques.Count; i++)
                {
                    if (!ataquesTexto.Contains(ataques[i].ToString()))
                    {
                        ataquesTexto.Add(ataques[i].ToString());
                    }
                }
            }
            else
            {
                EditorGUI.HelpBox(new Rect(rect.x, rect.y + 18, rect.width, 18 * 3), "El pokémon no tiene ningún ataque definido para el nivel máximo de la zona", MessageType.Error);
                return;
            }
        }
        else
        {
            EditorGUI.HelpBox(new Rect(rect.x, rect.y + 18, rect.width, 18 * 3), "No se ha encontrado el pokémon en la carpeta de Resources", MessageType.Error);
            return;
        }



        //for (int i = 0; i < p.ataquesAprendidosPorMToMO.Count; i++)
        //{
        //    if (!ataquesTexto.Contains(p.ataquesAprendidosPorMToMO[i].ToString()))
        //    {
        //        ataquesTexto.Add(p.ataquesAprendidosPorMToMO[i].ToString());
        //    }
        //}

        pokemon.posibilidadAparicion = EditorGUI.IntSlider(new Rect(rect.x, rect.y + (18), rect.width, 18), new GUIContent("% de aparición"), pokemon.posibilidadAparicion, 1, 100);
        pokemon.ataque1 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 2), rect.width, 18), "Ataque 1", ataquesTexto.IndexOf(pokemon.ataque1.ToString()), ataquesTexto.ToArray())]);
        if (pokemon.ataque1 != AtaqueID.NINGUNO && ataquesTexto.Count > 2)
        {
            pokemon.ataque2 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 3), rect.width, 18), "Ataque 2", ataquesTexto.IndexOf(pokemon.ataque2.ToString()), ataquesTexto.ToArray())]);
            if (pokemon.ataque2 != AtaqueID.NINGUNO && pokemon.ataque2 != pokemon.ataque1 && ataquesTexto.Count > 3)
            {
                pokemon.ataque3 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 4), rect.width, 18), "Ataque 3", ataquesTexto.IndexOf(pokemon.ataque3.ToString()), ataquesTexto.ToArray())]);
                if (pokemon.ataque3 != AtaqueID.NINGUNO && pokemon.ataque3 != pokemon.ataque1 && pokemon.ataque3 != pokemon.ataque2 && ataquesTexto.Count > 4)
                {
                    pokemon.ataque4 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 5), rect.width, 18), "Ataque 4", ataquesTexto.IndexOf(pokemon.ataque4.ToString()), ataquesTexto.ToArray())]);

                    if (pokemon.ataque4 == pokemon.ataque1 || pokemon.ataque4 == pokemon.ataque2 || pokemon.ataque4 == pokemon.ataque3)
                    {
                        EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 6), rect.width, (18)), "El ataque 4 está repetido", MessageType.Error);
                    }
                }
                else if (pokemon.ataque3 == pokemon.ataque1 || pokemon.ataque3 == pokemon.ataque2)
                {
                    pokemon.ataque4 = AtaqueID.NINGUNO;
                    EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 6), rect.width, (18)), "El ataque 3 está repetido", MessageType.Error);
                }
            }
            else if (pokemon.ataque2 != pokemon.ataque1)
            {
                pokemon.ataque3 = AtaqueID.NINGUNO;
                pokemon.ataque4 = AtaqueID.NINGUNO;
                EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 6), rect.width, (18)), "El ataque 2 está repetido", MessageType.Error);
            }
        }
        else
        {
            pokemon.ataque2 = AtaqueID.NINGUNO;
            pokemon.ataque3 = AtaqueID.NINGUNO;
            pokemon.ataque4 = AtaqueID.NINGUNO;
        }



        //item.logroConseguido = (Logro)EditorGUI.EnumPopup(new Rect(rect.x, rect.y, rect.width, 18), new GUIContent("Logro Requerido", "Si ha cumplido este logro mostrará este diálogo"), item.logroConseguido);
        //EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 2), rect.width, (18)), "Mensaje NPC. Si es un combate lo dirá antes de combatir", MessageType.Info);
        //item.texto = EditorGUI.TextArea(new Rect(rect.x, rect.y + (18 * 3), rect.width, (18 * 4)), item.texto);
        //item.tipoConversacion = (TipoConversacion)EditorGUI.EnumPopup(new Rect(rect.x, rect.y + 18, rect.width, 18), new GUIContent("Tipo Conversación"), item.tipoConversacion);
        //item.darLogroPorTerminarConversacion = (Logro)EditorGUI.EnumPopup(new Rect(rect.x, rect.y + (18 * 7), rect.width, 18), new GUIContent("Logro al terminar conversacion/combate", "Al terminar la conversación el jugador recibirá este logro"), item.darLogroPorTerminarConversacion);
        //if (item.darLogroPorTerminarConversacion != Logro.NINGUNO)
        //{
        //    item.darItemPorTerminarConversacion = (ItemID)EditorGUI.EnumPopup(new Rect(rect.x, rect.y + (18 * 8), rect.width, 18), new GUIContent("Item al terminar conversación/combate", "Al terminar la conversación recibirá este objeto"), item.darItemPorTerminarConversacion);
        //    if (item.darItemPorTerminarConversacion != ItemID.NINGUNO)
        //        item.cantidadDeItems = EditorGUI.IntField(new Rect(rect.x, rect.y + (18 * 9), rect.width, 18), "Cantidad del item anterior", item.cantidadDeItems);
        //}


        //if (item.tipoConversacion == TipoConversacion.Luchar && item.darLogroPorTerminarConversacion != Logro.NINGUNO)
        //{
        //    EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 10), rect.width, (18)), "Mensaje tras ganar el combate", MessageType.Info);
        //    item.texto2 = EditorGUI.TextArea(new Rect(rect.x, rect.y + (18 * 11), rect.width, (18 * 4)), item.texto2);
        //    item.dineroRecompensa = EditorGUI.IntField(new Rect(rect.x, rect.y + (18 * 15), rect.width, 18), "Dinero Recompensa", item.dineroRecompensa);
        //    item.equipoPokemon = (EquipoPokemon)EditorGUI.ObjectField(new Rect(rect.x, rect.y + (18 * 16), rect.width, 18), item.equipoPokemon, typeof(EquipoPokemon), true);

        //}
        //else if (item.tipoConversacion == TipoConversacion.Luchar)
        //{

        //    EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 10), rect.width, (18 * 3)), "Un NPC que lucha siempre debe dar un logro al terminar, si no se podrá luchar con él repetidas veces", MessageType.Error);
        //}

        if (EditorGUI.EndChangeCheck())
        {
            EditorUtility.SetDirty(target);
        }


        //item.logroConseguido = (Logro)EditorGUI.EnumPopup(new Rect(rect.x, rect.y, ((rect.width / 3) * 1), new GUIContent("Logro cumplido", "Si ha cumplido este logro mostrará este diálogo"), rect.height), item.logroConseguido);
        //item.texto = EditorGUI.TextArea(new Rect(rect.x + ((rect.width / 3) * 1), rect.y, ((rect.width / 3) * 2), rect.height), item.texto);
        // If you are using a custom PropertyDrawer, this is probably better
        // EditorGUI.PropertyField(rect, serializedObject.FindProperty("list").GetArrayElementAtIndex(index));
        // Although it is probably smart to cach the list as a private variable ;)
    }
예제 #2
0
    /// <summary>
    /// Draws one element of the list (ListItemExample)
    /// </summary>
    /// <param name="rect"></param>
    /// <param name="index"></param>
    /// <param name="active"></param>
    /// <param name="focused"></param>
    private void DrawElement(Rect rect, int index, bool active, bool focused)
    {
        PokemonEntrenador pokemon = entrenador.pokemons[index];

        EditorGUI.BeginChangeCheck();
        List <string> ataquesTexto = new List <string>();
        Pokemon       p            = (Pokemon)Resources.Load(vinculador.ObtenerNombreFicheroPokemon(pokemon.id));

        pokemon.id    = (PokemonID)EditorGUI.EnumPopup(new Rect(rect.x, rect.y, rect.width, 18), new GUIContent("Pokemon ID"), pokemon.id);
        pokemon.nivel = EditorGUI.IntSlider(new Rect(rect.x, rect.y + (18), rect.width, 18), new GUIContent("Nivel"), pokemon.nivel, Ajustes.nivelMinimo, Ajustes.nivelMaximo);
        if (p != null)
        {
            List <AtaqueID> ataques = p.listaDeAtaques.Where(x => x.nivelAprender <= pokemon.nivel).Select(y => y.ataque).ToList();

            if (ataques.Count > 0)
            {
                if (!ataquesTexto.Contains(AtaqueID.NINGUNO.ToString()))
                {
                    ataquesTexto.Add(AtaqueID.NINGUNO.ToString());
                }
                for (int i = 0; i < ataques.Count; i++)
                {
                    if (!ataquesTexto.Contains(ataques[i].ToString()))
                    {
                        ataquesTexto.Add(ataques[i].ToString());
                    }
                }
            }
            else
            {
                EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 2), rect.width, 18 * 3), "El pokémon no tiene ningún ataque definido para el nivel", MessageType.Error);
                return;
            }
        }
        else
        {
            EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 2), rect.width, 18 * 3), "No se ha encontrado el pokémon en la carpeta de Resources", MessageType.Error);
            return;
        }


        pokemon.calidad = EditorGUI.IntSlider(new Rect(rect.x, rect.y + (18 * 2), rect.width, 18), new GUIContent("Calidad"), pokemon.calidad, Ajustes.calidadMinimaPokemon, Ajustes.calidadMaximaPokemon);
        pokemon.ataque1 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 3), rect.width, 18), "Ataque 1", ataquesTexto.IndexOf(pokemon.ataque1.ToString()), ataquesTexto.ToArray())]);
        if (pokemon.ataque1 != AtaqueID.NINGUNO && ataquesTexto.Count > 2)
        {
            pokemon.ataque2 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 4), rect.width, 18), "Ataque 2", ataquesTexto.IndexOf(pokemon.ataque2.ToString()), ataquesTexto.ToArray())]);
            if (pokemon.ataque2 != AtaqueID.NINGUNO && pokemon.ataque2 != pokemon.ataque1 && ataquesTexto.Count > 3)
            {
                pokemon.ataque3 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 5), rect.width, 18), "Ataque 3", ataquesTexto.IndexOf(pokemon.ataque3.ToString()), ataquesTexto.ToArray())]);
                if (pokemon.ataque3 != AtaqueID.NINGUNO && pokemon.ataque3 != pokemon.ataque1 && pokemon.ataque3 != pokemon.ataque2 && ataquesTexto.Count > 4)
                {
                    pokemon.ataque4 = Herramientas.ParseEnum <AtaqueID>(ataquesTexto[EditorGUI.Popup(new Rect(rect.x, rect.y + (18 * 6), rect.width, 18), "Ataque 4", ataquesTexto.IndexOf(pokemon.ataque4.ToString()), ataquesTexto.ToArray())]);

                    if (pokemon.ataque4 == pokemon.ataque1 || pokemon.ataque4 == pokemon.ataque2 || pokemon.ataque4 == pokemon.ataque3)
                    {
                        EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 6), rect.width, (18)), "El ataque 4 está repetido", MessageType.Error);
                    }
                }
                else if (pokemon.ataque3 == pokemon.ataque1 || pokemon.ataque3 == pokemon.ataque2)
                {
                    pokemon.ataque4 = AtaqueID.NINGUNO;
                    EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 6), rect.width, (18)), "El ataque 3 está repetido", MessageType.Error);
                }
            }
            else if (pokemon.ataque2 != pokemon.ataque1)
            {
                pokemon.ataque3 = AtaqueID.NINGUNO;
                pokemon.ataque4 = AtaqueID.NINGUNO;
                EditorGUI.HelpBox(new Rect(rect.x, rect.y + (18 * 6), rect.width, (18)), "El ataque 2 está repetido", MessageType.Error);
            }
        }
        else
        {
            pokemon.ataque2 = AtaqueID.NINGUNO;
            pokemon.ataque3 = AtaqueID.NINGUNO;
            pokemon.ataque4 = AtaqueID.NINGUNO;
        }


        if (EditorGUI.EndChangeCheck())
        {
            EditorUtility.SetDirty(target);
        }
    }
    public override void OnInspectorGUI()
    {
        GUI.color = Color.cyan;
        if (GUILayout.Button("Actualizar Pokedex", GUILayout.MinHeight(50)))
        {
            if (scriptPrincipal == null)
            {
                scriptPrincipal = (UIAsignadorAutomaticoPokemonPokedex)target;
            }
            if (vinculador == null)
            {
                vinculador = (VinculadorResources)Resources.Load("VinculadorResources");
            }
            if (pokemonPokedexAniadidos == null)
            {
                pokemonPokedexAniadidos = new List <UIPokemonPokedex>();
            }
            if (posicionesPokemon == null)
            {
                posicionesPokemon = new Dictionary <int, Pokemon>();
            }

            pokemonPokedexAniadidos.Clear();
            posicionesPokemon.Clear();

            if (scriptPrincipal.contenedorPokedex.transform.childCount > 1)
            {
                //El borrado desde custom inspector no funciona correctamente, añadiendo un segundo bucle se fuerza a eliminar todos de una vez
                while (scriptPrincipal.contenedorPokedex.transform.childCount > 1)
                {
                    for (int i = 0; i < scriptPrincipal.contenedorPokedex.transform.childCount; i++)
                    {
                        if (scriptPrincipal.plantilla.gameObject.GetInstanceID() != scriptPrincipal.contenedorPokedex.transform.GetChild(i).gameObject.GetInstanceID())
                        {
                            DestroyImmediate(scriptPrincipal.contenedorPokedex.transform.GetChild(i).gameObject);
                        }
                    }
                }
                pokemonPokedexAniadidos.Add(scriptPrincipal.plantilla);
            }

            for (int i = 0; i < vinculador.listaPokemon.Count; i++)
            {
                Pokemon p = (Pokemon)Resources.Load(vinculador.ObtenerNombreFicheroPokemon(vinculador.listaPokemon[i].ID));
                if (p != null)
                {
                    if (posicionesPokemon.ContainsKey(p.numeroEnPokedex))
                    {
                        Debug.LogWarning(string.Concat("El pokémon ", p.nombre, " tiene un número de pokédex ya asignado al pokémon ", posicionesPokemon[p.numeroEnPokedex].nombre));
                    }
                    else
                    {
                        posicionesPokemon.Add(p.numeroEnPokedex, p);
                    }
                }
            }

            if (posicionesPokemon.Count > 0)
            {
                foreach (var item in posicionesPokemon.OrderBy(i => i.Key))
                {
                    UIPokemonPokedex go = Instantiate(scriptPrincipal.plantilla.gameObject).GetComponent <UIPokemonPokedex>();
                    go.transform.SetParent(scriptPrincipal.contenedorPokedex.transform);
                    go.gameObject.transform.SetSiblingIndex(item.Key);
                    go.numero.text = item.Key.ToString("D3");
                    go.nombre.text = item.Value.nombre;
                    go.pokemon     = item.Value.ID;
                    go.GetComponent <RectTransform>().localScale = Vector3.one;
                    go.gameObject.name = string.Concat(go.numero.text, " ", item.Value.nombre);
                    go.gameObject.SetActive(true);
                    pokemonPokedexAniadidos.Add(go);
                }
            }


            //Calculamos la altura actual eliminando el elemento plantilla de la lista de pokémons
            float               alturaPanel = (pokemonPokedexAniadidos.Count - 1) * scriptPrincipal.plantilla.GetComponent <RectTransform>().rect.height;
            RectTransform       rt          = scriptPrincipal.contenedorPokedex.GetComponent <RectTransform>();
            VerticalLayoutGroup vl          = scriptPrincipal.contenedorPokedex.GetComponent <VerticalLayoutGroup>();
            //Calculamos el margin y el padding eliminando 2 elementos para el spacing (la plantilla y uno extra)
            alturaPanel += vl.padding.top + vl.padding.bottom + ((pokemonPokedexAniadidos.Count - 2) * vl.spacing);
            rt.sizeDelta = new Vector2(rt.sizeDelta.x, alturaPanel);
        }
        GUI.color = Color.white;
        base.OnInspectorGUI();
    }