diff --git a/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt index c7e02c0ebe1fafa5e877480c741ca1f460780991..56b94d5c733dfd426388957d302b65fd3b6be07a 100644 --- a/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt +++ b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt @@ -3,13 +3,14 @@ package com.example.ellegadodepintia import android.graphics.Color import android.os.Bundle import android.view.ViewGroup +import android.widget.Button import android.widget.ImageView import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import com.example.ellegadodepintia.exploradoresDePintia.ModalDetallesCompra import com.example.ellegadodepintia.exploradoresDePintia.model.GameState import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils -import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoConsumible +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto import com.example.ellegadodepintia.repositorios.RepositorioJugador import com.example.ellegadodepintia.repositorios.RepositorioObjetos @@ -18,16 +19,30 @@ class TiendaActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_tienda) - GameState.jugador.addObserver { LayoutUtils.actualizarMonedasTienda(this) } + GameState.jugador.addObserver { LayoutUtils.actualizarMonedasTienda(this) + cargarObjetos()} val nivelCiudad = GameState.jugador.nivelCiudad val nObjetos = nivelCiudad * 2 - val objetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(nObjetos) - val preciosGenerados = ArrayList<Int>() + + val botonRefrescar = findViewById<Button>(R.id.botonRefrescar) + botonRefrescar.setOnClickListener { + GameState.jugador.actualizarObjetosTienda(nObjetos) + } val textoMonedas = findViewById<TextView>(R.id.textoMonedas) GameState.jugador.monedas.toString().also { textoMonedas.text = it } + cargarObjetos() + } + + private fun cargarObjetos(){ + + val nivelCiudad = GameState.jugador.nivelCiudad + val nObjetos = nivelCiudad * 2 + val objetos = RepositorioObjetos.convertirNombresAObjetos(GameState.jugador.objetosTienda) + val preciosGenerados = ArrayList<Int>() + val slots = listOf<ImageView>( findViewById(R.id.slot01), findViewById(R.id.slot02), @@ -71,7 +86,7 @@ class TiendaActivity : AppCompatActivity() { slots.forEachIndexed { index, slot -> if (index < nObjetos) { - slot.setImageResource(objetos[index].imagen) + slot.setImageResource(objetos[index]!!.imagen) slot.setOnClickListener { val modalDetallesFragment = ModalDetallesCompra().apply { objeto = objetos[index] @@ -100,14 +115,16 @@ class TiendaActivity : AppCompatActivity() { } } - private fun ejecutarCompra(objeto: ObjetoConsumible, coste: Int){ + private fun ejecutarCompra(objeto: Objeto?, coste: Int){ val texto = findViewById<TextView>(R.id.textoInformacion) if (GameState.jugador.monedas < coste){ "No hay dinero".also { texto.text = it } }else{ GameState.jugador.actualizarMonedas(GameState.jugador.monedas - coste) RepositorioJugador.setMonedas(GameState.jugador.monedas) - GameState.jugador.conseguirObjeto(objeto) + if (objeto != null) { + GameState.jugador.conseguirObjeto(objeto) + } "Objeto comprado y añadido al inventario".also { texto.text = it } } } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt index 861ae25d2d00f12f18c912956bcc3d4167fbb8ac..e19e2d4eeb759c34f10ee94a1eeb327c4d5aa9ac 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt @@ -15,6 +15,8 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoEquipable import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoUtilidad import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.repositorios.RepositorioObjetos class Jugador { var nivelCiudad = 1 @@ -27,6 +29,7 @@ class Jugador { var habilidades = ArrayList<Habilidad>(1) var buffos = ArrayList<EfectoBuffo>() var monedas = 0 + var objetosTienda = ArrayList<String>(6) init { atributos[Atributo.Vida] = 10 @@ -169,6 +172,13 @@ class Jugador { notifyObservers() } + fun actualizarObjetosTienda(nObjetos : Int){ + val nuevosObjetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(nObjetos) + this.objetosTienda = nuevosObjetos + RepositorioJugador.setObjetosTienda(nuevosObjetos) + notifyObservers() + } + fun reset() { observers.clear() @@ -185,6 +195,7 @@ class Jugador { vidaMax = 10 energiaMax = 10 + actualizarObjetosTienda(nivelCiudad*2) } } diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt index df00a229895e8bd78e1f59f8397763696e9e64d3..c3f6e292283c54b358f1f82237fb5edaeeb52984 100644 --- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt +++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt @@ -14,6 +14,14 @@ object RepositorioJugador { db.collection("users").document(email).get().addOnSuccessListener { GameState.jugador.monedas = (it.get("monedas") as Long).toInt() GameState.jugador.nivelCiudad = (it.get("nivelCiudad") as Long).toInt() + + val objetosTienda = (it.get("objetosTienda") as? List<*>) + ?.filterIsInstance<String>() + ?.toCollection(ArrayList()) + ?: ArrayList() + + println(objetosTienda) + GameState.jugador.objetosTienda = objetosTienda } } @@ -21,7 +29,8 @@ object RepositorioJugador { db.collection("users").document(email).set( hashMapOf("monedas" to 0, "username" to username, - "nivelCiudad" to 1) + "nivelCiudad" to 1, + "objetosTienda" to RepositorioObjetos.obtenerObjetosAleatoriosTienda(2)) ) } @@ -30,6 +39,11 @@ object RepositorioJugador { userRef.set(hashMapOf("monedas" to monedas), SetOptions.merge()) } + fun setObjetosTienda(objetosTienda : ArrayList<String>) { + val userRef = db.collection("users").document(email) + userRef.set(hashMapOf("objetosTienda" to objetosTienda), SetOptions.merge()) + } + fun cargarJugadores(callback: (List<PlayerLeaderBoard>) -> Unit) { db.collection("users") .get() diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt index 492cc14dce4bc393a5925345751653747ee7fc0a..1c12161d0f92c72b2274889458133e3ab1b2d415 100644 --- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt +++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt @@ -86,8 +86,18 @@ object RepositorioObjetos { return objetos[nombre] } - fun obtenerObjetosAleatoriosTienda(cantidad: Int): List<ObjetoConsumible> { + fun obtenerObjetosAleatoriosTienda(cantidad: Int): ArrayList<String> { val consumibles = objetos.values.filterIsInstance<ObjetoConsumible>() - return List(cantidad) { consumibles.random() } + return ArrayList<String>().apply { + repeat(cantidad) { + add(consumibles.random().nombre) + } + } + } + + fun convertirNombresAObjetos(nombres: List<String>): List<Objeto?> { + return nombres.map { nombre -> + obtenerObjetoPorNombre(nombre) + } } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_tienda.xml b/app/src/main/res/layout/activity_tienda.xml index b80b65352823df7ad3cb7347d2ea9dcfb345198d..e3985beeb70b1bd09561a1ee69194262edb36e1e 100644 --- a/app/src/main/res/layout/activity_tienda.xml +++ b/app/src/main/res/layout/activity_tienda.xml @@ -433,6 +433,21 @@ app:layout_constraintEnd_toEndOf="parent" android:gravity="center"/> + + <Button + android:id="@+id/botonRefrescar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:fontFamily="@font/pixeled" + android:text="Refrescar tienda por 1 moneda" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" + app:layout_constraintTop_toBottomOf="@id/textoInformacion" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + <LinearLayout android:id="@+id/bottom_navigation" style="?android:attr/buttonBarStyle"