From e20ff80f3be3a0c43e5a5a2f05a985fdefd403cb Mon Sep 17 00:00:00 2001
From: diegval <diego.valladolid@estudiantes.uva.es>
Date: Wed, 20 Nov 2024 21:22:56 +0100
Subject: [PATCH] =?UTF-8?q?Feature:=20Objetos=20del=20riesgoFactory=20a?=
 =?UTF-8?q?=C3=B1adidos=20al=20repositorio=20y=20arreglado=20problema=20de?=
 =?UTF-8?q?=20descripciones?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../eventoFactory/EventoFactorySelector.kt    |  4 +-
 .../model/eventoFactory/EventoRiesgo.kt       | 16 +++-
 .../model/eventoFactory/RiesgoFactory.kt      | 73 ++++++++++---------
 .../repositorios/RepositorioObjetos.kt        |  5 ++
 4 files changed, 61 insertions(+), 37 deletions(-)

diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt
index 74217d6..e9a3c8c 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt
@@ -20,9 +20,9 @@ object EventoFactorySelector {
         val probabilidades = mapOf(
             TipoEvento.Reliquia to 0.3,
             TipoEvento.Tienda to 0.1,
-            TipoEvento.Riesgo to 0.3,
             TipoEvento.Trampa to 0.1,
-            TipoEvento.Combate to 0.2
+            TipoEvento.Combate to 0.2,
+            TipoEvento.Riesgo to 0.3,
         )
 
         val acumulado = probabilidades.entries.fold(mutableListOf<Pair<Double, TipoEvento>>()) { acc, entry ->
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt
index 6089073..3f2401b 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt
@@ -3,9 +3,23 @@ package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory
 import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion
 
 class EventoRiesgo(
+    val id : Int,
     override val descripcion: String,
     override val dificultad: Int,
     override val opciones: MutableList<Opcion>,
     override val imagen: Int, resistenciaMax: Int,
     override var finalizado: Boolean,
-) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado)
\ No newline at end of file
+) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other == null || javaClass != other.javaClass) return false
+        other as EventoRiesgo
+
+        return id == other.id
+    }
+
+    override fun hashCode(): Int {
+        return 31 * id.hashCode()
+    }
+}
+
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt
index 7fc5aa3..26c410b 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt
@@ -5,84 +5,89 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo
 import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoIgnorar
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRiesgo
-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.RepositorioObjetos
 
 class RiesgoFactory : EventoFactory {
-    private val riesgoMap = mapOf(
-        "En un claro junto al río Duero, encuentras un viejo cofre de madera decorado con espigas de trigo y motivos solares. " to Pair(
-            R.drawable.cofre_open_animation, listOf(
+
+    private val descripcionComun = "En un claro junto al río Duero, encuentras un viejo cofre de madera decorado con espigas de trigo y motivos solares."
+
+    private val riesgoMap = mutableMapOf(
+        1 to EventoRiesgoData(
+            imagen = R.drawable.cofre_open_animation,
+            opciones = listOf(
                 Opcion(
                     descripcion = "Abrir el cofre",
                     atributoRequerida = Atributo.Investigacion,
                     EfectoRiesgo(
-                        ObjetoEquipable(
-                            nombre = "Espada de Hierro",
-                            descripcion = "Una espada de hierro sencilla y confiable perfecta para un aventurero novato. Otorga 1 de daño extra",
-                            efecto = EfectoEquipableAumento(1, Atributo.Ataque),
-                            imagen = R.drawable.asi_objeto_espadadefault
-                        ),
+                        RepositorioObjetos.obtenerObjetoPorNombre("Espada de Hierro")!!,
                         dmgRiesgo = 2,
                         mensajeRecomensa = "Dentro del cofre encuentras una espada de hierro vaccea. Está en buen estado y tiene un brillo sobrenatural",
                         mensajeRiesgo = "Una nube de polvo tóxico se libera, causandote 2 de daño",
                         50
                     )
-                ), Opcion(
+                ),
+                Opcion(
                     descripcion = "Ignorar",
                     atributoRequerida = Atributo.Nula,
                     EfectoIgnorar(100)
                 )
             )
         ),
-        "En un claro junto al río Duero, encuentras un viejo cofre de madera decorado con espigas de trigo y motivos solares. " to Pair(
-            R.drawable.cofre_open_animation, listOf(
+        2 to EventoRiesgoData(
+                        imagen = R.drawable.cofre_open_animation,
+            opciones = listOf(
                 Opcion(
                     descripcion = "Abrir el cofre",
                     atributoRequerida = Atributo.Investigacion,
                     EfectoRiesgo(
-                        ObjetoUtilidad(
-                            nombre = "Ticket",
-                            descripcion = "Representa una invitación a un evento relacionado con la cultura vaccea, como una feria arqueológica o un festival cultural",
-                            imagen = R.drawable.asi_objeto_ticket
-                        ),
+                        RepositorioObjetos.obtenerObjetoPorNombre("Ticket")!!,
                         dmgRiesgo = 4,
                         mensajeRecomensa = "Dentro del cofre encuentras un ticket. No sabes para que podría servir",
                         mensajeRiesgo = "Te encuentras una serpiente que te muerde hasta que consigues quitartela de encima, causandote 4 de daño",
                         35
                     )
-                ), Opcion(
+                ),
+                Opcion(
                     descripcion = "Ignorar",
                     atributoRequerida = Atributo.Nula,
                     EfectoIgnorar(100)
                 )
             )
-        ),
+        )
     )
 
     override fun generarDescripcion(): String {
-        return riesgoMap.keys.random()
+        return descripcionComun
     }
 
     override fun generarOpciones(descripcion: String): MutableList<Opcion> {
-        return riesgoMap[descripcion]?.second?.toMutableList()
-            ?: mutableListOf()
+        val evento = riesgoMap.entries.find { it.key == descripcion.toInt() }
+        return evento?.value?.opciones?.toMutableList() ?: mutableListOf()
     }
 
     override fun generarImagen(descripcion: String): Int {
-        return riesgoMap[descripcion]?.first!!
+        val evento = riesgoMap.entries.find { it.key == descripcion.toInt() }
+        return evento!!.value.imagen
     }
 
     override fun generarEvento(): EventoRiesgo {
-        val descripcion = generarDescripcion()
-        return EventoRiesgo(
-            descripcion = descripcion,
+        val id = riesgoMap.keys.random()
+        val eventoData = riesgoMap[id]!!
+
+        val evento = EventoRiesgo(
+            id = id,
+            descripcion = descripcionComun,
             dificultad = 0,
-            opciones = generarOpciones(descripcion),
-            imagen = generarImagen(descripcion),
+            opciones = eventoData.opciones.toMutableList(),
+            imagen = eventoData.imagen,
             resistenciaMax = (2..8).random(),
-            finalizado = false
+            finalizado = false,
         )
+
+        return evento
     }
-}
\ No newline at end of file
+}
+data class EventoRiesgoData(
+    val imagen: Int,
+    val opciones: List<Opcion>
+)
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 59f514e..492cc14 100644
--- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
@@ -73,6 +73,11 @@ object RepositorioObjetos {
                 nombre = "Pico Vacceo",
                 descripcion = "Un pico viejo y oscuro con dibujos extraños que parecen brillar cerca de las piedras, como si estuviera esperando que lo uses para algo importante.",
                 imagen = R.drawable.asi_objeto_pico
+            ),
+            ObjetoUtilidad(
+                nombre = "Ticket",
+                descripcion = "Representa una invitación a un evento relacionado con la cultura vaccea, como una feria arqueológica o un festival cultural",
+                imagen = R.drawable.asi_objeto_ticket
             )
         ).associateBy { it.nombre }
     }
-- 
GitLab