From 553eb739f43a1d530efa3ddd454e955099383bf6 Mon Sep 17 00:00:00 2001
From: izajime <izan.jimenez@estudiantes.uva.es>
Date: Sat, 23 Nov 2024 13:04:16 +0100
Subject: [PATCH] Feature: La taberna se sube de nivel. Falta gastar las
 monedas y avisar al usuario

---
 .../ellegadodepintia/TabernaActivity.kt       |  19 ++++
 .../exploradoresDePintia/ModalConfirmacion.kt |  57 ++++++++++
 .../exploradoresDePintia/model/Jugador.kt     |   6 +
 .../repositorios/RepositorioJugador.kt        |   5 +
 app/src/main/res/layout/activity_taberna.xml  |  58 ++++++----
 .../main/res/layout/modal_confirmacion.xml    | 107 ++++++++++++++++++
 6 files changed, 228 insertions(+), 24 deletions(-)
 create mode 100644 app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalConfirmacion.kt
 create mode 100644 app/src/main/res/layout/modal_confirmacion.xml

diff --git a/app/src/main/java/com/example/ellegadodepintia/TabernaActivity.kt b/app/src/main/java/com/example/ellegadodepintia/TabernaActivity.kt
index a2ff965..47a4210 100644
--- a/app/src/main/java/com/example/ellegadodepintia/TabernaActivity.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/TabernaActivity.kt
@@ -1,11 +1,30 @@
 package com.example.ellegadodepintia
 
 import android.os.Bundle
+import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
+import com.example.ellegadodepintia.exploradoresDePintia.ModalConfirmacion
+import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
 
 class TabernaActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_taberna)
+
+        GameState.jugador.addObserver { actualizarNivelTaberna() }
+
+        val botonMejorar = findViewById<TextView>(R.id.botonMejorar)
+
+        actualizarNivelTaberna()
+        botonMejorar.setOnClickListener {
+            val confirmacionFragment = ModalConfirmacion()
+            confirmacionFragment.show(supportFragmentManager, "confirmacion")
+        }
+    }
+
+    private fun actualizarNivelTaberna(){
+        val textoNivel = findViewById<TextView>(R.id.nivelActual)
+        "Nivel actual: ${GameState.jugador.nivelCiudad}".also { textoNivel.text = it }
+
     }
 }
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalConfirmacion.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalConfirmacion.kt
new file mode 100644
index 0000000..cacbf64
--- /dev/null
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalConfirmacion.kt
@@ -0,0 +1,57 @@
+package com.example.ellegadodepintia.exploradoresDePintia
+
+import android.content.DialogInterface
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.TextView
+import androidx.fragment.app.DialogFragment
+import com.example.ellegadodepintia.R
+import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
+import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto
+
+class ModalConfirmacion : DialogFragment() {
+    var objeto: Objeto? = null
+    var coste: Int? = null
+    private var onDismissListener: (() -> Unit)? = null
+
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        return inflater.inflate(R.layout.modal_confirmacion, container, false)
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        val nivelActual = GameState.jugador.nivelCiudad
+        val costeNuevoNivel = 50 * nivelActual
+
+        val textoInformacion = view.findViewById<TextView>(R.id.textoInformacion)
+        ("Vas a mejorar la taberna por el coste de $costeNuevoNivel monedas. ¿Estás seguro?").also { textoInformacion.text = it }
+
+        val botonMejorar = view.findViewById<Button>(R.id.botonMejorar)
+        botonMejorar.setOnClickListener{
+            val nObjetos = (nivelActual + 1) * 2
+            GameState.jugador.actualizarObjetosTienda(nObjetos)
+            GameState.jugador.actualizarObjetosArmeria(nObjetos)
+            GameState.jugador.actualizarNivelCiudad(nivelActual + 1)
+            "Se ha subido de nivel la taberna correctamente".also { textoInformacion.text = it }
+            dismiss()
+        }
+
+        val botonCancelar = view.findViewById<Button>(R.id.botonCancelar)
+        botonCancelar.setOnClickListener{
+            dismiss()
+        }
+    }
+
+    override fun onDismiss(dialog: DialogInterface) {
+        super.onDismiss(dialog)
+        onDismissListener?.invoke()
+    }
+
+}
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 bdeaf3e..5d104a2 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
@@ -145,6 +145,12 @@ class Jugador {
         notifyObservers()
     }
 
