diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt index c7e364b5e5c488a148f3c8cef6132f77dafc82d8..08c59f3f7804b9c7c2d96d23748347342f19e9e8 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt @@ -19,9 +19,11 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GameState import com.example.ellegadodepintia.exploradoresDePintia.model.GeneradorDeEventos import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils import com.example.ellegadodepintia.exploradoresDePintia.model.GestorDeEventos +import com.example.ellegadodepintia.soundManager.SoundManager import java.lang.ref.WeakReference class ExploradoresDePintia : AppCompatActivity() { + private lateinit var soundManager: SoundManager private var dificultad = 0 private lateinit var startForResult: ActivityResultLauncher<Intent> @@ -30,6 +32,8 @@ class ExploradoresDePintia : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_exploradores_de_pintia) + soundManager = SoundManager(this) + soundManager.playSoundLoop(R.raw.sound_exploradores_idle,100) startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { @@ -102,5 +106,10 @@ class ExploradoresDePintia : AppCompatActivity() { } + override fun onDestroy() { + super.onDestroy() + soundManager.stopSound() + } + } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt index 9ea2addde61575a1e7bb1f1a2e3877466b05bc19..b5672f5b2a378717cf68b76b998e571b1298926e 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt @@ -32,9 +32,10 @@ object GeneradorDeEventos { val eventosGenerados = ArrayList<Evento>() historialTipos = mutableListOf() + while (eventosGenerados.size < CANTIDAD) { val tipoSeleccionado = seleccionarTipoEvento() - + println(historialTipos) if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) { continue } @@ -120,7 +121,7 @@ object GeneradorDeEventos { private fun filtrarEventosPorDificultad(eventos: ArrayList<Evento>, dificultad: Int): Evento { val eventosFiltrados = eventos.filter { it.dificultad == dificultad } - return eventosFiltrados[eventosFiltrados.indices.random()] + return eventosFiltrados[eventosFiltrados.indices.first] } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt index 69984783516e636f0122d01877f9fde0ccbdc496..f8f1ae086d47b6b7355bb945c3f28ab3d0d6f5ec 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt @@ -101,9 +101,15 @@ object GestorCombate { } else { evento.actualizarFinalizado(true) turnoJugador = true - "¡Enhorabuena has acabado con el monstruo!".also { - context!!.findViewById<TextView>(R.id.textoResultado).text = it + if(evento.resistenciaActual <= 0) { + GameState.jugador.conseguirObjeto(evento.recompensa) + Handler(Looper.getMainLooper()).postDelayed({ + "¡Enhorabuena has acabado con el monstruo!\n Te das cuenta que defendÃa un/una ${evento.recompensa.nombre}".also { + context!!.findViewById<TextView>(R.id.textoResultado).text = it + } + }, 200) } + } } @@ -156,12 +162,13 @@ object GestorCombate { } } - private fun seleccionarAccionEnemigo(): Efecto{ - val tieneRecuperacion = evento.acciones.any {it is EfectoRegeneracionEnemigo } - val porcentajeVida = GameState.eventoActual.resistenciaActual/GameState.eventoActual.resistenciaMax.toDouble() - return if(tieneRecuperacion && porcentajeVida <= 0.3){ + private fun seleccionarAccionEnemigo(): Efecto { + val tieneRecuperacion = evento.acciones.any { it is EfectoRegeneracionEnemigo } + val porcentajeVida = + GameState.eventoActual.resistenciaActual / GameState.eventoActual.resistenciaMax.toDouble() + return if (tieneRecuperacion && porcentajeVida <= 0.3) { evento.acciones.random() - }else{ + } else { evento.acciones.filterNot { it is EfectoRegeneracionEnemigo }.random() } } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt index 98ef0631da7edf17005c7b726fd3a2ade4e8da29..50da27b81c9bd3825a8b500adc0e78491fdedb41 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt @@ -15,7 +15,7 @@ class EfectoAtaqueProtagonista(probabilidadExito: Int) : Efecto(probabilidadExit GameState.eventoActual.actualizarResistencia(-ataqueReal) mensaje = "¡Ataque realizado con éxito has hecho $ataqueReal de daño" } else { - mensaje = "El enemigo ha aguantado el golpe, recibe 0 de daño" + mensaje = "Has fallado el golpe, recibe 0 de daño" } return mensaje } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt index 91a89b69ac9170228a844bb050279b7347288843..9d2ccef3749a14d325e73395a27d820fc4d54fee 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt @@ -12,12 +12,15 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHabi import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHuirProtagonista import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.repositorios.RepositorioObjetos data class CombateInfo( val imagenIdle: Int, val imagenAtaque: Int, val opciones: List<Opcion>, - val habilidades: List<Efecto> + val habilidades: List<Efecto>, + val recompensa: Objeto ) class CombateFactory : EventoFactory { @@ -51,7 +54,8 @@ class CombateFactory : EventoFactory { listOf( EfectoAtaqueEnemigo(80), EfectoRegeneracionEnemigo("El metal reconfigura sus fragmentos recuperando parte de su vida", (1..2).random()) - ) + ), + RepositorioObjetos.obtenerObjetoPorNombre("Moneda de plata Vaccea")!! ), ) @@ -72,7 +76,8 @@ class CombateFactory : EventoFactory { resistenciaMax = (5..10).random(), ataque = (1..2).random(), finalizado = false, - acciones = combateInfo.habilidades.toMutableList() + acciones = combateInfo.habilidades.toMutableList(), + recompensa = combateInfo.recompensa ) } diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt index 5c42d31a6f20b47634a8f94683424fff423ffac3..5545d623ce49ed4e23366fecc626722905ad1697 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt @@ -2,8 +2,11 @@ package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import java.util.UUID class EventoCombate( + override val descripcion: String, override val dificultad: Int, override val opciones: MutableList<Opcion>, @@ -12,4 +15,18 @@ class EventoCombate( var ataque: Int, val imagenAtaque : Int, val acciones: MutableList<Efecto>, -) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado) \ No newline at end of file + val recompensa : Objeto +) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){ + val id: String = UUID.randomUUID().toString() + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || javaClass != other.javaClass) return false + other as EventoCombate + + return id == other.id + } + + override fun hashCode(): Int { + return 31 * id.hashCode() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt index 176b7f0e11fcd36d6dc111ba2f59e87e24340580..c434380705674280cdd816e23dada73ec6e4acf8 100644 --- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt @@ -2,7 +2,7 @@ package com.example.ellegadodepintia.exploradoresDePintia.model.objeto import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoVender -class ObjetoDeValor( +open class ObjetoDeValor( nombre: String, descripcion: String, imagen: Int, 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 29cf1d55e9375e7ec8dd1fdf2c1ee0b00b11b874..bf91a4596e31d3fa0ae64c5402b6d50f2bde8c8f 100644 --- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt +++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt @@ -78,6 +78,12 @@ object RepositorioObjetos { 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 + ), + ObjetoDeValor( + nombre= "Moneda de plata Vaccea", + descripcion = "Pequeño denario con sÃmbolos celtÃberos, utilizadas para el comercio. Su circulación refleja una economÃa organizada en torno a la élite guerrera", + imagen = R.drawable.asi_objeto_moneda, + coste = 15 ) ).associateBy { it.nombre } } diff --git a/app/src/main/res/drawable-nodpi/asi_objeto_moneda.JPG b/app/src/main/res/drawable-nodpi/asi_objeto_moneda.JPG new file mode 100644 index 0000000000000000000000000000000000000000..00d4e625af26a461291d568eeebbab83c70b3f6b Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_objeto_moneda.JPG differ diff --git a/app/src/main/res/drawable/asi_objeto_tesoro.jpg b/app/src/main/res/drawable/asi_objeto_tesoro.jpg new file mode 100644 index 0000000000000000000000000000000000000000..830886700eac2926108f9e2b89c3b824edff0df7 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_tesoro.jpg differ diff --git a/app/src/main/res/raw/sound_battle.mp3 b/app/src/main/res/raw/sound_battle.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..588f4a2749b70c22dc422170eb5ce329364d3eaa Binary files /dev/null and b/app/src/main/res/raw/sound_battle.mp3 differ diff --git a/app/src/main/res/raw/sound_exploradores_idle.mp3 b/app/src/main/res/raw/sound_exploradores_idle.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ee993bc43e6b2909544974f29d827dc14a223443 Binary files /dev/null and b/app/src/main/res/raw/sound_exploradores_idle.mp3 differ