public void custom_algorithm(Personalizacion personalizacion, List <Producto> products, Usuario user, string tiendaID) { Assembly ddl = Assembly.Load(personalizacion.algoritmo); var t = ddl.GetType("Chebay.AlgorithmDLL.ChebayAlgorithm"); dynamic c = Activator.CreateInstance(t); DataRecomendacion dr = new DataRecomendacion { UsuarioID = user.UsuarioID }; Thread timeThread = new Thread(() => { try { dr.productos = (List <DataProducto>)c.getProducts(products, user); IDALUsuario udal = new DALUsuarioEF(); udal.AgregarRecomendacionesUsuario(tiendaID, dr); } catch (Exception e) { //si falla entonces default default_recomendation_algorithm(products, user, tiendaID); } }); timeThread.Start(); bool finished = timeThread.Join(5000); if (!finished) { Debug.WriteLine("ALGORITMO PERSONALIZADO SUSPENDIDO... EXCESO TIEMPO"); timeThread.Abort(); default_recomendation_algorithm(products, user, tiendaID); } }
//--PERSONALIZACIÓN DE LA TIENDA-- public void PersonalizarTienda(Personalizacion pr, string idTienda) { try { chequearTienda(idTienda); using (var context = ChebayDBPublic.CreatePublic()) { var qPers = from per in context.personalizaciones where per.PersonalizacionID == idTienda select per; if (qPers.Count() == 0) //Si no existe personalización. { context.personalizaciones.Add(pr); context.SaveChanges(); } else //Si existe y hay que actualizarla. { Personalizacion p = qPers.FirstOrDefault(); p.datos = pr.datos; p.template = pr.template; p.backgroud_image = pr.backgroud_image; p.css = pr.css; context.SaveChanges(); } } } catch (Exception e) { Debug.WriteLine(e.Message); throw e; } }
public void cargarPersonalizacion(string url) { try { //Personalizacion IDALTienda it = new DALTiendaEF(); String fileName = "_ViewStart.cshtml"; var filePath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Views"), fileName); Personalizacion p = it.ObtenerPersonalizacionTienda(url); String layout = "@{Layout = \"~/Views/Shared/_Layout.cshtml\";}"; if (p.template != null && p.template == 1) { layout = "@{Layout = \"~/Views/Shared/_Layout.cshtml\";}"; String cssFileName = "orangeStyle.css"; var cssFilePath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Content/personalizacion/EstiloUno"), cssFileName); if (p.css != null) { //Escribir css System.IO.File.WriteAllText(cssFilePath, p.css); } else { var orangePath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Content/personalizacion/EstiloUno"), "orangeStyle_backup.css"); String orangeStyle = System.IO.File.ReadAllText(orangePath); System.IO.File.WriteAllText(cssFilePath, orangeStyle); } } else if (p.template != null && p.template == 2) { layout = "@{Layout = \"~/Views/Shared/_Layout2.cshtml\";}"; String cssFile = "fixes.css"; String cssFileBackup = "fixes_backup.css"; var cssPathBackup = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Content/personalizacion/EstiloDos"), cssFileBackup); //Original css String cssText = System.IO.File.ReadAllText(cssPathBackup); var imgUrl = ""; if (p.backgroud_image != null) { imgUrl = Request.Url.Scheme + "://" + Request.Url.Authority + "/" + url + "/Product/getTiendaImg"; } else { //Por default imgUrl = "images/bg01.png"; } cssText = cssText.Replace("body {}", "body {background-image: url(" + imgUrl + ")}"); //Escribimos el css editado var cssPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Content/personalizacion/EstiloDos"), cssFile); System.IO.File.WriteAllText(cssPath, cssText); } Session["Tienda_Desc"] = p.tienda.descripcion; //Escribimos el layout a usar que carga todos los css para esa pers. System.IO.File.WriteAllText(filePath, layout); } catch (Exception ex) { } }
public ActionResult SubirAlgoritmoRecomendacion() { try { string idAdmin = User.Identity.GetUserName(); List <AtributoSesion> atributos = idalTienda.ObtenerAtributosSesion(idAdmin); AtributoSesion tienda = null; foreach (AtributoSesion a in atributos) { if (a.AtributoSesionID.Equals("tienda")) { tienda = a; break; } } foreach (string file in Request.Files) { var fileContent = Request.Files[file]; if (fileContent != null && fileContent.ContentLength > 0) { // get a stream var stream = fileContent.InputStream; // and optionally write the file to disk Debug.WriteLine("El nombre del archivo subido es : " + fileContent.FileName); Personalizacion p = idalTienda.ObtenerPersonalizacionTienda(tienda.Datos); byte[] buf; buf = new byte[stream.Length]; //declare arraysize stream.Read(buf, 0, buf.Length); p.algoritmo = buf; idalTienda.ActualizarAlgoritmoPersonalizacion(p); //var fileName = Path.GetFileName(file); //var path = Path.Combine(Server.MapPath("~/App_Data/Images"), fileName); //using (var fileStream = File.Create(path)) //{ // stream.CopyTo(fileStream); //} } } } catch (Exception) { return(Json(new { Success = false }, JsonRequestBehavior.AllowGet)); } return(Json(new { Success = true }, JsonRequestBehavior.AllowGet)); }
//--TIENDAS-- public void AgregarTienda(Tienda tienda, string idAdmin) { try { if (tienda == null) { throw new Exception("Debe pasar una tienda."); } using (var context = ChebayDBPublic.CreatePublic()) { var qAdmin = from ad in context.administradores where ad.AdministradorID == idAdmin select ad; if (tienda.administradores == null) { tienda.administradores = new HashSet <Administrador>(); } tienda.administradores.Add(qAdmin.FirstOrDefault()); Personalizacion p = new Personalizacion { PersonalizacionID = tienda.TiendaID, template = 1, algoritmo = null }; context.personalizaciones.Add(p); context.tiendas.Add(tienda); context.SaveChanges(); Debug.WriteLine("Creando schema..."); ChebayDBContext.ProvisionTenant(tienda.TiendaID); Debug.WriteLine("Tienda " + tienda.TiendaID + " creada con éxito."); //Crea la Categoria Raiz. var schema = ChebayDBContext.CreateTenant(tienda.TiendaID); CategoriaCompuesta raiz = new CategoriaCompuesta(); raiz.Nombre = "/"; raiz.hijas = new List <Categoria>(); schema.categorias.Add(raiz); schema.SaveChanges(); Debug.WriteLine("Categoría raíz de " + tienda.TiendaID + " creada con éxito."); } } catch (Exception e) { Debug.WriteLine(e.Message); throw e; //Dropear las tablas creadas. } }
//Cambia el atributo "comprado" del item correspondiente en la lista y lo guarda en el archivo JSON public void AdquirirItemPersonalizable(GameObject prefab) { CargaDeFichero(); Button botonComprar = prefab.transform.Find("btnComprar").GetComponent <Button>(); Button botonAplicar = prefab.transform.Find("btnAplicar").GetComponent <Button>(); GameObject fondoPrecio = prefab.transform.Find("FondoPrecio").gameObject; int precio = int.Parse(fondoPrecio.transform.Find("InputPrecio").GetComponent <TMP_Text>().text); GameObject fondoItem = prefab.transform.Find("FondoItem").gameObject; Image imagenArticulo = fondoItem.transform.Find("Item").GetComponent <Image>(); TMP_Text aplicar = prefab.transform.Find("Aplicar").GetComponent <TMP_Text>(); Personalizacion articuloPersonalizable = new Personalizacion(); articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.imagen == imagenArticulo.sprite.name); //Se comprueba que existe para que no haya NullReferenceException if (articuloPersonalizable != null && !articuloPersonalizable.Equals(null)) { articuloPersonalizable.comprado = true; botonComprar.interactable = false; botonComprar.gameObject.SetActive(false); fondoPrecio.gameObject.SetActive(false); botonAplicar.interactable = true; botonAplicar.gameObject.SetActive(true); aplicar.gameObject.SetActive(true); aplicar.text = "Aplicar"; aplicar.color = Color.white; GameObject managerCanvas = gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.Find("MANAGER CANVAS").gameObject; subir = managerCanvas.GetComponent <SubirNivelyMonedas>(); subir.subirMonedas(-precio); gestionTienda = managerCanvas.GetComponent <GestionTienda>(); //gestionTienda.comprobarDisponibilidadPersonalizacion(prefab.transform.parent.gameObject); EscribirEnFichero(); } }
public void ActualizarAlgoritmoPersonalizacion(Personalizacion pers) { try { chequearTienda(pers.PersonalizacionID); using (var context = ChebayDBPublic.CreatePublic()) { Personalizacion p = context.personalizaciones.Find(pers.PersonalizacionID); p.algoritmo = pers.algoritmo; context.SaveChanges(); } } catch (Exception e) { Debug.WriteLine(e.Message); throw e; } }
// To convert the Byte Array to the author Image public FileContentResult getTiendaImg() { String tienda = Session["Tienda_Nombre"].ToString(); Personalizacion p = cT.ObtenerPersonalizacionTienda(tienda); if (p != null && p.template == 2 && p.backgroud_image != null) { byte[] byteArray = p.backgroud_image; return(byteArray != null ? new FileContentResult(byteArray, "image/jpeg") : null); } else { var dir = Server.MapPath("~/Content/personalizacion/EstiloDos/images"); var path = Path.Combine(dir, "bg01.png"); return(new FileContentResult(System.IO.File.ReadAllBytes(path), "image/jpeg")); } }
public void EliminarPersonalizacion(string idTienda) { try { chequearTienda(idTienda); using (var context = ChebayDBPublic.CreatePublic()) { var qTienda = from tnd in context.personalizaciones where tnd.PersonalizacionID == idTienda select tnd; Personalizacion t = qTienda.FirstOrDefault(); context.personalizaciones.Remove(t); context.SaveChanges(); } } catch (Exception e) { Debug.WriteLine(e.Message); throw e; } }
public void Run(string tiendaID) { IDALUsuario udal = new DALUsuarioEF(); IDALTienda tdal = new DALTiendaEF(); IDALSubasta sdat = new DALSubastaEF(); Tienda tienda = tdal.ObtenerTienda(tiendaID); List <Producto> productos = sdat.ObtenerTodosProductos(tienda.TiendaID); //obtengo algoritmo Personalizacion pers = tdal.ObtenerPersonalizacionTienda(tienda.TiendaID); List <Usuario> usuarios = udal.ObtenerTodosUsuariosFull(tienda.TiendaID); bool defaultalgorithm = false; if (pers.algoritmo == null || pers.algoritmo.Length == 0) { defaultalgorithm = true; } //creo indice Task index = udal.InicializarColeccionRecomendaciones(tienda.TiendaID); index.Wait(); foreach (var user in usuarios) { if (defaultalgorithm) { Algorithms def = new Algorithms(); def.default_recomendation_algorithm(productos, user, tienda.TiendaID); } else { Algorithms a = new Algorithms(); a.custom_algorithm(pers, productos, user, tienda.TiendaID); } }//IF tienda es de instancia... }
//Mete todos los items personalizables posibles en un fichero JSON para operar con ellos public void LlenarFicheroItems(GameObject contenedor) { foreach (Transform child in contenedor.transform) { //Controlamos que en el contenedorComplementos no se comprueben las cabeceras con texto //Con "continue" pasamos a la siguiente iteracion if (child.name == "Sombreros" || child.name == "Pajaritas" || child.name == "Calcetines") { continue; } CargaDeFichero(); Button botonComprar = child.transform.Find("btnComprar").GetComponent <Button>(); Button botonAplicar = child.transform.Find("btnAplicar").GetComponent <Button>(); int comprado = int.Parse(child.transform.Find("COMPRADO").GetComponent <TMP_Text>().text); int aplicado = int.Parse(child.transform.Find("APLICADO").GetComponent <TMP_Text>().text); int tipo = int.Parse(child.transform.Find("TIPO").GetComponent <TMP_Text>().text); GameObject fondoNombre = child.transform.Find("FondoNombre").gameObject; string inputNombre = fondoNombre.transform.Find("InputNombre").GetComponent <TMP_Text>().text; GameObject fondoPropiedad = child.transform.Find("FondoPropiedad").gameObject; string inputPropiedad = fondoPropiedad.transform.Find("InputPropiedad").GetComponent <TMP_Text>().text; GameObject fondoPrecio = child.transform.Find("FondoPrecio").gameObject; int inputPrecio = int.Parse(fondoPrecio.transform.Find("InputPrecio").gameObject.GetComponent <TMP_Text>().text); GameObject fondoItem = child.transform.Find("FondoItem").gameObject; Image imagenArticulo = fondoItem.transform.Find("Item").GetComponent <Image>(); Personalizacion articuloPersonalizable = new Personalizacion(); //Marca si el fichero está recien creado, es decir, si la aplicación no se ha iniciado anteriormente //Se añaden todos los objetos personalizados al fichero JSON switch (tipo) { case 1: articuloPersonalizable.tipo = 1; break; case 2: articuloPersonalizable.tipo = 2; break; case 3: articuloPersonalizable.tipo = 3; break; case 4: articuloPersonalizable.tipo = 4; break; } articuloPersonalizable.nombre = inputNombre; articuloPersonalizable.descripcion = inputPropiedad; articuloPersonalizable.precio = inputPrecio; articuloPersonalizable.imagen = imagenArticulo.sprite.name; if (comprado == 0) { articuloPersonalizable.comprado = false; } else { articuloPersonalizable.comprado = true; if (aplicado == 0) { articuloPersonalizable.aplicado = false; } else { articuloPersonalizable.aplicado = true; } } listaPersonalizacion.listaPersonalizacion.Add(articuloPersonalizable); listaPersonalizacion.listaPersonalizacion.Remove(listaPersonalizacion.listaPersonalizacion .Find(x => x.nombre == "Predeterminado" && x.aplicado == false)); EscribirEnFichero(); } }
//Actualiza los datos en base a la información contenida en el fichero JSON public void ExtraerDatosFicheroPersonalizacion(GameObject contenedor) { CrearFichero(); CargaDeFichero(); //Debug.Log("Items en contenedor " + contenedor.transform.childCount); //Debug.Log("Items en el fichero " + listaPersonalizacion.listaPersonalizacion.Count()); foreach (Transform child in contenedor.transform) { if (child.name == "Sombreros" || child.name == "Pajaritas" || child.name == "Calcetines") { continue; } Button botonComprar = child.transform.Find("btnComprar").GetComponent <Button>(); Button botonAplicar = child.transform.Find("btnAplicar").GetComponent <Button>(); Button botonDesaplicar = child.transform.Find("btnDesaplicar").GetComponent <Button>(); TMP_Text aplicar = child.transform.Find("Aplicar").GetComponent <TMP_Text>(); TMP_Text comprado = child.transform.Find("COMPRADO").GetComponent <TMP_Text>(); TMP_Text aplicado = child.transform.Find("APLICADO").GetComponent <TMP_Text>(); int tipo = int.Parse(child.transform.Find("TIPO").GetComponent <TMP_Text>().text); GameObject fondoNombre = child.transform.Find("FondoNombre").gameObject; string inputNombre = fondoNombre.transform.Find("InputNombre").GetComponent <TMP_Text>().text; GameObject fondoPropiedad = child.transform.Find("FondoPropiedad").gameObject; string inputPropiedad = fondoPropiedad.transform.Find("InputPropiedad").GetComponent <TMP_Text>().text; GameObject fondoPrecio = child.transform.Find("FondoPrecio").gameObject; int inputPrecio = int.Parse(fondoPrecio.transform.Find("InputPrecio").gameObject.GetComponent <TMP_Text>().text); GameObject fondoItem = child.transform.Find("FondoItem").gameObject; Image imagenArticulo = fondoItem.transform.Find("Item").GetComponent <Image>(); Personalizacion articuloPersonalizable = new Personalizacion(); //Si el item está comprado se habilitan los botones y textos correspondientes articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.imagen == imagenArticulo.sprite.name); //Se comprueba que existe para que no haya NullReferenceException if (articuloPersonalizable != null && !articuloPersonalizable.Equals(null)) { if (articuloPersonalizable.comprado) { comprado.text = 1.ToString(); botonComprar.gameObject.SetActive(false); botonAplicar.gameObject.SetActive(true); botonAplicar.interactable = true; fondoPrecio.gameObject.SetActive(false); aplicar.gameObject.SetActive(true); //Si el item en concreto está aplicado actualmente if (articuloPersonalizable.aplicado) { aplicado.text = 1.ToString(); botonComprar.gameObject.SetActive(false); botonAplicar.interactable = false; fondoPrecio.gameObject.SetActive(false); aplicar.color = Color.white; aplicar.text = "Aplicado"; if (contenedor.name == "ContenedorComplementos") { botonAplicar.gameObject.SetActive(false); botonDesaplicar.gameObject.SetActive(true); aplicar.text = "Quitar"; } } else { aplicado.text = 0.ToString(); botonComprar.gameObject.SetActive(false); botonAplicar.gameObject.SetActive(true); botonAplicar.interactable = true; fondoPrecio.gameObject.SetActive(false); aplicar.text = "Aplicar"; aplicar.color = Color.white; } } } } }
//Aplica el efecto de usar cada item public void AplicarItemPersonalizable(GameObject prefab) { CargaDeFichero(); Button botonAplicar = prefab.transform.Find("btnAplicar").GetComponent <Button>(); TMP_Text aplicar = prefab.transform.Find("Aplicar").GetComponent <TMP_Text>(); GameObject fondoItem = prefab.transform.Find("FondoItem").gameObject; Image imagenArticulo = fondoItem.transform.Find("Item").GetComponent <Image>(); int tipo = int.Parse(prefab.transform.Find("TIPO").GetComponent <TMP_Text>().text); GameObject Pared = gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.Find("SueloPared").transform.Find("Pared").gameObject; GameObject LINCE = gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.Find("Linces").gameObject; Personalizacion articuloPersonalizable = new Personalizacion(); //SWITCH PARA QUITAR EL OBJETO ANTIGUO (APLICADO = FALSE) y gestionar con el UI, deshabilitando el botón Aplicar. switch (tipo) { case 1: //Paredes if (listaPersonalizacion.listaPersonalizacion.Exists(x => x.tipo == 1 && x.aplicado == true)) { articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.tipo == 1 && x.aplicado == true); Debug.Log("AplicarItem " + articuloPersonalizable); articuloPersonalizable.aplicado = false; botonAplicar.interactable = true; aplicar.text = "Aplicar"; } break; case 2: //Sombreros //Comprueba si hay algún sombrero (tipo 2) que está aplicado ya. //Si hay uno, localiza su posición dentro de Lince (Index del hijo) gracias a PlayerPreffs y deshabilita el objeto //También deshabilita el botón Aplicar del Prefab y cambia en la listaDeArticulos el atributo "aplicado" del item a false if (listaPersonalizacion.listaPersonalizacion.Exists(x => x.tipo == 2 && x.aplicado == true)) { int posicionSombreroAntiguo = PlayerPrefs.GetInt("SombreroAplicado"); LINCE.transform.GetChild(posicionSombreroAntiguo).gameObject.SetActive(false); articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.tipo == 2 && x.aplicado == true); Debug.Log("AplicarItem " + articuloPersonalizable); articuloPersonalizable.aplicado = false; botonAplicar.interactable = true; aplicar.text = "Aplicar"; } break; case 3: //Pajaritas if (listaPersonalizacion.listaPersonalizacion.Exists(x => x.tipo == 3 && x.aplicado == true)) { int posicionPajaritaAntigua = PlayerPrefs.GetInt("PajaritaAplicada"); LINCE.transform.GetChild(posicionPajaritaAntigua).gameObject.SetActive(false); articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.tipo == 3 && x.aplicado == true); Debug.Log("AplicarItem " + articuloPersonalizable); articuloPersonalizable.aplicado = false; botonAplicar.interactable = true; aplicar.text = "Aplicar"; } break; case 4: //Calcetines if (listaPersonalizacion.listaPersonalizacion.Exists(x => x.tipo == 4 && x.aplicado == true)) { int posicionCalcetinesAntiguos = PlayerPrefs.GetInt("CalcetinesAplicados"); LINCE.transform.GetChild(posicionCalcetinesAntiguos).gameObject.SetActive(false); articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.tipo == 4 && x.aplicado == true); Debug.Log("AplicarItem " + articuloPersonalizable); articuloPersonalizable.aplicado = false; botonAplicar.interactable = true; aplicar.text = "Aplicar"; } break; } //Comprueba qué item es el que está aplicado para poder modificar su estado en el archivo JSON y volver a habilitar el botón articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.imagen == imagenArticulo.sprite.name); articuloPersonalizable.aplicado = true; botonAplicar.interactable = false; aplicar.text = "Aplicado"; //SWITCH PARA APLICAR EL OBJETO ACTUAL y guardar su posición como hijo de Lince switch (tipo) { case 1: //Paredes //Localiza la posición del objeto aplicado en el array de sprites int posicionEnArray = Array.FindIndex(spritesPersonalizacion, x => x.name == articuloPersonalizable.imagen); Debug.Log("Posicion en Array " + posicionEnArray); Pared.GetComponent <SpriteRenderer>().sprite = imagenArticulo.sprite; PlayerPrefs.SetInt("ParedAplicada", posicionEnArray + 1); paredCopia = posicionEnArray + 1; break; case 2: //Sombreros string nombreSombrero = prefab.name; GameObject sombrero = LINCE.transform.Find(nombreSombrero).gameObject; int posicionSombreroEnLince = LINCE.transform.Find(nombreSombrero).GetSiblingIndex(); //Localiza la posición gracias al nombre del prefab y de los hijos de Lince sombrero.SetActive(true); PlayerPrefs.SetInt("SombreroAplicado", posicionSombreroEnLince); sombreroCopia = posicionSombreroEnLince; break; case 3: //Pajaritas string nombrePajarita = prefab.name; GameObject pajarita = LINCE.transform.Find(nombrePajarita).gameObject; int posicionPajaritaEnLince = LINCE.transform.Find(nombrePajarita).GetSiblingIndex(); pajarita.SetActive(true); PlayerPrefs.SetInt("PajaritaAplicada", posicionPajaritaEnLince); pajaritaCopia = posicionPajaritaEnLince; break; case 4: //Calcetines string nombreCalcetines = prefab.name; GameObject calcetines = LINCE.transform.Find(nombreCalcetines).gameObject; int posicionCalcetinesEnLince = LINCE.transform.Find(nombreCalcetines).GetSiblingIndex(); calcetines.SetActive(true); PlayerPrefs.SetInt("CalcetinesAplicados", posicionCalcetinesEnLince); calcetinesCopia = posicionCalcetinesEnLince; break; } EscribirEnFichero(); ExtraerDatosFicheroPersonalizacion(gameObject.transform.parent.gameObject); }
public void QuitarItemPersonalizable(GameObject prefab) { CargaDeFichero(); Button botonAplicar = prefab.transform.Find("btnAplicar").GetComponent <Button>(); TMP_Text aplicar = prefab.transform.Find("Aplicar").GetComponent <TMP_Text>(); GameObject fondoItem = prefab.transform.Find("FondoItem").gameObject; Image imagenArticulo = fondoItem.transform.Find("Item").GetComponent <Image>(); int tipo = int.Parse(prefab.transform.Find("TIPO").GetComponent <TMP_Text>().text); GameObject Pared = gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.Find("SueloPared").transform.Find("Pared").gameObject; GameObject LINCE = gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.parent. gameObject.transform.Find("Linces").gameObject; Personalizacion articuloPersonalizable = new Personalizacion(); //SWITCH PARA QUITAR EL OBJETO ANTIGUO (APLICADO = FALSE) y gestionar con el UI, deshabilitando el botón Aplicar. switch (tipo) { case 2: //Sombreros //Comprueba si hay algún sombrero (tipo 2) que está aplicado ya. //Si hay uno, localiza su posición dentro de Lince (Index del hijo) gracias a PlayerPreffs y deshabilita el objeto //También deshabilita el botón Aplicar del Prefab y cambia en la listaDeArticulos el atributo "aplicado" del item a false if (listaPersonalizacion.listaPersonalizacion.Exists(x => x.tipo == 2 && x.aplicado == true)) { int posicionSombreroAntiguo = PlayerPrefs.GetInt("SombreroAplicado"); LINCE.transform.GetChild(posicionSombreroAntiguo).gameObject.SetActive(false); articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.tipo == 2 && x.aplicado == true); Debug.Log("AplicarItem " + articuloPersonalizable); articuloPersonalizable.aplicado = false; botonAplicar.interactable = true; aplicar.text = "Aplicar"; } break; case 3: //Pajaritas if (listaPersonalizacion.listaPersonalizacion.Exists(x => x.tipo == 3 && x.aplicado == true)) { int posicionPajaritaAntigua = PlayerPrefs.GetInt("PajaritaAplicada"); LINCE.transform.GetChild(posicionPajaritaAntigua).gameObject.SetActive(false); articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.tipo == 3 && x.aplicado == true); Debug.Log("AplicarItem " + articuloPersonalizable); articuloPersonalizable.aplicado = false; botonAplicar.interactable = true; aplicar.text = "Aplicar"; } break; case 4: //Calcetines if (listaPersonalizacion.listaPersonalizacion.Exists(x => x.tipo == 4 && x.aplicado == true)) { int posicionCalcetinesAntiguos = PlayerPrefs.GetInt("CalcetinesAplicados"); LINCE.transform.GetChild(posicionCalcetinesAntiguos).gameObject.SetActive(false); articuloPersonalizable = listaPersonalizacion.listaPersonalizacion.Find(x => x.tipo == 4 && x.aplicado == true); Debug.Log("AplicarItem " + articuloPersonalizable); articuloPersonalizable.aplicado = false; botonAplicar.interactable = true; aplicar.text = "Aplicar"; } break; } EscribirEnFichero(); ExtraerDatosFicheroPersonalizacion(gameObject.transform.parent.gameObject); }