+    fun actualizarNivelCiudad(valor: Int) {
+        nivelCiudad = valor
+        RepositorioJugador.setNivelTaberna(valor)
+        notifyObservers()
+    }
+
     fun actualizarObjetosTienda(nObjetos : Int){
         val nuevosObjetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(nObjetos)
         this.objetosTienda = nuevosObjetos
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 ba597e8..22ad0ac 100644
--- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt
@@ -58,6 +58,11 @@ object RepositorioJugador {
         userRef.set(hashMapOf("objetosArmeria" to objetosArmeria), SetOptions.merge())
     }
 
+    fun setNivelTaberna(nivelCiudad : Int) {
+        val userRef = db.collection("users").document(email)
+        userRef.set(hashMapOf("nivelCiudad" to nivelCiudad), SetOptions.merge())
+    }
+
     fun cargarJugadores(callback: (List<PlayerLeaderBoard>) -> Unit) {
         db.collection("users")
             .get()
diff --git a/app/src/main/res/layout/activity_taberna.xml b/app/src/main/res/layout/activity_taberna.xml
index 3908fb1..23dcc7b 100644
--- a/app/src/main/res/layout/activity_taberna.xml
+++ b/app/src/main/res/layout/activity_taberna.xml
@@ -32,7 +32,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:padding="18dp"
-        android:text="Nivel Ciudad: 1"
+        android:text="Nivel actual: 1"
         android:textSize="30sp"
         android:fontFamily="@font/pixeled"
         android:layout_below="@id/tituloJuego"
@@ -45,7 +45,7 @@
         app:layout_constraintTop_toBottomOf="@id/tituloJuego"/>
 
     <TextView
-        android:id="@+id/textoNivelActual"
+        android:id="@+id/textoDescripcion"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginEnd="20dp"
@@ -59,38 +59,48 @@
         android:background="@drawable/style_texto_border"
         android:textColor="@color/pintiaTitleText"
         android:textStyle="bold"
-        android:layout_marginTop="80dp"
+        android:layout_marginTop="40dp"
         android:layout_centerHorizontal="true"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/nivelActual"/>
 
-
-    <LinearLayout
-        android:layout_width="wrap_content"
+    <TextView
+        android:id="@+id/textoInformacion"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="@drawable/style_confirmar_gradiente"
+        android:textAlignment="center"
+        android:layout_marginTop="40dp"
+        android:padding="18dp"
+        android:text="Aquí se informará al usuario"
+        android:textSize="16sp"
+        android:fontFamily="@font/pixeled"
+        android:layout_below="@id/tituloJuego"
+        android:background="@drawable/style_texto_border"
+        android:textColor="@color/pintiaTitleText"
+        android:textStyle="bold"
+        android:layout_centerHorizontal="true"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        android:layout_marginBottom="45dp"
-        android:layout_marginTop="80dp"
-        app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
-        >
-        <Button
-            android:id="@+id/botonMejorar"
-            android:layout_width="350dp"
-            android:layout_height="wrap_content"
-            android:padding="18dp"
-            android:text="Mejorar"
-            android:textColor="@color/pintiaTitleText"
-            android:textSize="30sp"
-            android:background="@android:color/transparent"
-            android:fontFamily="@font/pixeled"
-            android:textStyle="bold"
-            />
-    </LinearLayout>
+        app:layout_constraintTop_toBottomOf="@id/textoDescripcion" />
 
 
+    <Button
+        android:id="@+id/botonMejorar"
+        android:layout_width="350dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="40dp"
+        android:padding="18dp"
+        android:text="Mejorar"
+        android:textColor="@color/pintiaTitleText"
+        android:textSize="30sp"
+        android:backgroundTint="@color/pintiaButton"
+        android:fontFamily="@font/pixeled"
+        android:textStyle="bold"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/textoInformacion"/>
+
     <LinearLayout
         android:id="@+id/bottom_navigation"
         style="?android:attr/buttonBarStyle"
diff --git a/app/src/main/res/layout/modal_confirmacion.xml b/app/src/main/res/layout/modal_confirmacion.xml
new file mode 100644
index 0000000..cc304fe
--- /dev/null
+++ b/app/src/main/res/layout/modal_confirmacion.xml
@@ -0,0 +1,107 @@
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/style_background_gradiente"
+    android:padding="10dp"
+    tools:context=".exploradoresDePintia.ExploradoresDePintia"
+    tools:ignore="HardcodedText, UseCompoundDrawables,ButtonStyle"
+    >
+
+    <LinearLayout
+        android:id="@+id/mainArea"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:orientation="vertical"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <TextView
+            android:id="@+id/textoTitulo"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/pixeled"
+            android:textAlignment="center"
+            android:text="Subida de nivel"
+            android:textColor="#6A0000"
+            android:layout_marginTop="10dp"
+            android:layout_marginBottom="10dp"
+            android:textSize="24sp"
+            android:textStyle="bold"
+            android:shadowColor="#000000"
+            android:shadowDx="2"
+            android:shadowDy="2"
+            android:shadowRadius="4" />
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginBottom="10dp"
+            android:background="#000000" />
+
+        <TextView
+            android:id="@+id/textoInformacion"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/pixeled"
+            android:text="Vas a mejorar la taberna por el coste de 50 monedas. ¿Estás seguro?"
+            android:textAlignment="center"
+            android:textColor="#000000"
+            android:layout_marginTop="10dp"
+            android:padding="8dp"
+            android:textSize="15sp" />
+
+
+
+        <LinearLayout
+            android:id="@+id/slotsInventario"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:layout_marginTop="20dp"
+            android:orientation="horizontal">
+
+            <Button
+                android:id="@+id/botonMejorar"
+                android:layout_width="135dp"
+                android:layout_height="wrap_content"
+                android:backgroundTint="@color/pintiaButton"
+                android:textColor="@color/pintiaButtonText"
+                android:text="Mejorar"
+                android:fontFamily="@font/pixeled"
+                android:layout_marginEnd="10dp"
+                android:textStyle="bold"/>
+
+            <Button
+                android:id="@+id/botonCancelar"
+                android:layout_width="135dp"
+                android:layout_height="wrap_content"
+                android:backgroundTint="#c44841"
+                android:textColor="@color/pintiaButtonText"
+                android:text="Cancelar"
+                android:fontFamily="@font/pixeled"
+                tools:ignore="HardcodedText"
+                android:textStyle="bold"/>
+
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/textoResultadoUso"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/pixeled"
+            android:text=""
+            android:textAlignment="center"
+            android:textColor="#000000"
+            android:layout_marginTop="10dp"
+            android:padding="8dp"
+            android:textSize="15sp" />
+
+
+
+    </LinearLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
-- 
GitLab