diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index b268ef36cd2de3a14ddddf25aa9f5d4e95731e18..154fb0ef0f8659e1a240c0eb9f0767bfa8828f0a 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,6 +4,14 @@ <selectionStates> <SelectionState runConfigName="app"> <option name="selectionMode" value="DROPDOWN" /> + <DropdownSelection timestamp="2024-12-02T13:10:57.162428132Z"> + <Target type="DEFAULT_BOOT"> + <handle> + <DeviceId pluginId="PhysicalDevice" identifier="serial=RF8N1192C6J" /> + </handle> + </Target> + </DropdownSelection> + <DialogSelection /> </SelectionState> </selectionStates> </component> diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000000000000000000000000000000000..146ab09b7c50daf1f04814fccb913b8d87302176 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,10 @@ +<component name="InspectionProjectProfileManager"> + <profile version="1.0"> + <option name="myName" value="Project Default" /> + <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false"> + <option name="processCode" value="true" /> + <option name="processLiterals" value="true" /> + <option name="processComments" value="true" /> + </inspection_tool> + </profile> +</component> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 74dd639e4ea4800753c1dbdb333093410e843492..b2c751a35c77d4f7b713fe3bfc2cfb693e4d984f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ -<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK"> diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b804642965d1e8400d19803db8dac013da53168d..e1b5475c93287bc7d72df7e143b080c2c63e8fd8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,9 @@ plugins { - alias(libs.plugins.android.application) - alias(libs.plugins.kotlin.android) + id("com.android.application") + id("com.google.gms.google-services") + + id("org.jetbrains.kotlin.android") + } android { @@ -36,6 +39,9 @@ android { } dependencies { + implementation(platform(libs.firebase.bom)) + implementation(libs.firebase.auth) + implementation(libs.firebase.firestore) implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) @@ -45,4 +51,5 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + } \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000000000000000000000000000000000000..109d1dfd664338e6c4ce4f8527f194b94b489290 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "789583009455", + "project_id": "legado-de-pintia", + "storage_bucket": "legado-de-pintia.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:789583009455:android:d0e7031feda3582a53665a", + "android_client_info": { + "package_name": "com.example.ellegadodepintia" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAikVMefC2ZB7mXHzZm4OUA7Q-ADdOWsAM" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ada5d9888ea58b041a208c2502d7619174cc3782..6f2b23891626bd1e91cfee5bf72383dbd9a530d3 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,7 +6,7 @@ android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" - android:icon="@mipmap/ic_launcher" + android:icon="@drawable/logo_pintia" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" @@ -14,19 +14,31 @@ tools:targetApi="31" > <activity android:name=".MainActivity" - android:exported="true" > + android:exported="true" + android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> - <activity android:name=".RegisterActivity" android:exported="true"/> - <activity android:name=".MapActivity" android:exported="true"/> - <activity android:name=".Minijuego1" android:exported="true"/> - <activity android:name=".Minijuego2" android:exported="true"/> - <activity android:name=".Minijuego3" android:exported="true"/> - <activity android:name=".Minijuego4" android:exported="true"/> - + <activity android:name=".AuthActivity" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".MapActivity" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".LeaderboardActivity" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuego1.Minijuego1" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuego2.Minijuego2" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuego3.Minijuego3" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuego1.FinMinijuego1" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".exploradoresDePintia.ExploradoresDePintia" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuego1.InicioMinijuego1" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".ListaMinijuegos" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuegoInvestigacion.MinijuegoInvestigar" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".ruleta.Ruleta" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuegoReparacion.MinijuegoReparacion" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".exploradoresDePintia.Resumen" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".TabernaActivity" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".TiendaActivity" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".ArmeriaActivity" android:exported="true" android:screenOrientation="portrait"/> + <activity android:name=".minijuego4.Minijuego4" android:exported="true" android:screenOrientation="portrait"/> </application> </manifest> \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/ArmeriaActivity.kt b/app/src/main/java/com/example/ellegadodepintia/ArmeriaActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..82755838d44087cb5e895a4479354ed9d090df33 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/ArmeriaActivity.kt @@ -0,0 +1,142 @@ +package com.example.ellegadodepintia + +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.Button +import android.widget.ImageButton +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.Objeto +import com.example.ellegadodepintia.repositorios.RepositorioObjetos +import com.example.ellegadodepintia.soundManager.SoundManager + +class ArmeriaActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_armeria) + + GameState.jugador.addObserver { LayoutUtils.actualizarMonedasTienda(this) + cargarObjetos()} + + val nivelCiudad = GameState.jugador.nivelCiudad + val nObjetos = nivelCiudad * 2 + val mapButton: ImageButton = findViewById(R.id.mapButton) + val texto = findViewById<TextView>(R.id.textoInformacion) + var soundManager: SoundManager + soundManager = SoundManager(this) + val botonRefrescar = findViewById<Button>(R.id.botonRefrescar) + mapButton.setOnClickListener{ + super.onBackPressed() + } + botonRefrescar.setOnClickListener { + if(GameState.jugador.monedas >= 5){ + GameState.jugador.actualizarObjetosArmeria(nObjetos) + GameState.jugador.actualizarMonedas(GameState.jugador.monedas - 5) + "Se ha actualizado la tienda".also { texto.text = it } + soundManager.playSound(R.raw.sound_dineros,100) + } else { + "No tienes suficientes monedas para refrescar".also { texto.text = it } + } + + } + + 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.objetosArmeria) + + val slots = listOf<ImageView>( + findViewById(R.id.slot01), + findViewById(R.id.slot02), + findViewById(R.id.slot03), + findViewById(R.id.slot04), + findViewById(R.id.slot05), + findViewById(R.id.slot06) + ) + + val precios = listOf<TextView>( + findViewById(R.id.precio01), + findViewById(R.id.precio02), + findViewById(R.id.precio03), + findViewById(R.id.precio04), + findViewById(R.id.precio05), + findViewById(R.id.precio06) + ) + + val monedas = listOf<ImageView>( + findViewById(R.id.moneda01), + findViewById(R.id.moneda02), + findViewById(R.id.moneda03), + findViewById(R.id.moneda04), + findViewById(R.id.moneda05), + findViewById(R.id.moneda06) + ) + + precios.forEachIndexed { index, precio -> + if (index < nObjetos) { + objetos[index]!!.coste.toString().also { precio.text = it } + } else { + val nivelTaberna = index / 2 + 1 + "Taberna lvl $nivelTaberna".also { precio.text = it } + precio.textSize = 11f + precio.setTextColor(Color.RED) + + } + } + + slots.forEachIndexed { index, slot -> + if (index < nObjetos) { + slot.setImageResource(objetos[index]!!.imagen) + slot.setOnClickListener { + val modalDetallesFragment = ModalDetallesCompra().apply { + objeto = objetos[index] + } + + modalDetallesFragment.onDismissListener = { accionRealizada -> + if (accionRealizada) { + ejecutarCompra(objetos[index], objetos[index]!!.coste) + } + } + + modalDetallesFragment.show(supportFragmentManager, "modalDetalles") + } + } else { + slot.setImageResource(R.drawable.asi_candado_tienda) + slot.scaleType = ImageView.ScaleType.CENTER + } + } + + monedas.forEachIndexed { index, moneda -> + if (index >= nObjetos) { + moneda.visibility = View.GONE + } + } + } + + private fun ejecutarCompra(objeto: Objeto?, coste: Int){ + val texto = findViewById<TextView>(R.id.textoInformacion) + var soundManager: SoundManager + soundManager = SoundManager(this) + if (GameState.jugador.monedas < coste){ + "No hay dinero".also { texto.text = it } + }else{ + GameState.jugador.actualizarMonedas(GameState.jugador.monedas - coste) + if (objeto != null) { + GameState.jugador.conseguirObjeto(objeto) + } + "Objeto comprado y añadido al inventario".also { texto.text = it } + soundManager.playSound(R.raw.sound_dineros,100) + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/AuthActivity.kt b/app/src/main/java/com/example/ellegadodepintia/AuthActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..46a0266bd84a33fab0e0392e58bea7d582eecd64 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/AuthActivity.kt @@ -0,0 +1,164 @@ +package com.example.ellegadodepintia + +import android.animation.ObjectAnimator +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.TextView +import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatActivity +import androidx.core.animation.doOnEnd +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.soundManager.SoundManager +import com.google.firebase.auth.FirebaseAuth +import kotlin.random.Random + +class AuthActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_register) + + val botonRegistrarse = findViewById<Button>(R.id.buttonRegister) + val botonIniciarSesion = findViewById<Button>(R.id.buttonLogIn) + val textoEmail = findViewById<TextView>(R.id.editTextEmail).text + val textoPassword = findViewById<TextView>(R.id.editTextPassword).text + val textoUsername = findViewById<TextView>(R.id.editTextUsername).text + var soundManager: SoundManager + soundManager = SoundManager(this) + // Verificar si hay un usuario autenticado + val currentUser = FirebaseAuth.getInstance().currentUser + if (currentUser != null) { + RepositorioJugador.cargarJugador(currentUser.email!!) + lluviaDeNubes() + soundManager.playSound(R.raw.sound_login,100) + val titleTextView = findViewById<TextView>(R.id.titleTextView) + titleTextView.text = "CARGANDO MUNDO" + botonRegistrarse.visibility = View.GONE + botonIniciarSesion.visibility = View.GONE + Handler(Looper.getMainLooper()).postDelayed({ + mostrarMapActivity() + }, 2000) + return + } + + + + botonRegistrarse.setOnClickListener { + if (textoEmail.isNotEmpty() && textoPassword.isNotEmpty() && textoUsername.isNotEmpty()) { + FirebaseAuth.getInstance().createUserWithEmailAndPassword( + textoEmail.toString(), + textoPassword.toString() + ).addOnCompleteListener { + if (it.isSuccessful) { + RepositorioJugador.addJugador(textoEmail.toString(), textoUsername.toString()) + RepositorioJugador.cargarJugador(textoEmail.toString()) + lluviaDeNubes() + val titleTextView = findViewById<TextView>(R.id.titleTextView) + titleTextView.text = "CARGANDO MUNDO" + botonRegistrarse.visibility = View.GONE + botonIniciarSesion.visibility = View.GONE + Handler(Looper.getMainLooper()).postDelayed({ + mostrarMapActivity() + }, 2000) + } else { + showAlert() + } + } + } else { + showAlert() + } + } + + botonIniciarSesion.setOnClickListener { + if (textoEmail.isNotEmpty() && textoPassword.isNotEmpty()) { + FirebaseAuth.getInstance().signInWithEmailAndPassword( + textoEmail.toString(), + textoPassword.toString() + ).addOnCompleteListener { + if (it.isSuccessful) { + RepositorioJugador.cargarJugador(textoEmail.toString()) + lluviaDeNubes() + soundManager.playSound(R.raw.sound_login,100) + val titleTextView = findViewById<TextView>(R.id.titleTextView) + titleTextView.text = "CARGANDO MUNDO" + botonRegistrarse.visibility = View.GONE + botonIniciarSesion.visibility = View.GONE + Handler(Looper.getMainLooper()).postDelayed({ + mostrarMapActivity() + }, 2000) + } else { + showAlert() + } + } + } + } + } + + private fun showAlert() { + val builder = AlertDialog.Builder(this) + builder.setTitle("Error") + builder.setMessage("Se ha producido un error en la autenticación") + builder.setPositiveButton("Aceptar", null) + val dialog: AlertDialog = builder.create() + dialog.show() + } + + private fun mostrarMapActivity() { + val intent = Intent(this, MapActivity::class.java) + startActivity(intent) + finish() // Finaliza la actividad actual para que no vuelva atrás + } + + + // Inicia el efecto de lluvia de nubes + private fun lluviaDeNubes() { + val screenWidth = resources.displayMetrics.widthPixels + val screenHeight = resources.displayMetrics.heightPixels + val rainDuration = 2000L // Duración de la lluvia de nubes + val handler = Handler(Looper.getMainLooper()) + val startTime = System.currentTimeMillis() + + // Runnable para generar las nubes mientras dure la lluvia + val runnable = object : Runnable { + override fun run() { + val elapsedTime = System.currentTimeMillis() - startTime + if (elapsedTime < rainDuration) { + nubeCaer(screenWidth, screenHeight) + handler.postDelayed(this, 30) // Cada 100ms cae una nueva nube + } + } + } + handler.post(runnable) + } + + // Crea una nube animada que cae desde la parte superior de la pantalla + private fun nubeCaer(screenWidth: Int, screenHeight: Int) { + val nube = ImageView(this).apply { + setImageResource(R.drawable.asi_minijuego_2_nube) // Imagen de la nube + layoutParams = ViewGroup.LayoutParams(200, 200) // Tamaño de la nube + x = Random.nextInt(0, screenWidth - 100).toFloat() // Posición X aleatoria + y = -100f // Empieza fuera de la pantalla (parte superior) + } + + // Añadimos la nube al layout actual + addContentView(nube, nube.layoutParams) + + // Animación de caÃda de la nube + ObjectAnimator.ofFloat(nube, "translationY", screenHeight.toFloat() + 100f).apply { + duration = Random.nextLong(1000, 3000) // Duración aleatoria para cada nube + start() + + // Cuando la animación termine, se elimina la nube del layout + doOnEnd { (nube.parent as? ViewGroup)?.removeView(nube) } + } + } + + +} diff --git a/app/src/main/java/com/example/ellegadodepintia/LeaderBoardActivity.kt b/app/src/main/java/com/example/ellegadodepintia/LeaderBoardActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..82826e4cf405ae3e549f27f13ebba8d0a294b39a --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/LeaderBoardActivity.kt @@ -0,0 +1,54 @@ +package com.example.ellegadodepintia + +import android.content.Intent +import android.graphics.Color +import android.os.Bundle +import android.widget.ImageButton +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.soundManager.SoundManager +class LeaderboardActivity : AppCompatActivity() { + private lateinit var soundManager: SoundManager + override fun onCreate(savedInstanceState: Bundle?) { + soundManager = SoundManager(this) + soundManager.playSoundLoop(R.raw.sound_leader,100) + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_leaderboard) + + val mapButton: ImageButton = findViewById(R.id.mapButton) + + val shopButton: ImageButton = findViewById(R.id.logoutButton) + + mapButton.setBackgroundColor(Color.TRANSPARENT) + + shopButton.setBackgroundColor(Color.TRANSPARENT) + + mapButton.setOnClickListener{ + val intent = Intent(this, MapActivity::class.java) + startActivity(intent) + } + + RepositorioJugador.cargarJugadores { jugadores -> + val recyclerView: RecyclerView = findViewById(R.id.leaderboardRecyclerView) + recyclerView.layoutManager = LinearLayoutManager(this) + recyclerView.adapter = LeaderboardAdapter(jugadores) + } + } + + override fun onDestroy() { + super.onDestroy() + soundManager.stopSound() + } + + override fun onPause() { + super.onPause() + soundManager.stopSound() + } + override fun onBackPressed() { + if(1 == 2) { + super.onBackPressed() + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/LeaderboardAdapter.kt b/app/src/main/java/com/example/ellegadodepintia/LeaderboardAdapter.kt new file mode 100644 index 0000000000000000000000000000000000000000..7cf867bf43a5d0b84bbce0f3aeef2d49d1bbc98f --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/LeaderboardAdapter.kt @@ -0,0 +1,37 @@ +package com.example.ellegadodepintia + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView + +class LeaderboardAdapter(private val playerList: List<PlayerLeaderBoard>) : + RecyclerView.Adapter<LeaderboardAdapter.LeaderboardViewHolder>() { + + class LeaderboardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val positionTextView: TextView = itemView.findViewById(R.id.positionTextView) + val playerNameTextView: TextView = itemView.findViewById(R.id.playerNameTextView) + val scoreTextView: TextView = itemView.findViewById(R.id.scoreTextView) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LeaderboardViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.leaderboard_item, parent, false) + return LeaderboardViewHolder(view) + } + + override fun onBindViewHolder(holder: LeaderboardViewHolder, position: Int) { + val player = playerList[position] + player.position.toString().also { holder.positionTextView.text = it } + holder.playerNameTextView.text = player.name + player.score.toString().also { holder.scoreTextView.text = it } + } + + override fun getItemCount(): Int { + return playerList.size + } +} + +class PlayerLeaderBoard(var position: Int, val name: String, val score: Int) + diff --git a/app/src/main/java/com/example/ellegadodepintia/ListaMinijuegos.kt b/app/src/main/java/com/example/ellegadodepintia/ListaMinijuegos.kt new file mode 100644 index 0000000000000000000000000000000000000000..ba6369eb7a413d898ee80ba3ad755ec57f6d9a04 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/ListaMinijuegos.kt @@ -0,0 +1,68 @@ +package com.example.ellegadodepintia + +import android.content.Intent +import android.os.Bundle +import android.widget.FrameLayout +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.minijuego1.InicioMinijuego1 +import com.example.ellegadodepintia.minijuego2.Minijuego2 +import com.example.ellegadodepintia.minijuego3.Minijuego3 +import com.example.ellegadodepintia.minijuego4.Minijuego4 +import com.example.ellegadodepintia.minijuegoInvestigacion.MinijuegoInvestigar +import com.example.ellegadodepintia.ruleta.Ruleta +import com.example.ellegadodepintia.minijuegoReparacion.MinijuegoReparacion + +class ListaMinijuegos : AppCompatActivity(){ + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_lista_minijuegos) + + // Minijuego 1 + val minijuego1Layout = findViewById<FrameLayout>(R.id.minijuego1) + minijuego1Layout.setOnClickListener { + val intent = Intent(this, InicioMinijuego1::class.java) + val flag = true + intent.putExtra("FLAG_KEY", flag) + startActivity(intent) + } + + // Minijuego 2 + val minijuego2Layout = findViewById<FrameLayout>(R.id.minijuego2) + minijuego2Layout.setOnClickListener { + val intent = Intent(this, Minijuego2::class.java) + val flag = true + intent.putExtra("FLAG_KEY", flag) + startActivity(intent) + } + + // Minijuego 3 + val minijuego3Layout = findViewById<FrameLayout>(R.id.minijuego3) + minijuego3Layout.setOnClickListener { + val intent = Intent(this, Minijuego3::class.java) + startActivity(intent) + } + + // Minijuego Investigar + val minijuegoInvestigarLayout = findViewById<FrameLayout>(R.id.minijuegoInvestigar) + minijuegoInvestigarLayout.setOnClickListener { + val intent = Intent(this, MinijuegoInvestigar::class.java) + val flag = true + intent.putExtra("FLAG_KEY", flag) + startActivity(intent) + } + // Ruleta + val ruletaLayout = findViewById<FrameLayout>(R.id.minijuegoRuleta) + ruletaLayout.setOnClickListener { + val intent = Intent(this, Ruleta::class.java) + startActivity(intent) + } + // Reparar + val repararLayout = findViewById<FrameLayout>(R.id.minijuegoReparar) + repararLayout.setOnClickListener { + val intent = Intent(this, MinijuegoReparacion::class.java) + val flag = true + intent.putExtra("FLAG_KEY", flag) + startActivity(intent) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/MainActivity.kt b/app/src/main/java/com/example/ellegadodepintia/MainActivity.kt index 67c4ce2366d165970eb3443b593531e00ae3de03..ca10ca12752609ad548684b54312ca9c71ac9461 100644 --- a/app/src/main/java/com/example/ellegadodepintia/MainActivity.kt +++ b/app/src/main/java/com/example/ellegadodepintia/MainActivity.kt @@ -3,23 +3,41 @@ package com.example.ellegadodepintia import android.content.Intent import android.os.Bundle import android.widget.Button +import android.widget.ImageView +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.Jugador class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + GameState.jugador = Jugador() val signInButton = findViewById<Button>(R.id.signInButton) signInButton.setOnClickListener { - val intent = Intent(this, RegisterActivity::class.java) + val intent = Intent(this, AuthActivity::class.java) startActivity(intent) } - val logInButton = findViewById<Button>(R.id.loginButton) - logInButton.setOnClickListener { - val intent = Intent(this, MapActivity::class.java) - startActivity(intent) + val botonSecreto = findViewById<ImageView>(R.id.logoImageView) + var clickCount = 0 + val clickThreshold = 3 + val clickTimeout = 2000L + val resetClickCountRunnable = Runnable { + clickCount = 0 + } + botonSecreto.setOnClickListener { + clickCount++ + botonSecreto.removeCallbacks(resetClickCountRunnable) + botonSecreto.postDelayed(resetClickCountRunnable, clickTimeout) + if (clickCount == clickThreshold) { + clickCount = 0 + Toast.makeText(this, "Modo developer", Toast.LENGTH_SHORT).show() + val intent = Intent(this, ListaMinijuegos::class.java) + startActivity(intent) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt b/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt index 83e6a76d220445b3087d7385107aeb6c219e80db..8dea3b8301e5bfe5a17e0d5e42a5aa43e1130661 100644 --- a/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt +++ b/app/src/main/java/com/example/ellegadodepintia/MapActivity.kt @@ -3,46 +3,158 @@ package com.example.ellegadodepintia import android.content.Intent import android.graphics.Color import android.os.Bundle -import android.widget.Button +import android.util.DisplayMetrics +import android.view.View import android.widget.ImageButton +import android.widget.ImageView +import android.widget.RelativeLayout +import android.widget.TextView +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.exploradoresDePintia.ExploradoresDePintia +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.soundManager.SoundManager +import com.google.firebase.auth.FirebaseAuth + class MapActivity : AppCompatActivity() { + private lateinit var soundManager: SoundManager override fun onCreate(savedInstanceState: Bundle?) { + soundManager = SoundManager(this) + soundManager.playSoundLoop(R.raw.sound_ciudad,100) super.onCreate(savedInstanceState) setContentView(R.layout.activity_map) - + GameState.jugador.addObserver { actualizarMonedas() } + ajustarPosiciones() val mapButton: ImageButton= findViewById(R.id.mapButton) val leaderboardButton: ImageButton = findViewById(R.id.leaderboardButton) - val shopButton: ImageButton = findViewById(R.id.shopButton) + val shopButton: ImageButton = findViewById(R.id.logoutButton) + val monedasButton: ImageView= findViewById(R.id.moneyImage) + leaderboardButton.setOnClickListener{ + val intent = Intent(this, LeaderboardActivity::class.java) + soundManager.stopSound() + startActivity(intent) + } + shopButton.setOnClickListener { + // Cierra la sesión del usuario + FirebaseAuth.getInstance().signOut() + // Redirige al usuario a la pantalla de inicio de sesión + val intent = Intent(this, MainActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK + startActivity(intent) + finish() + soundManager.stopSound() + } + monedasButton.setOnClickListener{ + GameState.jugador.actualizarMonedas(GameState.jugador.monedas + 50) + Toast.makeText(this, "TRAMPOSO", Toast.LENGTH_SHORT) .show() + actualizarMonedas() + } + actualizarMonedas() - mapButton.setBackgroundResource(R.drawable.edittext_border) + mapButton.setBackgroundResource(R.drawable.style_texto_border) leaderboardButton.setBackgroundColor(Color.TRANSPARENT) shopButton.setBackgroundColor(Color.TRANSPARENT) - val minijuego1Button = findViewById<Button>(R.id.minijuego1) - minijuego1Button.setOnClickListener { - val intent = Intent(this, Minijuego1::class.java) + val aventura = findViewById<ImageButton>(R.id.botonAventura) + aventura.setOnClickListener { + val intent = Intent(this, ExploradoresDePintia::class.java) + soundManager.stopSound() startActivity(intent) } - val minijuego2Button = findViewById<Button>(R.id.minijuego2) - minijuego2Button.setOnClickListener { - val intent = Intent(this, Minijuego2::class.java) + val taberna = findViewById<ImageButton>(R.id.botonTaberna) + taberna.setOnClickListener { + val intent = Intent(this, TabernaActivity::class.java) startActivity(intent) } - val minijuego3Button = findViewById<Button>(R.id.minijuego3) - minijuego3Button.setOnClickListener { - val intent = Intent(this, Minijuego3::class.java) + val tienda = findViewById<ImageButton>(R.id.botonTienda) + tienda.setOnClickListener { + val intent = Intent(this, TiendaActivity::class.java) startActivity(intent) } - val minijuego4Button = findViewById<Button>(R.id.minijuego4) - minijuego4Button.setOnClickListener { - val intent = Intent(this, Minijuego4::class.java) + val armeria = findViewById<ImageButton>(R.id.botonArmeria) + armeria.setOnClickListener { + val intent = Intent(this, ArmeriaActivity::class.java) startActivity(intent) } } + + private fun actualizarMonedas(){ + GameState.jugador.monedas.toString().also { findViewById<TextView>(R.id.moneyText).text = it } + } + + + + private fun ajustarPosiciones() { + // Dimensiones de la pantalla original + val originalWidth = 1080f + val originalHeight = 2285f + + // Obtener las dimensiones actuales de la pantalla + val displayMetrics = DisplayMetrics() + windowManager.defaultDisplay.getMetrics(displayMetrics) + val currentWidth = displayMetrics.widthPixels.toFloat() + val currentHeight = displayMetrics.heightPixels.toFloat() + val density = displayMetrics.density // Densidad de la pantalla actual + + // Calcular la proporción de la pantalla actual respecto a la original + val widthRatio = currentWidth / originalWidth + val heightRatio = currentHeight / originalHeight + + // Ajustar los botones con el ratio de proporción + ajustarBoton(findViewById(R.id.botonAventura), 55f, 65f, 199f, 140f, widthRatio, heightRatio, density) + ajustarBoton(findViewById(R.id.botonTaberna), 149f, 380f, 168f, 127f, widthRatio, heightRatio, density) + ajustarBoton(findViewById(R.id.botonTienda), -1f, 422f, 148f, 127f, widthRatio, heightRatio, density) + ajustarBoton(findViewById(R.id.botonArmeria), 199f, 500f, 192f, 145f, widthRatio, heightRatio, density) + ajustarBoton(findViewById(R.id.botonEntrenar), 241f, 226f, 170f, 125f, widthRatio, heightRatio, density) + } + + private fun ajustarBoton( + button: View, + originalX: Float, // Margen Start original en dp + originalY: Float, // Margen Bottom original en dp + originalWidth: Float, // Ancho original en dp + originalHeight: Float, // Alto original en dp + widthRatio: Float, + heightRatio: Float, + density: Float + ) { + val params = button.layoutParams as RelativeLayout.LayoutParams + + // Ajustar las posiciones según el ratio de la pantalla + val newMarginStart = (originalX * widthRatio * density).toInt() // Ajustamos la posición X + val newBottomMargin = (originalY * heightRatio * density).toInt() // Ajustamos la posición Y (Bottom) + + // Ajustar el tamaño según el ratio de la pantalla + val newWidth = (originalWidth * widthRatio * density).toInt() + val newHeight = (originalHeight * heightRatio * density).toInt() + + // Establecer tamaños mÃnimos y máximos + val minSizePx = (48 * density).toInt() // Tamaño mÃnimo de 48dp en pÃxeles + val maxSizePx = (300 * density).toInt() // Tamaño máximo de 300dp en pÃxeles + + // Aplicar los nuevos márgenes y tamaños + params.marginStart = newMarginStart + params.bottomMargin = newBottomMargin + params.width = newWidth.coerceIn(minSizePx, maxSizePx) // Tamaño mÃnimo y máximo + params.height = newHeight.coerceIn(minSizePx, maxSizePx) // Tamaño mÃnimo y máximo + + // Aplicar los parámetros ajustados al botón + button.layoutParams = params + } + + override fun onBackPressed() { + if(1 == 2){ + super.onBackPressed() + soundManager.stopSound()} + } + + + + + } diff --git a/app/src/main/java/com/example/ellegadodepintia/Minijuego1.kt b/app/src/main/java/com/example/ellegadodepintia/Minijuego1.kt deleted file mode 100644 index f46cf02b5058946acfed926cccdd4a9023dae1e9..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/Minijuego1.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.ellegadodepintia - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity - -class Minijuego1 : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_minijuego1) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/Minijuego2.kt b/app/src/main/java/com/example/ellegadodepintia/Minijuego2.kt deleted file mode 100644 index 57a7ba14ba5ba75377f144bc88bb0af796d50e2f..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/Minijuego2.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.ellegadodepintia - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity - -class Minijuego2 : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_minijuego2) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/Minijuego3.kt b/app/src/main/java/com/example/ellegadodepintia/Minijuego3.kt deleted file mode 100644 index 1b64d17224b5759ce8b8e60a880fa7f9dbd247ca..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/Minijuego3.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.ellegadodepintia - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity - -class Minijuego3 : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_minijuego3) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/Minijuego4.kt b/app/src/main/java/com/example/ellegadodepintia/Minijuego4.kt deleted file mode 100644 index dc168ddc433315cc940853a2306d934a06f3070f..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/Minijuego4.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.ellegadodepintia - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity - -class Minijuego4 : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_minijuego4) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/RegisterActivity.kt b/app/src/main/java/com/example/ellegadodepintia/RegisterActivity.kt deleted file mode 100644 index b165de7e7eb953bc8dabb0a61c835d1d5c642b91..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/ellegadodepintia/RegisterActivity.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.ellegadodepintia - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity - -class RegisterActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_register) - } -} diff --git a/app/src/main/java/com/example/ellegadodepintia/TabernaActivity.kt b/app/src/main/java/com/example/ellegadodepintia/TabernaActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..edab9befad3168549d033f0ce53fabef6bff50b9 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/TabernaActivity.kt @@ -0,0 +1,48 @@ +package com.example.ellegadodepintia + +import android.content.Intent +import android.os.Bundle +import android.widget.ImageButton +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.exploradoresDePintia.ModalConfirmacion +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager + +class TabernaActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_taberna) + + GameState.jugador.addObserver { actualizarNivelTaberna() } + val mapButton: ImageButton = findViewById(R.id.mapButton) + val botonMejorar = findViewById<TextView>(R.id.botonMejorar) + val textoInformacion = findViewById<TextView>(R.id.textoInformacion) + + actualizarNivelTaberna() + mapButton.setOnClickListener{ + super.onBackPressed() + } + botonMejorar.setOnClickListener { + val confirmacionFragment = ModalConfirmacion() + var soundManager: SoundManager + soundManager = SoundManager(this) + confirmacionFragment.onDismissListener = { mejorar -> + if (mejorar) { + "Se ha realizado la mejora con éxito".also { textoInformacion.text = it } + soundManager.playSound(R.raw.sound_dineros,100) + } else { + "No se ha podido realizar la mejora".also { textoInformacion.text = it } + } + } + 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/TiendaActivity.kt b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt new file mode 100644 index 0000000000000000000000000000000000000000..0e8423d602860170d1847aa04a0aa2ba92ebab55 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/TiendaActivity.kt @@ -0,0 +1,146 @@ +package com.example.ellegadodepintia + +import android.graphics.Color +import android.os.Bundle +import android.view.View +import android.widget.Button +import android.widget.ImageButton +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.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.repositorios.RepositorioObjetos +import com.example.ellegadodepintia.soundManager.SoundManager + +class TiendaActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_tienda) + + GameState.jugador.addObserver { LayoutUtils.actualizarMonedasTienda(this) + cargarObjetos()} + + val nivelCiudad = GameState.jugador.nivelCiudad + val nObjetos = nivelCiudad * 2 + val mapButton: ImageButton = findViewById(R.id.mapButton) + val texto = findViewById<TextView>(R.id.textoInformacion) + + val botonRefrescar = findViewById<Button>(R.id.botonRefrescar) + var soundManager: SoundManager + soundManager = SoundManager(this) + mapButton.setOnClickListener{ + super.onBackPressed() + } + botonRefrescar.setOnClickListener { + if(GameState.jugador.monedas >= 5){ + GameState.jugador.actualizarObjetosTienda(nObjetos) + GameState.jugador.actualizarMonedas(GameState.jugador.monedas - 5) + "Se ha actualizado la tienda".also { texto.text = it } + soundManager.playSound(R.raw.sound_dineros,100) + } else { + "No tienes suficientes monedas para refrescar".also { texto.text = it } + } + + } + + 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 slots = listOf<ImageView>( + findViewById(R.id.slot01), + findViewById(R.id.slot02), + findViewById(R.id.slot03), + findViewById(R.id.slot04), + findViewById(R.id.slot05), + findViewById(R.id.slot06) + ) + + val precios = listOf<TextView>( + findViewById(R.id.precio01), + findViewById(R.id.precio02), + findViewById(R.id.precio03), + findViewById(R.id.precio04), + findViewById(R.id.precio05), + findViewById(R.id.precio06) + ) + + val monedas = listOf<ImageView>( + findViewById(R.id.moneda01), + findViewById(R.id.moneda02), + findViewById(R.id.moneda03), + findViewById(R.id.moneda04), + findViewById(R.id.moneda05), + findViewById(R.id.moneda06) + ) + + precios.forEachIndexed { index, precio -> + if (index < nObjetos) { + objetos[index]!!.coste.toString().also { precio.text = it } + } else { + val nivelTaberna = index / 2 + 1 + "Taberna lvl $nivelTaberna".also { precio.text = it } + precio.textSize = 11f + precio.setTextColor(Color.RED) + + } + } + + slots.forEachIndexed { index, slot -> + if (index < nObjetos) { + slot.setImageResource(objetos[index]!!.imagen) + slot.setOnClickListener { + val modalDetallesFragment = ModalDetallesCompra().apply { + objeto = objetos[index] + } + + modalDetallesFragment.onDismissListener = { accionRealizada -> + if (accionRealizada) { + ejecutarCompra(objetos[index], objetos[index]!!.coste) + } + } + modalDetallesFragment.show(supportFragmentManager, "modalDetalles") + } + } else { + slot.setImageResource(R.drawable.asi_candado_tienda) + slot.scaleType = ImageView.ScaleType.CENTER + } + } + + monedas.forEachIndexed { index, moneda -> + if (index >= nObjetos) { + moneda.visibility = View.GONE + } + } + } + + private fun ejecutarCompra(objeto: Objeto?, coste: Int){ + val texto = findViewById<TextView>(R.id.textoInformacion) + var soundManager: SoundManager + soundManager = SoundManager(this) + if(GameState.jugador.inventario.size >= 9){ + "No hay espacio".also { texto.text = it } + }else if (GameState.jugador.monedas < coste){ + "No hay dinero".also { texto.text = it } + }else{ + GameState.jugador.actualizarMonedas(GameState.jugador.monedas - coste) + if (objeto != null) { + GameState.jugador.conseguirObjeto(objeto) + } + "Objeto comprado y añadido al inventario".also { texto.text = it } + soundManager.playSound(R.raw.sound_dineros,100) + } + + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt new file mode 100644 index 0000000000000000000000000000000000000000..909e31d27810c5d2d8228a353a7288f8de78405c --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt @@ -0,0 +1,209 @@ +package com.example.ellegadodepintia.exploradoresDePintia + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.graphics.drawable.AnimationDrawable +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.GridLayout +import android.widget.ImageButton +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.ProgressBar +import android.widget.TextView +import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.DialogFragment +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +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.repositorios.RepositorioJugador +import com.example.ellegadodepintia.repositorios.RepositorioObjetos +import com.example.ellegadodepintia.soundManager.SoundManager +import java.lang.ref.WeakReference +import java.util.ArrayList + +class ExploradoresDePintia : AppCompatActivity() { + private lateinit var soundManager: SoundManager + private var dificultad = 0 + private lateinit var startForResult: ActivityResultLauncher<Intent> + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + //RepositorioJugador.setInventario(ArrayList()) + //Habria que vaciar de la base de datos el inventario del jugador, por si se sale, que pierda + //todo el inventario, al terminar la partida, si queremos guardar algun objeto, se hace al final una + //carga a la base de datos, habria que cambiar todos los metodos que dan objetos al personaje + //para que solo se guarden en local. + setContentView(R.layout.activity_exploradores_de_pintia) + + soundManager = SoundManager(this) + soundManager.playSoundLoop(R.raw.sound_exploradores,50) + //soundManager.playSoundLoop(R.raw.sound_exploradores_idle,100) + startForResult = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + val mensajeResultado = result.data?.getStringExtra("resultado") + println("Volvemos del mini-juego: $mensajeResultado") + } + } + + GameState.fragmentManager = supportFragmentManager + + GeneradorDeEventos.generarEventos() + + GameState.setContexto(WeakReference<Context>(this)) + + val inventoryButton: ImageButton = findViewById(R.id.inventoryButton) + val eventButton: ImageButton = findViewById(R.id.eventButton) + val tutoButtom: ImageButton = findViewById(R.id.tutorialButton) + eventButton.setBackgroundResource(R.drawable.style_texto_border) + inventoryButton.setBackgroundColor(Color.TRANSPARENT) + + inventoryButton.setOnClickListener { + val inventarioFragment = InventoryMain() + inventarioFragment.show(supportFragmentManager, "inventario") + } + tutoButtom.setOnClickListener{ + val modal = ModalFragment() + modal.show(supportFragmentManager, "ModalFragment") + } + val imagenProtagonista = findViewById<ImageView>(R.id.imagenProtagonista) + val idleAnimation = imagenProtagonista.drawable as? AnimationDrawable + idleAnimation?.start() + + iniciarJuego() + } + + private fun iniciarJuego() { + GameState.jugador.addObserver { + LayoutUtils.actualizarEstadisticasMain() + LayoutUtils.actualizarMonedas() + } + LayoutUtils.actualizarEstadisticasMain() + LayoutUtils.actualizarMonedas() + GeneradorDeEventos.generarEvento(dificultad) + GestorDeEventos.gestionar() + ListenerBarras() + + } + + @Deprecated("Deprecated in Java") + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == 100 && resultCode == RESULT_OK) { + val resultado = data?.getStringExtra("resultado") + Toast.makeText(this, resultado, Toast.LENGTH_SHORT).show() + + } else if (requestCode == 102 && resultCode == RESULT_OK) { + val puntuacion = data?.getStringExtra("PUNTUACION")!!.toInt() + GameState.jugador.actualizarAtributo(Atributo.Energia, puntuacion/3) + GameState.jugador.actualizarAtributo(Atributo.Vida, puntuacion/3) + + } else if (requestCode == 103 && resultCode == RESULT_OK) { + val tiempo = data?.getStringExtra("TIEMPO")!!.toInt() + if (tiempo >= 1000){ + GameState.jugador.actualizarMonedas(GameState.jugador.monedas.plus(tiempo/1000)) + }else if (GameState.jugador.inventario.size == 0){ + if (GameState.jugador.atributos[Atributo.Energia] == 1){ + GameState.jugador.actualizarAtributo(Atributo.Energia, -1) + }else{ + GameState.jugador.actualizarAtributo(Atributo.Energia, -GameState.jugador.atributos[Atributo.Energia]!!/2) + } + }else{ + GameState.jugador.destruirObjetoRandom() + } + }else if (requestCode == 104 && resultCode == RESULT_OK) { + val puntosHuesos = data?.getStringExtra("PUNTOS_HUESOS")!!.toInt() + val objeto= RepositorioObjetos.obtenerObjetoPorCoste(puntosHuesos) + if (objeto != null){ + GameState.jugador.conseguirObjeto(objeto) + } + } + + } + + override fun onDestroy() { + super.onDestroy() + soundManager.stopSound() + } + + @SuppressLint("ClickableViewAccessibility") + private fun ListenerBarras() { + val barras: LinearLayout = findViewById(R.id.barras) + val estadisticas: GridLayout = findViewById(R.id.estadisticas) + barras.setOnTouchListener { v, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + Handler(Looper.getMainLooper()).postDelayed({ + estadisticas.visibility = View.VISIBLE + }, 500) // 500 ms para que se registre como toque largo + } + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { + // Ocultar el GridLayout si se termina el toque + estadisticas.visibility = View.GONE + } + } + true + } + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + super.onBackPressed() + } + } + override fun onPause() { + super.onPause() + soundManager.setVolume(0) + } + + override fun onResume() { + super.onResume() + soundManager.setVolume(60) + + } +} +class ModalFragment : DialogFragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflar el diseño del modal + val view = inflater.inflate(R.layout.modal_juego_tutorial, container, false) + + // Configurar el botón de cerrar + val closeButton = view.findViewById<Button>(R.id.cerrar) + closeButton.setOnClickListener { + dismiss() // Cierra el modal + } + return view + } + override fun onStart() { + super.onStart() + + // Ajustar el tamaño del modal + dialog?.window?.setLayout( + (resources.displayMetrics.widthPixels * 0.9).toInt(), // 90% del ancho de la pantalla + ViewGroup.LayoutParams.WRAP_CONTENT // Altura automática + ) + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/InventoryMain.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/InventoryMain.kt new file mode 100644 index 0000000000000000000000000000000000000000..ed2363a78b07224c65428e527f713d94c12e14d4 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/InventoryMain.kt @@ -0,0 +1,72 @@ +package com.example.ellegadodepintia.exploradoresDePintia +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.AnimationDrawable +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageButton +import android.widget.ImageView +import androidx.fragment.app.DialogFragment +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils + + + +class InventoryMain : DialogFragment() { + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val dialog = super.onCreateDialog(savedInstanceState) + dialog.window!!.setBackgroundDrawableResource(android.R.color.transparent) + setStyle( + STYLE_NORMAL, + android.R.style.Theme_Black_NoTitleBar_Fullscreen + ) + + return dialog + } + + override fun onResume() { + super.onResume() + val window = dialog!!.window + window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.modal_inventario, container, false) + } + + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + LayoutUtils.actualizarMonedasInventario(view) + + GameState.jugador.addObserver { LayoutUtils.actualizarEstadisticasInventario(view) } + LayoutUtils.actualizarEstadisticasInventario(view) + + val protagonistaImageView = view.findViewById<ImageView>(R.id.imagenProtagonista) + val protagonistaAnimation = protagonistaImageView.drawable as? AnimationDrawable + protagonistaAnimation?.start() + + val inventoryButton: ImageButton = view.findViewById(R.id.inventoryButton) + val eventButton: ImageButton = view.findViewById(R.id.eventButton) + + inventoryButton.setBackgroundResource(R.drawable.style_texto_border) + eventButton.setBackgroundColor(Color.TRANSPARENT) + + eventButton.setOnClickListener { + dismiss() + } + + LayoutUtils.actualizarInventarioUI(view, parentFragmentManager) + + } + + +} 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 0000000000000000000000000000000000000000..a64f33f4355c577145c8a40bd36bd5509f4fd2a5 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalConfirmacion.kt @@ -0,0 +1,68 @@ +package com.example.ellegadodepintia.exploradoresDePintia + +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 + var onDismissListener: ((isMejora: Boolean) -> 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 monedasJugador = GameState.jugador.monedas + + 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{ + if (monedasJugador >= costeNuevoNivel){ + val nObjetos = (nivelActual + 1) * 2 + GameState.jugador.actualizarObjetosTienda(nObjetos) + GameState.jugador.actualizarObjetosArmeria(nObjetos) + GameState.jugador.actualizarNivelCiudad(nivelActual + 1) + GameState.jugador.actualizarMonedas(monedasJugador - costeNuevoNivel) + onDismissListener?.invoke(true) + dismiss() + } else { + onDismissListener?.invoke(false) + dismiss() + } + + } + + val botonCancelar = view.findViewById<Button>(R.id.botonCancelar) + botonCancelar.setOnClickListener{ + onDismissListener?.invoke(false) + dismiss() + } + } + override fun onStart() { + super.onStart() + + // Ajustar el tamaño del modal + dialog?.window?.setLayout( + (resources.displayMetrics.widthPixels * 0.9).toInt(), // 90% del ancho de la pantalla + ViewGroup.LayoutParams.WRAP_CONTENT // Altura automática + ) + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesCompra.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesCompra.kt new file mode 100644 index 0000000000000000000000000000000000000000..e0f896dd51f4e4aba184a004f7035932ef70f045 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesCompra.kt @@ -0,0 +1,74 @@ +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.ImageView +import android.widget.TextView +import androidx.fragment.app.DialogFragment +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto + +class ModalDetallesCompra : DialogFragment() { + var objeto: Objeto? = null + var onDismissListener: ((accionRealizada: Boolean) -> Unit)? = null + private var accionRealizada: Boolean = false + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.modal_detalles_compra, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val params = dialog?.window?.attributes + if (params != null) { + params.width = (resources.displayMetrics.widthPixels * 0.90).toInt() + params.height = ViewGroup.LayoutParams.WRAP_CONTENT + dialog?.window?.attributes = params + } + + val imagenEvento = view.findViewById<ImageView>(R.id.imagenObjeto) + imagenEvento.setImageResource(objeto!!.imagen) + + val nombre = view.findViewById<TextView>(R.id.nombreObjeto) + nombre.text = objeto!!.nombre + + val descripcion = view.findViewById<TextView>(R.id.textoDescripcion) + descripcion.text = objeto!!.descripcion + + val coste = view.findViewById<TextView>(R.id.textoPrecio) + """Coste:${this.objeto!!.coste}""".also { coste.text = it } + + val boton = view.findViewById<Button>(R.id.botonComprar) + boton.setOnClickListener{ + accionRealizada = true + dismiss() + } + + + + } + + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + onDismissListener?.invoke(accionRealizada) + } + + override fun onStart() { + super.onStart() + + // Ajustar el tamaño del modal + dialog?.window?.setLayout( + (resources.displayMetrics.widthPixels * 0.9).toInt(), // 90% del ancho de la pantalla + ViewGroup.LayoutParams.WRAP_CONTENT // Altura automática + ) + } + +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesEnemigo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesEnemigo.kt new file mode 100644 index 0000000000000000000000000000000000000000..b2ef6a24194bcdebb1a03fd39d8bd4166081a80d --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesEnemigo.kt @@ -0,0 +1,72 @@ +package com.example.ellegadodepintia.exploradoresDePintia + +import android.graphics.drawable.AnimationDrawable +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.fragment.app.DialogFragment +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate + +class ModalDetallesEnemigo : DialogFragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.modal_enemigo, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val params = dialog?.window?.attributes + if (params != null) { + params.width = (resources.displayMetrics.widthPixels * 0.90).toInt() + params.height = ViewGroup.LayoutParams.WRAP_CONTENT + dialog?.window?.attributes = params + } + + + val imagenEvento = view.findViewById<ImageView>(R.id.imagenEnemigo) + imagenEvento.setImageResource(GameState.eventoActual.imagen) + val drawable = imagenEvento.drawable + if (drawable is AnimationDrawable) { + drawable.start() + } + + if (GameState.jugador.atributos[Atributo.Investigacion]!! >= (GameState.eventoActual as EventoCombate).ataque) { + view.findViewById<TextView>(R.id.textoAtaque).text = buildString { + append("Ataque: ") + append((GameState.eventoActual as EventoCombate).ataque.toString()) + } + } + + if(GameState.jugador.atributos[Atributo.Investigacion]!! >= GameState.eventoActual.resistenciaActual/2){ + view.findViewById<TextView>(R.id.textoVidaMaxima).text = buildString { + append("Vida: ") + append(GameState.eventoActual.resistenciaActual) + append("/") + append(GameState.eventoActual.resistenciaMax) + } + } + + + + } + override fun onStart() { + super.onStart() + + // Ajustar el tamaño del modal + dialog?.window?.setLayout( + (resources.displayMetrics.widthPixels * 0.9).toInt(), // 90% del ancho de la pantalla + ViewGroup.LayoutParams.WRAP_CONTENT // Altura automática + ) + } + +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesFragment.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..8bc226123f245e13dee53e728730ca463208bc2f --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalDetallesFragment.kt @@ -0,0 +1,145 @@ +package com.example.ellegadodepintia.exploradoresDePintia + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageView +import android.widget.LinearLayout +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.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.Jugador +import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoConsumible +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoDeValor +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoEquipable +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoUtilidad +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoCura + +class ModalDetallesFragment : DialogFragment() { + lateinit var objeto: Objeto + var parentView: View? = null + private var jugadorObserver: ((Jugador) -> Unit)? = null + + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.modal_detalles, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + jugadorObserver = { LayoutUtils.actualizarInventarioUI(parentView!!,parentFragmentManager) } + GameState.jugador.addObserver(jugadorObserver!!) + + val params = dialog?.window?.attributes + if (params != null) { + params.width = (resources.displayMetrics.widthPixels * 0.90).toInt() + params.height = ViewGroup.LayoutParams.WRAP_CONTENT + dialog?.window?.attributes = params + } + + val botonUsar: Button = view.findViewById(R.id.botonUsar) + val botonDestruir: Button = view.findViewById(R.id.botonDestruir) + + if(GameState.jugador.equipables.contains(objeto)){ + "Desequipar".also { botonUsar.text = it } + botonDestruir.visibility = View.GONE + val layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + marginEnd = 0 + width = (165 * GameState.context!!.resources.displayMetrics.density).toInt() + height = (50 * GameState.context!!.resources.displayMetrics.density).toInt() + } + + botonUsar.layoutParams = layoutParams + + }else if (objeto is ObjetoEquipable) { + "Equipar".also { botonUsar.text = it } + } else if (objeto is ObjetoDeValor || objeto is ObjetoUtilidad){ + val parent = botonUsar.parent as ViewGroup + parent.removeView(botonUsar) + } + + botonUsar.setOnClickListener { + if(GameState.jugador.equipables.contains(objeto)){ + desequipar() + }else{ + usar() + } + } + + botonDestruir.setOnClickListener { + destruir() + } + + view.findViewById<ImageView>(R.id.imagenObjeto).setImageResource(objeto.imagen) + view.findViewById<TextView>(R.id.nombreObjeto).text = objeto.nombre + view.findViewById<TextView>(R.id.descripcionObjeto).text = objeto.descripcion + + + } + + private fun usar() { + val esConsumibleConEfectoDeCura = objeto is ObjetoConsumible && (objeto as ObjetoConsumible).efecto is EfectoObjetoCura + + if (esConsumibleConEfectoDeCura) { + if (GameState.jugador.atributos[Atributo.Vida]!! == GameState.jugador.vidaMax) { + val mensaje = "Tu salud ya está al máximo. No necesitas usar ${objeto.nombre}." + view?.findViewById<TextView>(R.id.textoResultadoUso)?.text = mensaje + return + } + } + if(GameState.jugador.equipables.size == 3 && objeto is ObjetoEquipable){ + val mensaje = "No te queda espacio para equipar nada más" + view?.findViewById<TextView>(R.id.textoResultadoUso)?.text = mensaje + }else{ + objeto.usar() + destruir() + } + + } + + private fun destruir(){ + GameState.jugador.destruirObjeto(objeto) + dismiss() + } + + private fun desequipar(){ + if(GameState.jugador.inventario.size == 9){ + val mensaje = "Tienes el inventario lleno" + view?.findViewById<TextView>(R.id.textoResultadoUso)?.text = mensaje + }else{ + val objetoEquipado = objeto as ObjetoEquipable + objetoEquipado.desequipar() + dismiss() + } + } + + override fun onDestroyView() { + super.onDestroyView() + jugadorObserver?.let { GameState.jugador.removeObserver(it) } + jugadorObserver = null + } + + override fun onStart() { + super.onStart() + + // Ajustar el tamaño del modal + dialog?.window?.setLayout( + (resources.displayMetrics.widthPixels * 0.9).toInt(), // 90% del ancho de la pantalla + ViewGroup.LayoutParams.WRAP_CONTENT // Altura automática + ) + } + +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalHabilidadesProtagonista.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalHabilidadesProtagonista.kt new file mode 100644 index 0000000000000000000000000000000000000000..a90cc78c0819e39ce6465780e3b028c172ceae39 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ModalHabilidadesProtagonista.kt @@ -0,0 +1,127 @@ +package com.example.ellegadodepintia.exploradoresDePintia + +import android.graphics.drawable.AnimationDrawable +import android.os.Bundle +import android.text.Spannable +import android.text.SpannableString +import android.text.style.ImageSpan +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import android.widget.GridLayout +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.ScrollView +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.fragment.app.DialogFragment +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState + +class ModalHabilidadesProtagonista : DialogFragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.modal_habilidades_protagonista, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val params = dialog?.window?.attributes + if (params != null) { + params.width = (resources.displayMetrics.widthPixels * 0.90).toInt() + params.height = ViewGroup.LayoutParams.WRAP_CONTENT + dialog?.window?.attributes = params + } + + val imagenProtagonista = view.findViewById<ImageView>(R.id.imagenProtagonista) + val idleAnimation = imagenProtagonista.drawable as? AnimationDrawable + idleAnimation?.start() + agregarSlots(view) + } + + private fun agregarSlots(view: View) { + val slotsContainer = view.findViewById<GridLayout>(R.id.habilidadesContainer) + + slotsContainer.removeAllViews() + + val scrollView = ScrollView(requireContext()) + val scrollContainer = LinearLayout(requireContext()) + scrollContainer.orientation = LinearLayout.VERTICAL + scrollView.addView(scrollContainer) + + GameState.jugador.habilidades.forEachIndexed { index, habilidad -> + val button = Button(requireContext()) + + val heightInPixels = (38 * resources.displayMetrics.density).toInt() + button.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + heightInPixels + ) + + val text = habilidad.nombre + val spannableString = SpannableString("${habilidad.energia} $text") + + val icon = ContextCompat.getDrawable(requireContext(), R.drawable.icon_energia) + icon?.setBounds(0, 0, (16 * resources.displayMetrics.density).toInt(), (16 * resources.displayMetrics.density).toInt()) + val imageSpan = ImageSpan(icon!!) + spannableString.setSpan(imageSpan, 1, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE) + + button.text = spannableString + + button.setBackgroundResource(R.drawable.style_boton_habilidad) + button.setTextColor(ContextCompat.getColor(requireContext(), R.color.black)) + + button.tag = index + + + button.setOnClickListener { + val habilidadIndex = it.tag as Int + val habilidadSeleccionada = GameState.jugador.habilidades[habilidadIndex] + habilidadSeleccionada.usar() + dismiss() + } + + + val descripcionTextView = TextView(requireContext()) + descripcionTextView.text = habilidad.descripcion + descripcionTextView.textSize = 14f + descripcionTextView.setTextColor(ContextCompat.getColor(requireContext(), R.color.black)) + val layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.WRAP_CONTENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ) + layoutParams.topMargin = (5*resources.displayMetrics.density).toInt() + layoutParams.bottomMargin = (10 * resources.displayMetrics.density).toInt() + + descripcionTextView.layoutParams = layoutParams + + + + + val slotContainer = LinearLayout(requireContext()) + slotContainer.orientation = LinearLayout.VERTICAL + + slotContainer.addView(button) + slotContainer.addView(descripcionTextView) + + scrollContainer.addView(slotContainer) + } + + slotsContainer.addView(scrollView) + } + + override fun onStart() { + super.onStart() + + // Ajustar el tamaño del modal + dialog?.window?.setLayout( + (resources.displayMetrics.widthPixels * 0.9).toInt(), // 90% del ancho de la pantalla + ViewGroup.LayoutParams.WRAP_CONTENT // Altura automática + ) + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/Resumen.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/Resumen.kt new file mode 100644 index 0000000000000000000000000000000000000000..56a24d92fc5f3ee1fdf5da952e574103292c14c0 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/Resumen.kt @@ -0,0 +1,150 @@ +package com.example.ellegadodepintia.exploradoresDePintia + +import android.animation.AnimatorSet +import android.animation.ObjectAnimator +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.view.View +import android.view.ViewGroup +import android.view.animation.AccelerateDecelerateInterpolator +import android.widget.Button +import android.widget.ImageView +import android.widget.ProgressBar +import android.widget.TextView +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.example.ellegadodepintia.MapActivity +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoDeValor +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.ruleta.Ruleta + +class Resumen : AppCompatActivity() { + private lateinit var startForResult: ActivityResultLauncher<Intent> + private var gananciaTotal = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_resumen_partida) + + startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + val mensajeResultado = result.data?.getStringExtra("resultado")!!.toInt() + println(mensajeResultado) + val textoResumen = findViewById<TextView>(R.id.textoResumen) + "Has usado el ticker para generar aun más monedas. Enhorabuena, has conseguido $mensajeResultado monedas.".also { + textoResumen.text = it + } + GameState.jugador.monedas+=mensajeResultado-gananciaTotal + GameState.jugador.monedas.toString() + .also { findViewById<TextView>(R.id.moneyText).text = it } + RepositorioJugador.setMonedas(GameState.jugador.monedas) + findViewById<Button>(R.id.botonRuleta).visibility = View.GONE + + } + } + + + if (GameState.jugador.atributos[Atributo.Vida]!! <= 0) { + mostrarDerrota() + } else { + calcularGanancias() + } + GameState.jugador.monedas.toString() + .also { findViewById<TextView>(R.id.moneyText).text = it } + val continuarButton = findViewById<Button>(R.id.botonContinuar) + continuarButton.setOnClickListener { + val intent = Intent(this, MapActivity::class.java) + startActivity(intent) + GameState.reset() + } + + val barraVida = findViewById<ProgressBar>(R.id.barraVida) + barraVida.max = GameState.jugador.vidaMax + barraVida.progress = GameState.jugador.atributos[Atributo.Vida]!! + } + + private fun mostrarDerrota() { + val textoResumen = findViewById<TextView>(R.id.textoResumen) + val imagenProtagonista = findViewById<ImageView>(R.id.imagenProtagonista) + + "El investigador ha sido derrotado, ha perdido todos sus objetos del inventario".also { + textoResumen?.text = it + } + imagenProtagonista?.setImageResource(R.drawable.protagonista_die_06) + + } + + private fun calcularGanancias() { + val imagenProtagonista = findViewById<ImageView>(R.id.imagenProtagonista) + val textoResumen = findViewById<TextView>(R.id.textoResumen) + val recyclerView: RecyclerView = findViewById(R.id.resumenRecyclerView) + recyclerView.layoutManager = LinearLayoutManager(this) + var nObjetosValor = 0 + textoResumen?.text = "" + + val movimientoLateral = + ObjectAnimator.ofFloat(imagenProtagonista, "translationX", -100f, 100f) + movimientoLateral.duration = 1500 + movimientoLateral.repeatCount = ObjectAnimator.INFINITE + movimientoLateral.repeatMode = ObjectAnimator.REVERSE + + val reboteVertical = ObjectAnimator.ofFloat(imagenProtagonista, "translationY", 0f, 30f, 0f) + reboteVertical.duration = 600 + reboteVertical.repeatCount = ObjectAnimator.INFINITE + reboteVertical.repeatMode = ObjectAnimator.REVERSE + reboteVertical.interpolator = AccelerateDecelerateInterpolator() + + val animatorSet = AnimatorSet() + animatorSet.playTogether(movimientoLateral, reboteVertical) + animatorSet.start() + + val objetosDeValor: MutableList<ObjetoDeValor> = mutableListOf() + for (objeto in GameState.jugador.inventario) { + if (objeto is ObjetoDeValor) { + nObjetosValor++ + gananciaTotal += objeto.coste + objetosDeValor.add(objeto) + objeto.usar() + } + } + println(objetosDeValor.isEmpty()) + recyclerView.adapter = ResumenAdapter(objetosDeValor) + + + if (nObjetosValor == 0) { + "El investigador no ha conseguido ningún objeto de valor".also { + textoResumen?.text = it + } + } else { + "${textoResumen.text} Enhorabuena, has conseguido $gananciaTotal monedas.".also { + textoResumen.text = it + } + val botonRuleta = findViewById<Button>(R.id.botonRuleta) + val tieneTicket = GameState.jugador.inventario.any { it.nombre == "Ticket" } + println(tieneTicket) + if (!tieneTicket) { + (botonRuleta.parent as? ViewGroup)?.removeView(botonRuleta) + } else { + botonRuleta.visibility = View.VISIBLE + botonRuleta.setOnClickListener { + val intent = Intent(this, Ruleta::class.java) + intent.putExtra("PUNTUACION_ACTUAL", gananciaTotal) + startForResult.launch(intent) + } + } + } + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + super.onBackPressed() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ResumenAdapter.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ResumenAdapter.kt new file mode 100644 index 0000000000000000000000000000000000000000..11e5b45dce5d7aabf9173500f5570fd63e3695e0 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ResumenAdapter.kt @@ -0,0 +1,38 @@ +package com.example.ellegadodepintia.exploradoresDePintia +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoDeValor + +class ResumenAdapter(private val resumenList: MutableList<ObjetoDeValor>) : + RecyclerView.Adapter<ResumenAdapter.ResumenViewHolder>() { + + class ResumenViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val textoObjeto: TextView = itemView.findViewById(R.id.textoObjeto) + val textoPrecio: TextView = itemView.findViewById(R.id.textoPrecio) + val imagen: ImageView = itemView.findViewById(R.id.imagenObjeto) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ResumenViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.resumen_item, parent, false) + return ResumenViewHolder(view) + } + + override fun onBindViewHolder(holder: ResumenViewHolder, position: Int) { + val resumen = resumenList[position] + resumen.nombre.also { holder.textoObjeto.text = it } + (" :" + resumen.coste.toString()).also { holder.textoPrecio.text = it } + holder.imagen.setImageResource(resumen.imagen) + } + + override fun getItemCount(): Int { + return resumenList.size + } +} + + diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Atributo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Atributo.kt new file mode 100644 index 0000000000000000000000000000000000000000..ad24c02f2c36bafce2cd7d4affd76364f445fa29 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Atributo.kt @@ -0,0 +1,10 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +enum class Atributo { + Vida, + Ataque, + Investigacion, + Energia, + Nula, + Critico +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GameState.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GameState.kt new file mode 100644 index 0000000000000000000000000000000000000000..552a1d63f701f6c4fdcb0ff27745ea9aa54c3825 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GameState.kt @@ -0,0 +1,27 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +import android.app.Activity +import android.content.Context +import androidx.fragment.app.FragmentManager +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.Evento +import java.lang.ref.WeakReference + +object GameState { + lateinit var eventoActual: Evento + lateinit var fragmentManager : FragmentManager + lateinit var jugador: Jugador + private var contexto: WeakReference<Context>? = null + + val context: Activity? + get() = contexto?.get() as? Activity + + fun setContexto(context: WeakReference<Context>) { + contexto = context + } + + fun reset() { + jugador.reset() + contexto = null + } + +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..64d06fde77604cd763b2840e21061b7e16116bdd --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt @@ -0,0 +1,137 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +import android.graphics.drawable.AnimationDrawable +import android.widget.ImageView +import android.widget.TextView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.Evento +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoFactorySelector +import kotlin.random.Random + +object GeneradorDeEventos { + private const val CANTIDAD = 10 // Numero de eventos generados + private var eventos = ArrayList<Evento>() + + private val pesosBase = mutableMapOf( + TipoEvento.Reliquia to 0.20, + TipoEvento.Tienda to 0.1, + TipoEvento.Riesgo to 0.2, + TipoEvento.Trampa to 0.1, + TipoEvento.Combate to 0.20, + TipoEvento.Descanso to 0.0, + TipoEvento.Ladron to 0.1, + TipoEvento.Desenterrar to 0.1 + ) + + private var historialTipos = mutableListOf<TipoEvento>() + + + fun generarEventos() { + val eventosGenerados = ArrayList<Evento>() + historialTipos = mutableListOf() + + + while (eventosGenerados.size < CANTIDAD) { + val tipoSeleccionado = seleccionarTipoEvento() + println(historialTipos) + /*if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) { + continue + }*/ + + val nuevoEvento = EventoFactorySelector.obtenerFactory(tipoSeleccionado).generarEvento() + + if (!eventosGenerados.contains(nuevoEvento)) { + eventosGenerados.add(nuevoEvento) + historialTipos.add(tipoSeleccionado) + } + } + + eventos = eventosGenerados + } + + private fun seleccionarTipoEvento(): TipoEvento { + val pesosActuales = pesosBase.toMutableMap() + + // 20% Descanso tras dos riegsos en los últimos 3 eventos + val recientes = historialTipos.takeLast(3) + if (recientes.count { it == TipoEvento.Riesgo } >= 2) { + pesosActuales[TipoEvento.Tienda] = pesosActuales[TipoEvento.Tienda]!! + 0.2 + // 25% Ladron si 2 reliquias + }else if(recientes.count{it == TipoEvento.Reliquia} >= 2){ + pesosActuales[TipoEvento.Ladron] = 0.25 + } + + // 35% Prob de descanso tras combate 20% Tienda 10% Combate + val ultimoTipo = historialTipos.lastOrNull() + if (ultimoTipo == TipoEvento.Combate) { + pesosActuales[TipoEvento.Descanso] = 0.35 + pesosActuales[TipoEvento.Tienda] = 0.2 + pesosActuales[TipoEvento.Combate] = 0.1 + // 30% Prob de combate tras desenterrar + }else if (ultimoTipo == TipoEvento.Desenterrar){ + pesosActuales[TipoEvento.Combate] = 0.3 + } + + val totalPesos = pesosActuales.values.sum() + val probabilidadesNormalizadas = pesosActuales.mapValues { it.value / totalPesos } + + val acumulado = probabilidadesNormalizadas.entries.fold(mutableListOf<Pair<Double, TipoEvento>>()) { acc, entry -> + val sumaAcumulada = acc.lastOrNull()?.first ?: 0.0 + acc.add(Pair(sumaAcumulada + entry.value, entry.key)) + acc + } + + val random = Random.nextDouble() + val tipoSeleccionado = acumulado.first { random <= it.first }.second + + return tipoSeleccionado + } + + fun comprobarEventoDisponible() : Boolean{ + return eventos.size >= 1 + } + + fun generarEvento(dificultad: Int) { + "Resultado del evento".also { context!!.findViewById<TextView>(R.id.textoResultado).text = it } + + val eventoSeleccionado = filtrarEventosPorDificultad(eventos, dificultad) + eventos.remove(eventoSeleccionado) + + val textEvento = context!!.findViewById<TextView>(R.id.textoEvento) + textEvento.text = eventoSeleccionado.descripcion + val imagenEvento = context!!.findViewById<ImageView>(R.id.imagenEvento) + + imagenEvento.setImageResource(eventoSeleccionado.imagen) + + val drawable = imagenEvento.drawable + + if (drawable is AnimationDrawable && eventoSeleccionado is EventoCombate) { + drawable.start() + } + + if(eventoSeleccionado is EventoCombate){ + GestorCombate.evento = eventoSeleccionado + } + GameState.eventoActual = eventoSeleccionado + GameState.eventoActual.addObserver { + LayoutUtils.actualizarEstadisticasEvento() } + + LayoutUtils.actualizarEstadisticasEvento() + + } + + private fun filtrarEventosPorDificultad(eventos: ArrayList<Evento>, dificultad: Int): Evento { + val eventosFiltrados = eventos.filter { it.dificultad == dificultad } + return eventosFiltrados[eventosFiltrados.indices.first] + } + + fun insertarCombate() { + val nuevoCombate = EventoFactorySelector.obtenerFactory(TipoEvento.Combate).generarEvento() + eventos.add(0, nuevoCombate) + historialTipos.add(0, TipoEvento.Combate) + } + + +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..c9556d3dcf1d67a7ac90bc4a8eb7419766f20fad --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt @@ -0,0 +1,197 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + + +import android.animation.ObjectAnimator +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import android.widget.TextView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRevivirEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoHabilidad +import com.example.ellegadodepintia.soundManager.SoundManager + +object GestorCombate { + private lateinit var soundManager: SoundManager + lateinit var evento: EventoCombate + private var turnoJugador = true + + fun cargarAnimacionesAtaqueProtagonista() { + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + imagenProtagonista?.setImageResource(R.drawable.protagonista_ataque_animation) + val ataqueAnimation = imagenProtagonista?.drawable as? AnimationDrawable + ataqueAnimation?.start() + + Handler(Looper.getMainLooper()).postDelayed({ + imagenProtagonista?.setImageResource(R.drawable.protagonista_idle_animation) + val idleAnimation = imagenProtagonista?.drawable as? AnimationDrawable + idleAnimation?.start() + }, 750) + } + + fun cargarAnimacionesMuerteProtagonista() { + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + imagenProtagonista?.setImageResource(R.drawable.protagonista_die_animation) + val muerteAnimation = imagenProtagonista?.drawable as? AnimationDrawable + muerteAnimation?.start() + soundManager = SoundManager(context!!) + soundManager.playSound(R.raw.sound_piano_over,100) + val handler = Handler(Looper.getMainLooper()) + handler.postDelayed({ + muerteAnimation!!.stop() + // Cambiar al último frame manualmente + imagenProtagonista.setImageDrawable(muerteAnimation.getFrame(muerteAnimation.numberOfFrames - 1)) + }, 900) + } + + fun cargarAnimacionesAtaqueEnemigo() { + val imagenEvento = context!!.findViewById<ImageView>(R.id.imagenEvento) + imagenEvento?.setImageResource(evento.imagenAtaque) + val ataqueEnemigo = imagenEvento?.drawable as? AnimationDrawable + ataqueEnemigo?.start() + + val ataqueDuracion = ataqueEnemigo?.let { + (0 until it.numberOfFrames).sumOf { i -> it.getDuration(i) } + } ?: 0 + + Handler(Looper.getMainLooper()).postDelayed({ + imagenEvento?.setImageResource(evento.imagen) + val idleAnimation = imagenEvento?.drawable as? AnimationDrawable + idleAnimation?.start() + }, ataqueDuracion.toLong()) + } + + fun cargarAnimacionsRegeneracionEnemigo() { + val imagenEvento = context!!.findViewById<ImageView>(R.id.imagenEvento) + val imagenEfecto = context!!.findViewById<ImageView>(R.id.imagenEfectoEvento) + + imagenEvento?.let { + val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f) + salto.duration = 300 + salto.start() + + imagenEfecto?.setImageResource(R.drawable.effect_regeneracion_animation) + val efectoAnimacion = imagenEfecto?.drawable as? AnimationDrawable + efectoAnimacion?.start() + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageDrawable(null) + }, 600) + } + } + + fun calcularAtaque(ataqueBase: Int, probabilidadCritico: Int): Int { + val ataqueFinal: Int + val resultadoTirada = (0..100).random() + ataqueFinal = if (resultadoTirada <= probabilidadCritico) { + ataqueBase * 2 + } else { + ataqueBase + } + return ataqueFinal + } + + private fun comenzarAccionEnemigo() { + if (evento.resistenciaActual > 0 && !evento.finalizado) { + Handler(Looper.getMainLooper()).postDelayed({ + accionEnemigo() + }, 800) + } else { + turnoJugador = true + if (revivirEnemigo() == "Fallo") { + evento.actualizarFinalizado(true) + 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) + } + } + } + } + + private fun revivirEnemigo(): String { + var mensaje = "Fallo" + val tieneRevivir = evento.acciones.any { it is EfectoRevivirEnemigo } + if (tieneRevivir) { + mensaje = evento.acciones.filterIsInstance<EfectoRevivirEnemigo>().first().ejecutar() + Handler(Looper.getMainLooper()).postDelayed({ + val textoResultado = context!!.findViewById<TextView>(R.id.textoResultado) + "${textoResultado.text} \n\n $mensaje".also { textoResultado.text = it } + }, 200) + } + return mensaje + + } + + fun accionProtagonista(efecto: Efecto): String { + val mensaje: String + if (turnoJugador) { + turnoJugador = false + restarTurnoBuffos() + mensaje = efecto.ejecutar() + if (efecto !is EfectoInvestigarEnemigo) { + comenzarAccionEnemigo() + } + } else { + mensaje = "No es tu turno" + } + return mensaje + } + + fun habilidadProtagonista(nombre: String, efecto: EfectoHabilidad, energia: Int) { + val textoResultado = context!!.findViewById<TextView>(R.id.textoResultado) + if (GameState.jugador.atributos[Atributo.Energia]!! >= energia) { + turnoJugador = false + "${textoResultado.text} \n\n Se ha utilizado $nombre".also { textoResultado.text = it } + restarTurnoBuffos() + efecto.ejecutar() + GameState.jugador.actualizarAtributo(Atributo.Energia, -energia) + comenzarAccionEnemigo() + } else { + "${textoResultado.text} \n\n EnergÃa insuficiente".also { textoResultado.text = it } + } + } + + private fun restarTurnoBuffos() { + for (buffo in GameState.jugador.buffos) { + buffo.pasarTurno() + } + } + + + private fun accionEnemigo() { + val textoResultado = context!!.findViewById<TextView>(R.id.textoResultado) + val efectoAtaque = seleccionarAccionEnemigo().ejecutar() + if (GameState.jugador.atributos[Atributo.Vida]!! <= 0) { + Handler(Looper.getMainLooper()).postDelayed({ + turnoJugador = true + }, 2000) + } else { + turnoJugador = true + "${textoResultado.text} \n\n $efectoAtaque".also { textoResultado.text = it } + } + } + + 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.filterNot { it is EfectoRevivirEnemigo }.random() + } else { + evento.acciones.filterNot { + it is EfectoRegeneracionEnemigo || + it is EfectoRevivirEnemigo + }.random() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorDeEventos.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorDeEventos.kt new file mode 100644 index 0000000000000000000000000000000000000000..1da4d2802ac807ffeeb58d46281be8ec5647bbb2 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorDeEventos.kt @@ -0,0 +1,129 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.widget.Button +import android.widget.GridLayout +import android.widget.LinearLayout +import android.widget.TextView +import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.Resumen +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context + +object GestorDeEventos{ + + private var puedeHacerClick = true + + fun gestionar() { + val opcionesLayout = context!!.findViewById<GridLayout>(R.id.opciones) + opcionesLayout.removeAllViews() + + GameState.eventoActual.opciones.forEachIndexed { index, opcion -> + val boton = crearBotonDeOpcion(opcion, index) + opcionesLayout.addView(boton) + } + } + + + private fun crearBotonDeOpcion(opcion: Opcion, index: Int): Button { + val boton = Button(context).apply { + text = opcion.descripcion + background = ContextCompat.getDrawable(context, R.drawable.style_boton_option) + stateListAnimator = null + typeface = ResourcesCompat.getFont(context, R.font.pixeled) + + isAllCaps = false + setTextColor(ContextCompat.getColor(context, android.R.color.black)) + + val atributoDrawable = when (opcion.atributoRequerida) { + Atributo.Vida -> ContextCompat.getDrawable(context, R.drawable.icon_vida) + Atributo.Ataque -> ContextCompat.getDrawable(context, R.drawable.icon_espada) + Atributo.Investigacion -> ContextCompat.getDrawable(context, R.drawable.icon_vasija) + Atributo.Energia -> ContextCompat.getDrawable(context, R.drawable.icon_energia) + else -> null + } + + atributoDrawable?.let { + val width = (25 * resources.displayMetrics.density).toInt() + val height = it.intrinsicHeight * width / it.intrinsicWidth + it.setBounds(0, 0, width, height) + setCompoundDrawables(it, null, null, null) + } + + setOnClickListener { + if (puedeHacerClick) { + puedeHacerClick = false + + mostrarEfecto(opcion.aplicarEfecto()) + + Handler(Looper.getMainLooper()).postDelayed({ + puedeHacerClick = true + }, 500) + } + } + } + + val layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + if ((index == 0 || index == 1) && GameState.eventoActual.opciones.size == 4) { + marginEnd = (14 * context!!.resources.displayMetrics.density).toInt() + } + if (index == 1 || index == 3) { + topMargin = (18 * context!!.resources.displayMetrics.density).toInt() + } + width = (165 * context!!.resources.displayMetrics.density).toInt() + height = (50 * context!!.resources.displayMetrics.density).toInt() + } + + boton.layoutParams = layoutParams + + return boton + } + + fun mostrarOpcionElegirCamino() { + val opcionesLayout = context!!.findViewById<GridLayout>(R.id.opciones) + opcionesLayout.removeAllViews() + + val boton = Button(context).apply { + "Seguir explorando".also { text = it } + background = ContextCompat.getDrawable(context, R.drawable.style_boton_option) + stateListAnimator = null + typeface = ResourcesCompat.getFont(context, R.font.pixeled) + + isAllCaps = false + setTextColor(ContextCompat.getColor(context, android.R.color.black)) + + setOnClickListener { + if(puedeHacerClick){ + puedeHacerClick = false + GameState.jugador.eliminarTodosLosBuffos() + if (GeneradorDeEventos.comprobarEventoDisponible()){ + GeneradorDeEventos.generarEvento(0) + gestionar() + } else { + val intent = Intent(context, Resumen::class.java) + context.startActivity(intent) + } + + Handler(Looper.getMainLooper()).postDelayed({ + puedeHacerClick = true + }, 1500) + } + } + + } + opcionesLayout.addView(boton) + + } + + private fun mostrarEfecto(efecto: String) { + context!!.findViewById<TextView>(R.id.textoResultado).text = efecto + } + + +} \ No newline at end of file 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 new file mode 100644 index 0000000000000000000000000000000000000000..0b702ee41ece32a29ccb0bfb2da0a0a60597dd73 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Jugador.kt @@ -0,0 +1,212 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +import android.content.Intent +import android.os.Handler +import android.os.Looper +import android.widget.TextView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.Resumen +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate.cargarAnimacionesMuerteProtagonista +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.Habilidad +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoGolpeMultiple +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoBuffo +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoEquipable +import com.example.ellegadodepintia.repositorios.RepositorioJugador +import com.example.ellegadodepintia.repositorios.RepositorioObjetos + +class Jugador { + var nivelCiudad = 1 + var atributos: MutableMap<Atributo, Int> = mutableMapOf() + var vidaMax = 10 + var energiaMax = 10 + private val observers = mutableListOf<(Jugador) -> Unit>() + var inventario = ArrayList<Objeto>(9) + var equipables = ArrayList<ObjetoEquipable>(3) + var habilidades = ArrayList<Habilidad>(1) + var buffos = ArrayList<EfectoBuffo>() + var monedas = 0 + var objetosTienda = ArrayList<String>(6) + var objetosArmeria = ArrayList<String>(6) + + init { + atributos[Atributo.Vida] = 10 + atributos[Atributo.Ataque] = 1 + atributos[Atributo.Investigacion] = 1 + atributos[Atributo.Energia] = 10 + atributos[Atributo.Critico] = 8 + + habilidades.add( + Habilidad( + nombre = "Furia del Vacceo", + descripcion = "Libera todo el poder de su entrenamiento, entrando en un estado de furia que aumenta el daño en 2 puntos. Este efecto dura 2 turnos", + efecto = EfectoBuffo(Atributo.Ataque, 2, 2), + 3 + ) + ) + + habilidades.add( + Habilidad( + nombre = "Golpe Doble", + descripcion = "Un ataque básico con el gladius que golpea dos veces con un 100% de precisión, causando el doble de daño al enemigo.", + efecto = EfectoGolpeMultiple(2), + 3 + ) + ) + /*habilidades.add( + Habilidad( + nombre = "Revitalización Floral", + descripcion = "Usando el poder ancestral de las plantas, esta habilidad invoca la energÃa curativa de las flores. " + + "Aumentas tu salud en 2 puntos", + efecto = EfectoSubirAtaque(2) + ) + )*/ + } + + fun addObserver(observer: (Jugador) -> Unit) { + observers.add(observer) + } + + fun removeObserver(observer: (Jugador) -> Unit) { + observers.remove(observer) + } + + private fun notifyObservers() { + observers.forEach { it(this) } + } + + fun actualizarAtributo(atributo: Atributo, valor: Int) { + atributos[atributo] = atributos[atributo]!!.plus(valor) + if (atributo == Atributo.Vida && atributos[atributo]!! >= vidaMax){ + atributos[atributo] = vidaMax + } + if (atributo == Atributo.Energia && atributos[atributo]!! >= energiaMax){ + atributos[atributo] = energiaMax + } + notifyObservers() + if (atributo == Atributo.Vida && atributos[atributo]!! <= 0) { + "¡Has sido derrotado!".also { + context!!.findViewById<TextView>(R.id.textoResultado).text = it + } + cargarAnimacionesMuerteProtagonista() + Handler(Looper.getMainLooper()).postDelayed({ + val intent = Intent(context, Resumen::class.java) + context!!.startActivity(intent) + }, 2000) + } + } + + fun setHabilidad(atributo: Atributo, valor: Int) { + atributos[atributo] = valor + notifyObservers() + } + + fun conseguirObjeto(objeto: Objeto): String { + return if (inventario.size < 9) { + inventario.add(objeto) + val nuevoInventarioNombres = ArrayList<String>() + for(objetoInventario in inventario){ + nuevoInventarioNombres.add(objetoInventario.nombre) + } + RepositorioJugador.setInventario(nuevoInventarioNombres) + "Se ha añadido ${objeto.nombre} al inventario" + } else { + "¡El inventario está lleno!" + } + } + + fun equiparObjeto(objeto: ObjetoEquipable) { + equipables.add(objeto) + } + + fun desequiparObjeto(objeto: ObjetoEquipable) { + equipables.remove(objeto) + inventario.add(objeto) + notifyObservers() + } + + fun destruirObjeto(objeto: Objeto) { + inventario.remove(objeto) + val nuevoInventarioNombres = ArrayList<String>() + for(objetoInventario in inventario){ + nuevoInventarioNombres.add(objetoInventario.nombre) + } + RepositorioJugador.setInventario(nuevoInventarioNombres) + notifyObservers() + } + + fun actualizarBuffo(efectoBuffo: EfectoBuffo) { + buffos.add(efectoBuffo) + } + + fun eliminarBuffo(efectoBuffo: EfectoBuffo) { + buffos.remove(efectoBuffo) + } + + fun eliminarTodosLosBuffos() { + for (buffo in buffos) { + buffo.eliminarBuffo() + } + + } + + fun actualizarVidaMax(valor: Int) { + vidaMax = valor + notifyObservers() + } + + fun actualizarMonedas(valor: Int) { + monedas = valor + RepositorioJugador.setMonedas(valor) + notifyObservers() + } + + fun actualizarNivelCiudad(valor: Int) { + nivelCiudad = valor + RepositorioJugador.setNivelTaberna(valor) + notifyObservers() + } + + fun actualizarObjetosTienda(nObjetos : Int){ + val nuevosObjetos = RepositorioObjetos.obtenerObjetosAleatoriosTienda(nObjetos) + this.objetosTienda = nuevosObjetos + RepositorioJugador.setObjetosTienda(nuevosObjetos) + notifyObservers() + } + + fun actualizarObjetosArmeria(nObjetos : Int){ + val nuevosObjetos = RepositorioObjetos.obtenerObjetosAleatoriosArmeria(nObjetos) + this.objetosArmeria = nuevosObjetos + RepositorioJugador.setObjetosArmeria(nuevosObjetos) + notifyObservers() + } + + fun reset() { + observers.clear() + + equipables.toList().forEach { it.desequipar() } + + inventario.clear() + equipables.clear() + buffos.clear() + + atributos[Atributo.Vida] = 10 + atributos[Atributo.Ataque] = 1 + atributos[Atributo.Investigacion] = 1 + atributos[Atributo.Energia] = 10 + + vidaMax = 10 + energiaMax = 10 + actualizarObjetosTienda(nivelCiudad*2) + actualizarObjetosArmeria(nivelCiudad*2) + RepositorioJugador.setInventario(ArrayList()) + } + + fun destruirObjetoRandom(){ + val randomIndex = (0..inventario.size.minus(1)).random() + inventario.removeAt(randomIndex) + notifyObservers() + } + +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/LayoutUtils.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/LayoutUtils.kt new file mode 100644 index 0000000000000000000000000000000000000000..dada29bf4b936aa0cb9e367004b2bf417e0d60bd --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/LayoutUtils.kt @@ -0,0 +1,150 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +import android.app.Activity +import android.content.Context +import android.view.View +import android.widget.ImageView +import android.widget.ProgressBar +import android.widget.TextView +import androidx.cardview.widget.CardView +import androidx.fragment.app.FragmentManager +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.ModalDetallesFragment +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import android.animation.ObjectAnimator +import com.example.ellegadodepintia.soundManager.SoundManager +object LayoutUtils { + + private lateinit var soundManager: SoundManager + fun actualizarEstadisticasMain() { + if (context is Activity) { + val barraVida = context!!.findViewById<ProgressBar>(R.id.barraVida) + val barraEnergia = context!!.findViewById<ProgressBar>(R.id.barraEnergia) + val ataqueText = context!!.findViewById<TextView>(R.id.ataqueText) + val investigacionText = context!!.findViewById<TextView>(R.id.investigacionText) + val vidaText = context!!.findViewById<TextView>(R.id.vidaText) + val energiaText = context!!.findViewById<TextView>(R.id.EnergiaText) + + actualizarJugador(barraVida, ataqueText, investigacionText, vidaText, energiaText, barraEnergia,true) + } + } + + fun actualizarEstadisticasInventario(view: View) { + val barraVida = view.findViewById<ProgressBar>(R.id.barraVida) + val barraEnergia = context!!.findViewById<ProgressBar>(R.id.barraEnergia) + val ataqueText = view.findViewById<TextView>(R.id.ataqueText) + val investigacionText = view.findViewById<TextView>(R.id.investigacionText) + val vidaText = view.findViewById<TextView>(R.id.vidaText) + val energiaText = view.findViewById<TextView>(R.id.EnergiaText) + actualizarJugador(barraVida, ataqueText, investigacionText, vidaText, energiaText, barraEnergia,false) + } + + + + private fun actualizarJugador( + barraVida: ProgressBar, + ataqueText: TextView, + investigacionText: TextView, + vidaText: TextView, + energiaText: TextView, + barraEnergia: ProgressBar, + sonido: Boolean + ) { + val vidaMax = GameState.jugador.vidaMax + val vidaActual = GameState.jugador.atributos[Atributo.Vida]!! + soundManager = SoundManager(context!!) + if(barraVida.progress>vidaActual && vidaActual!=vidaMax && sonido){ + soundManager.playSound(R.raw.sound_dano,100) + } + if (barraVida.progress != vidaActual) { + ObjectAnimator.ofInt(barraVida, "progress", barraVida.progress, vidaActual).apply { + duration = 500 + start() + } + } + barraVida.max = vidaMax + ataqueText.text = "${GameState.jugador.atributos[Atributo.Ataque]}" + investigacionText.text = "${GameState.jugador.atributos[Atributo.Investigacion]}" + val vidaInfo = "$vidaActual/$vidaMax" + vidaText.text = vidaInfo + val energiaMax = GameState.jugador.energiaMax + val energiaActual = GameState.jugador.atributos[Atributo.Energia]!! + if (barraEnergia.progress != energiaActual) { + ObjectAnimator.ofInt(barraEnergia, "progress", barraEnergia.progress, energiaActual).apply { + duration = 500 + start() + } + } + barraEnergia.max = energiaMax + val energiaInfo = "$energiaActual/$energiaMax" + energiaText.text = energiaInfo + } + + fun actualizarEstadisticasEvento() { + val barraEvento = context!!.findViewById<ProgressBar>(R.id.barraEvento) + barraEvento.max = GameState.eventoActual.resistenciaMax + barraEvento.progress = GameState.eventoActual.resistenciaActual + } + + fun actualizarInventarioUI(view: View, parentFragmentManager: FragmentManager) { + val slots = listOf( + view.findViewById(R.id.slot01), + view.findViewById(R.id.slot02), + view.findViewById(R.id.slot03), + view.findViewById(R.id.slot04), + view.findViewById(R.id.slot05), + view.findViewById(R.id.slot06), + view.findViewById(R.id.slot07), + view.findViewById(R.id.slot08), + view.findViewById<CardView>(R.id.slot09) + ) + + val slotsEquipable = listOf( + view.findViewById(R.id.slot1), + view.findViewById(R.id.slot2), + view.findViewById<CardView>(R.id.slot3) + ) + + actualizarSlots(slots, GameState.jugador.inventario, view, parentFragmentManager) + actualizarSlots(slotsEquipable, GameState.jugador.equipables, view, parentFragmentManager) + } + + private fun actualizarSlots(slots: List<View>, items: List<Objeto>, view: View, parentFragmentManager: FragmentManager) { + for (i in slots.indices) { + val slot = slots[i] as CardView + if (i < items.size) { + val imageView = slot.getChildAt(0) as ImageView + imageView.setImageResource(items[i].imagen) + slot.getChildAt(0).visibility = View.VISIBLE + + slot.setOnClickListener { + val modalDetallesFragment = ModalDetallesFragment() + modalDetallesFragment.objeto = items[i] + modalDetallesFragment.parentView = view + modalDetallesFragment.show(parentFragmentManager, "modalDetalles") + } + } else { + slot.getChildAt(0).visibility = View.GONE + slot.setOnClickListener(null) + } + } + } + + fun actualizarMonedas() { + GameState.jugador.monedas.toString() + .also { context!!.findViewById<TextView>(R.id.moneyText).text = it } + } + + fun actualizarMonedasTienda(tienda : Context) { + GameState.jugador.monedas.toString() + .also { (tienda as Activity).findViewById<TextView>(R.id.textoMonedas).text = it } + } + + fun actualizarMonedasInventario(view: View) { + GameState.jugador.monedas.toString() + .also { view.findViewById<TextView>(R.id.moneyText).text = it } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Opcion.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Opcion.kt new file mode 100644 index 0000000000000000000000000000000000000000..8ff79b5d9356e60f427571ad98c600c471592cf3 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/Opcion.kt @@ -0,0 +1,16 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto + +open class Opcion( + val descripcion: String, + val atributoRequerida: Atributo, + private val efecto: Efecto +) { + open fun aplicarEfecto(): String { + if (atributoRequerida != Atributo.Nula) { + efecto.probabilidadExito += GameState.jugador.atributos[atributoRequerida] ?: 0 + } + return efecto.ejecutar() + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/OpcionCombate.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/OpcionCombate.kt new file mode 100644 index 0000000000000000000000000000000000000000..7ac688d1d9ebd21d4af20c708d6e83da2f5e22e9 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/OpcionCombate.kt @@ -0,0 +1,16 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto + +class OpcionCombate( + private val efecto: Efecto, + descripcion: String, + atributoRequerida: Atributo +) : Opcion(descripcion, atributoRequerida, efecto) { + override fun aplicarEfecto(): String { + if (atributoRequerida != Atributo.Nula) { + efecto.probabilidadExito += GameState.jugador.atributos[atributoRequerida] ?: 0 + } + return GestorCombate.accionProtagonista(efecto) + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt new file mode 100644 index 0000000000000000000000000000000000000000..a3c59270b38417f439b73ea067baffa67ead6354 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt @@ -0,0 +1,20 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model + +enum class TipoEvento { + Reliquia, + Combate, + Tienda, + Trampa, + Riesgo, + Descanso, + Ladron, + Desenterrar +} + /*Trampa, + /* + Aliado, + Misterio, + Magia, + Puzzle, + Enfermedad, + EleccionMoral,*/ \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/Efecto.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/Efecto.kt new file mode 100644 index 0000000000000000000000000000000000000000..6e742fc41d1685f31543f9481f8320369fd96b11 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/Efecto.kt @@ -0,0 +1,6 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + + +abstract class Efecto(var probabilidadExito: Int) { + abstract fun ejecutar(): String +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueEnemigo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueEnemigo.kt new file mode 100644 index 0000000000000000000000000000000000000000..0122a4927f32b557d8db341b38d61d5d711fbf51 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueEnemigo.kt @@ -0,0 +1,32 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoAtaqueEnemigo(probabilidadExito: Int) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + val probabilidadEnemigo = (1..100).random() + val mensaje: String + soundManager = SoundManager(GameState.context!!) + val evento = GameState.eventoActual as? EventoCombate ?: return "No es un evento de combate" + GestorCombate.cargarAnimacionesAtaqueEnemigo() + + if (probabilidadEnemigo <= probabilidadExito) { + val ataqueReal = GestorCombate.calcularAtaque(evento.ataque, evento.probCritico) + + GameState.jugador.actualizarAtributo(Atributo.Vida, -ataqueReal) + soundManager.playSound(R.raw.sound_golpe1,100) + mensaje = "¡El enemigo te ha golpeado, recibes $ataqueReal de daño!" + } else { + mensaje = "¡El enemigo ha fallado el golpe!" + soundManager.playSound(R.raw.sound_miss,100) + } + + return mensaje + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000000000000000000000000000000000..ca76bf0dd2bd02c9f32686696d1d0de39a611390 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt @@ -0,0 +1,26 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate +import com.example.ellegadodepintia.soundManager.SoundManager +class EfectoAtaqueProtagonista(probabilidadExito: Int) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + val probabilidadPersonaje = (1..100).random() + val mensaje: String + soundManager = SoundManager(GameState.context!!) + if (probabilidadPersonaje <= probabilidadExito) { + GestorCombate.cargarAnimacionesAtaqueProtagonista() + val ataqueReal = GestorCombate.calcularAtaque(GameState.jugador.atributos[Atributo.Ataque]!!, GameState.jugador.atributos[Atributo.Critico]!!) + GameState.eventoActual.actualizarResistencia(-ataqueReal) + mensaje = "¡Ataque realizado con éxito has hecho $ataqueReal de daño" + soundManager.playSound(R.raw.sound_espada,100) + } else { + mensaje = "Has fallado el golpe, recibe 0 de daño" + soundManager.playSound(R.raw.sound_miss,100) + } + return mensaje + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoCriticoAutomaticoEnemigo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoCriticoAutomaticoEnemigo.kt new file mode 100644 index 0000000000000000000000000000000000000000..d3c96c1bbaecf26b00b3a62418f1fc2049eb3319 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoCriticoAutomaticoEnemigo.kt @@ -0,0 +1,20 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate + +class EfectoCriticoAutomaticoEnemigo(private val stringExito: String) : + Efecto(100) { + override fun ejecutar(): String { + + val evento = GameState.eventoActual as? EventoCombate ?: return "No es un evento de combate" + GestorCombate.cargarAnimacionesAtaqueEnemigo() + val ataqueReal = GestorCombate.calcularAtaque(evento.ataque, 35) + + GameState.jugador.actualizarAtributo(Atributo.Vida, -ataqueReal) + + return stringExito + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoDestruir.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoDestruir.kt new file mode 100644 index 0000000000000000000000000000000000000000..f3212d416e569b6e450fba59b893329f78d4da68 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoDestruir.kt @@ -0,0 +1,58 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GeneradorDeEventos +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoDeValor +import com.example.ellegadodepintia.repositorios.RepositorioObjetos +import com.example.ellegadodepintia.soundManager.SoundManager +//TODO() Agregar inventario con restos de la reliquia +class EfectoDestruir(probabilidadExito: Int) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + soundManager = SoundManager(context!!) + val probabilidad = (1..100).random() + return if (probabilidad <= probabilidadExito) { + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + + imagenProtagonista?.setImageResource(R.drawable.protagonista_ataque_animation) + val ataqueAnimation = imagenProtagonista?.drawable as? AnimationDrawable + ataqueAnimation?.start() + soundManager.playSound(R.raw.sound_espada,100) + + Handler(Looper.getMainLooper()).postDelayed({ + imagenProtagonista?.setImageResource(R.drawable.protagonista_idle_animation) + val idleAnimation = imagenProtagonista?.drawable as? AnimationDrawable + idleAnimation?.start() + }, 750) + + val ataque = GameState.jugador.atributos[Atributo.Ataque]!! + GameState.eventoActual.actualizarResistencia(-ataque) + + if (GameState.eventoActual.resistenciaActual > 0) { + "¡Cuidado, parece que la reliquia se está quebrando!" + } else { + GameState.eventoActual.actualizarFinalizado(true) + GameState.jugador.conseguirObjeto( + RepositorioObjetos.obtenerObjetoPorNombre("Fragmento de reliquia")!! + ) + val probabilidadCombate = (0..1).random() + soundManager.playSound(R.raw.sound_romper,100) + if(probabilidadCombate <= 60){ + GeneradorDeEventos.insertarCombate() + "¡Qué has hecho, la reliquia se ha roto por completo!. Has conseguido un fragmento de la reliquia. Parece que un enemigo te ha visto, ¡el próximo evento será un combate!" + }else{ + "¡Qué has hecho, la reliquia se ha roto por completo!. Has conseguido un fragmento de la reliquia" + } + } + } else { + "La reliquia ha resistido el golpe con éxito." + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoDetallesCompra.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoDetallesCompra.kt new file mode 100644 index 0000000000000000000000000000000000000000..aa665c9cb0f6aafe8126fbe364d3a4c31147a3da --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoDetallesCompra.kt @@ -0,0 +1,59 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.animation.ObjectAnimator + +import android.widget.ImageView +import android.widget.TextView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.ModalDetallesCompra +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.soundManager.SoundManager + + +class EfectoDetallesCompra(private val objeto: Objeto) : Efecto(100) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + val mensaje = "Has investigado el objeto que te estan ofreciendo" + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + + imagenProtagonista?.let { + val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f) + salto.duration = 300 + salto.start() + } + val modalDetallesFragment = ModalDetallesCompra().apply { + this.objeto = this@EfectoDetallesCompra.objeto + this.onDismissListener = { accionRealizada -> + if (accionRealizada) { + ejecutarCompra() + } + } + } + modalDetallesFragment.show(GameState.fragmentManager, "modalDetalles") + + return mensaje + } + + private fun ejecutarCompra() { + soundManager = SoundManager(context!!) + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + + imagenProtagonista?.let { + val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f) + salto.duration = 300 + salto.start() + } + + if (GameState.jugador.monedas < objeto.coste){ + "¡No tienes suficientes monedas para comprar el objeto!".also { context!!.findViewById<TextView>(R.id.textoResultado).text = it } + }else{ + soundManager.playSound(R.raw.sound_dineros,100) + GameState.jugador.actualizarMonedas(GameState.jugador.monedas - objeto.coste) + GameState.jugador.conseguirObjeto(objeto) + GameState.eventoActual.actualizarFinalizado(true) + "¡El objeto ha sido agregado a tu inventario!".also { context!!.findViewById<TextView>(R.id.textoResultado).text = it } + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoHabilidadesProtagonista.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoHabilidadesProtagonista.kt new file mode 100644 index 0000000000000000000000000000000000000000..bd4a80434fb6f34bf34a4d1ea7df700e1853e09c --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoHabilidadesProtagonista.kt @@ -0,0 +1,39 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.animation.ObjectAnimator +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.ModalHabilidadesProtagonista +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context + + +class EfectoHabilidadesProtagonista(probabilidadExito: Int) : Efecto(probabilidadExito) { + + override fun ejecutar(): String { + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + val imagenEfecto = context!!.findViewById<ImageView>(R.id.imagenEfectoEvento) + + imagenProtagonista?.let { + val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f) + salto.duration = 300 + salto.start() + + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageResource(R.drawable.effect_investigar_animation) + val efectoAnimacion = imagenEfecto?.drawable as? AnimationDrawable + efectoAnimacion?.start() + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageDrawable(null) + }, 400) + }, 300) + } + val modalDetallesFragment = ModalHabilidadesProtagonista() + modalDetallesFragment.show(GameState.fragmentManager, "modalHabilidades") + + return "Has consultado tus habilidades" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoHuirProtagonista.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoHuirProtagonista.kt new file mode 100644 index 0000000000000000000000000000000000000000..528d36f277daf2be739f85f9d50a4e7ceef4787f --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoHuirProtagonista.kt @@ -0,0 +1,38 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoHuirProtagonista(probabilidadExito: Int) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + val probabilidad = (1..100).random() + return if (probabilidad <= probabilidadExito) { + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + + imagenProtagonista?.setImageResource(R.drawable.protagonista_correr_animation) + val ataqueAnimation = imagenProtagonista?.drawable as? AnimationDrawable + ataqueAnimation?.start() + + Handler(Looper.getMainLooper()).postDelayed({ + imagenProtagonista?.setImageResource(R.drawable.protagonista_idle_animation) + val idleAnimation = imagenProtagonista?.drawable as? AnimationDrawable + idleAnimation?.start() + }, 1500) + GameState.eventoActual.actualizarFinalizado(true) + soundManager = SoundManager(context!!) + soundManager.playSound(R.raw.sound_cuerno,100) + "Has huido con éxito." + + + } else { + "No has podido huir." + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoIgnorar.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoIgnorar.kt new file mode 100644 index 0000000000000000000000000000000000000000..498c30dbcf5182b8d1128444e6eda45adbe5a8e1 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoIgnorar.kt @@ -0,0 +1,30 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context + +class EfectoIgnorar(probabilidadExito: Int) : Efecto(probabilidadExito) { + override fun ejecutar(): String { + + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + + imagenProtagonista?.setImageResource(R.drawable.protagonista_correr_animation) + val ataqueAnimation = imagenProtagonista?.drawable as? AnimationDrawable + ataqueAnimation?.start() + + Handler(Looper.getMainLooper()).postDelayed({ + imagenProtagonista?.setImageResource(R.drawable.protagonista_idle_animation) + val idleAnimation = imagenProtagonista?.drawable as? AnimationDrawable + idleAnimation?.start() + }, 1500) + + GameState.eventoActual.actualizarFinalizado(true) + return "Ignoras el evento" + + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoInvestigar.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoInvestigar.kt new file mode 100644 index 0000000000000000000000000000000000000000..867cb5219166e5eaca27de2a4212094d48ff00f3 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoInvestigar.kt @@ -0,0 +1,52 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.animation.ObjectAnimator +import android.content.Intent +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.minijuegoInvestigacion.MinijuegoInvestigar + + +class EfectoInvestigar(probabilidadExito: Int, private val stringInvestigado: String, private val valorAumentado: Int) : Efecto(probabilidadExito) { + + override fun ejecutar(): String { + val probabilidad = (1..100).random() + + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + val imagenEfecto = context!!.findViewById<ImageView>(R.id.imagenEfectoEvento) + + imagenProtagonista?.let { + val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f) + salto.duration = 300 + salto.start() + + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageResource(R.drawable.effect_investigar_animation) + val efectoAnimacion = imagenEfecto?.drawable as? AnimationDrawable + efectoAnimacion?.start() + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageDrawable(null) + }, 400) + }, 300) + } + + return if (probabilidad <= probabilidadExito) { + GameState.eventoActual.actualizarFinalizado(true) + GameState.jugador.actualizarAtributo(Atributo.Investigacion,valorAumentado) + + val intent = Intent(context, MinijuegoInvestigar::class.java) + context!!.startActivityForResult(intent, 100) + + stringInvestigado + "Ganas $valorAumentado de investigación." + } else { + GameState.eventoActual.actualizarFinalizado(true) + "No consigues desvelar ningún dato acerca de la reliquia" + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoInvestigarEnemigo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoInvestigarEnemigo.kt new file mode 100644 index 0000000000000000000000000000000000000000..8a114e4b2be5f72e030fb82577fe67656887bfab --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoInvestigarEnemigo.kt @@ -0,0 +1,41 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.animation.ObjectAnimator +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.ModalDetallesEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager + + +class EfectoInvestigarEnemigo(probabilidadExito: Int) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + soundManager = SoundManager(GameState.context!!) + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + val imagenEfecto = context!!.findViewById<ImageView>(R.id.imagenEfectoEvento) + + imagenProtagonista?.let { + val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f) + salto.duration = 300 + salto.start() + soundManager.playSound(R.raw.sound_laser,100) + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageResource(R.drawable.effect_investigar_animation) + val efectoAnimacion = imagenEfecto?.drawable as? AnimationDrawable + efectoAnimacion?.start() + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageDrawable(null) + }, 400) + }, 300) + } + val modalDetallesFragment = ModalDetallesEnemigo() + modalDetallesFragment.show(GameState.fragmentManager, "modalDetalles") + + return "Has investigado al enemigo" + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoLadron.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoLadron.kt new file mode 100644 index 0000000000000000000000000000000000000000..9e808a897bc8cb555d2b72a31644ec242d84bfbf --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoLadron.kt @@ -0,0 +1,18 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.content.Intent +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.minijuego3.Minijuego3 + +class EfectoLadron() : Efecto(100) { + override fun ejecutar(): String { + + val intent = Intent(context, Minijuego3::class.java) + context!!.startActivityForResult(intent, 103) + + GameState.eventoActual.actualizarFinalizado(true) + return "Si has logrado completar el minijuego, habrás obtenido monedas. Si no, el ladrón se habrá llevado un objeto de tu inventario y, si no poseÃas ninguno, tu energÃa se ha reducido a la mitad" + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoNubeVaccea.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoNubeVaccea.kt new file mode 100644 index 0000000000000000000000000000000000000000..7c077fbc1de8a7da65e5c782658a52f26498b66b --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoNubeVaccea.kt @@ -0,0 +1,24 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.content.Intent +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.minijuego2.Minijuego2 + + +class EfectoNubeVaccea() : Efecto(100) { + override fun ejecutar(): String { + if (GameState.jugador.atributos[Atributo.Energia] == GameState.jugador.energiaMax && + GameState.jugador.atributos[Atributo.Vida] == GameState.jugador.vidaMax){ + return "Tienes la vida y la energÃa al máximo. ¡No necesitas descansar!" + } + + val intent = Intent(context, Minijuego2::class.java) + context!!.startActivityForResult(intent, 102) + + GameState.eventoActual.actualizarFinalizado(true) + return "Has descansado" + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRegeneracionEnemigo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRegeneracionEnemigo.kt new file mode 100644 index 0000000000000000000000000000000000000000..135c434469824a43aa1dfbfefc3e6aafe816846b --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRegeneracionEnemigo.kt @@ -0,0 +1,18 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate +import com.example.ellegadodepintia.soundManager.SoundManager +class EfectoRegeneracionEnemigo(private val mensajeCuracion: String,private val cantidad: Int) : Efecto(100) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + soundManager = SoundManager(context!!) + GestorCombate.cargarAnimacionsRegeneracionEnemigo() + soundManager.playSound(R.raw.sound_healing,100) + GameState.eventoActual.actualizarResistencia(cantidad) + + return mensajeCuracion + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoReparar.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoReparar.kt new file mode 100644 index 0000000000000000000000000000000000000000..e36df2405f7f8f02129a4587e859bde7ec0fe427 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoReparar.kt @@ -0,0 +1,65 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.animation.ObjectAnimator +import android.content.Intent +import android.graphics.drawable.AnimationDrawable +import android.os.Handler +import android.os.Looper +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.minijuegoReparacion.MinijuegoReparacion +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoReparar(probabilidadExito: Int, private val stringReparado: String, private val stringFallo: String, private val valorPerdido: Int, private val objeto: Objeto) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + val probabilidad = (1..100).random() + soundManager = SoundManager(context!!) + soundManager.playSound(R.raw.sound_reparar,100) + val imagenProtagonista = context!!.findViewById<ImageView>(R.id.imagenProtagonista) + val imagenEfecto = context!!.findViewById<ImageView>(R.id.imagenEfectoEvento) + + imagenProtagonista?.let { + val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f) + salto.duration = 300 + salto.start() + + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageResource(R.drawable.effect_investigar_animation) + val efectoAnimacion = imagenEfecto?.drawable as? AnimationDrawable + efectoAnimacion?.start() + Handler(Looper.getMainLooper()).postDelayed({ + imagenEfecto?.setImageDrawable(null) + }, 400) + }, 300) + } + + return if (probabilidad <= probabilidadExito) { + GameState.eventoActual.actualizarResistencia(GameState.jugador.atributos[Atributo.Investigacion]!!) + if(GameState.eventoActual.resistenciaActual == GameState.eventoActual.resistenciaMax){ + + val intent = Intent(context, MinijuegoReparacion::class.java) + context!!.startActivityForResult(intent, 100) + + GameState.eventoActual.actualizarFinalizado(true) + stringReparado + "\n" + GameState.jugador.conseguirObjeto(objeto) + "." + }else{ + "Consigues reparar la reliquia parcialmente." + } + + } else { + GameState.eventoActual.actualizarFinalizado(true) + GameState.eventoActual.actualizarResistencia(-GameState.eventoActual.resistenciaActual) + if(GameState.jugador.atributos[Atributo.Investigacion] != 0){ + GameState.jugador.actualizarAtributo(Atributo.Investigacion,-valorPerdido) + "$stringFallo Pierdes $valorPerdido de investigación." + }else{ + stringFallo + } + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoResolverTrampaConAtributo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoResolverTrampaConAtributo.kt new file mode 100644 index 0000000000000000000000000000000000000000..f26a23ea8ae2d6f043aa6a140125428e1b3a1dfb --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoResolverTrampaConAtributo.kt @@ -0,0 +1,39 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager + + +class EfectoResolverTrampaConAtributo( + probabilidadExito: Int, + private val atributo: Atributo, + private val coste: Int, + private val stringLogrado: String, + private val stringFallo: String) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + soundManager = SoundManager(context!!) + if (atributo == Atributo.Energia && GameState.jugador.atributos[Atributo.Energia]!!<coste){ + return "No tienes energÃa suficiente para intentar escapar escalando. Necesitas al menos $coste puntos" + }else if(atributo == Atributo.Investigacion && GameState.jugador.atributos[Atributo.Investigacion]!!<coste) { + return "No tienes suficientes puntos de investigación para explorar" + }else{ + if(atributo==Atributo.Energia){ + soundManager.playSound(R.raw.sound_rocks,100) + }else if(atributo==Atributo.Vida){ + soundManager.playSound(R.raw.sound_romper,100) + } + GameState.jugador.actualizarAtributo(atributo, -coste) + return if ((1..100).random() <= probabilidadExito){ + GameState.eventoActual.actualizarFinalizado(true) + stringLogrado + }else{ + stringFallo + } + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRevivirEnemigo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRevivirEnemigo.kt new file mode 100644 index 0000000000000000000000000000000000000000..b10985a387efe47a1c78c9074570c4331e45cd24 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRevivirEnemigo.kt @@ -0,0 +1,32 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoRevivirEnemigo( + private val mensajeRevivir: String, private val porcentaje: Double, + probabilidadExito: Int +) : + Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + soundManager = SoundManager(context!!) + val probabilidadGenerada = (1..100).random() + if (probabilidadGenerada <= probabilidadExito) { + GestorCombate.cargarAnimacionsRegeneracionEnemigo() + soundManager.playSound(R.raw.sound_healing,100) + GameState.eventoActual.setResistencia( + (GameState.eventoActual.resistenciaMax * porcentaje).toInt() + ) + return mensajeRevivir + + } else { + return "Fallo" + } + + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRiesgo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRiesgo.kt new file mode 100644 index 0000000000000000000000000000000000000000..17329de691604659ab796a16a1b0a84f6da86382 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRiesgo.kt @@ -0,0 +1,51 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.graphics.drawable.AnimationDrawable +import android.widget.ImageView +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoRiesgo(private val objetoRecompensa : Objeto, private val dmgRiesgo: Int, private val mensajeRecomensa : String, private val mensajeRiesgo : String, + probabilidadExito: Int +) : Efecto(probabilidadExito) { + private lateinit var soundManager: SoundManager + override fun ejecutar(): String { + val resultado = (1..100).random() + soundManager = SoundManager(context!!) + soundManager.playSound(R.raw.sound_cofre,100) + val imageView: ImageView = context!!.findViewById(R.id.imagenEvento) + val animationDrawable = imageView.drawable as? AnimationDrawable + + val animationDuration = animationDrawable?.let { anim -> + var totalDuration = 0 + for (i in 0 until anim.numberOfFrames) { + totalDuration += anim.getDuration(i) + } + totalDuration + } ?: 0 + + animationDrawable?.start() + + imageView.postDelayed({ + animationDrawable?.let { anim -> + anim.stop() + anim.selectDrawable(anim.numberOfFrames - 1) + } + }, animationDuration.toLong() - 150) + + if (resultado <= probabilidadExito) { + GameState.jugador.conseguirObjeto(objetoRecompensa) + GameState.eventoActual.actualizarFinalizado(true) + return mensajeRecomensa + } else { + GameState.jugador.actualizarAtributo(Atributo.Vida, -dmgRiesgo) + GameState.eventoActual.actualizarFinalizado(true) + return mensajeRiesgo + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoUtilizarObjetoUtil.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoUtilizarObjetoUtil.kt new file mode 100644 index 0000000000000000000000000000000000000000..97ab20017e79f4178cffed90c0f2913b4f370e86 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoUtilizarObjetoUtil.kt @@ -0,0 +1,27 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.efecto + +import android.content.Intent +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.minijuego1.InicioMinijuego1 + + + +class EfectoUtilizarObjetoUtil(private val nombreObjeto: String) : Efecto(100) { + override fun ejecutar(): String { + val tieneObjeto = GameState.jugador.inventario.removeIf { it.nombre == nombreObjeto } + if (tieneObjeto){ + if (nombreObjeto == "Pala Vaccea"){ + val intent = Intent(context, InicioMinijuego1::class.java) + context!!.startActivity(intent) + GameState.eventoActual.actualizarFinalizado(true) + return "¡Has obtenido un objeto de coste equivalente a los puntos que has obtenido! Echa un vistazo a tu inventario" + }else{ + GameState.eventoActual.actualizarFinalizado(true) + return "Has usado el objeto $nombreObjeto de tu inventario. Has logrado escapar" + } + }else{ + return "No tienes el $nombreObjeto en tu inventario" + } + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000000000000000000000000000000000..2f4ee7295c3377c86a7cdb6ee515430e07deda24 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt @@ -0,0 +1,117 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion +import com.example.ellegadodepintia.exploradoresDePintia.model.OpcionCombate +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoAtaqueEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoAtaqueProtagonista +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoCriticoAutomaticoEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHabilidadesProtagonista +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.efecto.EfectoRevivirEnemigo +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto +import com.example.ellegadodepintia.repositorios.RepositorioObjetos + + +data class CombateInfo( + val imagenIdle: Int, + val imagenAtaque: Int, + val habilidades: List<Efecto>, + val vidaMax: Int, + val ataque: Int, + val recompensa: Objeto +) + +class CombateFactory : EventoFactory { + + private val combatesMap = mapOf( + "El Metal Volador es una criatura formada por fragmentos de metal antiguo. Protege los secretos del yacimiento de Pintia." to CombateInfo( + R.drawable.monster_metal_idle_animation, + R.drawable.monster_metal_attack_animation, + listOf( + EfectoAtaqueEnemigo(80), + EfectoRegeneracionEnemigo( + "El metal reconfigura sus fragmentos recuperando parte de su vida", + (1..2).random() + ) + ), + vidaMax = (5..10).random(), + ataque = (1..2).random(), + RepositorioObjetos.obtenerObjetoPorNombre("Moneda de plata Vaccea")!! + ), + "Al explorar una tumba de la necrópolis de las ruedas, un esqueleto armado aparece." to CombateInfo( + imagenIdle = R.drawable.monster_skeleton_idle, + imagenAtaque = R.drawable.monster_skeleton_attack, + habilidades = listOf(EfectoAtaqueEnemigo(75), EfectoRevivirEnemigo("El esqueleto se reconstruye reviviendo",0.35, 40)), + vidaMax = (5..8).random(), + ataque = (1..3).random(), + RepositorioObjetos.obtenerObjetoPorNombre("Poción de Veneno II")!! + ), + "Te encuentras con el Lobo Vacceo, sus ojos amarillos te observan fijamente, llenos de una sabidurÃa ancestral y una amenaza latente" to CombateInfo( + imagenIdle = R.drawable.monster_wolf_idle_animation, + imagenAtaque = R.drawable.monster_wolf_attack_animation, + habilidades = listOf(EfectoAtaqueEnemigo(80), EfectoCriticoAutomaticoEnemigo("El lobo te golpea gravemente con sus enormes zarpas")), + vidaMax = (5..7).random(), + ataque = (1..2).random(), + RepositorioObjetos.obtenerObjetoPorNombre("Piel del Gran Lobo")!! + ) + ) + + override fun generarDescripcion(): String { + return combatesMap.keys.random() + } + + override fun generarEvento(): EventoCombate { + val descripcion = generarDescripcion() + val combateInfo = combatesMap[descripcion] + ?: throw IllegalArgumentException("No se encontró información de combate") + + return EventoCombate( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(""), + imagenAtaque = combateInfo.imagenAtaque, + imagen = combateInfo.imagenIdle, + resistenciaMax = combateInfo.vidaMax, + ataque = combateInfo.ataque, + finalizado = false, + acciones = combateInfo.habilidades.toMutableList(), + recompensa = combateInfo.recompensa + ) + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return mutableListOf( + OpcionCombate( + descripcion = "Atacar", + atributoRequerida = Atributo.Ataque, + efecto = EfectoAtaqueProtagonista(70) + ), + Opcion( + descripcion = "Investigar", + atributoRequerida = Atributo.Investigacion, + efecto = EfectoInvestigarEnemigo(100) + ), + Opcion( + descripcion = "Habilidades", + atributoRequerida = Atributo.Nula, + efecto = EfectoHabilidadesProtagonista(GameState.jugador.atributos[Atributo.Vida]!!) + ), + OpcionCombate( + descripcion = "Huir", + atributoRequerida = Atributo.Vida, + efecto = EfectoHuirProtagonista(GameState.jugador.atributos[Atributo.Vida]!!), + ) + ) + } + + override fun generarImagen(descripcion: String): Int { + return combatesMap[descripcion]!!.imagenIdle + } + +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..1e4b78b21012c8f90b9b7057b0a2d42b1b0b2421 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt @@ -0,0 +1,44 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +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.EfectoNubeVaccea + +class DescansoFactory : EventoFactory { + val descripcion = "Llegaste a un campamento vacceo, con un gran fuego en el centro y chozas hechas de madera y barro. Aquà puedes descansar, recuperar energÃa y estar listo para nuevas aventuras." + + override fun generarDescripcion(): String { + return descripcion + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return mutableListOf( + Opcion( + descripcion = "Descansar", + atributoRequerida = Atributo.Energia, + EfectoNubeVaccea() + + ), Opcion( + descripcion = "Continuar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + )) + } + + override fun generarImagen(descripcion: String): Int { + return R.drawable.asi_exploradores_campamento + } + + override fun generarEvento(): EventoDescanso { + return EventoDescanso( + descripcion = generarDescripcion(), + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + finalizado = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DesenterrarFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DesenterrarFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..0bffea7579abc5d2bf48b507c07dd23023a36bd6 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DesenterrarFactory.kt @@ -0,0 +1,52 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +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.EfectoUtilizarObjetoUtil + +class DesenterrarFactory : EventoFactory { + private val desenterrarMap = mapOf( + "¡Has encontrado un antiguo yacimiento arqueológico! Aquà se esconden reliquias misteriosas esperando ser desenterradas. ¿Qué secretos del pasado descubrirás?" to Pair( + R.drawable.asi_exploradores_desenterrar, listOf( + Opcion( + descripcion = "Desenterrar", + atributoRequerida = Atributo.Nula, + EfectoUtilizarObjetoUtil( + "Pala Vaccea" + ) + ), Opcion( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + ) + + override fun generarDescripcion(): String { + return desenterrarMap.keys.random() + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return desenterrarMap[descripcion]?.second?.shuffled()?.take(4)?.toMutableList() + ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + return desenterrarMap[descripcion]?.first!! + } + + override fun generarEvento(): EventoDesenterrar { + val descripcion = generarDescripcion() + return EventoDesenterrar( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + finalizado = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/Evento.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/Evento.kt new file mode 100644 index 0000000000000000000000000000000000000000..5769c1392298f9541ce4364e0baf286df1e7e858 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/Evento.kt @@ -0,0 +1,56 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorDeEventos +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +abstract class Evento( + open val descripcion: String, + open val dificultad: Int, + open val opciones: MutableList<Opcion>, + open val imagen: Int, + val resistenciaMax: Int, + open var resistenciaActual: Int, + open var finalizado : Boolean +){ + private val observers = mutableListOf<(Evento) -> Unit>() + + fun actualizarFinalizado(finalizado : Boolean){ + this.finalizado = finalizado + GestorDeEventos.mostrarOpcionElegirCamino() + } + + fun addObserver(observer: (Evento) -> Unit) { + observers.add(observer) + } + + fun actualizarResistencia(valor : Int){ + resistenciaActual += valor + if(resistenciaActual >= resistenciaMax){ + resistenciaActual = resistenciaMax + } + notifyObservers() + } + + fun setResistencia(valor : Int){ + resistenciaActual = valor + notifyObservers() + } + + private fun notifyObservers() { + observers.forEach { it(this) } + } + + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || javaClass != other.javaClass) return false + other as Evento + return descripcion == other.descripcion + } + + override fun hashCode(): Int { + return descripcion.hashCode() + } + + +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..d6456613e66c64f567a42437e73695209a82a1e3 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt @@ -0,0 +1,33 @@ +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>, + override val imagen: Int, resistenciaMax: Int, + override var finalizado: Boolean, + var ataque: Int, + val imagenAtaque : Int, + val acciones: MutableList<Efecto>, + val recompensa : Objeto +) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){ + val id: String = UUID.randomUUID().toString() + var probCritico = 8 + 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/eventoFactory/EventoDescanso.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt new file mode 100644 index 0000000000000000000000000000000000000000..04c021b30607aee604b09d896623945f6a89ccec --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt @@ -0,0 +1,26 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion +import java.util.UUID + +class EventoDescanso( + 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) { + 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 EventoDescanso + + 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/eventoFactory/EventoDesenterrar.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDesenterrar.kt new file mode 100644 index 0000000000000000000000000000000000000000..b6ce95e29d28be60fbe07f20d7275b19d40f4c98 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDesenterrar.kt @@ -0,0 +1,11 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +class EventoDesenterrar( + 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 diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..842b4cd1d769f26e689912f09713ba95628af8cd --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactory.kt @@ -0,0 +1,10 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +interface EventoFactory { + fun generarDescripcion(): String + fun generarEvento(): Evento + fun generarOpciones(descripcion: String): MutableList<Opcion> + fun generarImagen(descripcion: String): Int +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..3a1beff845c1866979e24dc021165e2d53d96b0b --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt @@ -0,0 +1,19 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.TipoEvento + +object EventoFactorySelector { + + fun obtenerFactory(tipo: TipoEvento): EventoFactory { + return when (tipo) { + TipoEvento.Reliquia -> ReliquiaFactory() + TipoEvento.Combate -> CombateFactory() + TipoEvento.Tienda -> TiendaFactory() + TipoEvento.Trampa -> TrampaFactory() + TipoEvento.Riesgo -> RiesgoFactory() + TipoEvento.Descanso -> DescansoFactory() + TipoEvento.Ladron -> LadronFactory() + TipoEvento.Desenterrar -> DesenterrarFactory() + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoLadron.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoLadron.kt new file mode 100644 index 0000000000000000000000000000000000000000..369fb039c0eb982644bc36f46f3a1c98d58fddd6 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoLadron.kt @@ -0,0 +1,11 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +class EventoLadron( + 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 diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoReliquia.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoReliquia.kt new file mode 100644 index 0000000000000000000000000000000000000000..0545cb1a2d53e976efae950bc2bb162ac8eff39d --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoReliquia.kt @@ -0,0 +1,13 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +class EventoReliquia( + override val descripcion: String, + override val dificultad: Int, + override val opciones: MutableList<Opcion>, + override val imagen: Int, resistenciaMax: Int, resistenciaActual: Int, + override var finalizado: Boolean + ) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaActual, finalizado) { + override var resistenciaActual: Int = (1..<resistenciaMax).random() +} \ No newline at end of file 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 new file mode 100644 index 0000000000000000000000000000000000000000..3f2401b2fea839e91591b050996cacca03be3ef8 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoRiesgo.kt @@ -0,0 +1,25 @@ +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){ + 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/EventoTienda.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoTienda.kt new file mode 100644 index 0000000000000000000000000000000000000000..9a1e7c25ee01ea32a58d67e2671c7809c20ed89a --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoTienda.kt @@ -0,0 +1,11 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +class EventoTienda( + 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 diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoTrampa.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoTrampa.kt new file mode 100644 index 0000000000000000000000000000000000000000..9837a4380a5126089a447005b67a29152958b7a7 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoTrampa.kt @@ -0,0 +1,11 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion + +class EventoTrampa( + 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 diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/LadronFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/LadronFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..c7e2b62ca52289a6a74d51b12b52367e106494ae --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/LadronFactory.kt @@ -0,0 +1,46 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoLadron + +class LadronFactory : EventoFactory { + private val ladronesMap = mapOf( + "Un ladrón de vasijas aparece y te desafÃa a un juego: ¡vence en el reto de cartas o se llevará tu tesoro!" to Pair( + R.drawable.asi_exploradores_ladron, listOf( + Opcion( + descripcion = "Jugar", + atributoRequerida = Atributo.Nula, + EfectoLadron() + ) + ) + ) + ) + + override fun generarDescripcion(): String { + return ladronesMap.keys.random() + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return ladronesMap[descripcion]?.second?.toMutableList() + ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + return ladronesMap[descripcion]?.first!! + } + + override fun generarEvento(): EventoLadron { + val descripcion = generarDescripcion() + return EventoLadron( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + finalizado = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/ReliquiaFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/ReliquiaFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..85cb64b5ea773372a54b2b9a04661d3b6bb9ad37 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/ReliquiaFactory.kt @@ -0,0 +1,205 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoDestruir +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigar +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoReparar +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.repositorios.RepositorioObjetos + +class ReliquiaFactory : EventoFactory { + private val reliquiasMap = mapOf( + "Encuentras un vasito de barro cocido en las tumbas de la necrópolis de Las Ruedas." to Pair( + R.drawable.asi_exploradores_vasito, listOf( + Opcion( + descripcion = "Investigar", + atributoRequerida = Atributo.Investigacion, + EfectoInvestigar( + 90, + "Al observar los grabados y la técnica de cocción, descubres que el vaso es una pieza de los vacceos, una cultura prerromana que habitó el valle del Duero.", + 1 + ) + ), Opcion( + descripcion = "Reparar", + atributoRequerida = Atributo.Investigacion, + EfectoReparar( + 80, + "Tras aplicar con cuidado una mezcla de resina especial, consigues unir las piezas del vasito, restaurando su forma original. Has preservado una pieza valiosa de la historia vaccea.", + "Al intentar reparar el vasito, accidentalmente lo rompes aún más. Ahora, no solo está dañado, sino que se ha perdido una pieza esencial que no puede ser reconstruida.", + 1, + RepositorioObjetos.obtenerObjetoPorNombre("Vasito de barro cocido")!! + ) + ), Opcion( + descripcion = "Destruir", + atributoRequerida = Atributo.Ataque, + EfectoDestruir(90) + + ), Opcion( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + + ) + ) + ), + "Encuentras una jabonera de cerámica con un sÃmbolo en ella." to Pair( + R.drawable.asi_exploradores_jabonera, listOf( + Opcion( + descripcion = "Investigar", + atributoRequerida = Atributo.Investigacion, + EfectoInvestigar( + 80, + "Tras examinar minuciosamente la jabonera, descubres que el sÃmbolo representado es un lobo, figura clave en la mitologÃa vaccea, simbolizando miedo y veneración.", + 2 + ) + + ), Opcion( + descripcion = "Reparar", + atributoRequerida = Atributo.Investigacion, + EfectoReparar( + 80, + "Con un toque experto, las partes rotas encajan perfectamente. Has dado nueva vida a una jabonera vaccea, permitiéndote estudiar sus detalles con mayor precisión.", + "El intento de reparación es un desastre: la jabonera se rompe aún más, y el sÃmbolo se desintegra. Ahora, solo quedan fragmentos de lo que antes fue una obra de arte.", + 1, + RepositorioObjetos.obtenerObjetoPorNombre("Jabonera de cerámica")!! + ) + + ), Opcion( + descripcion = "Destruir", + atributoRequerida = Atributo.Ataque, + EfectoDestruir(80) + ), Opcion( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + "Encuentras una copa negra cubierta de inscripciones." to Pair( + R.drawable.asi_minijuego_3_copa_negra_brunida, listOf( + Opcion( + descripcion = "Investigar", + atributoRequerida = Atributo.Investigacion, + EfectoInvestigar( + 80, + "Tras examinar minuciosamente la copa, encuentras patrones geométricos que podrÃan relacionarse con antiguos ritos funerarios o de sacrificio. ", + 2 + ) + + ), Opcion( + descripcion = "Reparar", + atributoRequerida = Atributo.Investigacion, + EfectoReparar( + 75, + "Reparas la copa con éxito y descubres un patrón o sÃmbolo oculto bajo las grietas, aportando nueva información sobre su origen o uso.", + "El trabajo improvisado falla, y la copa queda aún más dañada o inutilizable, reduciendo su valor cultural o práctico.", + 1, + RepositorioObjetos.obtenerObjetoPorNombre("Copa negra con inscripciones")!! + ) + + ), Opcion( + descripcion = "Destruir", + atributoRequerida = Atributo.Ataque, + EfectoDestruir(80) + ), Opcion( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + "Encuentras una tapadera de cerámica con una figura zoomorfa tallada en su superficie. Muestra el detalle de un animal: un lobo" to Pair( + R.drawable.asi_minijuego_3_tapadera_zoomorfo, listOf( + Opcion( + descripcion = "Investigar", + atributoRequerida = Atributo.Investigacion, + EfectoInvestigar( + 60, + "Descubres que la tapadera representa a un animal sagrado en la cultura vaccea, podrÃa estar relacionado con rituales de protección o iniciación. ", + 3 + ) + + ), Opcion( + descripcion = "Reparar", + atributoRequerida = Atributo.Investigacion, + EfectoReparar( + 70, + "Logras repararla cuidadosamente, las marcas en la cerámica se conecten con un ritual funerario o de veneración, lo que incrementa el valor histórico de la pieza.", + "Intentas repararla, pero sin las herramientas adecuadas o la técnica correcta, la tapadera queda más dañada.", + 1, + RepositorioObjetos.obtenerObjetoPorNombre("Tapadera de cerámica zoomorfa")!! + ) + + ), Opcion( + descripcion = "Destruir", + atributoRequerida = Atributo.Ataque, + EfectoDestruir(80) + ), Opcion( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + "Encuentras lo que parece ser un sonajero redondo" to Pair( + R.drawable.asi_minijuego_3_sonajero_redondo, listOf( + Opcion( + descripcion = "Investigar", + atributoRequerida = Atributo.Investigacion, + EfectoInvestigar( + 95, + "Descubres que es un modelo perteneciente a los muebles de la tumba 153 de la necrópolis de Las Ruedas", + 1 + ) + ), Opcion( + descripcion = "Reparar", + atributoRequerida = Atributo.Investigacion, + EfectoReparar( + 90, + "Restauras el sonajero con gran precisión. Su sonido ahora es claro, y encuentras inscripciones que parecen ser representaciones simbólicas de protección o buena fortuna.", + "Intentas repararlo, pero el material es más frágil de lo esperado, y el sonajero se rompe aún más, perdiendo su valor arqueológico.", + 1, + RepositorioObjetos.obtenerObjetoPorNombre("Sonajero Redondo")!! + ) + + ), Opcion( + descripcion = "Destruir", + atributoRequerida = Atributo.Ataque, + EfectoDestruir(80) + ), Opcion( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + ) + + override fun generarDescripcion(): String { + return reliquiasMap.keys.random() + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return reliquiasMap[descripcion]?.second?.shuffled()?.take(4)?.toMutableList() + ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + return reliquiasMap[descripcion]?.first!! + } + + override fun generarEvento(): EventoReliquia { + val descripcion = generarDescripcion() + return EventoReliquia( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + resistenciaActual = 0, + finalizado = false + ) + } +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..e205b26cf3163982beb433062d994addd96ddd2a --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt @@ -0,0 +1,93 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +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.repositorios.RepositorioObjetos + +class RiesgoFactory : EventoFactory { + + 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( + 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( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + 2 to EventoRiesgoData( + imagen = R.drawable.cofre_open_animation, + opciones = listOf( + Opcion( + descripcion = "Abrir el cofre", + atributoRequerida = Atributo.Investigacion, + EfectoRiesgo( + 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( + descripcion = "Ignorar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ) + ) + + override fun generarDescripcion(): String { + return descripcionComun + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + val evento = riesgoMap.entries.find { it.key == descripcion.toInt() } + return evento?.value?.opciones?.toMutableList() ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + val evento = riesgoMap.entries.find { it.key == descripcion.toInt() } + return evento!!.value.imagen + } + + override fun generarEvento(): EventoRiesgo { + val id = riesgoMap.keys.random() + val eventoData = riesgoMap[id]!! + + val evento = EventoRiesgo( + id = id, + descripcion = generarDescripcion(), + dificultad = 0, + opciones = eventoData.opciones.toMutableList(), + imagen = eventoData.imagen, + resistenciaMax = (2..8).random(), + finalizado = false, + ) + + return evento + } +} +data class EventoRiesgoData( + val imagen: Int, + val opciones: List<Opcion> +) diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TiendaFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TiendaFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..6324b19c15dd59d9dc24d8eb61cab1fdb77c858d --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TiendaFactory.kt @@ -0,0 +1,115 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoDetallesCompra +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoIgnorar +import com.example.ellegadodepintia.repositorios.RepositorioObjetos + + +class TiendaFactory : EventoFactory { + private val tiendasMap = mapOf( + "Te encuentras al mercader de Pintia, quien te ofrece una pocÃon que te restaura 3 puntos de vida por 5 monedas. ¿Te atreves a descubrir su poder?" to Pair( + R.drawable.asi_exploradores_tienda, listOf( + Opcion( + descripcion = "Ver Objeto", + atributoRequerida = Atributo.Nula, + EfectoDetallesCompra( + RepositorioObjetos.obtenerObjetoPorNombre("Elixir Menor de la Necrópolis")!! + ) + ), Opcion( + descripcion = "Rechazar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + "Te encuentras al mercader de Pintia, quien te ofrece una pocÃon que te restaura 5 puntos de vida por 8 monedas. ¿Te atreves a probarla y sentir su poder renovador?" to Pair( + R.drawable.asi_exploradores_tienda, listOf( + Opcion( + descripcion = "Ver Objeto", + atributoRequerida = Atributo.Nula, + EfectoDetallesCompra( + RepositorioObjetos.obtenerObjetoPorNombre("Elixir Mediano de la Necrópolis")!! + ) + ), Opcion( + descripcion = "Rechazar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + "Te encuentras al mercader de Pintia, quien te ofrece una pocÃon que te restaura toda la vida por 15 monedas. ¿Te atreves a probarla?" to Pair( + R.drawable.asi_exploradores_tienda, listOf( + Opcion( + descripcion = "Ver Objeto", + atributoRequerida = Atributo.Nula, + EfectoDetallesCompra( + RepositorioObjetos.obtenerObjetoPorNombre("Elixir Supremo de la Necrópolis")!! + ) + ), Opcion( + descripcion = "Rechazar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + "Te encuentras al mercader de Pintia, quien te ofrece un escudo equipable que aumenta tu vida máxima en 10 puntos por 50 monedas. ¿Listo para lucirlo en combate?" to Pair( + R.drawable.asi_exploradores_tienda, listOf( + Opcion( + descripcion = "Ver Objeto", + atributoRequerida = Atributo.Nula, + EfectoDetallesCompra( + RepositorioObjetos.obtenerObjetoPorNombre("Escudo Caetrae")!! + ) + ), Opcion( + descripcion = "Rechazar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + "Te encuentras al mercader de Pintia, quien te ofrece un casco equipable que aumenta tu vida máxima en 8 puntos por 40 monedas. ¿Te atreves a equiparlo?" to Pair( + R.drawable.asi_exploradores_tienda, listOf( + Opcion( + descripcion = "Ver Objeto", + atributoRequerida = Atributo.Nula, + EfectoDetallesCompra( + RepositorioObjetos.obtenerObjetoPorNombre("Casco Ceremonial")!! + ) + ), Opcion( + descripcion = "Rechazar", + atributoRequerida = Atributo.Nula, + EfectoIgnorar(100) + ) + ) + ), + + ) + + override fun generarDescripcion(): String { + return tiendasMap.keys.random() + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return tiendasMap[descripcion]?.second?.toMutableList() + ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + return tiendasMap[descripcion]?.first!! + } + + override fun generarEvento(): EventoTienda { + val descripcion = generarDescripcion() + return EventoTienda( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + finalizado = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TrampaFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TrampaFactory.kt new file mode 100644 index 0000000000000000000000000000000000000000..c46d9c45dc043412f18acf3128de5dd81963bc22 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/TrampaFactory.kt @@ -0,0 +1,78 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoResolverTrampaConAtributo +import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoUtilizarObjetoUtil + +class TrampaFactory : EventoFactory { + private val trampasMap = mapOf( + "Un estruendoso derrumbe de piedras bloquea el camino, dejando un montón de rocas caÃdas que impiden tu avance." to Pair( + R.drawable.asi_exploradores_trampa_piedras, listOf( + Opcion( + descripcion = "Mover", + atributoRequerida = Atributo.Vida, + EfectoResolverTrampaConAtributo( + 25, + Atributo.Vida, + 1, + "Con un esfuerzo descomunal, logras mover las piedras con tus manos y escapar, haciendote daño en el acto", + "A pesar de tu esfuerzo, no logras escapar y sigues atrapado. Has sufrido daño" + ) + ), Opcion( + descripcion = "Picar", + atributoRequerida = Atributo.Nula, + EfectoUtilizarObjetoUtil( + nombreObjeto = "Pico Vacceo" + ) + ), Opcion( + descripcion = "Explorar", + atributoRequerida = Atributo.Investigacion, + EfectoResolverTrampaConAtributo( + 50, + Atributo.Investigacion, + 1, + "Has encontrado un viejo mapa que muestra un camino para rodearlo. Has logrado escapar.", + "Has explorado cuidadosamente, pero por ahora no has encontrado nada útil para sortear el derrumbe." + ) + ), Opcion( + descripcion = "Escalar", + atributoRequerida = Atributo.Energia, + EfectoResolverTrampaConAtributo( + 40, + Atributo.Energia, + 2, + "Logras escalar la montaña de piedras y escapar. El esfuerzo no ha sido en vano", + "Al escalar la montaña de piedras, sufres un resbalo y vuelves a caer, gastando inútilmente energÃa" + ) + ) + ) + ), + ) + + override fun generarDescripcion(): String { + return trampasMap.keys.random() + } + + override fun generarOpciones(descripcion: String): MutableList<Opcion> { + return trampasMap[descripcion]?.second?.shuffled()?.take(4)?.toMutableList() + ?: mutableListOf() + } + + override fun generarImagen(descripcion: String): Int { + return trampasMap[descripcion]?.first!! + } + + override fun generarEvento(): EventoTrampa { + val descripcion = generarDescripcion() + return EventoTrampa( + descripcion = descripcion, + dificultad = 0, + opciones = generarOpciones(descripcion), + imagen = generarImagen(descripcion), + resistenciaMax = (2..8).random(), + finalizado = false + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/Habilidad.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/Habilidad.kt new file mode 100644 index 0000000000000000000000000000000000000000..0dfdc6f4f18d69b68f6cadbb9940eef58c43ac9c --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/Habilidad.kt @@ -0,0 +1,18 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.habilidad + + +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoHabilidad +import java.io.Serializable + +class Habilidad( + val nombre: String, + val descripcion: String, + val efecto: EfectoHabilidad, + val energia: Int + //TODO() Falta una animacion +) : Serializable { + fun usar() { + GestorCombate.habilidadProtagonista(nombre, efecto,energia) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoBuffo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoBuffo.kt new file mode 100644 index 0000000000000000000000000000000000000000..06567dca1da87cfd0a8d02ef8632da361b9c0fc7 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoBuffo.kt @@ -0,0 +1,54 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad + +import android.os.Handler +import android.os.Looper +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils +import java.util.UUID +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoBuffo(private val atributo: Atributo, private val poder: Int, private var turnos: Int) : + + EfectoHabilidad() { + private var id: String = UUID.randomUUID().toString() + + override fun ejecutar() { + var soundManager: SoundManager + soundManager = SoundManager(context!!) + soundManager.playSound(R.raw.sound_habilidad, 100) + GameState.jugador.actualizarAtributo(atributo, poder) + GameState.jugador.actualizarBuffo(this.clonar()) + } + + fun eliminarBuffo() { + Handler(Looper.getMainLooper()).postDelayed({ + GameState.jugador.actualizarAtributo(atributo, -poder) + GameState.jugador.eliminarBuffo(this) + },200) + } + + fun pasarTurno(){ + turnos-=1 + println("$id $turnos") + if(turnos<=0){ + eliminarBuffo() + } + } + + override fun equals(other: Any?): Boolean { + return other is EfectoBuffo && other.id == this.id + } + + override fun hashCode(): Int { + return id.hashCode() + } + + fun clonar(): EfectoBuffo { + return EfectoBuffo(this.atributo, this.poder, this.turnos) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoGolpeMultiple.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoGolpeMultiple.kt new file mode 100644 index 0000000000000000000000000000000000000000..9d98d672a74b389f8e47fffef3242eca1916df44 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoGolpeMultiple.kt @@ -0,0 +1,25 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad + +import android.os.Handler +import android.os.Looper +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoGolpeMultiple(private var cantidad: Int): EfectoHabilidad(){ + override fun ejecutar() { + GestorCombate.cargarAnimacionesAtaqueProtagonista() + var soundManager: SoundManager + soundManager = SoundManager(context!!) + soundManager.playSound(R.raw.sound_espada, 100) + Handler(Looper.getMainLooper()).postDelayed({ + soundManager.playSound(R.raw.sound_espada, 100) + }, 400) + val ataqueReal = GestorCombate.calcularAtaque(cantidad*GameState.jugador.atributos[Atributo.Ataque]!!,GameState.jugador.atributos[Atributo.Critico]!!) + GameState.eventoActual.actualizarResistencia(-ataqueReal) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoHabilidad.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoHabilidad.kt new file mode 100644 index 0000000000000000000000000000000000000000..03140fb4c3d5fb75f5c0ec1c5efa2e24ecdadbe3 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/habilidad/efectoHabilidad/EfectoHabilidad.kt @@ -0,0 +1,5 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad + +abstract class EfectoHabilidad { + abstract fun ejecutar() +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/Objeto.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/Objeto.kt new file mode 100644 index 0000000000000000000000000000000000000000..1ccc7e03e3f71c9dab7b50afa861615916f20cc7 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/Objeto.kt @@ -0,0 +1,14 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto + +import java.io.Serializable + +abstract class Objeto ( + val nombre: String, + val descripcion: String, + val imagen : Int, + val coste: Int): Serializable , Cloneable{ + abstract fun usar() + public override fun clone(): Objeto { + return super.clone() as Objeto + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoConsumible.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoConsumible.kt new file mode 100644 index 0000000000000000000000000000000000000000..dbf03ed674a03f4c737323af3bedebef1c3cf803 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoConsumible.kt @@ -0,0 +1,14 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto + +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjeto + +class ObjetoConsumible( + nombre: String, + descripcion: String, + val efecto: EfectoObjeto, imagen: Int, coste : Int +) : Objeto(nombre, descripcion, imagen, coste) { + + override fun usar() { + efecto.ejecutar() + } +} \ 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 new file mode 100644 index 0000000000000000000000000000000000000000..b71990a4ca31ff6026e94f180a845b616b10d5a1 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt @@ -0,0 +1,17 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto + +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoVender + +open class ObjetoDeValor( + nombre: String, + descripcion: String, + imagen: Int, + coste: Int, +) : Objeto(nombre, descripcion, imagen, coste) { + + private val efecto: EfectoVender = EfectoVender(coste) + + override fun usar() { + efecto.ejecutar() + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoEquipable.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoEquipable.kt new file mode 100644 index 0000000000000000000000000000000000000000..acbe1cfa1ff773cc683fbb0b14decfa2fff900cf --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoEquipable.kt @@ -0,0 +1,24 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto + +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjeto +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoEquipable + +class ObjetoEquipable( + nombre: String, + descripcion: String, + val efecto: EfectoObjeto, imagen: Int, coste : Int + + ) : Objeto(nombre, descripcion, imagen, coste) { + + override fun usar() { + efecto.ejecutar() + GameState.jugador.equiparObjeto(this) + } + + fun desequipar(){ + efecto as EfectoObjetoEquipable + efecto.desequipar() + GameState.jugador.desequiparObjeto(this) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoUtilidad.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoUtilidad.kt new file mode 100644 index 0000000000000000000000000000000000000000..555607175483060fdd8bac73ee2eb2972db17c21 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoUtilidad.kt @@ -0,0 +1,14 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto + + +class ObjetoUtilidad( + nombre: String, + descripcion: String, + imagen: Int, + coste : Int + ) : Objeto(nombre, descripcion, imagen, coste) { + + override fun usar() { + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoEquipableAumento.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoEquipableAumento.kt new file mode 100644 index 0000000000000000000000000000000000000000..b534da4810b34d579914d162071d50bd920a9a81 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoEquipableAumento.kt @@ -0,0 +1,21 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto + +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo + +class EfectoEquipableAumento (private val poder : Int, private val atributo: Atributo) : EfectoObjetoEquipable(){ + override fun ejecutar() { + if (atributo == Atributo.Vida){ + GameState.jugador.actualizarVidaMax(GameState.jugador.vidaMax+poder) + }else{ + GameState.jugador.actualizarAtributo(atributo, poder) + } + } + override fun desequipar() { + if (atributo == Atributo.Vida){ + GameState.jugador.actualizarVidaMax(GameState.jugador.vidaMax-poder) + }else{ + GameState.jugador.actualizarAtributo(atributo, -poder) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoEquipableHabilidad.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoEquipableHabilidad.kt new file mode 100644 index 0000000000000000000000000000000000000000..dc71dab2d8089b3f94ebc969566c329cddce375e --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoEquipableHabilidad.kt @@ -0,0 +1,14 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto + +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.Habilidad + +class EfectoEquipableHabilidad (private val habilidad: Habilidad) : EfectoObjetoEquipable(){ + override fun ejecutar() { + GameState.jugador.habilidades.add(habilidad) + } + override fun desequipar() { + GameState.jugador.habilidades.remove(habilidad) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjeto.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjeto.kt new file mode 100644 index 0000000000000000000000000000000000000000..0a81837f7418867d25724baf59b0534bb1416954 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjeto.kt @@ -0,0 +1,5 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto + +abstract class EfectoObjeto { + abstract fun ejecutar() +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoAtacar.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoAtacar.kt new file mode 100644 index 0000000000000000000000000000000000000000..514ce0c6b3158b1cc4ef78cc90f301f5d3ffbbe0 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoAtacar.kt @@ -0,0 +1,15 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoObjetoAtacar (private val ptosAtaque : Int, private val sound: Int): EfectoObjeto(){ + override fun ejecutar() { + var soundManager: SoundManager + soundManager = SoundManager(context!!) + GameState.eventoActual.actualizarResistencia(-ptosAtaque) + soundManager.playSound(sound , 100) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoCura.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoCura.kt new file mode 100644 index 0000000000000000000000000000000000000000..2df8fac89d751235804932567621779d1f5a3dda --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoCura.kt @@ -0,0 +1,20 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager + +class EfectoObjetoCura (val ptosCura : Int): EfectoObjeto(){ + override fun ejecutar() { + var soundManager: SoundManager + soundManager = SoundManager(context!!) + soundManager.playSound(R.raw.sound_vida, 100) + if (GameState.jugador.atributos[Atributo.Vida]!!.plus(ptosCura) >= GameState.jugador.vidaMax){ + GameState.jugador.setHabilidad(Atributo.Vida, GameState.jugador.vidaMax) + }else{ + GameState.jugador.actualizarAtributo(Atributo.Vida, ptosCura) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoEquipable.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoEquipable.kt new file mode 100644 index 0000000000000000000000000000000000000000..300322504baceffe141334b319e98974e74a1963 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoObjetoEquipable.kt @@ -0,0 +1,7 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto + + +abstract class EfectoObjetoEquipable: EfectoObjeto(){ + abstract fun desequipar() +} + diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoVender.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoVender.kt new file mode 100644 index 0000000000000000000000000000000000000000..b88a0fd234e9248601af387806e2fa05ad99f99c --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/efectoObjeto/EfectoVender.kt @@ -0,0 +1,11 @@ +package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto + +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.example.ellegadodepintia.repositorios.RepositorioJugador + +class EfectoVender (private val coste : Int): EfectoObjeto(){ + override fun ejecutar() { + GameState.jugador.monedas += coste + RepositorioJugador.setMonedas(GameState.jugador.monedas) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego1/FinMinijuego1.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego1/FinMinijuego1.kt new file mode 100644 index 0000000000000000000000000000000000000000..aa19c8e3e142845a899cfc61b8b1648e3b4acac1 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego1/FinMinijuego1.kt @@ -0,0 +1,35 @@ +package com.example.ellegadodepintia.minijuego1 + +import android.content.Intent +import android.os.Bundle +import android.widget.Button +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.R + +class FinMinijuego1 : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_finminijuego1) + + // Obtener el valor de la puntuación enviada desde la actividad anterior + val puntuacion = intent.getIntExtra("puntuacion", 0) + + // Referencias a los elementos de la interfaz + val puntuacionTextView: TextView = findViewById(R.id.puntuacionTextView) + val tituloTextView: TextView = findViewById(R.id.tituloTextView) + val botonReiniciar: Button = findViewById(R.id.btnReiniciar) + + // Mostrar la puntuación + puntuacionTextView.text = "Puntuación: $puntuacion" + + // Acción del botón para reiniciar o volver + botonReiniciar.setOnClickListener { + val resultadoIntent = Intent() + resultadoIntent.putExtra("PUNTOS_HUESOS", puntuacion.toString()) + setResult(RESULT_OK, resultadoIntent) + finish() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego1/InicioMinijuego1.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego1/InicioMinijuego1.kt new file mode 100644 index 0000000000000000000000000000000000000000..5b12fc6caabef47f20a8a037a61b04315d78c37e --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego1/InicioMinijuego1.kt @@ -0,0 +1,71 @@ +package com.example.ellegadodepintia.minijuego1 + +import android.content.Intent +import android.os.Bundle +import android.widget.ImageView +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.R +import android.view.animation.AnimationUtils +import com.example.ellegadodepintia.soundManager.SoundManager +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.fragment.app.DialogFragment + +class InicioMinijuego1 : AppCompatActivity() { + + private lateinit var titulo: ImageView + private lateinit var soundManager: SoundManager + override fun onCreate(savedInstanceState: Bundle?) { + soundManager = SoundManager(this) + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_iniciominijuego1) + + // Encuentra el botón en el layout + titulo = findViewById(R.id.titleImage) + val startButton: ImageView = findViewById(R.id.startButton) + val animation = AnimationUtils.loadAnimation(this, R.anim.animatitu) + titulo.startAnimation(animation) + + // Define el comportamiento cuando se hace clic en el botón + startButton.setOnClickListener { + soundManager.playSound(R.raw.sound_button,100) + // Intent para iniciar una nueva actividad (supongamos que tienes una Activity llamada GameActivity) + val intent = Intent(this, Minijuego1::class.java) + startActivity(intent) + finish() + } + val tutorialButton = findViewById<ImageView>(R.id.tutorial) + tutorialButton.setOnClickListener { + // Mostrar el modal + val modal = ModalFragment() + modal.show(supportFragmentManager, "ModalFragment") + } + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + super.onBackPressed() + } + } +} + +class ModalFragment : DialogFragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflar el diseño del modal + val view = inflater.inflate(R.layout.modal_minijuego1_tutorial, container, false) + + // Configurar el botón de cerrar + val closeButton = view.findViewById<Button>(R.id.cerrar) + closeButton.setOnClickListener { + dismiss() // Cierra el modal + } + + return view + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego1/Minijuego1.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego1/Minijuego1.kt new file mode 100644 index 0000000000000000000000000000000000000000..ef0da19ec0e9b1b93c8670f5d42884bbc90ebcba --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego1/Minijuego1.kt @@ -0,0 +1,227 @@ +package com.example.ellegadodepintia.minijuego1 + +import android.animation.Animator +import android.animation.AnimatorListenerAdapter +import android.animation.ObjectAnimator +import android.content.Intent +import android.graphics.drawable.AnimationDrawable +import android.os.Bundle +import android.os.CountDownTimer +import android.os.Handler +import android.os.Looper +import android.view.animation.AccelerateDecelerateInterpolator +import android.view.animation.AlphaAnimation +import android.widget.Button +import android.widget.FrameLayout +import android.widget.ImageView +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context +import com.example.ellegadodepintia.soundManager.SoundManager +import kotlin.random.Random + +class Minijuego1 : AppCompatActivity() { + + // Variables para la interfaz de usuario y lógica del juego + private lateinit var frameLayout: FrameLayout + private lateinit var puntajeTextView: TextView + private lateinit var tiempoTextView: TextView + private lateinit var soundManager: SoundManager // Instancia de SoundManager + private var puntaje = 0 + private var tiempoRestante = 30 + private var fuera = false + private val handler = Handler(Looper.getMainLooper()) + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_minijuego1) + + // Inicialización de vistas + frameLayout = findViewById(R.id.frameLayout) + puntajeTextView = findViewById(R.id.puntajeTextView) + tiempoTextView = findViewById(R.id.tiempoTextView) + soundManager = SoundManager(this) + iniciarJuego() + iniciarContador() + } + + // Función principal para iniciar el juego + private fun iniciarJuego() { + soundManager.playSoundLoop(R.raw.sound_cueva,100) + handler.postDelayed(object : Runnable { + override fun run() { + agregarBoton() + handler.postDelayed(this, Random.nextLong(10, tiempoRestante.toLong() * 50)) + } + }, 1000) + } + + // Función para agregar un nuevo botón al juego + private fun agregarBoton() { + val boton = Button(this) + val esHueso = Random.nextFloat() > 0.3 + + // Configuración del botón + if (esHueso) { + boton.setBackgroundResource(R.drawable.asi_minijuego_1_hueso) + } else { + boton.setBackgroundResource(R.drawable.asi_minijuego_1_bomba) + } + boton.rotation = Random.nextInt(0, 360).toFloat() + configurarPosicionBoton(boton) + + // Animación de aparición + val fadeIn = AlphaAnimation(0f, 1f).apply { + duration = 500 + fillAfter = true + } + boton.startAnimation(fadeIn) + + // Configurar acción al pulsar + boton.setOnClickListener { + actualizarPuntaje(esHueso) + frameLayout.removeView(boton) + mostrarParticulas(boton.x + boton.width / 2, boton.y + boton.height / 2, esHueso) + } + + frameLayout.addView(boton) + eliminarBotonConAnimacion(boton) + } + + // Configuración de la posición aleatoria del botón + private fun configurarPosicionBoton(boton: Button) { + val huesoAleatorio = Random.nextInt(200, 400) + val params = FrameLayout.LayoutParams(huesoAleatorio, huesoAleatorio) + params.leftMargin = Random.nextInt(0, frameLayout.width - 300) + params.topMargin = Random.nextInt(0, frameLayout.height - 300) + boton.layoutParams = params + } + + // Eliminar el botón después de un tiempo con una animación + private fun eliminarBotonConAnimacion(boton: Button) { + handler.postDelayed({ + val fadeOut = AlphaAnimation(1f, 0f).apply { + duration = 500 + fillAfter = true + } + boton.startAnimation(fadeOut) + handler.postDelayed({ frameLayout.removeView(boton) }, 500) + }, Random.nextLong(800, 1000)) + } + + // Contador de tiempo + private fun iniciarContador() { + object : CountDownTimer(30 * 1000L, 1000) { + override fun onTick(millisUntilFinished: Long) { + tiempoRestante = (millisUntilFinished / 1000).toInt() + tiempoTextView.text = "Tiempo: $tiempoRestante" + if (tiempoRestante == 1) { + handler.removeCallbacksAndMessages(null) + } + } + + override fun onFinish() { + val intent = Intent(this@Minijuego1, FinMinijuego1::class.java) + intent.putExtra("puntuacion", puntaje) + if (!fuera) { + context!!.startActivityForResult(intent, 104) + } + finish() + } + }.start() + } + + // Actualizar el puntaje + private fun actualizarPuntaje(esHueso: Boolean) { + if (puntaje == 0 && !esHueso) { + puntaje = 0 + puntajeTextView.text = "Puntaje: 0" + } else if (esHueso) { + puntaje++ + } else { + puntaje-- + } + puntajeTextView.text = "Puntaje: $puntaje" + } + + override fun onPause() { + super.onPause() + fuera = true + handler.removeCallbacksAndMessages(null) + soundManager.stopSound() + } + + override fun onDestroy() { + super.onDestroy() + handler.removeCallbacksAndMessages(null) + soundManager.stopSound() + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + super.onBackPressed() + } + } + + // Mostrar partÃculas o animación en la posición del botón tocado + private fun mostrarParticulas(x: Float, y: Float, esHueso: Boolean) { + if (esHueso) { + soundManager.playSound(R.raw.sound_huesito,100) // Usando el SoundManager + // Mostrar partÃculas si es un hueso + val cantidadParticulas = Random.nextInt(5, 11) + for (i in 0 until cantidadParticulas) { + val particula = ImageView(this) + particula.setImageResource(R.drawable.asi_minijuego_1_hueso) + particula.layoutParams = FrameLayout.LayoutParams(25, 25) + frameLayout.addView(particula) + particula.x = x + particula.y = y + + val animX = ObjectAnimator.ofFloat(particula, "translationX", x + Random.nextInt(-200, 200)) + val animY = ObjectAnimator.ofFloat(particula, "translationY", y + Random.nextInt(-200, 200)) + val alphaAnim = ObjectAnimator.ofFloat(particula, "alpha", 1f, 0f) + + animX.duration = Random.nextLong(300, 800) + animY.duration = animX.duration + alphaAnim.duration = animX.duration + + val interpolator = AccelerateDecelerateInterpolator() + animX.interpolator = interpolator + animY.interpolator = interpolator + alphaAnim.interpolator = interpolator + + animX.start() + animY.start() + alphaAnim.start() + + alphaAnim.addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + frameLayout.removeView(particula) + } + }) + } + } else { + val explosionView = ImageView(this) + soundManager.playSound(R.raw.sound_bomba,100) // Usando el SoundManager + explosionView.setBackgroundResource(R.drawable.effect_reparar_animation) + val params = FrameLayout.LayoutParams(300, 300) + params.leftMargin = x.toInt() - 150 + params.topMargin = y.toInt() - 150 + explosionView.layoutParams = params + frameLayout.addView(explosionView) + + // Iniciar la animación + handler.postDelayed({ + (explosionView.background as? AnimationDrawable)?.start() + explosionView.animate() + .alpha(0f) + .setDuration(1000L) + .withEndAction { + frameLayout.removeView(explosionView) + } + .start() + }, 0) + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego2/Minijuego2.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego2/Minijuego2.kt new file mode 100644 index 0000000000000000000000000000000000000000..2818896aabacce6b6efa5f92a01903bfb9937566 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego2/Minijuego2.kt @@ -0,0 +1,343 @@ +package com.example.ellegadodepintia.minijuego2 + +import android.content.Intent +import android.graphics.drawable.AnimationDrawable +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.view.LayoutInflater +import android.view.MotionEvent +import android.view.View +import android.view.ViewGroup +import android.view.animation.AnimationUtils +import android.widget.Button +import android.widget.ImageView +import android.widget.RelativeLayout +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.DialogFragment +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.soundManager.SoundManager +import kotlin.random.Random + +class Minijuego2 : AppCompatActivity() { + + private lateinit var botonIniciar: ImageView + private lateinit var protagonista: ImageView + private lateinit var layout: RelativeLayout + private lateinit var titulo: ImageView + private lateinit var descripcion: ImageView + private lateinit var puntuacionTextView: TextView + private lateinit var botonReinicio: ImageView + private lateinit var fondo1: ImageView + private lateinit var fondo2: ImageView + private lateinit var nube: ImageView + private lateinit var soundManager: SoundManager + + private var puntuacion = 0 + private var gravedad = 1f + private var velObs = 10f + private var aceleracionSubida = -1f + private var velocidadMaximaCaida = 10f + private var velocidadMaximaSubida = -15f + private var velocidad = 0f + private var jugando = false + private var pulsacion = false + private val obstaculos = mutableListOf<ImageView>() + private val handler = Handler(Looper.getMainLooper()) + private var obstacleTimer: Runnable? = null + private var velocidadFondo = 5f + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_minijuego2) + inicializarComponentes() + configurarAnimaciones() + configurarBotonIniciar() + configurarListenerPantalla() + } + + private fun inicializarComponentes() { + soundManager = SoundManager(this) + botonIniciar = findViewById(R.id.boton_iniciar) + protagonista = findViewById(R.id.protagonista) + layout = findViewById(R.id.layout) + titulo = findViewById(R.id.titulo) + descripcion = findViewById(R.id.descripcion) + puntuacionTextView = findViewById(R.id.puntuacion) + botonReinicio = findViewById(R.id.boton_reinicio) + nube = findViewById(R.id.nube) + fondo1 = findViewById(R.id.fondo1) + fondo2 = findViewById(R.id.fondo2) + val tutorialButton = findViewById<ImageView>(R.id.descripcion) + tutorialButton.setOnClickListener { + // Mostrar el modal + val modal = ModalFragment() + modal.show(supportFragmentManager, "ModalFragment") + } + + } + + private fun configurarAnimaciones() { + val imagenProtagonista = findViewById<ImageView>(R.id.protagonista) + val idleAnimation = imagenProtagonista.drawable as? AnimationDrawable + idleAnimation?.start() + + val animacion = AnimationUtils.loadAnimation(this, R.anim.animatitu) + titulo.startAnimation(animacion) + } + + private fun configurarBotonIniciar() { + botonIniciar.setOnClickListener { + soundManager.playSound(R.raw.sound_button,100) + iniciarJuego() + protagonista.y = (layout.height / 2).toFloat() + fondo2.x = fondo1.x + fondo1.width * 4 + protagonista.x = protagonista.x + (layout.width*0.1).toInt() + nube.x = protagonista.x + (layout.width*0.03).toInt() + } + } + + private fun configurarListenerPantalla() { + findViewById<View>(android.R.id.content).setOnTouchListener { view, event -> + when (event.action) { + MotionEvent.ACTION_DOWN -> { + // Al tocar la pantalla, el personaje sube + velocidad = velocidadMaximaSubida // Impulsa al protagonista hacia arriba + } + } + true + } + } + + + private fun iniciarJuego() { + soundManager.playSoundLoop(R.raw.sound_nubes,100) + ocultarElementosInicioYMostrarProtagonista() + inicializarJuego() + iniciarBucleJuego() + iniciarTemporizadorGenerarObstaculos() + } + + private fun ocultarElementosInicioYMostrarProtagonista() { + titulo.imageAlpha = 0 + titulo.clearAnimation() + descripcion.visibility = View.GONE + botonIniciar.visibility = View.GONE + protagonista.visibility = View.VISIBLE + nube.visibility = View.VISIBLE + puntuacionTextView.visibility = View.VISIBLE + protagonista.setElevation(10f) + nube.setElevation(10f) + botonReinicio.setElevation(10f) + puntuacionTextView.setElevation(10f) + } + + private fun inicializarJuego() { + jugando = true + velocidad = 0f // Inicializar la velocidad en 0 al inicio + obstaculos.clear() // Limpiar obstáculos anteriores + puntuacion = 0 + } + + private fun iniciarBucleJuego() { + handler.post(object : Runnable { + override fun run() { + if (jugando) { + actualizarPosicionProtagonista() + moverObstaculos() + verificarColisiones() + moverFondo() + handler.postDelayed(this, 16) + } + } + }) + } + + private fun iniciarTemporizadorGenerarObstaculos() { + obstacleTimer = object : Runnable { + override fun run() { + if (jugando) { + generarObstaculo() + val delay = if (puntuacion > 9) { + 1100L + } else { + (2000 - puntuacion * 100).toLong() + } + handler.postDelayed(this, delay) + } + } + } + handler.post(obstacleTimer!!) + } + + private fun actualizarPosicionProtagonista() { + val altitud = protagonista.y + velocidad = if (pulsacion) { + (velocidad + aceleracionSubida).coerceAtLeast(velocidadMaximaSubida) + } else { + (velocidad + gravedad).coerceAtMost(velocidadMaximaCaida) + } + val nuevaPosicionY = altitud + velocidad + val techoPantalla = findViewById<View>(android.R.id.content).height + if (nuevaPosicionY < 10) { + protagonista.y = 10f + velocidad = 0f + } else if (nuevaPosicionY + protagonista.height < techoPantalla) { + protagonista.y = nuevaPosicionY + nube.y = protagonista.y + (layout.height*0.05).toInt() + } + } + + private fun generarObstaculo() { + val anchuraPantalla = layout.width + val alturaPantalla = layout.height + val muroInferior = ImageView(this) + muroInferior.setBackgroundResource(R.drawable.asi_minijuego_2_muro) + val altualturaMuro = (alturaPantalla *(0.2f + Random.nextFloat() * (0.4f))).toInt() + + // Configurar posición y tamaño de la tuberÃa inferior + val layoutParams = RelativeLayout.LayoutParams((anchuraPantalla*0.3f).toInt(), altualturaMuro) + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT) + muroInferior.layoutParams = layoutParams + muroInferior.x = layout.width.toFloat() + muroInferior.y = (alturaPantalla - altualturaMuro).toFloat() + layout.addView(muroInferior) + obstaculos.add(muroInferior) + + // Generar la tuberÃa superior + val muroSuperior = ImageView(this) + muroSuperior.setBackgroundResource(R.drawable.asi_minijuego_2_muro) + val alturaMuroSuperior = (alturaPantalla - altualturaMuro - alturaPantalla*0.2).toInt() + muroSuperior.rotation = 180f + // Configurar posición y tamaño de la tuberÃa superior + val layoutParamsSuperior = RelativeLayout.LayoutParams((anchuraPantalla*0.3f).toInt(), alturaMuroSuperior) + layoutParamsSuperior.addRule(RelativeLayout.ALIGN_PARENT_RIGHT) + muroSuperior.layoutParams = layoutParamsSuperior + muroSuperior.x = layout.width.toFloat() + muroSuperior.y = 0f + layout.addView(muroSuperior) + obstaculos.add(muroSuperior) + } + + private fun moverObstaculos() { + val obstaculosAEliminar = mutableListOf<ImageView>() + + for (obstaculo in obstaculos) { + obstaculo.x -= velObs // Mover obstáculo a la izquierda + // Verificar si el obstáculo sale de la pantalla + if (obstaculo.x + obstaculo.width < 0) { + if(obstaculo.rotation ==180f){ + puntuacion++ + } + puntuacionTextView.text = "Puntuación: $puntuacion" + obstaculosAEliminar.add(obstaculo) // Agregar a la lista de eliminación + } + } + // Eliminar obstáculos que salieron de la pantalla + for (obstaculo in obstaculosAEliminar) { + layout.removeView(obstaculo) + obstaculos.remove(obstaculo) + } + } + private fun verificarColisiones() { + for (obstaculo in obstaculos) { + if (obstaculo.x < protagonista.x + protagonista.width - 120 && + obstaculo.x + obstaculo.width > protagonista.x + 80 && + obstaculo.y < protagonista.y + protagonista.height - 40 && + obstaculo.y + obstaculo.height > protagonista.y + 70 + ) { + // Colisión detectada + detenerJuego() + break + } + } + } + + private fun detenerJuego() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + jugando = false + soundManager.stopSound() + soundManager.playSound(R.raw.sound_over, 100) + + protagonista.clearAnimation() + val animacionMuerte = AnimationUtils.loadAnimation(this, R.anim.caida) + protagonista.startAnimation(animacionMuerte) + for (obstaculo in obstaculos) { + layout.removeView(obstaculo) // Eliminar cada obstáculo del layout + } + val handler = Handler(Looper.getMainLooper()) + handler.postDelayed({ + botonReinicio.visibility = View.VISIBLE + val animacion = AnimationUtils.loadAnimation(this, R.anim.animatitu) + botonReinicio.startAnimation(animacion) + }, 1000) + + if(flag){ + botonReinicio.setOnClickListener { + reiniciarJuego() + } + }else{ + // Devuelve la puntuación actual y finaliza la actividad + val resultadoIntent = Intent() + resultadoIntent.putExtra("PUNTUACION", puntuacion.toString()) + setResult(RESULT_OK, resultadoIntent) + finish() + } + } + + private fun reiniciarJuego() { + // Reiniciar variables del juego + puntuacion = 0 + soundManager.playSound(R.raw.sound_button, 100) + velObs = 10f + puntuacionTextView.text = "Puntuación: $puntuacion" + protagonista.y = (layout.height / 2).toFloat() // Reiniciar posición del protagonista + botonReinicio.clearAnimation() + botonReinicio.visibility = View.GONE // Ocultar botón de reinicio + iniciarJuego() // Reiniciar el juego + } + + private fun moverFondo() { + // Mueve ambos fondos hacia la izquierda + fondo1.x -= velocidadFondo + fondo2.x -= velocidadFondo + + // Reinicia la posición cuando un fondo sale de la pantalla + if (fondo1.x + fondo1.width * 4 < 0) { + fondo1.x = fondo2.x + fondo2.width * 4 + } + if (fondo2.x + fondo2.width * 4 < 0) { + fondo2.x = fondo1.x + fondo1.width * 4 + } + } + override fun onPause() { + super.onPause() + soundManager.stopSound() + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + super.onBackPressed() + } + } + +} +class ModalFragment : DialogFragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflar el diseño del modal + val view = inflater.inflate(R.layout.modal_minijuego2_tutorial, container, false) + + // Configurar el botón de cerrar + val closeButton = view.findViewById<Button>(R.id.cerrar) + closeButton.setOnClickListener { + dismiss() // Cierra el modal + } + + return view + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego3/Carta.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego3/Carta.kt new file mode 100644 index 0000000000000000000000000000000000000000..a9723a503cb2f560b684192011910c46a9565782 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego3/Carta.kt @@ -0,0 +1,8 @@ +package com.example.ellegadodepintia.minijuego3 + +data class Carta( + val id: Int, + val imageResId: Int, // Reemplazamos el número por el ID del recurso de imagen + var isFaceUp: Boolean = false, + var isMatched: Boolean = false +) diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego3/Minijuego3.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego3/Minijuego3.kt new file mode 100644 index 0000000000000000000000000000000000000000..f7d6c0c49ec6ddf33b80cc406c0c4bdc4aaf15ce --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego3/Minijuego3.kt @@ -0,0 +1,312 @@ +package com.example.ellegadodepintia.minijuego3 + +import android.animation.Animator +import android.animation.ObjectAnimator +import android.content.Intent +import android.os.Bundle +import android.os.CountDownTimer +import android.os.Handler +import android.os.Looper +import android.widget.Button +import android.widget.GridLayout +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import android.animation.AnimatorListenerAdapter +import android.animation.ValueAnimator +import android.graphics.ColorMatrix +import android.graphics.ColorMatrixColorFilter +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.DialogFragment +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.minijuego3.ModalFragment +import com.example.ellegadodepintia.soundManager.SoundManager + +class Minijuego3 : AppCompatActivity() { + private lateinit var portadaLayout: LinearLayout + private lateinit var botonIniciar: ImageView + private lateinit var gridLayout: GridLayout + private lateinit var cronometroTextView: TextView + private lateinit var botonVolver: ImageView; + private lateinit var soundManager: SoundManager + private var botonesCarta = mutableListOf<Button>() + private var cartas = mutableListOf<Carta>() + private var primieraCarta: Carta? = null + private var segundaCarta: Carta? = null + private var procesandose = false + private var cuentraAtras: CountDownTimer? = null + private var tiempoRestante: Long = 35000 // 1 minuto en milisegundos + private var tiempoCorriendo = false + + override fun onCreate(savedInstanceState: Bundle?) { + soundManager = SoundManager(this) + + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_minijuego3) + inizializarVistas() + setupBotonStart() + + } + + private fun inizializarVistas() { + portadaLayout = findViewById(R.id.portadaLayout) + botonIniciar = findViewById(R.id.btn_jugar) + gridLayout = findViewById(R.id.gridLayout) + cronometroTextView = findViewById(R.id.cronometro) + botonVolver = findViewById(R.id.btn_volver) + val tutorialButton = findViewById<ImageView>(R.id.descripcion) + tutorialButton.setOnClickListener { + // Mostrar el modal + val modal = ModalFragment() + modal.show(supportFragmentManager, "ModalFragment") + } + } + + private fun setupBotonStart() { + botonIniciar.setOnClickListener { + esconderPortada() + soundManager.playSound(R.raw.sound_button,100) + soundManager.playSoundLoop(R.raw.sound_memory,100) + iniciarJuego() + } + } + + private fun esconderPortada() { + botonVolver.visibility = ImageView.GONE + portadaLayout.visibility = LinearLayout.GONE + gridLayout.visibility = GridLayout.VISIBLE + cronometroTextView.visibility = TextView.VISIBLE + } + + private fun iniciarJuego() { + inizcializarJuego() + iniciarCronometro() + voltearCartas() + } + + private fun inizcializarJuego() { + val images = listOf( + R.drawable.asi_minijuego_3_vasito, R.drawable.asi_minijuego_3_copa_negra_brunida, R.drawable.asi_minijuego_3_jarra_de_pico, R.drawable.asi_minijuego_3_copa_tumba_75, + R.drawable.asi_minijuego_3_sonajero_redondo, R.drawable.asi_minijuego_3_tres_en_raya, R.drawable.asi_minijuego_3_tapadera_zoomorfo, R.drawable.asi_minijuego_3_tintinnabulum + ) + + val imagenesCartas = (images + images).shuffled() + // Obtén el ancho de la pantalla + val displayMetrics = resources.displayMetrics + val screenWidth = displayMetrics.widthPixels + val numColumnas = 4.2 + val margin = screenWidth/35 + val tamannoCarta = (screenWidth - (margin * (numColumnas + 1))) / numColumnas + for (i in 0 until 16) { + val carta = Carta(id = i, imageResId = imagenesCartas[i]) + cartas.add(carta) + val button = Button(this).apply { + layoutParams = GridLayout.LayoutParams().apply { + width = tamannoCarta.toInt() + height = ((tamannoCarta + screenWidth*0.05).toInt()) + setMargins(10, 10, 10, 10) + } + setBackgroundResource(R.drawable.asi_minijuego_3_trasero) + setOnClickListener { cartaClickada(i) } + } + botonesCarta.add(button) + gridLayout.addView(button) + } + } + + private fun iniciarCronometro() { + cuentraAtras?.cancel() + cuentraAtras = object : CountDownTimer(tiempoRestante, 1000) { + override fun onTick(millisUntilFinished: Long) { + tiempoRestante = millisUntilFinished + actualizarContador() + } + override fun onFinish() { + soundManager.stopSound() + mostrarGameOver("¡Has perdido!") + } + }.start() + tiempoCorriendo = true + } + + private fun actualizarContador() { + val segundos = (tiempoRestante / 1000).toInt() + val minutos = segundos / 60 + val segundosRestantes = segundos % 60 + cronometroTextView.text = String.format("%02d:%02d", minutos, segundosRestantes) + } + + private fun cartaClickada(position: Int) { + if (procesandose) return + soundManager.playSound(R.raw.sound_cardflip,100) + val carta = cartas[position] + val button = botonesCarta[position] + if (carta.isFaceUp || carta.isMatched) return + carta.isFaceUp = true + if (primieraCarta == null) { + primieraCarta = carta + girarCarta(button, carta.imageResId) + } else if (segundaCarta == null) { + segundaCarta = carta + girarCarta(button, carta.imageResId) + procesandose = true + comprobarMatch() + } + + } + + private fun comprobarMatch() { + Handler(Looper.getMainLooper()).postDelayed({ + if (primieraCarta?.imageResId == segundaCarta?.imageResId) { + primieraCarta?.isMatched = true + segundaCarta?.isMatched = true + sumarTiempo() + primieraCarta?.let { card -> + val button = botonesCarta[cartas.indexOf(card)] + iluminarCarta(button) + } + segundaCarta?.let { card -> + val button = botonesCarta[cartas.indexOf(card)] + iluminarCarta(button)} + soundManager.playSound(R.raw.sound_match,60) + } else { + primieraCarta?.let { card -> + val button = botonesCarta[cartas.indexOf(card)] + card.isFaceUp = false + girarCarta(button, R.drawable.asi_minijuego_3_trasero, isReversing = true) + } + segundaCarta?.let { card -> + val button = botonesCarta[cartas.indexOf(card)] + card.isFaceUp = false + girarCarta(button, R.drawable.asi_minijuego_3_trasero, isReversing = true) + + } + soundManager.playSound(R.raw.sound_cardflip,100) + } + primieraCarta = null + segundaCarta = null + procesandose = false + comprobarFinJuego() + + }, 1000) + } + + + private fun comprobarFinJuego() { + if (cartas.all { it.isMatched }) { + soundManager.stopSound() + tiempoCorriendo = false + cuentraAtras?.cancel() + mostrarGameOver("¡Has ganado!") + } + } + + private fun sumarTiempo() { + tiempoRestante += 2000 + actualizarContador() + iniciarCronometro() + } + + private fun mostrarGameOver(mensaje: String) { + Toast.makeText(this, mensaje, Toast.LENGTH_SHORT) .show() + botonVolver.visibility = ImageView.VISIBLE + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if(!flag){ + val resultadoIntent = Intent() + resultadoIntent.putExtra("TIEMPO", tiempoRestante.toString()) + println(tiempoRestante) + setResult(RESULT_OK, resultadoIntent) + finish() + } + + gridLayout.removeAllViews() + } + + + + private fun girarCarta(button: Button, imageResId: Int, isReversing: Boolean = false) { + val scale = applicationContext.resources.displayMetrics.density + button.cameraDistance = 8000 * scale + val flipOut = ObjectAnimator.ofFloat(button, "rotationY", 0f, 90f).apply { + duration = 300 + } + val flipIn = ObjectAnimator.ofFloat(button, "rotationY", 90f, 0f).apply { + duration = 300 + } + flipOut.addListener(object : AnimatorListenerAdapter() { + override fun onAnimationEnd(animation: Animator) { + button.setBackgroundResource(if (isReversing) R.drawable.asi_minijuego_3_trasero else imageResId) + flipIn.start() + } + }) + flipOut.start() + } + + private fun iluminarCarta(button: Button) { + val matrix = ColorMatrix() + matrix.setScale(1.5f, 1.5f, 1.5f, 1f) + val colorFilter = ColorMatrixColorFilter(matrix) + button.background.colorFilter = colorFilter + val animator = ValueAnimator.ofFloat(1.5f, 1f) + animator.duration = 1500 + animator.addUpdateListener { animation -> + val value = animation.animatedValue as Float + val scaleMatrix = ColorMatrix() + scaleMatrix.setScale(value, value, value, 1f) + button.background.colorFilter = ColorMatrixColorFilter(scaleMatrix) + } + animator.start() + } + + private fun voltearCartas() { + soundManager.playSound(R.raw.sound_cardflip,100) + botonesCarta.forEachIndexed { index, button -> + val card = cartas[index] + card.isFaceUp = true + girarCarta(button, card.imageResId) + } + Handler(Looper.getMainLooper()).postDelayed({ + soundManager.playSound(R.raw.sound_cardflip,100) + botonesCarta.forEachIndexed { index, button -> + val card = cartas[index] + card.isFaceUp = false + girarCarta(button, R.drawable.asi_minijuego_3_trasero, isReversing = true) + + } + }, 2000) + } + override fun onPause() { + super.onPause() + soundManager.stopSound() + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + cuentraAtras?.cancel() + tiempoCorriendo = false + super.onBackPressed() + } + } +} +class ModalFragment : DialogFragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflar el diseño del modal + val view = inflater.inflate(R.layout.modal_minijuego3_tutorial, container, false) + + // Configurar el botón de cerrar + val closeButton = view.findViewById<Button>(R.id.cerrar) + closeButton.setOnClickListener { + dismiss() // Cierra el modal + } + + return view + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuego4/Minijuego4.kt b/app/src/main/java/com/example/ellegadodepintia/minijuego4/Minijuego4.kt new file mode 100644 index 0000000000000000000000000000000000000000..bd750ca739e7e9186fbeab4c05c4d8201ddd997f --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuego4/Minijuego4.kt @@ -0,0 +1,6 @@ +package com.example.ellegadodepintia.minijuego4 + +import androidx.appcompat.app.AppCompatActivity + +class Minijuego4 : AppCompatActivity(){ +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuegoInvestigacion/MinijuegoInvestigar.kt b/app/src/main/java/com/example/ellegadodepintia/minijuegoInvestigacion/MinijuegoInvestigar.kt new file mode 100644 index 0000000000000000000000000000000000000000..4f2b605c58585faed000f5e32c4128362101c3a0 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuegoInvestigacion/MinijuegoInvestigar.kt @@ -0,0 +1,216 @@ +package com.example.ellegadodepintia.minijuegoInvestigacion + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.app.Activity +import android.content.Intent +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.ColorMatrix +import android.graphics.ColorMatrixColorFilter +import android.graphics.Matrix +import android.os.Bundle +import android.os.Handler +import android.widget.ImageView +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import kotlin.random.Random +import com.example.ellegadodepintia.soundManager.SoundManager + +class MinijuegoInvestigar : AppCompatActivity() { + private lateinit var parte1: ImageView + private lateinit var parte2: ImageView + private lateinit var parte3: ImageView + private lateinit var parte4: ImageView + private lateinit var soundManager: SoundManager + private var inicio = false + private var rotando = false + private var ultimoClick: Long = 0 + private val angulosRotacion = mutableMapOf<ImageView, Int>() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + soundManager = SoundManager(this) + soundManager.playSoundLoop(R.raw.sound_memory,80) + setContentView(R.layout.activity_minijuego_investigar) + inicio = false + val flag = intent.getBooleanExtra("FLAG_KEY", false) // Si no se encuentra el extra, se usa el valor por defecto (false) + parte1 = findViewById(R.id.part1) + parte2 = findViewById(R.id.part2) + parte3 = findViewById(R.id.part3) + parte4 = findViewById(R.id.part4) + angulosRotacion[parte1] = 0 + angulosRotacion[parte2] = 0 + angulosRotacion[parte3] = 0 + angulosRotacion[parte4] = 0 + var originalBitmap: Bitmap? = null + if(flag){ + originalBitmap = BitmapFactory.decodeResource(resources, R.drawable.asi_exploradores_jabonera) + }else{ + originalBitmap = BitmapFactory.decodeResource(resources, GameState.eventoActual.imagen) + } + val size = minOf(originalBitmap.width, originalBitmap.height) + val squareBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, size, size) + val halfSize = size / 2 + val topLeft = Bitmap.createBitmap(squareBitmap, 0, 0, halfSize, halfSize) + val topRight = Bitmap.createBitmap(squareBitmap, halfSize, 0, halfSize, halfSize) + val bottomLeft = Bitmap.createBitmap(squareBitmap, 0, halfSize, halfSize, halfSize) + val bottomRight = Bitmap.createBitmap(squareBitmap, halfSize, halfSize, halfSize, halfSize) + + parte1.setImageBitmap(topLeft) + parte2.setImageBitmap(topRight) + parte3.setImageBitmap(bottomLeft) + parte4.setImageBitmap(bottomRight) + + parte1.setOnClickListener { + val currentTime = System.currentTimeMillis() + if (currentTime - ultimoClick >= 300 && !rotando) { + ultimoClick = currentTime + rotarImagen(parte1, topLeft) + } + } + + parte2.setOnClickListener { + val currentTime = System.currentTimeMillis() + if (currentTime - ultimoClick >= 300 && !rotando) { + ultimoClick = currentTime + rotarImagen(parte2, topRight) + } + } + + parte3.setOnClickListener { + val currentTime = System.currentTimeMillis() + if (currentTime - ultimoClick >= 300 && !rotando) { + ultimoClick = currentTime + rotarImagen(parte3, bottomLeft) + } + } + + parte4.setOnClickListener { + val currentTime = System.currentTimeMillis() + if (currentTime - ultimoClick >= 300 && !rotando) { + ultimoClick = currentTime + rotarImagen(parte4, bottomRight) + } + } + val randomRotations1 = Random.nextInt(1, 4) + val randomRotations2 = Random.nextInt(1, 3) + val randomRotations3 = Random.nextInt(1, 3) + val randomRotations4 = Random.nextInt(1, 4) + + for (i in 1..randomRotations1) { + rotarImagen(parte1, topLeft) + } + + for (i in 1..randomRotations2) { + rotarImagen(parte2, topRight) + } + + for (i in 1..randomRotations3) { + rotarImagen(parte3, bottomLeft) + } + + for (i in 1..randomRotations4) { + rotarImagen(parte4, bottomRight) + } + + inicio = true + efectoFadeIn(parte1) + efectoFadeIn(parte2) + efectoFadeIn(parte3) + efectoFadeIn(parte4) + } + + private fun efectoFadeIn(imageView: ImageView) { + val fadeInAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 0f, 1f) + fadeInAnimator.duration = 2000 + fadeInAnimator.start() + } + + private fun rotarImagen(imageView: ImageView, originalBitmap: Bitmap) { + if(!rotando || !inicio) { + rotando = true + soundManager.playSound(R.raw.sound_button,100) + val anguloActual = angulosRotacion[imageView] ?: 0 + val nuevoAngulo = (anguloActual + 90) + val rotateAnimator = ObjectAnimator.ofFloat( + imageView, + "rotation", + anguloActual.toFloat(), + nuevoAngulo.toFloat() + ) + rotateAnimator.duration = 300 + rotateAnimator.start() + val matrix = Matrix() + matrix.postRotate(90f) + val rotatedBitmap = Bitmap.createBitmap( + originalBitmap, + 0, + 0, + originalBitmap.width, + originalBitmap.height, + matrix, + true + ) + imageView.setImageBitmap(rotatedBitmap) + angulosRotacion[imageView] = nuevoAngulo + Handler().postDelayed({ + rotando = false + comprobarImagenCompleta() + }, 400) + } + } + + private fun comprobarImagenCompleta() { + val allCorrect = angulosRotacion.values.all { it % 360 == 270} + println("Ãngulos actuales: ${angulosRotacion.values.joinToString(", ")}") + if (allCorrect && inicio) { + bloquearPuzle() + } + } + + private fun bloquearPuzle() { + parte1.isEnabled = false + parte2.isEnabled = false + parte3.isEnabled = false + parte4.isEnabled = false + Handler().postDelayed({ + iluminarParte(parte1) + iluminarParte(parte2) + iluminarParte(parte3) + iluminarParte(parte4) + }, 500) + val resultIntent = Intent() + resultIntent.putExtra("resultado", "Investigación completada") + setResult(Activity.RESULT_OK, resultIntent) + soundManager.stopSound() + finish() + } + + private fun iluminarParte(imageView: ImageView) { + val matrix = ColorMatrix() + matrix.setScale(1.5f, 1.5f, 1.5f, 1f) + val colorFilter = ColorMatrixColorFilter(matrix) + imageView.colorFilter = colorFilter + val animator = ValueAnimator.ofFloat(1.5f, 1f) + animator.duration = 2000 + animator.addUpdateListener { animation -> + val value = animation.animatedValue as Float + val scaleMatrix = ColorMatrix() + scaleMatrix.setScale(value, value, value, 1f) + imageView.colorFilter = ColorMatrixColorFilter(scaleMatrix) + } + animator.start() + } + override fun onPause() { + super.onPause() + soundManager.stopSound() + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + super.onBackPressed() + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/minijuegoReparacion/MinijuegoReparacion.kt b/app/src/main/java/com/example/ellegadodepintia/minijuegoReparacion/MinijuegoReparacion.kt new file mode 100644 index 0000000000000000000000000000000000000000..86a54407677b02c9d6bee2dfbdfab7415cfd4d91 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/minijuegoReparacion/MinijuegoReparacion.kt @@ -0,0 +1,305 @@ +package com.example.ellegadodepintia.minijuegoReparacion + +import android.app.Activity +import android.content.Intent +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Rect +import android.graphics.drawable.AnimationDrawable +import android.os.Bundle +import android.widget.ImageView +import android.widget.RelativeLayout +import androidx.appcompat.app.AppCompatActivity +import com.example.ellegadodepintia.R +import android.os.Handler +import android.os.Looper +import android.view.animation.LinearInterpolator +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import kotlin.random.Random +import com.example.ellegadodepintia.soundManager.SoundManager + +class MinijuegoReparacion : AppCompatActivity() { + + private lateinit var fragmentos: List<Fragmento> + private lateinit var soundManager: SoundManager + private val filas = 5 + private val columnas = 5 + private var clics = 5 + private var intervaloDeAngulo = Pair(0f, 0f) + var stop = false + val handler = Handler() + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + soundManager = SoundManager(this) + soundManager.playSoundLoop(R.raw.sound_worso,100) + setContentView(R.layout.activity_minijuego_reparacion) + var imagenOriginal: Bitmap? = null + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if(flag){ + imagenOriginal = cargarImagen(R.drawable.asi_exploradores_jabonera) + }else{ + imagenOriginal = cargarImagen(GameState.eventoActual.imagen) + } + + fragmentos = dividirImagen(imagenOriginal, filas, columnas) + + val relativeLayout = findViewById<RelativeLayout>(R.id.relativeLayoutFragmentos) + agregarFragmentosAlRelativeLayout(relativeLayout) + + val paloImageView: ImageView = findViewById(R.id.QTEPalo) + val ruleImageView: ImageView = findViewById(R.id.QTERule) + iniciarQTE(paloImageView, ruleImageView) + + } + + private fun cargarImagen(idRecurso: Int): Bitmap { + return BitmapFactory.decodeResource(resources, idRecurso) + } + + private fun dividirImagen(imagen: Bitmap, filas: Int, columnas: Int): List<Fragmento> { + val fragmentos = mutableListOf<Fragmento>() + val ancho = imagen.width + val alto = imagen.height + val tamanoFragmento = minOf(ancho, alto) / columnas + + for (i in 0 until filas) { + for (j in 0 until columnas) { + val xInicio = j * tamanoFragmento + val yInicio = i * tamanoFragmento + val rectangulo = Rect(xInicio, yInicio, xInicio + tamanoFragmento, yInicio + tamanoFragmento) + val fragmento = Bitmap.createBitmap(imagen, rectangulo.left, rectangulo.top, rectangulo.width(), rectangulo.height()) + fragmentos.add(Fragmento(fragmento, i, j)) + } + } + + return fragmentos + } + + private fun agregarFragmentosAlRelativeLayout(relativeLayout: RelativeLayout) { + val mesaHeightMin = relativeToHeight(1700) + val mesaHeightMax = relativeToHeight(1900) + + for (fragmento in fragmentos) { + val imageView = ImageView(this) + imageView.setImageBitmap(fragmento.bitmap) + val params = RelativeLayout.LayoutParams(relativeToWidth(120), relativeToHeight(120)) + + params.leftMargin = Random.nextInt(relativeToWidth(250), relativeToWidth(750)) + params.topMargin = Random.nextInt(mesaHeightMin, mesaHeightMax) + imageView.layoutParams = params + + imageView.rotation = Random.nextFloat() * 90 - 45 + fragmento.xPos = params.leftMargin + fragmento.yPos = params.topMargin + fragmento.rotation = imageView.rotation + + relativeLayout.addView(imageView) + } + } + + private fun reconstruirImagenEnPartes(relativeLayout: RelativeLayout) { + if (clics == -1) return + mostrarNubesDePolvo(relativeLayout,40) + mostrarMartilloGolpe(relativeLayout) + for ((index, fragmento) in fragmentos.withIndex()) { + val imageView = relativeLayout.getChildAt(index) as? ImageView ?: continue + val margenIzquierdaFinal = fragmento.columna * relativeToWidth(120) + relativeToWidth(250) + val margenArribaFinal = fragmento.fila * relativeToHeight(120) + relativeToHeight(1300) + val precisionRandom = Random.nextFloat() * 0.4f + 0.6f + val precision = 1f - (clics * 0.20f) * precisionRandom + + val margenIzquierda = fragmento.xPos + (margenIzquierdaFinal - fragmento.xPos) * precision + val margenArriba = fragmento.yPos + (margenArribaFinal - fragmento.yPos) * precision + val rotacion = fragmento.rotation * (1 - precision) + + val params = RelativeLayout.LayoutParams(relativeToWidth(120), relativeToHeight(120)) + params.leftMargin = margenIzquierda.toInt() + params.topMargin = margenArriba.toInt() + imageView.layoutParams = params + + imageView.animate() + .x(margenIzquierda) + .y(margenArriba) + .rotation(rotacion) + .setDuration(500) + .start() + } + } + + data class Fragmento(val bitmap: Bitmap, val fila: Int, val columna: Int, var xPos: Int = 0, var yPos: Int = 0, var rotation: Float = 0f) + + private fun mostrarQTE(paloImageView: ImageView, ruleImageView: ImageView) { + soundManager.playSound(R.raw.sound_qte,20) + val relativeLayout = findViewById<RelativeLayout>(R.id.relativeLayoutFragmentos) + var para = false + val initialX = ruleImageView.x + val initialY = ruleImageView.y + val randomX = Random.nextFloat() * (relativeToWidth(1050) - relativeToWidth(350)) + val randomY = Random.nextFloat() * (relativeToHeight(1400) - relativeToHeight(250)) + ruleImageView.x = randomX + ruleImageView.y = randomY + val deltaX = ruleImageView.x - initialX + val deltaY = ruleImageView.y - initialY + paloImageView.x += deltaX + paloImageView.y += deltaY + val randomR = 150 + Random.nextFloat() * (360 - 150) + ruleImageView.rotation = randomR + fadeIn(paloImageView, ruleImageView) + intervaloDeAngulo = Pair((270f + randomR) % 360, (330f + randomR) % 360).let { + if (it.first > it.second) it.second to it.first else it + } + + paloImageView.rotation = Random.nextFloat() * 180 + val animation = paloImageView.animate() + .rotationBy(1080f) + .setInterpolator(LinearInterpolator()) + .setDuration(5000) + + animation.start() + relativeLayout.setOnTouchListener { _, _ -> + if (paloImageView.visibility == ImageView.VISIBLE && !para) { + animation.cancel() + para = true + verificarQTE(paloImageView.rotation) + } + true + } + } + + private fun verificarQTE(anguloActual: Float) { + val relativeLayout = findViewById<RelativeLayout>(R.id.relativeLayoutFragmentos) + if (anguloActual % 360 in intervaloDeAngulo.first..intervaloDeAngulo.second) { + if (clics > 0) { + clics-- + soundManager.playSound(R.raw.sound_reparar,100) + reconstruirImagenEnPartes(relativeLayout) + } + + } else { + if (clics < 5) { + clics++ + soundManager.playSound(R.raw.sound_romper,100) + reconstruirImagenEnPartes(relativeLayout) + } + } + } + + private fun iniciarQTE(paloImageView: ImageView, ruleImageView: ImageView) { + val handler = Handler(Looper.getMainLooper()) + val runnable = object : Runnable { + override fun run() { + if (clics == 0 || stop) { + handler.removeCallbacks(this) + val relativeLayout = findViewById<RelativeLayout>(R.id.relativeLayoutFragmentos) + mostrarNubesDePolvo(relativeLayout,100) + + val resultIntent = Intent() + resultIntent.putExtra("resultado", "Reparación completada") + setResult(Activity.RESULT_OK, resultIntent) + finish() + return + } + mostrarQTE(paloImageView, ruleImageView) + handler.postDelayed({ fadeOut(paloImageView, ruleImageView) }, 2500) + handler.postDelayed(this, 3000) + } + } + handler.postDelayed(runnable, 100) + } + + fun fadeIn(paloImageView: ImageView, ruleImageView: ImageView) { + paloImageView.alpha = 0f + ruleImageView.alpha = 0f + paloImageView.visibility = ImageView.VISIBLE + ruleImageView.visibility = ImageView.VISIBLE + + paloImageView.animate().alpha(1f).setDuration(500).start() + ruleImageView.animate().alpha(1f).setDuration(500).start() + } + + fun fadeOut(paloImageView: ImageView, ruleImageView: ImageView) { + paloImageView.animate() + .alpha(0f) + .setDuration(500) + .withEndAction { paloImageView.visibility = ImageView.GONE } + .start() + ruleImageView.animate() + .alpha(0f) + .setDuration(500) + .withEndAction { ruleImageView.visibility = ImageView.GONE } + .start() + } + + private fun mostrarNubesDePolvo(relativeLayout: RelativeLayout, cantidad: Int) { + for (i in 0 until cantidad) { + val nubeView = ImageView(this) + nubeView.setBackgroundResource(R.drawable.effect_reparar_animation) + val tam = Random.nextInt(150, 250) + val params = RelativeLayout.LayoutParams(tam, tam) + params.leftMargin = Random.nextInt(relativeToWidth(100), relativeToWidth(700)) + params.topMargin = Random.nextInt(relativeToHeight(1300), relativeToHeight(1900)) + nubeView.layoutParams = params + nubeView.rotation = Random.nextFloat()* 360 + relativeLayout.addView(nubeView) + val delay = Random.nextLong(0, 300) + handler.postDelayed({ + (nubeView.background as? AnimationDrawable)?.start() + nubeView.animate() + .translationYBy(-Random.nextFloat()* 200) + .alpha(0f) + .setDuration(1000L) + .withEndAction { relativeLayout.removeView(nubeView) } + .start() + }, delay) + } + } + + private fun mostrarMartilloGolpe(relativeLayout: RelativeLayout) { + val martilloView = ImageView(this) + + martilloView.setImageResource(R.drawable.asi_reparar_martillo) + val tamMartillo = Random.nextInt(300, 500) + val params = RelativeLayout.LayoutParams(tamMartillo, tamMartillo) + params.leftMargin = Random.nextInt(relativeToWidth(100), relativeToWidth(700)) + params.topMargin = Random.nextInt(relativeToHeight(1300), relativeToHeight(1900)) + martilloView.rotation = 50f + martilloView.layoutParams = params + relativeLayout.addView(martilloView) + martilloView.animate() + .rotationBy(30f) + .setDuration(300L) + .withEndAction { + martilloView.animate() + .alpha(0f) + .setDuration(300L) + .withEndAction { relativeLayout.removeView(martilloView) } + .start() + } + .start() + } + override fun onPause() { + super.onPause() + soundManager.stopSound() + stop = true + } + // Funciones auxiliares para convertir a proporciones relativas + private fun relativeToWidth(value: Int): Int { + val metrics = resources.displayMetrics + var screenWidth = metrics.widthPixels + return (value * screenWidth) / 1080 + } + + private fun relativeToHeight(value: Int): Int { + val metrics = resources.displayMetrics + var screenHeight = metrics.heightPixels + return (value * screenHeight) / 2285 + } + override fun onBackPressed() { + val flag = intent.getBooleanExtra("FLAG_KEY", false) + if (flag){ + super.onBackPressed() + } + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt new file mode 100644 index 0000000000000000000000000000000000000000..5f1703ba4238e66471b8eeb900322bfe8c8a8816 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioJugador.kt @@ -0,0 +1,107 @@ +package com.example.ellegadodepintia.repositorios + +import com.example.ellegadodepintia.PlayerLeaderBoard +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import com.google.firebase.firestore.FirebaseFirestore +import com.google.firebase.firestore.SetOptions + +object RepositorioJugador { + private val db by lazy { FirebaseFirestore.getInstance() } + private lateinit var email: String + + fun cargarJugador(email: String) { + RepositorioJugador.email = email + 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() + + GameState.jugador.objetosTienda = objetosTienda + + val objetosArmeria = (it.get("objetosArmeria") as? List<*>) + ?.filterIsInstance<String>() + ?.toCollection(ArrayList()) + ?: ArrayList() + + GameState.jugador.objetosArmeria = objetosArmeria + + val inventario = (it.get("inventario") as? List<*>) + ?.filterIsInstance<String>() + ?.toCollection(ArrayList()) + ?: ArrayList() + + for(nombreObjeto in inventario){ + GameState.jugador.inventario.add(RepositorioObjetos.obtenerObjetoPorNombre(nombreObjeto)!!) + } + } + } + + fun addJugador(email: String, username: String) { + db.collection("users").document(email).set( + hashMapOf( + "monedas" to 0, + "username" to username, + "nivelCiudad" to 1, + "inventario" to ArrayList<String>(), + "objetosTienda" to RepositorioObjetos.obtenerObjetosAleatoriosTienda(2), + "objetosArmeria" to RepositorioObjetos.obtenerObjetosAleatoriosArmeria(2) + ) + ) + } + + fun setMonedas(monedas: Int) { + val userRef = db.collection("users").document(email) + 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 setObjetosArmeria(objetosArmeria : ArrayList<String>) { + val userRef = db.collection("users").document(email) + 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 setInventario(objetos : ArrayList<String>) { + val userRef = db.collection("users").document(email) + userRef.set(hashMapOf("inventario" to objetos), SetOptions.merge()) + } + + fun cargarJugadores(callback: (List<PlayerLeaderBoard>) -> Unit) { + db.collection("users") + .get() + .addOnSuccessListener { result -> + val players = mutableListOf<PlayerLeaderBoard>() + + for (document in result) { + val name = document.getString("username").toString() + val score = document.getLong("monedas")?.toInt() ?: 0 + players.add( + PlayerLeaderBoard( + 0, + name, + score + ) + ) + } + players.sortByDescending { it.score } + players.forEachIndexed { index, player -> + player.position = index + 1 + } + + callback(players) + } + } + +} diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt new file mode 100644 index 0000000000000000000000000000000000000000..ac402b3effd23de6d3e154ebdf1280d90f0937e1 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt @@ -0,0 +1,211 @@ + package com.example.ellegadodepintia.repositorios + +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.Habilidad +import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoBuffo +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.* +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableHabilidad +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoAtacar +import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoCura + +object RepositorioObjetos { + private val objetos: Map<String, Objeto> by lazy { + listOf( + //****************************************** + // E Q U I P A B L E S + //****************************************** + 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), + coste = 20, + imagen = R.drawable.asi_objeto_espadadefault + + ), + ObjetoEquipable( + nombre = "Escudo Caetrae", + descripcion = "La caetrae es un escudo redondo vacceo, forjado para la defensa en combate, que aumenta tu vida máxima en 10 puntos.", + efecto = EfectoEquipableAumento(10, Atributo.Vida), + coste = 50, + imagen = R.drawable.asi_objeto_escudo + ), + ObjetoEquipable( + nombre = "Casco Ceremonial", + descripcion = "Casco ceremonial de oro de los vacceos decorado con intrincados patrones que simboliza el estatus social. Aumenta tu vida máxima en 8 puntos", + efecto = EfectoEquipableAumento(8, Atributo.Vida), + coste = 40, + imagen = R.drawable.asi_objeto_casco + ), + ObjetoEquipable( + nombre = "Puñal Vacceo", + descripcion = "Espada corta, tÃpica de diseño celtibérico. Mientras está equipada añade la habilidad \"Letalidad\" para su uso en combate.", + efecto = EfectoEquipableHabilidad( + Habilidad( + "Letalidad", + "Aumenta la probabilidad de realizar un golpe crÃtico a un 30% por dos turnos", + EfectoBuffo(Atributo.Critico, 22, 2), + energia = 2 + ) + ), + coste = 10, + imagen = R.drawable.asi_objeto_daga + ), + //********************************************** + // C O N S U M I B L E S + //********************************************** + ObjetoConsumible( + nombre = "Elixir Menor de la Necrópolis", + descripcion = "Un frasco pequeño con un lÃquido granate y brillante, que destella con un resplandor profundo, capaz de restaurar 3 puntos de vida al instante.", + efecto = EfectoObjetoCura(3), + coste = 5, + imagen = R.drawable.asi_objeto_pocima_vida_5 + ), + ObjetoConsumible( + nombre = "Elixir Mediano de la Necrópolis", + descripcion = "Un frasco robusto con un lÃquido amarillo brillante, que resplandece como el sol al mediodÃa, capaz de restaurar 5 puntos de vida al instante.", + efecto = EfectoObjetoCura(5), + coste = 8, + imagen = R.drawable.asi_objeto_pocima_vida_10 + ), + ObjetoConsumible( + nombre = "Elixir Supremo de la Necrópolis", + descripcion = "Frasco supremo forjado con los secretos de los vacceos, restaura toda tu vitalidad al instante, ¡la poción de cura más poderosa de Pintia!", + efecto = EfectoObjetoCura(999), + coste = 15, + imagen = R.drawable.asi_objeto_pocima_vida_all + ), + ObjetoConsumible( + nombre = "Poción de Veneno II", + descripcion = "Según las leyendas, los vacceos preparaban este brebaje para impregnar sus armas, asegurando que incluso un rasguño pudiera derrotar a un enemigo. Hace 2 de daño al enemigo.", + efecto = EfectoObjetoAtacar(2,R.raw.sound_veneno2), + coste = 15, + imagen = R.drawable.asi_objeto_veneno2 + ), + //********************************** + // D E V A L O R + //********************************** + ObjetoDeValor( + nombre = "Vasito de barro cocido", + descripcion = "Objeto de gran valor. Se convierte en 50 monedas si consigues completar la partida.", + coste = 50, + imagen = R.drawable.asi_exploradores_vasito + ), + ObjetoDeValor( + nombre = "Jabonera de cerámica", + descripcion = "Objeto de gran valor. Se convierte en 55 monedas si consigues completar la partida.", + coste = 55, + imagen = R.drawable.asi_exploradores_jabonera + ), + ObjetoDeValor( + nombre = "Copa negra con inscripciones", + descripcion = "Objeto de gran valor. Se convierte en 55 monedas si consigues completar la partida.", + coste = 55, + imagen = R.drawable.asi_minijuego_3_copa_negra_brunida + ), + ObjetoDeValor( + nombre = "Tapadera de cerámica zoomorfa", + descripcion = "Objeto de gran valor. Se convierte en 100 monedas si consigues completar la partida.", + coste = 100, + imagen = R.drawable.asi_minijuego_3_tapadera_zoomorfo + ), + 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 = 55 + ), + ObjetoDeValor( + nombre= "Sonajero Redondo", + descripcion = "Pequeño artefacto de cerámica utilizado en rituales funerarios o ceremonias. Su diseño y sonido caracterÃstico eran sÃmbolos de protección y conexión espiritual en la cultura celtÃbera.", + imagen = R.drawable.asi_minijuego_3_sonajero_redondo, + coste = 55 + ), + ObjetoDeValor( + nombre= "Piel del Gran Lobo", + descripcion = "Piel obtenida del lobo que representa parte de la mitologÃa vaccea. Está valorado en 120 monedas", + imagen = R.drawable.asi_objeto_piel, + coste = 120 + ), + ObjetoDeValor( + nombre = "Fragmento de reliquia", + descripcion = "Los restos de una reliquia. Hay algunos comerciantes que los buscan. Tiene un valor de 33 monedas.", + imagen = R.drawable.asi_fragmento_reliquia, + coste = 33 + ), + //********************************************** + // D E U T I L I D A D + //********************************************** + ObjetoUtilidad( + 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.", + coste = 20, + 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", + coste = 20, + imagen = R.drawable.asi_objeto_ticket + ), + ObjetoUtilidad( + nombre = "Pala Vaccea", + descripcion = "Una antigua pala con marcas de uso, forjada con madera resistente y un metal desgastado por el tiempo. Parece estar llena de historia.", + coste = 20, + imagen = R.drawable.asi_objeto_pala + ) + ).associateBy { it.nombre } + } + + fun obtenerObjetoPorNombre(nombre: String): Objeto { + return objetos[nombre]!!.clone() + } + + + fun obtenerObjetoPorCoste(coste: Int): Objeto? { + val objetosFiltrados = objetos.values + .filterIsInstance<ObjetoDeValor>() + .filter { it.coste <= coste } + .groupBy { it.coste } + + if (objetosFiltrados.isEmpty()){ + return null + } + + val costeMasCercano = objetosFiltrados.keys + .filter { it <= coste } + .maxOrNull() + + val objetosConCosteMasCercano = objetosFiltrados[costeMasCercano] ?: return null + return objetosConCosteMasCercano.random().clone() + } + + + + + fun obtenerObjetosAleatoriosTienda(cantidad: Int): ArrayList<String> { + val consumibles = objetos.values.filter { it is ObjetoConsumible || it is ObjetoUtilidad } + return ArrayList<String>().apply { + repeat(cantidad) { + add((consumibles.random()).nombre) + } + } + } + + fun obtenerObjetosAleatoriosArmeria(cantidad: Int): ArrayList<String> { + val equipables = objetos.values.filterIsInstance<ObjetoEquipable>() + return ArrayList<String>().apply { + repeat(cantidad) { + println((equipables.random()).nombre) + add((equipables.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/java/com/example/ellegadodepintia/ruleta/Ruleta.kt b/app/src/main/java/com/example/ellegadodepintia/ruleta/Ruleta.kt new file mode 100644 index 0000000000000000000000000000000000000000..07686477def6d3bc130caf4d4ecd409d5cfa9848 --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/ruleta/Ruleta.kt @@ -0,0 +1,175 @@ +package com.example.ellegadodepintia.ruleta + +import android.animation.ObjectAnimator +import android.animation.ValueAnimator +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.view.ViewGroup +import android.view.animation.AccelerateDecelerateInterpolator +import android.view.animation.AnimationUtils +import android.view.animation.RotateAnimation +import android.widget.ImageView +import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.core.animation.doOnEnd +import com.example.ellegadodepintia.R +import com.example.ellegadodepintia.exploradoresDePintia.model.GameState +import kotlin.random.Random +import com.example.ellegadodepintia.soundManager.SoundManager + +class Ruleta : AppCompatActivity() { + private lateinit var ruletaImage: ImageView + private lateinit var puntero: ImageView + private lateinit var titulo: ImageView + private lateinit var multiplicadorResultado: TextView + private lateinit var puntuacion: TextView + private lateinit var soundManager: SoundManager + + private val segmentos = arrayOf("x4", "x1", "x2", "x1", "x2", "x1", "x2", "x1") + private var ultimaRotacion = 0f + private var puntuacionActual = 1 + private var girando = false + + // Configura las vistas iniciales de la actividad y establece acciones iniciales + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + puntuacionActual = intent.getIntExtra("PUNTUACION_ACTUAL", 0) + soundManager = SoundManager(this) + soundManager.playSoundLoop(R.raw.sound_casino, 80) + setContentView(R.layout.activity_ruleta) + inicializarVistas() + animarTitulo() + configurarClickRuleta() + + } + + // Inicializa las vistas del layout asociadas a la ruleta + private fun inicializarVistas() { + ruletaImage = findViewById(R.id.ruletaImage) + puntero = findViewById(R.id.ruletaPuntero) + puntuacion = findViewById(R.id.puntuacion) + puntuacionActual.toString().also { puntuacion.text = it } + titulo = findViewById(R.id.ruletaTitulo) + } + + // Aplica una animación al tÃtulo de la ruleta + private fun animarTitulo() { + val animation = AnimationUtils.loadAnimation(this, R.anim.animatitu) + titulo.startAnimation(animation) + } + + // Configura el evento de clic para que la ruleta gire cuando se presiona + private fun configurarClickRuleta() { + ruletaImage.setOnClickListener { + if(!girando){ + girando = true + soundManager.playSound(R.raw.sound_ruleta,100) + girarRuleta() + } + + } + } + + // Realiza la animación de giro de la ruleta y determina el ángulo de rotación + private fun girarRuleta() { + ruletaImage.rotation = -24f + + val randomAngleMultiplier = Random.nextInt(0, segmentos.size) + val extraRotation = randomAngleMultiplier * 45 + val rotacionTotal = ultimaRotacion + 1800 + extraRotation + + val rotateAnim = RotateAnimation( + ultimaRotacion, rotacionTotal, + RotateAnimation.RELATIVE_TO_SELF, 0.5f, + RotateAnimation.RELATIVE_TO_SELF, 0.5f + ).apply { + duration = 4000 + fillAfter = true + interpolator = AccelerateDecelerateInterpolator() + } + ruletaImage.startAnimation(rotateAnim) + ultimaRotacion = rotacionTotal + + val handler = Handler(Looper.getMainLooper()) + handler.postDelayed({ manejarResultadoGiro(rotacionTotal) }, 4000) + } + + // Maneja el resultado tras finalizar el giro de la ruleta, calcula el multiplicador y actualiza la puntuación + private fun manejarResultadoGiro(rotacionTotal: Float) { + val anguloSegmento = 360 / segmentos.size + val anguloFinal = rotacionTotal % 360 + val index = (anguloFinal / anguloSegmento).toInt() + val multiplicador = segmentos[index] + val multiplicadorValor = multiplicador.drop(1).toInt() + val nuevaPuntuacion = puntuacionActual * multiplicadorValor + animarPuntuacion(puntuacionActual, nuevaPuntuacion) + puntuacionActual = nuevaPuntuacion + + if (multiplicador == "x4") { + soundManager.playSound(R.raw.sound_big_win,100) + lluviaMonedas() + } + + Handler(Looper.getMainLooper()).postDelayed({ + val resultIntent = Intent() + resultIntent.putExtra("resultado", "$puntuacionActual") + setResult(Activity.RESULT_OK, resultIntent) + finish() + },5000) + } + + // Realiza una animación de conteo que muestra la puntuación cambiando de un valor inicial a un valor final + private fun animarPuntuacion(inicio: Int, fin: Int) { + ValueAnimator.ofInt(inicio, fin).apply { + duration = 3000 + addUpdateListener { animation -> + val valorActual = animation.animatedValue as Int + valorActual.toString().also { puntuacion.text = it } + } + start() + } + } + + // Inicia un efecto de lluvia de monedas cuando se obtiene un 'x4' + private fun lluviaMonedas() { + val screenWidth = resources.displayMetrics.widthPixels + val screenHeight = resources.displayMetrics.heightPixels + val rainDuration = 2500L + val handler = Handler(Looper.getMainLooper()) + val startTime = System.currentTimeMillis() + val runnable = object : Runnable { + override fun run() { + val elapsedTime = System.currentTimeMillis() - startTime + if (elapsedTime < rainDuration) { + monedaCaer(screenWidth, screenHeight) + handler.postDelayed(this, 10) + } + } + } + handler.post(runnable) + } + + // Crea una moneda animada que cae desde la parte superior de la pantalla + private fun monedaCaer(screenWidth: Int, screenHeight: Int) { + val coin = ImageView(this).apply { + setImageResource(R.drawable.asi_ruleta_moneda) + layoutParams = ViewGroup.LayoutParams(100, 100) + x = Random.nextInt(0, screenWidth - 100).toFloat() + y = -200f + } + addContentView(coin, coin.layoutParams) + ObjectAnimator.ofFloat(coin, "translationY", screenHeight.toFloat() + 500).apply { + duration = Random.nextLong(2000, 3000) + start() + doOnEnd { (coin.parent as? ViewGroup)?.removeView(coin) } + } + } + override fun onPause() { + super.onPause() + soundManager.stopSound() + } +} diff --git a/app/src/main/java/com/example/ellegadodepintia/soundManager/SoundManager.kt b/app/src/main/java/com/example/ellegadodepintia/soundManager/SoundManager.kt new file mode 100644 index 0000000000000000000000000000000000000000..9b73f3da8b90b77fd4e6671a98c9d91f10149f9a --- /dev/null +++ b/app/src/main/java/com/example/ellegadodepintia/soundManager/SoundManager.kt @@ -0,0 +1,75 @@ +package com.example.ellegadodepintia.soundManager + +import android.content.Context +import android.media.MediaPlayer + +class SoundManager(private val context: Context) { + private var mediaPlayer: MediaPlayer? = null + private var loopMediaPlayer: MediaPlayer? = null // MediaPlayer para sonidos en bucle + + // Método para reproducir un sonido con ajuste de volumen + fun playSound(soundResource: Int, volume: Int) { + // Asegurarse de que el volumen esté en el rango de 1 a 100 + val adjustedVolume = (volume.coerceIn(1, 100) / 100.0).toFloat() // Convertir a un valor entre 0.0 y 1.0 + mediaPlayer = MediaPlayer.create(context, soundResource) + mediaPlayer?.apply { + setVolume(adjustedVolume, adjustedVolume) // Ajusta el volumen de ambos canales + setOnCompletionListener { + // Limpiar recursos una vez que el sonido termina + it.reset() + it.release() + mediaPlayer = null + } + start() // Comienza la reproducción + } + } + + // Método para reproducir un sonido en bucle con ajuste de volumen + fun playSoundLoop(soundResource: Int, volume: Int) { + // Asegurarse de que el volumen esté en el rango de 1 a 100 + val adjustedVolume = (volume.coerceIn(1, 100) / 100.0).toFloat() // Convertir a un valor entre 0.0 y 1.0 + loopMediaPlayer = MediaPlayer.create(context, soundResource) + loopMediaPlayer?.apply { + isLooping = true // Hacer que el sonido se repita en bucle + setVolume(adjustedVolume, adjustedVolume) // Ajusta el volumen de ambos canales + start() // Comienza la reproducción + } + } + + // Método para detener y liberar todos los sonidos + fun stopSound() { + mediaPlayer?.let { + if (it.isPlaying) { + it.stop() + } + it.reset() // Resetea el MediaPlayer a su estado inicial + it.release() // Libera los recursos del MediaPlayer + } + mediaPlayer = null + + loopMediaPlayer?.let { + if (it.isPlaying) { + it.stop() + } + it.reset() // Resetea el MediaPlayer para el bucle + it.release() // Libera los recursos del MediaPlayer + } + loopMediaPlayer = null + } + + // Método para liberar recursos cuando ya no se necesiten más + fun release() { + mediaPlayer?.release() + mediaPlayer = null + + loopMediaPlayer?.release() + loopMediaPlayer = null + } + + + // Método privado para ajustar el volumen + fun setVolume(volume: Int) { + val adjustedVolume = (volume.coerceIn(1, 100) / 100.0).toFloat() + loopMediaPlayer?.setVolume(adjustedVolume, adjustedVolume) + } +} diff --git a/app/src/main/res/anim/animatitu.xml b/app/src/main/res/anim/animatitu.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cdf1a61b18da7f8728f31ddf953b5bf8fbc1daa --- /dev/null +++ b/app/src/main/res/anim/animatitu.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android"> + <translate + xmlns:android="http://schemas.android.com/apk/res/android" + android:fromYDelta="0" + android:toYDelta="10dp" + android:duration="1500" + android:repeatMode="reverse" + android:repeatCount="infinite" /> +</set> \ No newline at end of file diff --git a/app/src/main/res/anim/caida.xml b/app/src/main/res/anim/caida.xml new file mode 100644 index 0000000000000000000000000000000000000000..1464cd6bf9be8e544f4c43d0d58a1c21530b64e8 --- /dev/null +++ b/app/src/main/res/anim/caida.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:ordering="sequentially"> + + <!-- Subir (salto) --> + <translate + android:duration="500" + android:fromYDelta="0%" + android:toYDelta="-20%" /> + + <!-- Caer --> + <translate + android:duration="800" + android:startOffset="500" + android:fromYDelta="-20%" + android:toYDelta="1000%" /> + + <!-- Desaparecer --> + <alpha + android:duration="200" + android:startOffset="1300" + android:fromAlpha="1" + android:toAlpha="0" /> +</set> diff --git a/app/src/main/res/asi_objeto_ticker.png b/app/src/main/res/asi_objeto_ticker.png new file mode 100644 index 0000000000000000000000000000000000000000..00fab7f670fa8a7b854ed2f41027307744a95385 Binary files /dev/null and b/app/src/main/res/asi_objeto_ticker.png differ diff --git a/app/src/main/res/drawable-nodpi/asi_exploradores_interrogacion.png b/app/src/main/res/drawable-nodpi/asi_exploradores_interrogacion.png new file mode 100644 index 0000000000000000000000000000000000000000..94e6bf5235cdd79cdd74f1b09d3de32e5553b421 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_exploradores_interrogacion.png differ diff --git a/app/src/main/res/drawable-nodpi/asi_exploradores_jabonera.png b/app/src/main/res/drawable-nodpi/asi_exploradores_jabonera.png new file mode 100644 index 0000000000000000000000000000000000000000..913bb882f2dc4a57568de30550d57a9be1a48fa7 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_exploradores_jabonera.png differ diff --git a/app/src/main/res/drawable-nodpi/asi_exploradores_vasito.png b/app/src/main/res/drawable-nodpi/asi_exploradores_vasito.png new file mode 100644 index 0000000000000000000000000000000000000000..3786bbfac1e8996126473085e9501b5e2a6dea9c Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_exploradores_vasito.png differ 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-nodpi/asi_objeto_pocima_vida_5.png b/app/src/main/res/drawable-nodpi/asi_objeto_pocima_vida_5.png new file mode 100644 index 0000000000000000000000000000000000000000..f4deaad8a2c3fc19ba94d25b895992430532b15a Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_objeto_pocima_vida_5.png differ diff --git a/app/src/main/res/drawable-nodpi/asi_objeto_veneno2.png b/app/src/main/res/drawable-nodpi/asi_objeto_veneno2.png new file mode 100644 index 0000000000000000000000000000000000000000..0babd40946a9d35ce491dd830beadd79cd4dafca Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_objeto_veneno2.png differ diff --git a/app/src/main/res/drawable-nodpi/asi_ruleta_ruleta.png b/app/src/main/res/drawable-nodpi/asi_ruleta_ruleta.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f380d5caf2e8668ff467a1ee0879a53a20cf26 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_ruleta_ruleta.png differ diff --git a/app/src/main/res/drawable-nodpi/background_taberna.png b/app/src/main/res/drawable-nodpi/background_taberna.png new file mode 100644 index 0000000000000000000000000000000000000000..8490bf37f074919325520339a35d31e98505c194 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/background_taberna.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_00.png b/app/src/main/res/drawable-nodpi/effect_investigar_00.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2eff3dc66c1a840203366ca9274aedf46cca5b Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_00.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_01.png b/app/src/main/res/drawable-nodpi/effect_investigar_01.png new file mode 100644 index 0000000000000000000000000000000000000000..3086d4efdf25afdc55128fa16361ce22d820bd3a Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_01.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_02.png b/app/src/main/res/drawable-nodpi/effect_investigar_02.png new file mode 100644 index 0000000000000000000000000000000000000000..550acf5f70625fe6858edcc2b589bb7b447129ee Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_02.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_03.png b/app/src/main/res/drawable-nodpi/effect_investigar_03.png new file mode 100644 index 0000000000000000000000000000000000000000..94ed5f3d92688209c2fbb801e61b078985f04356 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_03.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_04.png b/app/src/main/res/drawable-nodpi/effect_investigar_04.png new file mode 100644 index 0000000000000000000000000000000000000000..b33634ec2b92848b8bd98de67b81dc802b876711 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_04.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_05.png b/app/src/main/res/drawable-nodpi/effect_investigar_05.png new file mode 100644 index 0000000000000000000000000000000000000000..05f46418909764aca0375393c1af7b768e64d74f Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_05.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_06.png b/app/src/main/res/drawable-nodpi/effect_investigar_06.png new file mode 100644 index 0000000000000000000000000000000000000000..174c62a1485bed32ed8abf28c8d14490e360ae9f Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_06.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_07.png b/app/src/main/res/drawable-nodpi/effect_investigar_07.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7f1b8541d572ac71d8b4c870213d1e7d2976c5 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_07.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_investigar_08.png b/app/src/main/res/drawable-nodpi/effect_investigar_08.png new file mode 100644 index 0000000000000000000000000000000000000000..219a90b555d853d8b89b0529f336ead921d044b9 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_investigar_08.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_reparar_01.png b/app/src/main/res/drawable-nodpi/effect_reparar_01.png new file mode 100644 index 0000000000000000000000000000000000000000..08ca2f6b61d3a775974960357f56bb29551a4e35 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_reparar_01.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_reparar_02.png b/app/src/main/res/drawable-nodpi/effect_reparar_02.png new file mode 100644 index 0000000000000000000000000000000000000000..fdaaccb1f62822a2ecadd707d3b6d4d55ca84a6f Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_reparar_02.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_reparar_03.png b/app/src/main/res/drawable-nodpi/effect_reparar_03.png new file mode 100644 index 0000000000000000000000000000000000000000..c14713c8fad52d10ef5b3539b3ad7fc44eba3920 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_reparar_03.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_reparar_04.png b/app/src/main/res/drawable-nodpi/effect_reparar_04.png new file mode 100644 index 0000000000000000000000000000000000000000..7f1290a7a467a1ec14d37e12950c24eb0f60a8d8 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_reparar_04.png differ diff --git a/app/src/main/res/drawable-nodpi/effect_reparar_05.png b/app/src/main/res/drawable-nodpi/effect_reparar_05.png new file mode 100644 index 0000000000000000000000000000000000000000..356be570a1ea8b4e0e1bb5563a785a2162e2ffdb Binary files /dev/null and b/app/src/main/res/drawable-nodpi/effect_reparar_05.png differ diff --git a/app/src/main/res/drawable-nodpi/icon_energia.png b/app/src/main/res/drawable-nodpi/icon_energia.png new file mode 100644 index 0000000000000000000000000000000000000000..92312dc0138af0a385cd1495025ad797aeff1095 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/icon_energia.png differ diff --git a/app/src/main/res/drawable-nodpi/icon_espada.png b/app/src/main/res/drawable-nodpi/icon_espada.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2f326d4666f986922463b318b2f9d401497856 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/icon_espada.png differ diff --git a/app/src/main/res/drawable-nodpi/icon_event.png b/app/src/main/res/drawable-nodpi/icon_event.png new file mode 100644 index 0000000000000000000000000000000000000000..c3704a4c36692872cf0c85d89aa6ce5c0474e651 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/icon_event.png differ diff --git a/app/src/main/res/drawable-nodpi/icon_inventario.png b/app/src/main/res/drawable-nodpi/icon_inventario.png new file mode 100644 index 0000000000000000000000000000000000000000..20240607b9b7dd5997785b5002668d9179f4a4a2 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/icon_inventario.png differ diff --git a/app/src/main/res/drawable-nodpi/icon_vasija.png b/app/src/main/res/drawable-nodpi/icon_vasija.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed9ecebbb6e6827d024dba555e2a3caf653ee15 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/icon_vasija.png differ diff --git a/app/src/main/res/drawable-nodpi/icon_vida.png b/app/src/main/res/drawable-nodpi/icon_vida.png new file mode 100644 index 0000000000000000000000000000000000000000..d4229d3384642c7bfeac315687c9e76d85c6de5d Binary files /dev/null and b/app/src/main/res/drawable-nodpi/icon_vida.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_attack_00.png b/app/src/main/res/drawable-nodpi/monster_wolf_attack_00.png new file mode 100644 index 0000000000000000000000000000000000000000..e3f13b669439d70fa2a7e8fd0711f148c5f7ce5b Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_attack_00.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_attack_01.png b/app/src/main/res/drawable-nodpi/monster_wolf_attack_01.png new file mode 100644 index 0000000000000000000000000000000000000000..18be854c4c5797382f446ce3d56b05457aa1c554 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_attack_01.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_attack_02.png b/app/src/main/res/drawable-nodpi/monster_wolf_attack_02.png new file mode 100644 index 0000000000000000000000000000000000000000..cd46c8e825abb1be6278d1e1457657a115a16083 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_attack_02.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_attack_03.png b/app/src/main/res/drawable-nodpi/monster_wolf_attack_03.png new file mode 100644 index 0000000000000000000000000000000000000000..815564e33e21c631fa1f2f20c2ff456c72c5bc68 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_attack_03.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_attack_04.png b/app/src/main/res/drawable-nodpi/monster_wolf_attack_04.png new file mode 100644 index 0000000000000000000000000000000000000000..a5be162d9fe3bf5c94c5283babbba39846c165a7 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_attack_04.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_idle_00.png b/app/src/main/res/drawable-nodpi/monster_wolf_idle_00.png new file mode 100644 index 0000000000000000000000000000000000000000..1c071dc213e3f23b9229376eb9a0927ef23e2800 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_idle_00.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_idle_01.png b/app/src/main/res/drawable-nodpi/monster_wolf_idle_01.png new file mode 100644 index 0000000000000000000000000000000000000000..9e3207e5d1caf3aafbdbeb76839896a4f4038886 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_idle_01.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_idle_02.png b/app/src/main/res/drawable-nodpi/monster_wolf_idle_02.png new file mode 100644 index 0000000000000000000000000000000000000000..96a3e0a00f147677e720a5e99c4bb0d4e8225bd7 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_idle_02.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_idle_03.png b/app/src/main/res/drawable-nodpi/monster_wolf_idle_03.png new file mode 100644 index 0000000000000000000000000000000000000000..9175ae27f1267388e9cbe52b50df82e94f7242d7 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_idle_03.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_idle_04.png b/app/src/main/res/drawable-nodpi/monster_wolf_idle_04.png new file mode 100644 index 0000000000000000000000000000000000000000..6387139186f300309b314512d2793a3fd8a8aed4 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_idle_04.png differ diff --git a/app/src/main/res/drawable-nodpi/monster_wolf_idle_05.png b/app/src/main/res/drawable-nodpi/monster_wolf_idle_05.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0feb3a51c4f75124b94878ced3f5ef87217fd2 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/monster_wolf_idle_05.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_ataque_1.png b/app/src/main/res/drawable-nodpi/protagonista_ataque_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ea95590af9965a9343e5f42e2e4b68c81252164e Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_ataque_1.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_ataque_2.png b/app/src/main/res/drawable-nodpi/protagonista_ataque_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1507e926c9d379b4dddd495a15f6079b90ff95ad Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_ataque_2.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_ataque_3.png b/app/src/main/res/drawable-nodpi/protagonista_ataque_3.png new file mode 100644 index 0000000000000000000000000000000000000000..28a30a03a788efe35a5d5895cdc6d3bfce1e0eb1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_ataque_3.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_ataque_4.png b/app/src/main/res/drawable-nodpi/protagonista_ataque_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4825e1f43ab7fd94f19694a3f13101fb81a1b091 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_ataque_4.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_ataque_5.png b/app/src/main/res/drawable-nodpi/protagonista_ataque_5.png new file mode 100644 index 0000000000000000000000000000000000000000..8d67a7203ca73b2c3002cb618bd73781f0489ebf Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_ataque_5.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_idle_00.png b/app/src/main/res/drawable-nodpi/protagonista_idle_00.png new file mode 100644 index 0000000000000000000000000000000000000000..dfb83a50eb422165ad8f71d025ebda2d04e02dde Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_idle_00.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_idle_01.png b/app/src/main/res/drawable-nodpi/protagonista_idle_01.png new file mode 100644 index 0000000000000000000000000000000000000000..c80df0311769957fcc19dea6c5d018c0521e9123 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_idle_01.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_idle_02.png b/app/src/main/res/drawable-nodpi/protagonista_idle_02.png new file mode 100644 index 0000000000000000000000000000000000000000..aadd603d09796d06048496925f4d62a2f868facf Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_idle_02.png differ diff --git a/app/src/main/res/drawable-nodpi/protagonista_idle_03.png b/app/src/main/res/drawable-nodpi/protagonista_idle_03.png new file mode 100644 index 0000000000000000000000000000000000000000..3838d6750cfa09ba7428bb13a95b93abd5896ba7 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/protagonista_idle_03.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_01.png b/app/src/main/res/drawable-nodpi/skeleton_attack_01.png new file mode 100644 index 0000000000000000000000000000000000000000..19801cb86f9eacbc98d95e76cfec7ae98762077f Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_01.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_02.png b/app/src/main/res/drawable-nodpi/skeleton_attack_02.png new file mode 100644 index 0000000000000000000000000000000000000000..c33c5bdff6514c0b632a9a5602bacf31ec9da3a3 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_02.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_03.png b/app/src/main/res/drawable-nodpi/skeleton_attack_03.png new file mode 100644 index 0000000000000000000000000000000000000000..e60fe4ea2586541d74a5da770f6a0313a3cf0072 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_03.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_04.png b/app/src/main/res/drawable-nodpi/skeleton_attack_04.png new file mode 100644 index 0000000000000000000000000000000000000000..818f127f7317436b70a6e4702512578b3bb715f7 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_04.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_05.png b/app/src/main/res/drawable-nodpi/skeleton_attack_05.png new file mode 100644 index 0000000000000000000000000000000000000000..1678bc479c16209b35b22fa242152784cb15501f Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_05.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_06.png b/app/src/main/res/drawable-nodpi/skeleton_attack_06.png new file mode 100644 index 0000000000000000000000000000000000000000..450d56e0091b34ba21fa5a88e05e75085b1eb6b1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_06.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_07.png b/app/src/main/res/drawable-nodpi/skeleton_attack_07.png new file mode 100644 index 0000000000000000000000000000000000000000..416309da36f918e26c6b22ab6641e0297cabce47 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_07.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_08.png b/app/src/main/res/drawable-nodpi/skeleton_attack_08.png new file mode 100644 index 0000000000000000000000000000000000000000..3696dc8ced4867aa48812f09e0f2c010a0ac32f1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_08.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_09.png b/app/src/main/res/drawable-nodpi/skeleton_attack_09.png new file mode 100644 index 0000000000000000000000000000000000000000..30bfc4b4cc1bcfe243a09005014e4065f0e5b938 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_09.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_10.png b/app/src/main/res/drawable-nodpi/skeleton_attack_10.png new file mode 100644 index 0000000000000000000000000000000000000000..77c6d1ce15ef309ca7c6839de3339b4841a3479b Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_10.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_11.png b/app/src/main/res/drawable-nodpi/skeleton_attack_11.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf9be885d8060cf57a3bec6d9d471a18155e72e Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_11.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_12.png b/app/src/main/res/drawable-nodpi/skeleton_attack_12.png new file mode 100644 index 0000000000000000000000000000000000000000..8027bd8d15fed0beffabaac1418cd012b5dca961 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_12.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_attack_13.png b/app/src/main/res/drawable-nodpi/skeleton_attack_13.png new file mode 100644 index 0000000000000000000000000000000000000000..6c14d89e9d4bbace63b5f367a33e80677752b122 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_attack_13.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_idle_00.png b/app/src/main/res/drawable-nodpi/skeleton_idle_00.png new file mode 100644 index 0000000000000000000000000000000000000000..94c2af31fd531f11277d93e18c687b519238e4c2 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_idle_00.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_idle_01.png b/app/src/main/res/drawable-nodpi/skeleton_idle_01.png new file mode 100644 index 0000000000000000000000000000000000000000..59cc596314dd6d602f19ff0659c91e0fa5ee7dc1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_idle_01.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_idle_02.png b/app/src/main/res/drawable-nodpi/skeleton_idle_02.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2280e11027d15b824d6e6da740368341f8cbb1 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_idle_02.png differ diff --git a/app/src/main/res/drawable-nodpi/skeleton_idle_03.png b/app/src/main/res/drawable-nodpi/skeleton_idle_03.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c7cc437f2fe31e5090c8518df3c23bbf2ee6f0 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/skeleton_idle_03.png differ diff --git a/app/src/main/res/drawable-nodpi/texto_exploradores_de_pintia.png b/app/src/main/res/drawable-nodpi/texto_exploradores_de_pintia.png new file mode 100644 index 0000000000000000000000000000000000000000..0cea65399699703cedb1eef158033793febfc6b6 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/texto_exploradores_de_pintia.png differ diff --git a/app/src/main/res/drawable-nodpi/texto_inventario.png b/app/src/main/res/drawable-nodpi/texto_inventario.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb61370dee199934146b41b87026644cda56530 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/texto_inventario.png differ diff --git a/app/src/main/res/drawable-nodpi/texto_lista_nubes.png b/app/src/main/res/drawable-nodpi/texto_lista_nubes.png new file mode 100644 index 0000000000000000000000000000000000000000..d0934d1f197744887c288159b82621268b61ac77 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/texto_lista_nubes.png differ diff --git a/app/src/main/res/drawable/asi_boton_lista.png b/app/src/main/res/drawable/asi_boton_lista.png new file mode 100644 index 0000000000000000000000000000000000000000..13247316946d86cb38d331735a72cc305b47f875 Binary files /dev/null and b/app/src/main/res/drawable/asi_boton_lista.png differ diff --git a/app/src/main/res/drawable/asi_boton_tutorial.png b/app/src/main/res/drawable/asi_boton_tutorial.png new file mode 100644 index 0000000000000000000000000000000000000000..3f068adb9ee4acc1e7ad42ec9b14240980bc5443 Binary files /dev/null and b/app/src/main/res/drawable/asi_boton_tutorial.png differ diff --git a/app/src/main/res/drawable/asi_candado_tienda.png b/app/src/main/res/drawable/asi_candado_tienda.png new file mode 100644 index 0000000000000000000000000000000000000000..54e9192f897fe5e2285dba96950d0a9b878cca18 Binary files /dev/null and b/app/src/main/res/drawable/asi_candado_tienda.png differ diff --git a/app/src/main/res/drawable/asi_exploradores_campamento.png b/app/src/main/res/drawable/asi_exploradores_campamento.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfdf8fab44ae57cb82d102faaf535be81fd9635 Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_campamento.png differ diff --git a/app/src/main/res/drawable/asi_exploradores_cartel.png b/app/src/main/res/drawable/asi_exploradores_cartel.png new file mode 100644 index 0000000000000000000000000000000000000000..91356464d305d4c0de6a0e04962447b889255ccd Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_cartel.png differ diff --git a/app/src/main/res/drawable/asi_exploradores_desenterrar.png b/app/src/main/res/drawable/asi_exploradores_desenterrar.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba43438fd0253e4bcdc3f10a3f8d495d3f9d893 Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_desenterrar.png differ diff --git a/app/src/main/res/drawable/asi_exploradores_ladron.png b/app/src/main/res/drawable/asi_exploradores_ladron.png new file mode 100644 index 0000000000000000000000000000000000000000..8065f5945c3eb702de134d3667fe6c308b122e5e Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_ladron.png differ diff --git a/app/src/main/res/drawable/asi_exploradores_tienda.png b/app/src/main/res/drawable/asi_exploradores_tienda.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8bc49ba149127a1d03ee1bf8b102238a7da11c Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_tienda.png differ diff --git a/app/src/main/res/drawable/asi_exploradores_trampa_piedras.png b/app/src/main/res/drawable/asi_exploradores_trampa_piedras.png new file mode 100644 index 0000000000000000000000000000000000000000..6315c35748722c36b1a072a731616d82cd9ef871 Binary files /dev/null and b/app/src/main/res/drawable/asi_exploradores_trampa_piedras.png differ diff --git a/app/src/main/res/drawable/asi_fragmento_reliquia.png b/app/src/main/res/drawable/asi_fragmento_reliquia.png new file mode 100644 index 0000000000000000000000000000000000000000..807c32c7a0ce3efa9f314bd330f40ae6911f6ee2 Binary files /dev/null and b/app/src/main/res/drawable/asi_fragmento_reliquia.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_1_bomba.png b/app/src/main/res/drawable/asi_minijuego_1_bomba.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5e2d1bbd55d8ecc24443282e8776258b630855 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_1_bomba.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_1_hueso.png b/app/src/main/res/drawable/asi_minijuego_1_hueso.png new file mode 100644 index 0000000000000000000000000000000000000000..9b7d30d6f8c8022b6ab1b94f69cb7346220e7370 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_1_hueso.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_2_muro.png b/app/src/main/res/drawable/asi_minijuego_2_muro.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b3ea0f656f2fa72fccc1d4376e892b89faa747 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_2_muro.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_2_nube.png b/app/src/main/res/drawable/asi_minijuego_2_nube.png new file mode 100644 index 0000000000000000000000000000000000000000..43d6679bf7088d43b893dfa74452e145e3aa904c Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_2_nube.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_copa_negra_brunida.png b/app/src/main/res/drawable/asi_minijuego_3_copa_negra_brunida.png new file mode 100644 index 0000000000000000000000000000000000000000..81dc37db6aa3cea100e2d8bb6ed4e3e93ec16356 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_copa_negra_brunida.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_copa_tumba_75.png b/app/src/main/res/drawable/asi_minijuego_3_copa_tumba_75.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2f8a480b9a25e34db9aed96a06486d167917cb Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_copa_tumba_75.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_jarra_de_pico.png b/app/src/main/res/drawable/asi_minijuego_3_jarra_de_pico.png new file mode 100644 index 0000000000000000000000000000000000000000..24eda884ec8769f033cecfb688c194a059b350cb Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_jarra_de_pico.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_sonajero_redondo.png b/app/src/main/res/drawable/asi_minijuego_3_sonajero_redondo.png new file mode 100644 index 0000000000000000000000000000000000000000..f21114e24fec0d84ad5eeb1b756dd74c5d68eff3 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_sonajero_redondo.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_tapadera_zoomorfo.png b/app/src/main/res/drawable/asi_minijuego_3_tapadera_zoomorfo.png new file mode 100644 index 0000000000000000000000000000000000000000..054ba9ef4bfacfaf6f760b9f057326b4aecec3c9 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_tapadera_zoomorfo.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_tintinnabulum.png b/app/src/main/res/drawable/asi_minijuego_3_tintinnabulum.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7176811c590dd6fe585fe8561e486f7b26ce2c Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_tintinnabulum.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_trasero.png b/app/src/main/res/drawable/asi_minijuego_3_trasero.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ddc38cc0c4be004b37d81c3695ec61b3600ab6 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_trasero.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_tres_en_raya.png b/app/src/main/res/drawable/asi_minijuego_3_tres_en_raya.png new file mode 100644 index 0000000000000000000000000000000000000000..4baaafd6a943c743c562580d83cf57278f905d21 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_tres_en_raya.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_3_vasito.png b/app/src/main/res/drawable/asi_minijuego_3_vasito.png new file mode 100644 index 0000000000000000000000000000000000000000..1cea1c52f6308288d314b8913545283d28045cd1 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_3_vasito.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_4_bola1.png b/app/src/main/res/drawable/asi_minijuego_4_bola1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2eff807f6f10a92cfb5bf62ea7a893af5096dee Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_4_bola1.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_4_bola2.png b/app/src/main/res/drawable/asi_minijuego_4_bola2.png new file mode 100644 index 0000000000000000000000000000000000000000..0c3108dfb51a8ab8fa7fe54030210db4a2748fa3 Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_4_bola2.png differ diff --git a/app/src/main/res/drawable/asi_minijuego_4_tablero.png b/app/src/main/res/drawable/asi_minijuego_4_tablero.png new file mode 100644 index 0000000000000000000000000000000000000000..79ca676eab6ed6fd5bbd818a2c9e3513d7ad19bc Binary files /dev/null and b/app/src/main/res/drawable/asi_minijuego_4_tablero.png differ diff --git a/app/src/main/res/drawable/asi_objeto_casco.png b/app/src/main/res/drawable/asi_objeto_casco.png new file mode 100644 index 0000000000000000000000000000000000000000..7b41c446bdd960c7e9062dfabfcf78d7b86a9612 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_casco.png differ diff --git a/app/src/main/res/drawable/asi_objeto_daga.png b/app/src/main/res/drawable/asi_objeto_daga.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4e3028a331c6e737ea063628065816802e2629 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_daga.png differ diff --git a/app/src/main/res/drawable/asi_objeto_escudo.png b/app/src/main/res/drawable/asi_objeto_escudo.png new file mode 100644 index 0000000000000000000000000000000000000000..38ccf81559b59079961294391e88cb29d14dfd4a Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_escudo.png differ diff --git a/app/src/main/res/drawable/asi_objeto_espadadefault.png b/app/src/main/res/drawable/asi_objeto_espadadefault.png new file mode 100644 index 0000000000000000000000000000000000000000..e10cae1a04ab981a8b7cccf4957a7c5ab9d9d402 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_espadadefault.png differ diff --git a/app/src/main/res/drawable/asi_objeto_pala.png b/app/src/main/res/drawable/asi_objeto_pala.png new file mode 100644 index 0000000000000000000000000000000000000000..563298e3ce8411ce2d7357a66d28df4c04676896 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_pala.png differ diff --git a/app/src/main/res/drawable/asi_objeto_pico.png b/app/src/main/res/drawable/asi_objeto_pico.png new file mode 100644 index 0000000000000000000000000000000000000000..18acb13e7b4e6fa902de7381341218062baca885 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_pico.png differ diff --git a/app/src/main/res/drawable/asi_objeto_piel.png b/app/src/main/res/drawable/asi_objeto_piel.png new file mode 100644 index 0000000000000000000000000000000000000000..7ebf3fef65975b89e398a15b0e20e50f19419fad Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_piel.png differ diff --git a/app/src/main/res/drawable/asi_objeto_pocima_vida_10.png b/app/src/main/res/drawable/asi_objeto_pocima_vida_10.png new file mode 100644 index 0000000000000000000000000000000000000000..8371d90b9f7bd9c69f3b032b23b5541d7ddf8cda Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_pocima_vida_10.png differ diff --git a/app/src/main/res/drawable/asi_objeto_pocima_vida_all.png b/app/src/main/res/drawable/asi_objeto_pocima_vida_all.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ee43b94041c9fdf651d1a3545d4af9dd3f57b1 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_pocima_vida_all.png 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/drawable/asi_objeto_ticket.png b/app/src/main/res/drawable/asi_objeto_ticket.png new file mode 100644 index 0000000000000000000000000000000000000000..00fab7f670fa8a7b854ed2f41027307744a95385 Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_ticket.png differ diff --git a/app/src/main/res/drawable/asi_reparar_martillo.png b/app/src/main/res/drawable/asi_reparar_martillo.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e6ed007c2792a77dac96ffed777a3ade998762 Binary files /dev/null and b/app/src/main/res/drawable/asi_reparar_martillo.png differ diff --git a/app/src/main/res/drawable/asi_reparar_palo.png b/app/src/main/res/drawable/asi_reparar_palo.png new file mode 100644 index 0000000000000000000000000000000000000000..08c485c3881a6f72de2053b70ad5469d2decf007 Binary files /dev/null and b/app/src/main/res/drawable/asi_reparar_palo.png differ diff --git a/app/src/main/res/drawable/asi_reparar_rule.png b/app/src/main/res/drawable/asi_reparar_rule.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f1df99b4484b38c2ee83ce090484de0a1e6ef6 Binary files /dev/null and b/app/src/main/res/drawable/asi_reparar_rule.png differ diff --git a/app/src/main/res/drawable/asi_ruleta_moneda.png b/app/src/main/res/drawable/asi_ruleta_moneda.png new file mode 100644 index 0000000000000000000000000000000000000000..66b0111c810f3d7950de57ea55bc28a25e1ecb2f Binary files /dev/null and b/app/src/main/res/drawable/asi_ruleta_moneda.png differ diff --git a/app/src/main/res/drawable/asi_ruleta_particula.xml b/app/src/main/res/drawable/asi_ruleta_particula.xml new file mode 100644 index 0000000000000000000000000000000000000000..9b29e862fec7c36dace721c71f46e72f4695655e --- /dev/null +++ b/app/src/main/res/drawable/asi_ruleta_particula.xml @@ -0,0 +1,10 @@ +<!-- res/drawable/asi_ruleta_particula.xml --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="10dp" + android:height="10dp" + android:viewportWidth="10" + android:viewportHeight="10"> + <path + android:fillColor="@android:color/white" + android:pathData="M5,0 L10,5 L5,10 L0,5 Z"/> +</vector> diff --git a/app/src/main/res/drawable/asi_ruleta_puntero.png b/app/src/main/res/drawable/asi_ruleta_puntero.png new file mode 100644 index 0000000000000000000000000000000000000000..894948f74990cfc3623f761a47ad14f7a1b84948 Binary files /dev/null and b/app/src/main/res/drawable/asi_ruleta_puntero.png differ diff --git a/app/src/main/res/drawable/background_armeria.png b/app/src/main/res/drawable/background_armeria.png new file mode 100644 index 0000000000000000000000000000000000000000..4742c125c2252bf979fd1fb13af2ed148ef7bbe3 Binary files /dev/null and b/app/src/main/res/drawable/background_armeria.png differ diff --git a/app/src/main/res/drawable/background_ciudad.png b/app/src/main/res/drawable/background_ciudad.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2ee25464abd093560a53e1a6de244640d26d80 Binary files /dev/null and b/app/src/main/res/drawable/background_ciudad.png differ diff --git a/app/src/main/res/drawable/background_lista.jpg b/app/src/main/res/drawable/background_lista.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7bf9c0d168e2a3a1ccf151123bff1ef89961b078 Binary files /dev/null and b/app/src/main/res/drawable/background_lista.jpg differ diff --git a/app/src/main/res/drawable/background_minijuego_1.png b/app/src/main/res/drawable/background_minijuego_1.png new file mode 100644 index 0000000000000000000000000000000000000000..062fc2f5cfad29b9df295affc1b3e1af0004468c Binary files /dev/null and b/app/src/main/res/drawable/background_minijuego_1.png differ diff --git a/app/src/main/res/drawable/background_minijuego_2.png b/app/src/main/res/drawable/background_minijuego_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ce1bb1dfce39f96a7e7d3ea0345a6a18e1b30664 Binary files /dev/null and b/app/src/main/res/drawable/background_minijuego_2.png differ diff --git a/app/src/main/res/drawable/background_minijuego_3.png b/app/src/main/res/drawable/background_minijuego_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b8c71125180f42f1442e7ffafd334e7998ecb5b0 Binary files /dev/null and b/app/src/main/res/drawable/background_minijuego_3.png differ diff --git a/app/src/main/res/drawable/background_minijuego_reparar.png b/app/src/main/res/drawable/background_minijuego_reparar.png new file mode 100644 index 0000000000000000000000000000000000000000..c2358ebd0789482e65a9a914ca7ab711f57ac27d Binary files /dev/null and b/app/src/main/res/drawable/background_minijuego_reparar.png differ diff --git a/app/src/main/res/drawable/background_minijuego_ruleta.png b/app/src/main/res/drawable/background_minijuego_ruleta.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5ffc103e108d79f02b54099bde6ee72e14fd9a Binary files /dev/null and b/app/src/main/res/drawable/background_minijuego_ruleta.png differ diff --git a/app/src/main/res/drawable/background_tienda.png b/app/src/main/res/drawable/background_tienda.png new file mode 100644 index 0000000000000000000000000000000000000000..94fc1be3349351b10df8f5518bafa66a53909417 Binary files /dev/null and b/app/src/main/res/drawable/background_tienda.png differ diff --git a/app/src/main/res/drawable/cofre_madera_00.png b/app/src/main/res/drawable/cofre_madera_00.png new file mode 100644 index 0000000000000000000000000000000000000000..ddfa7099a4eab7df9365c90de9a3225bbe5cc207 Binary files /dev/null and b/app/src/main/res/drawable/cofre_madera_00.png differ diff --git a/app/src/main/res/drawable/cofre_madera_01.png b/app/src/main/res/drawable/cofre_madera_01.png new file mode 100644 index 0000000000000000000000000000000000000000..1828f69fc64898e93fbf7d3256af31963d06d916 Binary files /dev/null and b/app/src/main/res/drawable/cofre_madera_01.png differ diff --git a/app/src/main/res/drawable/cofre_madera_02.png b/app/src/main/res/drawable/cofre_madera_02.png new file mode 100644 index 0000000000000000000000000000000000000000..ebe13e8f63ae470ec5e0e2db16dc7239042d14fb Binary files /dev/null and b/app/src/main/res/drawable/cofre_madera_02.png differ diff --git a/app/src/main/res/drawable/cofre_madera_03.png b/app/src/main/res/drawable/cofre_madera_03.png new file mode 100644 index 0000000000000000000000000000000000000000..3758126601556e18052c2eb44012557b63207613 Binary files /dev/null and b/app/src/main/res/drawable/cofre_madera_03.png differ diff --git a/app/src/main/res/drawable/cofre_madera_04.png b/app/src/main/res/drawable/cofre_madera_04.png new file mode 100644 index 0000000000000000000000000000000000000000..d2278293892099f3e0030293c211fd9465f856a9 Binary files /dev/null and b/app/src/main/res/drawable/cofre_madera_04.png differ diff --git a/app/src/main/res/drawable/cofre_open_animation.xml b/app/src/main/res/drawable/cofre_open_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..b5a78b0da5ef8670349e8dabdc28ba82cd8b59a7 --- /dev/null +++ b/app/src/main/res/drawable/cofre_open_animation.xml @@ -0,0 +1,11 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/cofre_madera_00" android:duration="150" /> + <item android:drawable="@drawable/cofre_madera_01" android:duration="150" /> + <item android:drawable="@drawable/cofre_madera_02" android:duration="150" /> + <item android:drawable="@drawable/cofre_madera_03" android:duration="150" /> + <item android:drawable="@drawable/cofre_madera_04" android:duration="150" /> + +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/effect_investigar_animation.xml b/app/src/main/res/drawable/effect_investigar_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..250e50b15c3c9689f5da40b2968d1d8dc92ca6f7 --- /dev/null +++ b/app/src/main/res/drawable/effect_investigar_animation.xml @@ -0,0 +1,13 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/effect_investigar_00" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_01" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_02" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_03" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_04" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_05" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_06" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_07" android:duration="50" /> + <item android:drawable="@drawable/effect_investigar_08" android:duration="50" /> +</animation-list> diff --git a/app/src/main/res/drawable/effect_regeneracion_00.png b/app/src/main/res/drawable/effect_regeneracion_00.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb349e7880e17e77d3202fc3dd5f3835d76db9e Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_00.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_01.png b/app/src/main/res/drawable/effect_regeneracion_01.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc4d55d75de910665fdb09ea550ec2c532c0b95 Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_01.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_010.png b/app/src/main/res/drawable/effect_regeneracion_010.png new file mode 100644 index 0000000000000000000000000000000000000000..560e8c8fbd67f9becdf18419d8c16dd18df905a2 Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_010.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_011.png b/app/src/main/res/drawable/effect_regeneracion_011.png new file mode 100644 index 0000000000000000000000000000000000000000..167b8b410c6f39279474ab98fa05146bf1d48221 Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_011.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_012.png b/app/src/main/res/drawable/effect_regeneracion_012.png new file mode 100644 index 0000000000000000000000000000000000000000..3b92a8410ab5563a0a510d0488ab94adc25bb8b7 Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_012.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_02.png b/app/src/main/res/drawable/effect_regeneracion_02.png new file mode 100644 index 0000000000000000000000000000000000000000..a0faad3bb6bae8939fbe8de17a49211423c6080c Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_02.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_03.png b/app/src/main/res/drawable/effect_regeneracion_03.png new file mode 100644 index 0000000000000000000000000000000000000000..7a509fab616c0e1c813f5c1b4400bd8b001df479 Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_03.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_04.png b/app/src/main/res/drawable/effect_regeneracion_04.png new file mode 100644 index 0000000000000000000000000000000000000000..ef5fc55768b9c59ce4be339f5cd60c2d7306c22f Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_04.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_05.png b/app/src/main/res/drawable/effect_regeneracion_05.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac51a595d3450c1ddb19df34ce826dd9ec2e9e6 Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_05.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_06.png b/app/src/main/res/drawable/effect_regeneracion_06.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef2e1281858a29e1c50f7cd23ba54760d91845e Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_06.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_07.png b/app/src/main/res/drawable/effect_regeneracion_07.png new file mode 100644 index 0000000000000000000000000000000000000000..c3c3e128f3a2850901ab5cb0b7677690aeca321e Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_07.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_08.png b/app/src/main/res/drawable/effect_regeneracion_08.png new file mode 100644 index 0000000000000000000000000000000000000000..f8efd3c2802e593150dd27ead530eabe5de921ca Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_08.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_09.png b/app/src/main/res/drawable/effect_regeneracion_09.png new file mode 100644 index 0000000000000000000000000000000000000000..d0c14e75f53098b0fdb281d52992a70bccc717b2 Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_09.png differ diff --git a/app/src/main/res/drawable/effect_regeneracion_animation.xml b/app/src/main/res/drawable/effect_regeneracion_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..d46358515a123a9101eea610576250817757d0e3 --- /dev/null +++ b/app/src/main/res/drawable/effect_regeneracion_animation.xml @@ -0,0 +1,17 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/effect_regeneracion_00" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_01" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_02" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_03" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_04" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_05" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_06" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_07" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_08" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_09" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_010" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_011" android:duration="50" /> + <item android:drawable="@drawable/effect_regeneracion_012" android:duration="50" /> +</animation-list> diff --git a/app/src/main/res/drawable/effect_reparar_animation.xml b/app/src/main/res/drawable/effect_reparar_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..24d184e418c8bcff0ec1b3f68381cc28182f2719 --- /dev/null +++ b/app/src/main/res/drawable/effect_reparar_animation.xml @@ -0,0 +1,9 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/effect_reparar_01" android:duration="100" /> + <item android:drawable="@drawable/effect_reparar_02" android:duration="100" /> + <item android:drawable="@drawable/effect_reparar_03" android:duration="100" /> + <item android:drawable="@drawable/effect_reparar_04" android:duration="100" /> + <item android:drawable="@drawable/effect_reparar_05" android:duration="100" /> +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/leaderboard.png b/app/src/main/res/drawable/icon_leaderboard.png similarity index 100% rename from app/src/main/res/drawable/leaderboard.png rename to app/src/main/res/drawable/icon_leaderboard.png diff --git a/app/src/main/res/drawable/icon_logout.png b/app/src/main/res/drawable/icon_logout.png new file mode 100644 index 0000000000000000000000000000000000000000..a15ce8ce5187c1d11b1a6a4da78d92ff361a24ef Binary files /dev/null and b/app/src/main/res/drawable/icon_logout.png differ diff --git a/app/src/main/res/drawable/map.png b/app/src/main/res/drawable/icon_map.png similarity index 100% rename from app/src/main/res/drawable/map.png rename to app/src/main/res/drawable/icon_map.png diff --git a/app/src/main/res/drawable/settings.png b/app/src/main/res/drawable/icon_settings.png similarity index 100% rename from app/src/main/res/drawable/settings.png rename to app/src/main/res/drawable/icon_settings.png diff --git a/app/src/main/res/drawable/shop.png b/app/src/main/res/drawable/icon_shop.png similarity index 100% rename from app/src/main/res/drawable/shop.png rename to app/src/main/res/drawable/icon_shop.png diff --git a/app/src/main/res/drawable/icon_shop_village.png b/app/src/main/res/drawable/icon_shop_village.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9e75fad942c73b855e9da7d161e6d226286855 Binary files /dev/null and b/app/src/main/res/drawable/icon_shop_village.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_00.png b/app/src/main/res/drawable/monster_metal_attack_00.png new file mode 100644 index 0000000000000000000000000000000000000000..f32e46e6cb7e20e8ae11461a8820fff4de6af8c3 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_00.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_01.png b/app/src/main/res/drawable/monster_metal_attack_01.png new file mode 100644 index 0000000000000000000000000000000000000000..7972e5d529acdc840a9bdc233280f42f8c8414b8 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_01.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_02.png b/app/src/main/res/drawable/monster_metal_attack_02.png new file mode 100644 index 0000000000000000000000000000000000000000..ac557acd56d1b65374148cae2d0d7934e73a44f1 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_02.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_03.png b/app/src/main/res/drawable/monster_metal_attack_03.png new file mode 100644 index 0000000000000000000000000000000000000000..72f89d197417df3da68403f152cbee4fc1232b93 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_03.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_04.png b/app/src/main/res/drawable/monster_metal_attack_04.png new file mode 100644 index 0000000000000000000000000000000000000000..30a5907909438644b1c853770615dafb02110098 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_04.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_05.png b/app/src/main/res/drawable/monster_metal_attack_05.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8fd8e126ee2a93d6996b518f6c1c1af8868ae7 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_05.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_06.png b/app/src/main/res/drawable/monster_metal_attack_06.png new file mode 100644 index 0000000000000000000000000000000000000000..18b3364d9fba88561517936fbe1e9bf97b136bd2 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_06.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_07.png b/app/src/main/res/drawable/monster_metal_attack_07.png new file mode 100644 index 0000000000000000000000000000000000000000..9d2eba80ce757e5789be0c86f7dd112693ff27f0 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_07.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_08.png b/app/src/main/res/drawable/monster_metal_attack_08.png new file mode 100644 index 0000000000000000000000000000000000000000..721bfb452be645a4cf29fae2d16972d77f563b75 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_attack_08.png differ diff --git a/app/src/main/res/drawable/monster_metal_attack_animation.xml b/app/src/main/res/drawable/monster_metal_attack_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..e53b38624a893c9390846cb9340793aa0a78ba0c --- /dev/null +++ b/app/src/main/res/drawable/monster_metal_attack_animation.xml @@ -0,0 +1,14 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/monster_metal_attack_00" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_attack_01" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_attack_02" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_attack_03" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_attack_04" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_attack_06" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_attack_07" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_attack_08" android:duration="150" /> + +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/monster_metal_idle_00.png b/app/src/main/res/drawable/monster_metal_idle_00.png new file mode 100644 index 0000000000000000000000000000000000000000..a575d914fa0f8fae911873c6ee867e169eca0792 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_idle_00.png differ diff --git a/app/src/main/res/drawable/monster_metal_idle_01.png b/app/src/main/res/drawable/monster_metal_idle_01.png new file mode 100644 index 0000000000000000000000000000000000000000..e0ec29d9aee2f62b71101e4efe31084119a1e68e Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_idle_01.png differ diff --git a/app/src/main/res/drawable/monster_metal_idle_02.png b/app/src/main/res/drawable/monster_metal_idle_02.png new file mode 100644 index 0000000000000000000000000000000000000000..332e70edc20e357b3f59750948a808a56f7b65d2 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_idle_02.png differ diff --git a/app/src/main/res/drawable/monster_metal_idle_03.png b/app/src/main/res/drawable/monster_metal_idle_03.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccebbed34e0f7e01a7110b7ab2f14b6aa887ae2 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_idle_03.png differ diff --git a/app/src/main/res/drawable/monster_metal_idle_04.png b/app/src/main/res/drawable/monster_metal_idle_04.png new file mode 100644 index 0000000000000000000000000000000000000000..aa29a9df58bdedc6126bcea7c198bdc52d4f1e6e Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_idle_04.png differ diff --git a/app/src/main/res/drawable/monster_metal_idle_05.png b/app/src/main/res/drawable/monster_metal_idle_05.png new file mode 100644 index 0000000000000000000000000000000000000000..fa26183d38cd7eb66b9763c655f5c92394084017 Binary files /dev/null and b/app/src/main/res/drawable/monster_metal_idle_05.png differ diff --git a/app/src/main/res/drawable/monster_metal_idle_animation.xml b/app/src/main/res/drawable/monster_metal_idle_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..1bd58812daa9b5deaf482bc4c6fa22cf659b1600 --- /dev/null +++ b/app/src/main/res/drawable/monster_metal_idle_animation.xml @@ -0,0 +1,11 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/monster_metal_idle_00" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_idle_01" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_idle_02" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_idle_03" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_idle_04" android:duration="150" /> + <item android:drawable="@drawable/monster_metal_idle_05" android:duration="150" /> +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/monster_skeleton_attack.xml b/app/src/main/res/drawable/monster_skeleton_attack.xml new file mode 100644 index 0000000000000000000000000000000000000000..a41feddbd6e416269490a0c0d34390f6b4930ccf --- /dev/null +++ b/app/src/main/res/drawable/monster_skeleton_attack.xml @@ -0,0 +1,18 @@ +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/skeleton_attack_01" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_02" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_03" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_04" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_05" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_06" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_07" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_08" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_09" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_10" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_11" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_12" android:duration="150" /> + <item android:drawable="@drawable/skeleton_attack_13" android:duration="150" /> + +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/monster_skeleton_idle.xml b/app/src/main/res/drawable/monster_skeleton_idle.xml new file mode 100644 index 0000000000000000000000000000000000000000..61853e207604adfbd78b9cd5ff265a4ac8c9e864 --- /dev/null +++ b/app/src/main/res/drawable/monster_skeleton_idle.xml @@ -0,0 +1,9 @@ +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/skeleton_idle_00" android:duration="200" /> + <item android:drawable="@drawable/skeleton_idle_01" android:duration="200" /> + <item android:drawable="@drawable/skeleton_idle_02" android:duration="200" /> + <item android:drawable="@drawable/skeleton_idle_03" android:duration="200" /> + +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/monster_wolf_attack_animation.xml b/app/src/main/res/drawable/monster_wolf_attack_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..3aea95b88841aff28030a1c52a93f1577245b347 --- /dev/null +++ b/app/src/main/res/drawable/monster_wolf_attack_animation.xml @@ -0,0 +1,11 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/monster_wolf_attack_00" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_attack_01" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_attack_02" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_attack_03" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_attack_04" android:duration="150" /> + +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/monster_wolf_idle_animation.xml b/app/src/main/res/drawable/monster_wolf_idle_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..388f3ec2ec0b2448d01d6b818caa4f7c26d94e30 --- /dev/null +++ b/app/src/main/res/drawable/monster_wolf_idle_animation.xml @@ -0,0 +1,11 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/monster_wolf_idle_00" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_idle_01" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_idle_02" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_idle_03" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_idle_04" android:duration="150" /> + <item android:drawable="@drawable/monster_wolf_idle_05" android:duration="150" /> +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/protagonista_ataque_animation.xml b/app/src/main/res/drawable/protagonista_ataque_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..f03265021d713b2b8d2f2c0c2c4ac0b407ed4c87 --- /dev/null +++ b/app/src/main/res/drawable/protagonista_ataque_animation.xml @@ -0,0 +1,9 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/protagonista_ataque_1" android:duration="150" /> + <item android:drawable="@drawable/protagonista_ataque_2" android:duration="150" /> + <item android:drawable="@drawable/protagonista_ataque_3" android:duration="150" /> + <item android:drawable="@drawable/protagonista_ataque_4" android:duration="150" /> + <item android:drawable="@drawable/protagonista_ataque_5" android:duration="150" /> +</animation-list> diff --git a/app/src/main/res/drawable/protagonista_correr_animation.xml b/app/src/main/res/drawable/protagonista_correr_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..caaf1a60e3557319c565e2d91d7b379876cb3459 --- /dev/null +++ b/app/src/main/res/drawable/protagonista_correr_animation.xml @@ -0,0 +1,10 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/protagonista_run_00" android:duration="150" /> + <item android:drawable="@drawable/protagonista_run_01" android:duration="150" /> + <item android:drawable="@drawable/protagonista_run_02" android:duration="150" /> + <item android:drawable="@drawable/protagonista_run_03" android:duration="150" /> + <item android:drawable="@drawable/protagonista_run_04" android:duration="150" /> + <item android:drawable="@drawable/protagonista_run_05" android:duration="150" /> +</animation-list> diff --git a/app/src/main/res/drawable/protagonista_die_00.png b/app/src/main/res/drawable/protagonista_die_00.png new file mode 100644 index 0000000000000000000000000000000000000000..268fa67cd89ffa335d3301357962589536440647 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_die_00.png differ diff --git a/app/src/main/res/drawable/protagonista_die_01.png b/app/src/main/res/drawable/protagonista_die_01.png new file mode 100644 index 0000000000000000000000000000000000000000..f96848f6d0312f05cbb8f34fdd8021bab05f6f92 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_die_01.png differ diff --git a/app/src/main/res/drawable/protagonista_die_02.png b/app/src/main/res/drawable/protagonista_die_02.png new file mode 100644 index 0000000000000000000000000000000000000000..877ea98047c668abd75f907ba614bdce1ad7f0e5 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_die_02.png differ diff --git a/app/src/main/res/drawable/protagonista_die_03.png b/app/src/main/res/drawable/protagonista_die_03.png new file mode 100644 index 0000000000000000000000000000000000000000..dff58196835710ea271e4294170070f7aeb68fe9 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_die_03.png differ diff --git a/app/src/main/res/drawable/protagonista_die_04.png b/app/src/main/res/drawable/protagonista_die_04.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a5c7c482fc9a654c68170ac9d8cc36eaf56354 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_die_04.png differ diff --git a/app/src/main/res/drawable/protagonista_die_05.png b/app/src/main/res/drawable/protagonista_die_05.png new file mode 100644 index 0000000000000000000000000000000000000000..a81dfd4fd32728016829dade87d9fb95c1739593 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_die_05.png differ diff --git a/app/src/main/res/drawable/protagonista_die_06.png b/app/src/main/res/drawable/protagonista_die_06.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a5c7c482fc9a654c68170ac9d8cc36eaf56354 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_die_06.png differ diff --git a/app/src/main/res/drawable/protagonista_die_animation.xml b/app/src/main/res/drawable/protagonista_die_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd9645f03cdb9b58660ce327b5492fc1fb9813aa --- /dev/null +++ b/app/src/main/res/drawable/protagonista_die_animation.xml @@ -0,0 +1,11 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + <item android:drawable="@drawable/protagonista_die_00" android:duration="150" /> + <item android:drawable="@drawable/protagonista_die_01" android:duration="150" /> + <item android:drawable="@drawable/protagonista_die_02" android:duration="150" /> + <item android:drawable="@drawable/protagonista_die_03" android:duration="150" /> + <item android:drawable="@drawable/protagonista_die_04" android:duration="150" /> + <item android:drawable="@drawable/protagonista_die_05" android:duration="150" /> + <item android:drawable="@drawable/protagonista_die_06" android:duration="150" /> +</animation-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/protagonista_idle_animation.xml b/app/src/main/res/drawable/protagonista_idle_animation.xml new file mode 100644 index 0000000000000000000000000000000000000000..70543af6c3c80d704b128e9673f8865f65f85fd1 --- /dev/null +++ b/app/src/main/res/drawable/protagonista_idle_animation.xml @@ -0,0 +1,9 @@ +<!-- res/drawable/idle_animation.xml --> +<animation-list xmlns:android="http://schemas.android.com/apk/res/android" + android:oneshot="false"> + + <item android:drawable="@drawable/protagonista_idle_00" android:duration="150" /> + <item android:drawable="@drawable/protagonista_idle_01" android:duration="150" /> + <item android:drawable="@drawable/protagonista_idle_02" android:duration="150" /> + <item android:drawable="@drawable/protagonista_idle_03" android:duration="150" /> +</animation-list> diff --git a/app/src/main/res/drawable/protagonista_run_00.png b/app/src/main/res/drawable/protagonista_run_00.png new file mode 100644 index 0000000000000000000000000000000000000000..f7a309cfbaec17d2f726e37f414578df6fb2eed0 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_run_00.png differ diff --git a/app/src/main/res/drawable/protagonista_run_01.png b/app/src/main/res/drawable/protagonista_run_01.png new file mode 100644 index 0000000000000000000000000000000000000000..ab9938d8dfd0d8fa758ceec4e5ecabfdf9965dff Binary files /dev/null and b/app/src/main/res/drawable/protagonista_run_01.png differ diff --git a/app/src/main/res/drawable/protagonista_run_02.png b/app/src/main/res/drawable/protagonista_run_02.png new file mode 100644 index 0000000000000000000000000000000000000000..dbc4edd8ed5739a837c8c01f4b21bde9ceba8ee1 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_run_02.png differ diff --git a/app/src/main/res/drawable/protagonista_run_03.png b/app/src/main/res/drawable/protagonista_run_03.png new file mode 100644 index 0000000000000000000000000000000000000000..89e97c45d947a10b68cf25c2cf0bbcc398bce6a5 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_run_03.png differ diff --git a/app/src/main/res/drawable/protagonista_run_04.png b/app/src/main/res/drawable/protagonista_run_04.png new file mode 100644 index 0000000000000000000000000000000000000000..69ad4bb9d9f29dd49ceb0abf5bd617c5601ac949 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_run_04.png differ diff --git a/app/src/main/res/drawable/protagonista_run_05.png b/app/src/main/res/drawable/protagonista_run_05.png new file mode 100644 index 0000000000000000000000000000000000000000..203321a524766c10a676b940fc75d6836e0e9981 Binary files /dev/null and b/app/src/main/res/drawable/protagonista_run_05.png differ diff --git a/app/src/main/res/drawable/style_background_gradiente.xml b/app/src/main/res/drawable/style_background_gradiente.xml new file mode 100644 index 0000000000000000000000000000000000000000..8271ced59dcddf07f16b2fdbb4d68bd3794d60ee --- /dev/null +++ b/app/src/main/res/drawable/style_background_gradiente.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <gradient + android:angle="270" + android:startColor="#F2CDA0" + android:endColor="#E1AA7A" + android:type="linear" /> + <corners android:radius="0dp"/> +</shape> diff --git a/app/src/main/res/drawable/style_barra_energia.xml b/app/src/main/res/drawable/style_barra_energia.xml new file mode 100644 index 0000000000000000000000000000000000000000..6dc367b29ee00fb6d3572070901db41a495bf151 --- /dev/null +++ b/app/src/main/res/drawable/style_barra_energia.xml @@ -0,0 +1,30 @@ +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:id="@android:id/background"> + <shape> + <gradient + android:startColor="#000001" + android:centerColor="#0b131e" + android:centerY="0.75" + android:endColor="#0d1522" + android:angle="270" + /> + <corners android:radius="15dp"/> + </shape> + </item> + + <item android:id="@android:id/progress"> + <clip> + <shape> + <gradient + android:startColor="#0000FF" + android:centerColor="@android:color/holo_blue_dark" + android:centerY="0.75" + android:endColor="@android:color/holo_blue_dark" + android:angle="270"/> + <corners android:radius="15dp"/> + </shape> + </clip> + </item> + +</layer-list> \ No newline at end of file diff --git a/app/src/main/res/drawable/style_barra_evento.xml b/app/src/main/res/drawable/style_barra_evento.xml new file mode 100644 index 0000000000000000000000000000000000000000..11367c16058695bd793c92317aa98bec6d135b23 --- /dev/null +++ b/app/src/main/res/drawable/style_barra_evento.xml @@ -0,0 +1,30 @@ +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:id="@android:id/background"> + <shape> + <gradient + android:startColor="#000001" + android:centerColor="#0b131e" + android:centerY="0.75" + android:endColor="#0d1522" + android:angle="270" + /> + <corners android:radius="15dp"/> + </shape> + </item> + + <item android:id="@android:id/progress"> + <clip> + <shape> + <gradient + android:startColor="#00ff00" + android:centerColor="@android:color/holo_green_dark" + android:centerY="0.75" + android:endColor="@android:color/holo_green_dark" + android:angle="270"/> + <corners android:radius="15dp"/> + </shape> + </clip> + </item> + +</layer-list> diff --git a/app/src/main/res/drawable/style_barra_vida.xml b/app/src/main/res/drawable/style_barra_vida.xml new file mode 100644 index 0000000000000000000000000000000000000000..2ed5c2fd772971d5111bd1ea5e81d99a38067740 --- /dev/null +++ b/app/src/main/res/drawable/style_barra_vida.xml @@ -0,0 +1,30 @@ +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:id="@android:id/background"> + <shape> + <gradient + android:startColor="#000001" + android:centerColor="#0b131e" + android:centerY="0.75" + android:endColor="#0d1522" + android:angle="270" + /> + <corners android:radius="15dp"/> + </shape> + </item> + + <item android:id="@android:id/progress"> + <clip> + <shape> + <gradient + android:startColor="#FF0000" + android:centerColor="@android:color/holo_red_dark" + android:centerY="0.75" + android:endColor="@android:color/holo_red_dark" + android:angle="270"/> + <corners android:radius="15dp"/> + </shape> + </clip> + </item> + +</layer-list> diff --git a/app/src/main/res/drawable/style_boton_habilidad.xml b/app/src/main/res/drawable/style_boton_habilidad.xml new file mode 100644 index 0000000000000000000000000000000000000000..4297ea4a3141d7ace3871afdf4401cb110c8c592 --- /dev/null +++ b/app/src/main/res/drawable/style_boton_habilidad.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item> + <shape android:shape="rectangle"> + <gradient + android:startColor="#ffd0a8" + android:endColor="@color/pintiaButton" + android:angle="280" /> + <corners android:radius="20dp" /> + <stroke android:width="2dp" android:color="#6A0000" /> + </shape> + </item> + +</selector> diff --git a/app/src/main/res/drawable/style_boton_option.xml b/app/src/main/res/drawable/style_boton_option.xml new file mode 100644 index 0000000000000000000000000000000000000000..3d99999080cb218116b7327591d245495aeb8e1d --- /dev/null +++ b/app/src/main/res/drawable/style_boton_option.xml @@ -0,0 +1,15 @@ +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true"> + <shape> + <solid android:color="#C08050" /> <!-- Color más oscuro para el estado presionado --> + <corners android:radius="30dp" /> + </shape> + </item> + <item> + <shape> + <solid android:color="#D99255" /> + <corners android:radius="30dp" /> + <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/> + </shape> + </item> +</selector> diff --git a/app/src/main/res/drawable/style_button_rounded.xml b/app/src/main/res/drawable/style_button_rounded.xml new file mode 100644 index 0000000000000000000000000000000000000000..b58a6b66faf0f565df45b9c4452938b538211959 --- /dev/null +++ b/app/src/main/res/drawable/style_button_rounded.xml @@ -0,0 +1,8 @@ +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <solid android:color="#FF6200EE" /> <!-- Color de fondo (puedes cambiarlo a tu preferencia) --> + <corners android:radius="16dp" /> <!-- Bordes redondeados --> + <padding android:left="32dp" + android:top="16dp" + android:right="32dp" + android:bottom="16dp"/> <!-- Espaciado dentro del botón --> +</shape> \ No newline at end of file diff --git a/app/src/main/res/drawable/style_confirmar_gradiente.xml b/app/src/main/res/drawable/style_confirmar_gradiente.xml new file mode 100644 index 0000000000000000000000000000000000000000..a440aca4abdcc804453ad31e3b0575184c01d574 --- /dev/null +++ b/app/src/main/res/drawable/style_confirmar_gradiente.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <gradient + android:angle="90" + android:startColor="#E1AA7A" + android:endColor="#ffb16c" + android:type="linear" /> + <corners android:radius="30dp"/> +</shape> diff --git a/app/src/main/res/drawable/style_slot_inventario.xml b/app/src/main/res/drawable/style_slot_inventario.xml new file mode 100644 index 0000000000000000000000000000000000000000..0470e3335aa24db67c8707525bb3f6fbb92c5060 --- /dev/null +++ b/app/src/main/res/drawable/style_slot_inventario.xml @@ -0,0 +1,6 @@ +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners android:radius="10dp"/> + <stroke + android:width="3dp" + android:color="@color/pintiaTitleText" /> +</shape> diff --git a/app/src/main/res/drawable/style_texto2_border.xml b/app/src/main/res/drawable/style_texto2_border.xml new file mode 100644 index 0000000000000000000000000000000000000000..becb3b38c12ef37f128307abad036acceb972fb6 --- /dev/null +++ b/app/src/main/res/drawable/style_texto2_border.xml @@ -0,0 +1,4 @@ +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <solid android:color="#E1C47f"/> + <corners android:radius="30dp"/> +</shape> \ No newline at end of file diff --git a/app/src/main/res/drawable/edittext_border.xml b/app/src/main/res/drawable/style_texto_border.xml similarity index 77% rename from app/src/main/res/drawable/edittext_border.xml rename to app/src/main/res/drawable/style_texto_border.xml index 6efa1291a48cf0a0b9753d31c861acc4003d0776..10dc55ff2da7e7acffd67315385de0245c8d3daf 100644 --- a/app/src/main/res/drawable/edittext_border.xml +++ b/app/src/main/res/drawable/style_texto_border.xml @@ -1,4 +1,4 @@ <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@color/pintiaInput"/> - <corners android:radius="20dp"/> + <corners android:radius="30dp"/> </shape> diff --git a/app/src/main/res/drawable/texto_armeria.png b/app/src/main/res/drawable/texto_armeria.png new file mode 100644 index 0000000000000000000000000000000000000000..7f63df090651d2832043125b5694aa2be6297442 Binary files /dev/null and b/app/src/main/res/drawable/texto_armeria.png differ diff --git a/app/src/main/res/drawable/texto_aventura.png b/app/src/main/res/drawable/texto_aventura.png new file mode 100644 index 0000000000000000000000000000000000000000..518942ecf3633e57330b7aea5cbf98ee71a489d7 Binary files /dev/null and b/app/src/main/res/drawable/texto_aventura.png differ diff --git a/app/src/main/res/drawable/texto_entrenar.png b/app/src/main/res/drawable/texto_entrenar.png new file mode 100644 index 0000000000000000000000000000000000000000..f452bf010652893122e34a4a60d26cb2fa9ec872 Binary files /dev/null and b/app/src/main/res/drawable/texto_entrenar.png differ diff --git a/app/src/main/res/drawable/texto_lista_huesitos.png b/app/src/main/res/drawable/texto_lista_huesitos.png new file mode 100644 index 0000000000000000000000000000000000000000..de952fd8fb07cac4bcf4179b8096f6680fdd03df Binary files /dev/null and b/app/src/main/res/drawable/texto_lista_huesitos.png differ diff --git a/app/src/main/res/drawable/texto_lista_investigacion.png b/app/src/main/res/drawable/texto_lista_investigacion.png new file mode 100644 index 0000000000000000000000000000000000000000..a987508cfb1dd4f06520b4ca1380cffa192468d1 Binary files /dev/null and b/app/src/main/res/drawable/texto_lista_investigacion.png differ diff --git a/app/src/main/res/drawable/texto_lista_memori.png b/app/src/main/res/drawable/texto_lista_memori.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b120dfba6a2529bc01f691ece5e4565f6d84b5 Binary files /dev/null and b/app/src/main/res/drawable/texto_lista_memori.png differ diff --git a/app/src/main/res/drawable/texto_lista_raya.png b/app/src/main/res/drawable/texto_lista_raya.png new file mode 100644 index 0000000000000000000000000000000000000000..c046fde65234fd3e67fd30eb84d2c992d216536e Binary files /dev/null and b/app/src/main/res/drawable/texto_lista_raya.png differ diff --git a/app/src/main/res/drawable/texto_lista_reparar.png b/app/src/main/res/drawable/texto_lista_reparar.png new file mode 100644 index 0000000000000000000000000000000000000000..d51db564aeae05f724bab2c7025de2f2b2bd45ed Binary files /dev/null and b/app/src/main/res/drawable/texto_lista_reparar.png differ diff --git a/app/src/main/res/drawable/texto_lista_ruleta.png b/app/src/main/res/drawable/texto_lista_ruleta.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5592d6f266b202e2d93dc632f49ee85a60c27c Binary files /dev/null and b/app/src/main/res/drawable/texto_lista_ruleta.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_1_descripcion.png b/app/src/main/res/drawable/texto_minijuego_1_descripcion.png new file mode 100644 index 0000000000000000000000000000000000000000..e8511f4810f3f799486beb7ca3cb34d644116109 Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_1_descripcion.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_1_titulo.png b/app/src/main/res/drawable/texto_minijuego_1_titulo.png new file mode 100644 index 0000000000000000000000000000000000000000..91f5583ace3270b2b0a8959b95908e6c8127573d Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_1_titulo.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_2_descripcion.png b/app/src/main/res/drawable/texto_minijuego_2_descripcion.png new file mode 100644 index 0000000000000000000000000000000000000000..38cf7e1c107adf23d6257f528f622550b106d05a Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_2_descripcion.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_2_jugar.png b/app/src/main/res/drawable/texto_minijuego_2_jugar.png new file mode 100644 index 0000000000000000000000000000000000000000..41c90282e2748dd29b8ff7e1fc5a2b70c9f81887 Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_2_jugar.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_2_reiniciar.png b/app/src/main/res/drawable/texto_minijuego_2_reiniciar.png new file mode 100644 index 0000000000000000000000000000000000000000..a7672d7995aac8ec60480f06b1416a6c21e3d394 Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_2_reiniciar.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_2_titulo.png b/app/src/main/res/drawable/texto_minijuego_2_titulo.png new file mode 100644 index 0000000000000000000000000000000000000000..27b8b4bf50fb66feb5282abb8e1fb6d5a8eeb422 Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_2_titulo.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_3_descripcion.png b/app/src/main/res/drawable/texto_minijuego_3_descripcion.png new file mode 100644 index 0000000000000000000000000000000000000000..656220cedd1f72dd51fcf461df5bf58b0808fd2e Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_3_descripcion.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_3_jugar.png b/app/src/main/res/drawable/texto_minijuego_3_jugar.png new file mode 100644 index 0000000000000000000000000000000000000000..fd682e0b98bd4cb54ba2074f4c2c658a05001e8d Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_3_jugar.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_3_titulo.png b/app/src/main/res/drawable/texto_minijuego_3_titulo.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8892b0bb85eec746067a99f13731ab845e8804 Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_3_titulo.png differ diff --git a/app/src/main/res/drawable/texto_minijuego_3_volver.png b/app/src/main/res/drawable/texto_minijuego_3_volver.png new file mode 100644 index 0000000000000000000000000000000000000000..1f99c7bed82124a221b10fbc688ed34dbafae868 Binary files /dev/null and b/app/src/main/res/drawable/texto_minijuego_3_volver.png differ diff --git a/app/src/main/res/drawable/texto_ruleta_titulo.png b/app/src/main/res/drawable/texto_ruleta_titulo.png new file mode 100644 index 0000000000000000000000000000000000000000..02d7697a1838c384420ee91936a024ff177efee2 Binary files /dev/null and b/app/src/main/res/drawable/texto_ruleta_titulo.png differ diff --git a/app/src/main/res/drawable/texto_taberna.png b/app/src/main/res/drawable/texto_taberna.png new file mode 100644 index 0000000000000000000000000000000000000000..70104fbf1cfa70ec67906aa714f3853d2c1a7662 Binary files /dev/null and b/app/src/main/res/drawable/texto_taberna.png differ diff --git a/app/src/main/res/drawable/texto_tienda.png b/app/src/main/res/drawable/texto_tienda.png new file mode 100644 index 0000000000000000000000000000000000000000..48047b04a36f97d75627bd599425edff3c0b7fc6 Binary files /dev/null and b/app/src/main/res/drawable/texto_tienda.png differ diff --git a/app/src/main/res/drawable/tutorial_juego1.jpeg b/app/src/main/res/drawable/tutorial_juego1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9243c7c1a4beeeb52fa0d7a090c05314f8e214b7 Binary files /dev/null and b/app/src/main/res/drawable/tutorial_juego1.jpeg differ diff --git a/app/src/main/res/drawable/tutorial_juego2.jpeg b/app/src/main/res/drawable/tutorial_juego2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c8ac8b2adbf696072acbb748a47d0f9848f1a8f5 Binary files /dev/null and b/app/src/main/res/drawable/tutorial_juego2.jpeg differ diff --git a/app/src/main/res/drawable/tutorial_minijuego1_bomba.jpeg b/app/src/main/res/drawable/tutorial_minijuego1_bomba.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9c70aee6916dc2277aa05fc8da6f03e321454d38 Binary files /dev/null and b/app/src/main/res/drawable/tutorial_minijuego1_bomba.jpeg differ diff --git a/app/src/main/res/drawable/tutorial_minijuego1_hueso.jpeg b/app/src/main/res/drawable/tutorial_minijuego1_hueso.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c776d747280a6174a76056b1c7c41325bb258888 Binary files /dev/null and b/app/src/main/res/drawable/tutorial_minijuego1_hueso.jpeg differ diff --git a/app/src/main/res/drawable/tutorial_minijuego2_bien.jpeg b/app/src/main/res/drawable/tutorial_minijuego2_bien.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..1ef68d165d54357cfb906c9652ba45e3cdc7339f Binary files /dev/null and b/app/src/main/res/drawable/tutorial_minijuego2_bien.jpeg differ diff --git a/app/src/main/res/drawable/tutorial_minijuego2_mal.jpeg b/app/src/main/res/drawable/tutorial_minijuego2_mal.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8d9e6a0dcd7f89800fcb266b4601d197a1492a25 Binary files /dev/null and b/app/src/main/res/drawable/tutorial_minijuego2_mal.jpeg differ diff --git a/app/src/main/res/drawable/tutorial_minijuego3_bien.jpeg b/app/src/main/res/drawable/tutorial_minijuego3_bien.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f1478504b1e63c6060bd619f9df564a8a64fa594 Binary files /dev/null and b/app/src/main/res/drawable/tutorial_minijuego3_bien.jpeg differ diff --git a/app/src/main/res/drawable/tutorial_minijuego3_mal.jpeg b/app/src/main/res/drawable/tutorial_minijuego3_mal.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0a6b270b258cfe3294f23f433d64851caa3e1328 Binary files /dev/null and b/app/src/main/res/drawable/tutorial_minijuego3_mal.jpeg differ diff --git a/app/src/main/res/font/pixeled.ttf b/app/src/main/res/font/pixeled.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5fb1b02ed5e836d8c7e9cf273c93a6d4ce4f0701 Binary files /dev/null and b/app/src/main/res/font/pixeled.ttf differ diff --git a/app/src/main/res/font/press_start_2p.ttf b/app/src/main/res/font/press_start_2p.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2442affbf6570d23c0b2b270cca8d49535df27bf Binary files /dev/null and b/app/src/main/res/font/press_start_2p.ttf differ diff --git a/app/src/main/res/layout/activity_armeria.xml b/app/src/main/res/layout/activity_armeria.xml new file mode 100644 index 0000000000000000000000000000000000000000..1b3ea73ad026222ce7f3401da9072ae9ac7d482f --- /dev/null +++ b/app/src/main/res/layout/activity_armeria.xml @@ -0,0 +1,494 @@ +<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="@color/pintiaBackground" + tools:context=".exploradoresDePintia.ExploradoresDePintia" + tools:ignore="HardcodedText, UseCompoundDrawables"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Taberna" + android:src="@drawable/background_armeria" + android:scaleType="centerCrop" /> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + android:layout_marginBottom="60dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + <ImageView + android:id="@+id/tituloJuego" + android:layout_width="wrap_content" + android:layout_height="120dp" + android:layout_centerHorizontal="true" + android:contentDescription="Titulo del minijuego" + android:src="@drawable/texto_armeria" + android:textColor="#401201" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <LinearLayout + android:id="@+id/layoutMonedas" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="5dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:layout_marginBottom="8dp" + app:layout_constraintTop_toBottomOf="@id/tituloJuego" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + + <TextView + android:id="@+id/textoMonedas" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + <GridLayout + android:id="@+id/inventarioGrid" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:layout_marginStart="5dp" + android:layout_marginEnd="5dp" + android:background="@drawable/style_texto_border" + android:columnCount="2" + android:padding="12dp" + android:rowCount="3" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/layoutMonedas"> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:id="@+id/slot01" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio01" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda01" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot02" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio02" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda02" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + + </LinearLayout> + + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot03" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio03" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda03" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot04" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio04" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda04" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot05" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio05" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda05" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:id="@+id/slot06" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio06" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda06" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + </GridLayout> + + <TextView + android:id="@+id/textoInformacion" + android:layout_width="300dp" + android:layout_height="wrap_content" + android:text="Aquà aparecera la información relevante de las compras" + android:textSize="15sp" + android:fontFamily="@font/pixeled" + android:padding="6sp" + android:textColor="#401201" + android:background="@drawable/style_texto_border" + android:layout_marginTop="10dp" + app:layout_constraintTop_toBottomOf="@id/inventarioGrid" + app:layout_constraintStart_toStartOf="parent" + 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 5 monedas" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" + app:layout_constraintTop_toBottomOf="@id/textoInformacion" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + + </LinearLayout> + </ScrollView> + <LinearLayout + android:id="@+id/bottom_navigation" + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/style_background_gradiente" + android:orientation="horizontal" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent"> + + + <ImageButton + android:id="@+id/mapButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_map" + android:contentDescription="Abre el ranking" + android:layout_marginEnd="40dp" + android:layout_marginStart="40dp" + android:scaleType="fitCenter" /> + + + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_exploradores_de_pintia.xml b/app/src/main/res/layout/activity_exploradores_de_pintia.xml new file mode 100644 index 0000000000000000000000000000000000000000..14809695ad55b949579b202ac715015361e11c1a --- /dev/null +++ b/app/src/main/res/layout/activity_exploradores_de_pintia.xml @@ -0,0 +1,460 @@ +<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="@color/pintiaBackground" + android:padding="5dp" + tools:context=".exploradoresDePintia.ExploradoresDePintia" + tools:ignore="HardcodedText, UseCompoundDrawables"> + + <ScrollView + android:id="@+id/scrollView" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginBottom="10dp" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@id/bottom_navigation" + android:paddingBottom="10dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="10dp" + android:columnCount="1" + android:rowCount="2"> + + <!-- Primer elemento (fila 1) --> + <LinearLayout + android:id="@+id/primero" + android:background="@drawable/style_texto_border" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center"> + + + + <!-- Ataque Layout --> + <LinearLayout + android:id="@+id/ataqueArea" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal" + android:layout_margin="8dp"> + + <ImageView + android:id="@+id/ataqueImage" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de ataque" + android:src="@drawable/icon_espada" /> + + <TextView + android:id="@+id/ataqueText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:text="1" + android:textColor="#000000" + android:textSize="18sp" + android:fontFamily="@font/pixeled" /> + </LinearLayout> + + <!-- Investigación Layout --> + <LinearLayout + android:id="@+id/InvestigacionArea" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal" + android:layout_margin="8dp"> + + <ImageView + android:id="@+id/investigacionImagen" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de investigación" + android:src="@drawable/icon_vasija" /> + + <TextView + android:id="@+id/investigacionText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:text="1" + android:textColor="#000000" + android:textSize="18sp" + android:fontFamily="@font/pixeled" /> + </LinearLayout> + <!-- Money Layout --> + <LinearLayout + android:id="@+id/moneyLayout" + android:layout_width="160dp" + android:layout_height="30dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/moneyImage" + android:layout_width="30dp" + android:layout_height="match_parent" + android:layout_marginStart="10dp" + android:contentDescription="Logo del juego" + android:src="@drawable/logo_pintia" + tools:ignore="HardcodedText" /> + + <TextView + android:id="@+id/moneyText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="30dp" + android:text="1200" + android:textColor="@color/pintiaTitleText" + android:textSize="20sp" + android:fontFamily="@font/pixeled" + tools:ignore="HardcodedText" /> + + </LinearLayout> + </LinearLayout> + + + <!-- Segundo elemento (fila 2) --> + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="200dp" + android:layout_marginTop="8dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="16dp" + android:paddingBottom="16dp" + app:layout_constraintTop_toBottomOf="@id/tituloJuego"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <ImageView + android:id="@+id/imagenProtagonista" + android:layout_width="169dp" + android:layout_height="127dp" + android:layout_marginBottom="8dp" + android:contentDescription="Imagen del yacimiento arqueológico" + android:src="@drawable/protagonista_idle_animation" /> + + <LinearLayout + android:id="@+id/barras" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical"> + <ProgressBar + android:id="@+id/barraVida" + style="@android:style/Widget.ProgressBar.Horizontal" + android:layout_width="120dp" + android:layout_height="10dp" + android:layout_marginBottom="2dp" + android:max="100" + android:progress="100" + android:progressDrawable="@drawable/style_barra_evento" /> + + <ProgressBar + android:id="@+id/barraEnergia" + style="@android:style/Widget.ProgressBar.Horizontal" + android:layout_width="120dp" + android:layout_height="10dp" + android:max="100" + android:progress="100" + android:layout_marginBottom="10dp" + android:progressDrawable="@drawable/style_barra_energia" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="10dp" + android:gravity="center" + android:orientation="vertical"> + + <FrameLayout + android:layout_width="169dp" + android:layout_height="127dp" + android:layout_marginBottom="8dp"> + + <ImageView + android:id="@+id/imagenEvento" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Imagen del yacimiento arqueológico" + android:scaleX="-1" + android:src="@drawable/monster_metal_idle_00" /> + + <ImageView + android:id="@+id/imagenEfectoEvento" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Imagen del efecto de evento" + android:scaleX="-1"/> + </FrameLayout> + + <ProgressBar + android:id="@+id/barraEvento" + style="@android:style/Widget.ProgressBar.Horizontal" + android:layout_width="120dp" + android:layout_height="10dp" + android:layout_marginBottom="10dp" + android:max="100" + android:progress="100" + android:progressDrawable="@drawable/style_barra_vida" /> + </LinearLayout> + + + </LinearLayout> + + </GridLayout> + + + + <TextView + android:id="@+id/textoTipoEvento" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:fontFamily="@font/pixeled" + android:text="Evento" + android:textColor="#401201" + android:textSize="18sp" + android:textStyle="bold"/> + + <TextView + android:id="@+id/textoEvento" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:padding="10dp" + android:text="El texto del evento aparecerá aquÃ" + android:textColor="#401201" + android:textSize="16sp" + android:fontFamily="@font/pixeled"/> + + <View + android:id="@+id/divider" + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_marginTop="16dp" + android:background="@android:color/darker_gray" /> + + + <TextView + android:id="@+id/textoAccion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:fontFamily="@font/pixeled" + android:text="Acciones" + android:textColor="#401201" + android:textSize="18sp" + android:textStyle="bold" /> + + + + <GridLayout + android:id="@+id/opciones" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:rowCount="2" + android:columnCount="2" + android:orientation="vertical" + android:layout_marginTop="8dp"> + + + <Button + android:id="@+id/opcion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:text="Opcion1" + android:textColor="@color/pintiaButtonText" + /> + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:text="Opcion1" + android:textColor="@color/pintiaButtonText"/> + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:text="Opcion1" + android:textColor="@color/pintiaButtonText"/> + <Button + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:text="Opcion1" + android:textColor="@color/pintiaButtonText"/> + </GridLayout> + + + + + + <TextView + android:id="@+id/textoResultado" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:layout_marginTop="20dp" + android:fontFamily="@font/pixeled" + android:text="Resultado del Evento" + android:textColor="#401201" + android:textSize="16sp" + android:textStyle="bold" + android:background="@drawable/style_texto_border" + android:padding="16dp" /> + </LinearLayout> + + + </ScrollView> + + <LinearLayout + android:id="@+id/bottom_navigation" + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + + <ImageButton + android:id="@+id/eventButton" + android:layout_width="0dp" + android:layout_height="50dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_event" + android:contentDescription="Abre la zona de eventos" + android:layout_marginEnd="0dp" + android:padding="5dp" + android:scaleType="fitCenter"/> + + <ImageButton + android:id="@+id/inventoryButton" + android:layout_width="0dp" + android:layout_height="50dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_inventario" + android:contentDescription="Abre el inventario" + android:padding="5dp" + android:scaleType="fitCenter"/> + + <ImageButton + android:id="@+id/tutorialButton" + android:layout_width="0dp" + android:layout_height="50dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/asi_exploradores_interrogacion" + android:contentDescription="Abre el inventario" + android:padding="5dp" + android:scaleType="fitCenter"/> + + </LinearLayout> + + <GridLayout + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + android:visibility="gone" + android:id="@+id/estadisticas" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp" + android:background="@drawable/style_texto_border" + android:columnCount="2" + android:rowCount="1"> + + <!-- Vida --> + <LinearLayout + android:id="@+id/HealthArea" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center" + android:orientation="horizontal" + android:layout_margin="8dp" + android:layout_marginLeft="40dp"> + + <ImageView + android:id="@+id/healthImage" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de vida" + android:src="@drawable/icon_vida" /> + + <TextView + android:id="@+id/vidaText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:text="10" + android:textColor="#000000" + android:textSize="18sp" + android:fontFamily="@font/pixeled" /> + </LinearLayout> + + + + <!-- EnergÃa --> + <LinearLayout + android:id="@+id/EnergyArea" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center" + android:orientation="horizontal" + android:layout_margin="8dp"> + + <ImageView + android:id="@+id/EngergyImage" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de energÃa" + android:src="@drawable/icon_energia" /> + + <TextView + android:id="@+id/EnergiaText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:text="10" + android:textColor="#000000" + android:textSize="18sp" + android:fontFamily="@font/pixeled" /> + </LinearLayout> + + + + </GridLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_finminijuego1.xml b/app/src/main/res/layout/activity_finminijuego1.xml new file mode 100644 index 0000000000000000000000000000000000000000..745c99a68415974c90eda961cf9cb3c45f7c2734 --- /dev/null +++ b/app/src/main/res/layout/activity_finminijuego1.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?> +<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" + tools:context=".minijuego1.InicioMinijuego1"> + + <ImageView + android:id="@+id/fondoImagen" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:src="@drawable/background_minijuego_1" + android:scaleType="centerCrop" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:gravity="center" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + + <TextView + android:id="@+id/tituloTextView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="¡Enhorabuena!" + android:textSize="24sp" + android:fontFamily="@font/pixeled" + android:textStyle="bold" + android:textColor="@color/white" + android:layout_marginBottom="20dp"/> + + <TextView + android:id="@+id/puntuacionTextView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Puntuación: 0" + android:fontFamily="@font/pixeled" + android:textSize="20sp" + android:textColor="@color/white"/> + + <Button + android:id="@+id/btnReiniciar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:background="@drawable/style_texto_border" + android:text="Volver al menú" + android:layout_marginTop="20dp"/> + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_iniciominijuego1.xml b/app/src/main/res/layout/activity_iniciominijuego1.xml new file mode 100644 index 0000000000000000000000000000000000000000..f867b6dc66be3a53d049e388993f63997a15b4e7 --- /dev/null +++ b/app/src/main/res/layout/activity_iniciominijuego1.xml @@ -0,0 +1,70 @@ +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <ImageView + android:id="@+id/fondoImagen" + android:layout_width="0dp" + android:layout_height="0dp" + android:src="@drawable/background_minijuego_1" + android:scaleType="centerCrop" + app:layout_constraintWidth_percent="1.0" + app:layout_constraintHeight_percent="1.0" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" /> + + <ImageView + android:id="@+id/titleImage" + android:layout_width="0dp" + android:layout_height="0dp" + android:src="@drawable/texto_minijuego_1_titulo" + app:layout_constraintWidth_percent="1" + app:layout_constraintHeight_percent="0.2" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintVertical_bias="0.2" /> + + <ImageView + android:id="@+id/bioImage" + android:layout_width="0dp" + android:layout_height="0dp" + android:src="@drawable/texto_minijuego_1_descripcion" + app:layout_constraintWidth_percent="1" + app:layout_constraintHeight_percent="0.15" + app:layout_constraintTop_toBottomOf="@id/titleImage" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintVertical_bias="0" /> + + <ImageView + android:id="@+id/startButton" + android:layout_width="0dp" + android:layout_height="0dp" + android:src="@drawable/texto_minijuego_3_jugar" + app:layout_constraintWidth_percent="0.8" + app:layout_constraintHeight_percent="0.1" + app:layout_constraintTop_toBottomOf="@id/bioImage" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintVertical_bias="0.2" /> + <ImageView + android:id="@+id/tutorial" + android:contentDescription="tutorial" + app:layout_constraintWidth_percent="0.3" + app:layout_constraintHeight_percent="0.15" + app:layout_constraintTop_toBottomOf="@id/startButton" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintVertical_bias="0.3" + android:src="@drawable/asi_boton_tutorial" + android:layout_height="0dp" android:layout_width="0dp"></ImageView> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_leaderboard.xml b/app/src/main/res/layout/activity_leaderboard.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a88afa1c43b3f52ada683bb3816bcc332159973 --- /dev/null +++ b/app/src/main/res/layout/activity_leaderboard.xml @@ -0,0 +1,74 @@ +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/background_minijuego_reparar" + tools:ignore="HardcodedText"> + + <TextView + android:id="@+id/leaderboardTitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true" + android:layout_marginBottom="16dp" + android:layout_marginTop="20dp" + android:text="Clasificación" + android:textSize="24sp" + android:textColor="@color/white" + android:fontFamily="@font/pixeled" + android:textStyle="bold" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/leaderboardRecyclerView" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_below="@id/leaderboardTitle" + android:layout_above="@id/bottom_navigation" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:layout_marginBottom="10dp" + android:layout_marginTop="16dp" + android:divider="@android:color/darker_gray" + android:dividerHeight="1dp" /> + + <LinearLayout + android:id="@+id/bottom_navigation" + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:background="@drawable/style_background_gradiente" + android:orientation="horizontal"> + + + + <ImageButton + android:id="@+id/mapButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_map" + android:contentDescription="Abre el ranking" + android:layout_marginEnd="40dp" + android:layout_marginStart="40dp" + android:scaleType="fitCenter"/> + + <ImageButton + android:id="@+id/logoutButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_shop" + android:contentDescription="Abre la tienda" + android:padding="5dp" + android:scaleType="fitCenter" + android:visibility="gone"/> + + </LinearLayout> + + + +</RelativeLayout> diff --git a/app/src/main/res/layout/activity_lista_minijuegos.xml b/app/src/main/res/layout/activity_lista_minijuegos.xml new file mode 100644 index 0000000000000000000000000000000000000000..07e4689bdb3f5b7b1929c3b598c2ebf65e230955 --- /dev/null +++ b/app/src/main/res/layout/activity_lista_minijuegos.xml @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/background_lista" + android:padding="40dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <!-- Minijuego 1 --> + <FrameLayout + android:id="@+id/minijuego1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp" + android:layout_marginBottom="8dp"> + + <!-- Contenido (imagen y tÃtulo) --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="50dp" + android:layout_height="50dp" + android:src="@drawable/asi_minijuego_1_hueso" + android:contentDescription="Imagen de hueso" /> + + <ImageView + android:layout_width="15dp" + android:layout_height="80dp" + + android:layout_weight="1" + android:contentDescription="TÃtulo del Minijuego 1" + android:src="@drawable/texto_lista_huesitos" /> + </LinearLayout> + </FrameLayout> + + <!-- Minijuego 2 --> + <FrameLayout + android:id="@+id/minijuego2" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp" + android:layout_marginBottom="8dp"> + + <!-- Contenido (imagen y tÃtulo) --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="50dp" + android:layout_height="50dp" + android:src="@drawable/asi_minijuego_2_nube" + android:contentDescription="Imagen de nube" /> + + <ImageView + android:layout_width="15dp" + android:layout_height="80dp" + android:layout_weight="1" + android:contentDescription="TÃtulo del Minijuego 2" + android:src="@drawable/texto_lista_nubes" /> + </LinearLayout> + </FrameLayout> + <!-- Minijuego 3 --> + <FrameLayout + android:id="@+id/minijuego3" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp" + android:layout_marginBottom="8dp"> + + <!-- Contenido (imagen y tÃtulo) --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="50dp" + android:layout_height="50dp" + android:src="@drawable/asi_minijuego_3_trasero" + android:contentDescription="Imagen de carta" /> + + <ImageView + android:layout_width="15dp" + android:layout_height="80dp" + android:layout_weight="1" + android:contentDescription="TÃtulo del Minijuego 3" + android:src="@drawable/texto_lista_memori" /> + </LinearLayout> + </FrameLayout> + + <!-- Minijuego Investigar --> + <FrameLayout + android:id="@+id/minijuegoInvestigar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp" + android:layout_marginBottom="8dp"> + + <!-- Contenido (imagen y tÃtulo) --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="50dp" + android:layout_height="50dp" + android:src="@drawable/icon_vasija" + android:contentDescription="Imagen de vasija" /> + + <ImageView + android:layout_width="15dp" + android:layout_height="80dp" + android:layout_weight="1" + android:contentDescription="TÃtulo del Minijuego Investigacion" + android:src="@drawable/texto_lista_investigacion" /> + </LinearLayout> + </FrameLayout> + + <!-- Minijuego Ruleta --> + <FrameLayout + android:id="@+id/minijuegoRuleta" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp" + android:layout_marginBottom="8dp"> + + <!-- Contenido (imagen y tÃtulo) --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="50dp" + android:layout_height="50dp" + android:src="@drawable/asi_ruleta_ruleta" + android:contentDescription="Imagen de ruleta" /> + + <ImageView + android:layout_width="15dp" + android:layout_height="80dp" + android:layout_weight="1" + android:contentDescription="TÃtulo de la ruleta" + android:src="@drawable/texto_lista_ruleta" /> + </LinearLayout> + </FrameLayout> + + <!-- Minijuego Reparar --> + <FrameLayout + android:id="@+id/minijuegoReparar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="8dp" + android:layout_marginBottom="8dp"> + + <!-- Contenido (imagen y tÃtulo) --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="50dp" + android:layout_height="50dp" + android:src="@drawable/asi_reparar_martillo" + android:contentDescription="Imagen de martillo" /> + + <ImageView + android:layout_width="15dp" + android:layout_height="80dp" + android:layout_weight="1" + android:contentDescription="TÃtulo de reparar" + android:src="@drawable/texto_lista_reparar" /> + </LinearLayout> + </FrameLayout> + </LinearLayout> +</ScrollView> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a7360746d898932698c51efdfb43d8f554e897c3..b1f279f436f842a68ac1c163f024458560f7cd70 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -30,25 +30,15 @@ android:textStyle="bold" tools:ignore="HardcodedText" /> - <Button - android:id="@+id/loginButton" - android:layout_width="300dp" - android:layout_height="wrap_content" - android:layout_marginTop="30dp" - android:backgroundTint="@color/pintiaButton" - android:textColor="@color/pintiaButtonText" - android:text="Iniciar Sesión" - tools:ignore="HardcodedText" - android:textStyle="bold" - /> + <Button android:id="@+id/signInButton" - android:layout_width="300dp" + android:layout_width="200dp" android:layout_height="wrap_content" - android:layout_marginTop="5dp" + android:layout_marginTop="15dp" android:backgroundTint="@color/pintiaButton" android:textColor="@color/pintiaButtonText" - android:text="Registrarse" + android:text="Iniciar sesión" tools:ignore="HardcodedText" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/activity_map.xml b/app/src/main/res/layout/activity_map.xml index 84b2ea2100390fbeb7f23386fa758904310ad6bc..9107fa25c5a46f9ecd13e930a427e21f06309990 100644 --- a/app/src/main/res/layout/activity_map.xml +++ b/app/src/main/res/layout/activity_map.xml @@ -1,25 +1,127 @@ -<RelativeLayout - xmlns:android="http://schemas.android.com/apk/res/android" +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/pintiaBackground" - android:padding="16dp" tools:ignore="HardcodedText"> + <ImageView + android:id="@+id/tituloJuego" + android:layout_width="wrap_content" + android:layout_height="120dp" + android:layout_centerHorizontal="true" + android:contentDescription="Titulo del minijuego" + android:elevation="10dp" + android:src="@drawable/texto_exploradores_de_pintia" + android:text="Exploradores de Pintia" + android:textColor="#401201" /> + + + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/background_ciudad" /> + + <ImageButton + android:id="@+id/botonAventura" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="199dp" + android:layout_height="140dp" + android:layout_alignParentStart="true" + android:layout_alignParentBottom="true" + android:layout_marginStart="55dp" + android:layout_marginBottom="65dp" + android:contentDescription="cartel aventura" + android:elevation="100dp" + android:fontFamily="@font/pixeled" + android:scaleType="fitCenter" + android:src="@drawable/texto_aventura" + android:textColor="@color/pintiaTitleText" + android:textSize="24sp" /> + + <ImageButton + android:id="@+id/botonTaberna" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="168dp" + android:layout_height="127dp" + android:layout_alignParentStart="true" + android:layout_alignParentBottom="true" + android:layout_marginStart="149dp" + android:layout_marginBottom="380dp" + android:contentDescription="cartel aventura" + android:elevation="100dp" + android:fontFamily="@font/pixeled" + android:scaleType="fitCenter" + android:src="@drawable/texto_taberna" + android:textColor="@color/pintiaTitleText" /> + + <ImageButton + android:id="@+id/botonTienda" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="148dp" + android:layout_height="127dp" + android:layout_alignParentStart="true" + android:layout_alignParentBottom="true" + android:layout_marginStart="-1dp" + android:layout_marginBottom="422dp" + android:contentDescription="cartel aventura" + android:elevation="100dp" + android:fontFamily="@font/pixeled" + android:scaleType="fitCenter" + android:src="@drawable/texto_tienda" + android:textColor="@color/pintiaTitleText" /> + + <ImageButton + android:id="@+id/botonArmeria" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="192dp" + android:layout_height="145dp" + android:layout_alignParentStart="true" + android:layout_alignParentBottom="true" + android:layout_marginStart="199dp" + android:layout_marginBottom="500dp" + android:contentDescription="cartel aventura" + android:elevation="100dp" + android:fontFamily="@font/pixeled" + android:scaleType="fitCenter" + android:src="@drawable/texto_armeria" + android:textColor="@color/pintiaTitleText" /> + + <ImageButton + android:id="@+id/botonEntrenar" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="170dp" + android:layout_height="125dp" + android:layout_alignParentStart="true" + android:layout_alignParentBottom="true" + android:layout_marginStart="241dp" + android:layout_marginBottom="226dp" + android:contentDescription="cartel aventura" + android:elevation="100dp" + android:fontFamily="@font/pixeled" + android:scaleType="fitCenter" + android:src="@drawable/texto_entrenar" + android:textColor="@color/pintiaTitleText" + android:visibility="gone"/> + <LinearLayout android:id="@+id/top_navigation" style="?android:attr/buttonBarStyle" android:layout_width="match_parent" android:layout_height="36dp" - android:layout_marginTop="10dp" + android:layout_below="@id/tituloJuego" + android:elevation="10dp" + android:gravity="center" android:orientation="horizontal"> <LinearLayout android:id="@+id/moneyLayout" - android:layout_width="153dp" + android:layout_width="200dp" android:layout_height="match_parent" - android:background="@drawable/edittext_border" + android:background="@drawable/style_texto_border" + android:gravity="center" android:orientation="horizontal"> <ImageView @@ -34,8 +136,9 @@ <TextView android:id="@+id/moneyText" android:layout_width="wrap_content" - android:layout_height="match_parent" + android:layout_height="wrap_content" android:layout_marginStart="30dp" + android:fontFamily="@font/pixeled" android:text="1200" android:textColor="@color/pintiaTitleText" android:textSize="24sp" @@ -44,18 +147,6 @@ </LinearLayout> - <ImageButton - android:id="@+id/settings" - android:layout_width="0dp" - android:layout_height="match_parent" - style="?android:attr/buttonBarStyle" - android:layout_weight="1" - android:contentDescription="Abre las opciones" - android:scaleType="fitCenter" - android:layout_marginStart="180dp" - android:padding="5dp" - android:src="@drawable/settings" /> - </LinearLayout> <LinearLayout @@ -63,59 +154,20 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" + android:background="@drawable/style_texto_border" android:orientation="horizontal"> - <Button - android:id="@+id/minijuego1" - style="?android:attr/buttonBarButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:background="@android:color/transparent" - android:text="1" - android:textSize="24sp" - android:layout_margin="4dp" - android:textColor="@color/pintiaTitleText"/> - - <Button - android:id="@+id/minijuego2" - style="?android:attr/buttonBarButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:background="@android:color/transparent" - android:text="2" - android:textSize="24sp" - android:layout_margin="4dp" - android:textColor="@color/pintiaTitleText"/> - - <Button - android:id="@+id/minijuego3" - style="?android:attr/buttonBarButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:background="@android:color/transparent" - android:text="3" - android:textSize="24sp" - android:layout_margin="4dp" - android:textColor="@color/pintiaTitleText"/> - - <Button - android:id="@+id/minijuego4" - style="?android:attr/buttonBarButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:background="@android:color/transparent" - android:text="4" - android:textSize="24sp" - android:layout_margin="4dp" - android:textColor="@color/pintiaTitleText"/> </LinearLayout> + <LinearLayout android:id="@+id/bottom_navigation" style="?android:attr/buttonBarStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" + android:background="@drawable/style_background_gradiente" + android:elevation="10dp" android:orientation="horizontal"> <ImageButton @@ -124,36 +176,35 @@ android:layout_height="60dp" android:layout_weight="1" android:background="?attr/selectableItemBackground" - android:src="@drawable/leaderboard" android:contentDescription="Abre el mapa" android:padding="5dp" - android:scaleType="fitCenter"/> + android:scaleType="fitCenter" + android:src="@drawable/icon_leaderboard" /> <ImageButton android:id="@+id/mapButton" android:layout_width="0dp" android:layout_height="60dp" + android:layout_marginStart="40dp" + android:layout_marginEnd="40dp" android:layout_weight="1" android:background="?attr/selectableItemBackground" - android:src="@drawable/map" android:contentDescription="Abre el ranking" - android:layout_marginEnd="40dp" - android:layout_marginStart="40dp" - android:scaleType="fitCenter"/> + android:scaleType="fitCenter" + android:src="@drawable/icon_map" /> <ImageButton - android:id="@+id/shopButton" + android:id="@+id/logoutButton" android:layout_width="0dp" android:layout_height="60dp" android:layout_weight="1" android:background="?attr/selectableItemBackground" - android:src="@drawable/shop" android:contentDescription="Abre la tienda" android:padding="5dp" - android:scaleType="fitCenter"/> + android:scaleType="fitCenter" + android:src="@drawable/icon_logout" /> </LinearLayout> - </RelativeLayout> diff --git a/app/src/main/res/layout/activity_minijuego1.xml b/app/src/main/res/layout/activity_minijuego1.xml index 73c07423cb48699d5e8a4e8c1055deb08b1ca747..94fa4b991df463ec463190fab3ed8387e0782d9f 100644 --- a/app/src/main/res/layout/activity_minijuego1.xml +++ b/app/src/main/res/layout/activity_minijuego1.xml @@ -1,23 +1,48 @@ -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:gravity="center" + android:background="@color/pintiaBackground"> - android:background="@color/pintiaBackground" - android:padding="16dp"> + <!-- TextView para mostrar el puntaje en la parte superior izquierda --> + <ImageView + android:id="@+id/fondoImagen" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:src="@drawable/background_minijuego_1" + android:scaleType="centerCrop" /> <TextView - android:id="@+id/titleTextView" + android:id="@+id/puntajeTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="20dp" - android:text="Minijuego 1" - android:textColor="@color/pintiaTitleText" - android:textSize="24sp" + android:layout_gravity="top|start" + android:fontFamily="@font/pixeled" + android:padding="16dp" + android:text="Puntaje: 0" + android:textColor="#FFFFFF" android:textStyle="bold" - tools:ignore="HardcodedText" /> + android:textSize="20sp" /> -</LinearLayout> + <TextView + android:id="@+id/tiempoTextView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Tiempo: 30s" + android:textSize="20sp" + android:textColor="#FFFFFF" + android:layout_gravity="top|end" + android:textStyle="bold" + android:fontFamily="@font/pixeled" + android:padding="16dp"/> + + + + <!-- FrameLayout donde se agregarán los botones --> + <FrameLayout + android:id="@+id/frameLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginTop="60dp"/> + +</FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_minijuego2.xml b/app/src/main/res/layout/activity_minijuego2.xml index 42abbe502cb2481659547d839364a4edd4d3423f..bef43f2905074ad435483a47dd580037eb85f3b2 100644 --- a/app/src/main/res/layout/activity_minijuego2.xml +++ b/app/src/main/res/layout/activity_minijuego2.xml @@ -1,23 +1,85 @@ -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:gravity="center" + android:background="@color/white"> - android:background="@color/pintiaBackground" - android:padding="16dp"> + <ImageView + android:id="@+id/fondo1" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:src="@drawable/background_minijuego_2" + android:scaleY="4" + android:scaleX="4"/> + <ImageView + android:id="@+id/fondo2" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:src="@drawable/background_minijuego_2" + android:scaleY="4" + android:scaleX="4"/> + + + <ImageView + android:id="@+id/titulo" + android:layout_width="wrap_content" + android:layout_height="300dp" + android:layout_alignParentTop="true" + android:layout_marginTop="100dp" + android:src="@drawable/texto_minijuego_2_titulo" /> + + <ImageView + android:id="@+id/descripcion" + android:layout_width="wrap_content" + android:layout_height="120dp" + android:layout_below="@id/titulo" + android:layout_marginTop="0dp" + android:src="@drawable/asi_boton_tutorial" + /> + <ImageView + android:id="@+id/boton_iniciar" + android:layout_width="200dp" + android:layout_height="100dp" + android:src="@drawable/texto_minijuego_2_jugar" + android:layout_below="@id/descripcion" + android:layout_centerHorizontal="true" + android:textColor="@android:color/white" /> + + <ImageView + android:id="@+id/protagonista" + android:layout_width="100dp" + android:layout_height="100dp" + android:src="@drawable/protagonista_idle_animation" + android:visibility="gone" /> + + <ImageView + android:id="@+id/nube" + android:layout_width="80dp" + android:layout_height="80dp" + android:src="@drawable/asi_minijuego_2_nube" + android:visibility="gone" /> <TextView - android:id="@+id/titleTextView" + android:id="@+id/puntuacion" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="20dp" - android:text="Minijuego 2" - android:textColor="@color/pintiaTitleText" - android:textSize="24sp" - android:textStyle="bold" - tools:ignore="HardcodedText" /> - -</LinearLayout> + android:text="Puntuación: 0" + android:textSize="20sp" + android:textColor="#FFFFFF" + android:layout_marginTop="10dp" + android:layout_marginLeft="10dp" + android:fontFamily="@font/press_start_2p" + android:visibility="gone"/> + <ImageView + android:id="@+id/boton_reinicio" + android:layout_width="300dp" + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:src = "@drawable/texto_minijuego_2_reiniciar" + android:visibility="gone" + /> + + + +</RelativeLayout> diff --git a/app/src/main/res/layout/activity_minijuego3.xml b/app/src/main/res/layout/activity_minijuego3.xml index c459ae254ae38c50e333fed1421c0068bc4e6c29..e4948c894310af2958e1f197615ce8e660aac5e8 100644 --- a/app/src/main/res/layout/activity_minijuego3.xml +++ b/app/src/main/res/layout/activity_minijuego3.xml @@ -1,23 +1,73 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - android:gravity="center" - - android:background="@color/pintiaBackground" + android:gravity="center_horizontal" + android:background="@drawable/background_minijuego_3" android:padding="16dp"> + <!-- Portada del juego --> + <LinearLayout + android:id="@+id/portadaLayout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:gravity="center" + android:visibility="visible"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="200dp" + android:layout_marginTop="-60dp" + android:src="@drawable/texto_minijuego_3_titulo" /> + + <!-- Botón para iniciar el juego --> + <ImageView + android:id="@+id/descripcion" + android:layout_width="wrap_content" + android:layout_height="175dp" + android:layout_marginTop="-10dp" + android:layout_marginBottom="40dp" + android:paddingBottom="40dp" + android:src="@drawable/asi_boton_tutorial" /> + + <ImageView + android:id="@+id/btn_jugar" + android:layout_width="wrap_content" + android:layout_height="90dp" + android:src="@drawable/texto_minijuego_3_jugar" /> + </LinearLayout> + + <!-- Espacio para el cronómetro --> <TextView - android:id="@+id/titleTextView" + android:id="@+id/cronometro" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="20dp" - android:text="Minijuego 3" - android:textColor="@color/pintiaTitleText" + android:text="00:00" android:textSize="24sp" - android:textStyle="bold" - tools:ignore="HardcodedText" /> + android:layout_gravity="center" + android:paddingBottom="16dp" + android:visibility="gone"/> + + <!-- GridLayout para las cartas --> + <GridLayout + android:id="@+id/gridLayout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:columnCount="4" + android:rowCount="4" + android:background="@drawable/style_texto_border" + android:padding="8dp" + android:layout_marginTop="80dp" + android:visibility="gone"> + </GridLayout> + <ImageView + android:id="@+id/btn_volver" + android:layout_width="wrap_content" + android:layout_height="90dp" + android:src="@drawable/texto_minijuego_3_volver" + android:visibility="gone"/> </LinearLayout> diff --git a/app/src/main/res/layout/activity_minijuego4.xml b/app/src/main/res/layout/activity_minijuego4.xml index b983c48b12514e92aae92ade4ff78671159d02f5..77d9ef65f8c7c6bf54bdef7d54d1646b86417404 100644 --- a/app/src/main/res/layout/activity_minijuego4.xml +++ b/app/src/main/res/layout/activity_minijuego4.xml @@ -1,23 +1,6 @@ -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - android:gravity="center" + android:layout_height="match_parent"> - android:background="@color/pintiaBackground" - android:padding="16dp"> - - <TextView - android:id="@+id/titleTextView" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="20dp" - android:text="Minijuego 4" - android:textColor="@color/pintiaTitleText" - android:textSize="24sp" - android:textStyle="bold" - tools:ignore="HardcodedText" /> - -</LinearLayout> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_minijuego_investigar.xml b/app/src/main/res/layout/activity_minijuego_investigar.xml new file mode 100644 index 0000000000000000000000000000000000000000..382493445bbf66fd678c58a1b12c93af1fb69f4e --- /dev/null +++ b/app/src/main/res/layout/activity_minijuego_investigar.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:background="@drawable/background_minijuego_reparar" + android:gravity="center"> + + + <GridLayout + android:id="@+id/gridLayout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:columnCount="2" + android:rowCount="2" + android:orientation="horizontal" + android:layout_marginTop="16dp"> + + <ImageView + android:id="@+id/part1" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_gravity="center" /> + + <ImageView + android:id="@+id/part2" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_gravity="center" /> + + <ImageView + android:id="@+id/part3" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_gravity="center" /> + + <ImageView + android:id="@+id/part4" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_gravity="center" /> + </GridLayout> + +</LinearLayout> diff --git a/app/src/main/res/layout/activity_minijuego_reparacion.xml b/app/src/main/res/layout/activity_minijuego_reparacion.xml new file mode 100644 index 0000000000000000000000000000000000000000..5f9aa0bb6cf76308859c94194d33e9b45fed814e --- /dev/null +++ b/app/src/main/res/layout/activity_minijuego_reparacion.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/background_minijuego_reparar"> + + + <ImageView + android:id="@+id/martillo" + android:layout_width="100dp" + android:layout_height="100dp" + android:src="@drawable/asi_reparar_martillo" + android:layout_centerHorizontal="true" + android:layout_marginTop="16dp" + android:visibility="gone" /> + + + <ImageView + android:id="@+id/imageToRepair" + android:layout_width="250dp" + android:layout_height="250dp" + android:src="@drawable/asi_exploradores_jabonera" + android:layout_centerHorizontal="true" + android:layout_marginBottom="16dp" + android:visibility="gone" /> + + + <RelativeLayout + android:id="@+id/relativeLayoutFragmentos" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_alignParentBottom="true" > + </RelativeLayout> + + + <ImageView + android:id="@+id/QTERule" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_centerHorizontal="true" + android:layout_marginTop="16dp" + android:scaleType="fitCenter" + android:src="@drawable/asi_reparar_rule" /> + + + <ImageView + android:id="@+id/QTEPalo" + android:layout_width="100dp" + android:layout_height="40dp" + android:layout_centerHorizontal="true" + android:layout_marginTop="72dp" + android:scaleX="1.5" + android:scaleY="1" + android:src="@drawable/asi_reparar_palo" /> +</RelativeLayout> diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml index b8217b83f309afe2ac462449ec3c2f10cd626a74..d181f18ab39dc722929841ef26a18c16730c904d 100644 --- a/app/src/main/res/layout/activity_register.xml +++ b/app/src/main/res/layout/activity_register.xml @@ -5,7 +5,7 @@ android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" - + android:id="@+id/linearLayout" android:background="@color/pintiaBackground" android:padding="16dp"> @@ -22,21 +22,34 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" - android:text="Registrar Nuevo Usuario" + android:text="Inicio o registro de usuario" android:textColor="@color/pintiaTitleText" android:textSize="24sp" android:textStyle="bold" tools:ignore="HardcodedText" /> + <EditText + android:id="@+id/editTextUsername" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:hint="Nombre de usuario" + android:inputType="text" + android:background="@drawable/style_texto_border" + android:padding="10dp" + android:layout_marginTop="20dp" + android:autofillHints="emailAddress" + android:backgroundTint="@color/pintiaInput" + tools:ignore="HardcodedText" /> + <EditText android:id="@+id/editTextEmail" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Correo Electrónico" android:inputType="textEmailAddress" - android:background="@drawable/edittext_border" + android:background="@drawable/style_texto_border" android:padding="10dp" - android:layout_marginTop="20dp" + android:layout_marginTop="10dp" android:autofillHints="emailAddress" android:backgroundTint="@color/pintiaInput" tools:ignore="HardcodedText" /> @@ -47,22 +60,54 @@ android:layout_height="wrap_content" android:hint="Contraseña" android:inputType="textPassword" - android:background="@drawable/edittext_border" + android:background="@drawable/style_texto_border" android:padding="10dp" android:layout_marginTop="10dp" android:autofillHints="password" android:backgroundTint="@color/pintiaInput" tools:ignore="HardcodedText" /> - <Button - android:id="@+id/buttonRegister" - android:layout_width="match_parent" + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <Button + android:id="@+id/buttonRegister" + android:layout_width="180dp" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:layout_weight="1" + android:backgroundTint="@color/pintiaButton" + android:text="Registrarse" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" + tools:ignore="ButtonStyle,HardcodedText,InefficientWeight" /> + + <Button + android:id="@+id/buttonLogIn" + android:layout_width="180dp" + android:layout_height="wrap_content" + android:layout_marginStart="20dp" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:text="Iniciar sesión" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" + tools:ignore="ButtonStyle,HardcodedText" /> + + </LinearLayout> + + <TextView + android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Registrarse" android:layout_marginTop="20dp" - android:backgroundTint="@color/pintiaButton" - android:textColor="@color/pintiaButtonText" + android:textAlignment="center" + android:text="El nombre de usuario no es necesario si vas a iniciar sesión" + android:textColor="@color/pintiaTitleText" + android:textSize="17sp" android:textStyle="bold" tools:ignore="HardcodedText" /> + </LinearLayout> diff --git a/app/src/main/res/layout/activity_resumen_partida.xml b/app/src/main/res/layout/activity_resumen_partida.xml new file mode 100644 index 0000000000000000000000000000000000000000..e4d154018cd0044793c1fdb45fd6e27b15949cd6 --- /dev/null +++ b/app/src/main/res/layout/activity_resumen_partida.xml @@ -0,0 +1,168 @@ +<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="@color/pintiaBackground" + android:padding="10dp" + tools:context=".exploradoresDePintia.ExploradoresDePintia" + tools:ignore="HardcodedText, UseCompoundDrawables"> + + <ScrollView + android:id="@+id/scrollView" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginBottom="10dp" + android:paddingBottom="10dp" + app:layout_constraintTop_toTopOf="parent"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="180dp" + android:layout_marginTop="15dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:orientation="horizontal" + android:paddingTop="16dp" + android:paddingBottom="16dp" + app:layout_constraintTop_toBottomOf="@id/tituloJuego"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical" + tools:ignore="UselessParent"> + + <ImageView + android:id="@+id/imagenProtagonista" + android:layout_width="169dp" + android:layout_height="127dp" + android:layout_marginBottom="8dp" + android:contentDescription="Imagen del yacimiento arqueológico" + android:src="@drawable/protagonista_idle_animation" /> + + <ProgressBar + android:id="@+id/barraVida" + style="@android:style/Widget.ProgressBar.Horizontal" + android:layout_width="120dp" + android:layout_height="10dp" + android:max="100" + android:progress="100" + android:progressDrawable="@drawable/style_barra_evento" /> + </LinearLayout> + </LinearLayout> + + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:fontFamily="@font/pixeled" + android:text="Resumen" + android:textColor="#401201" + android:textSize="18sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/textoResumen" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:background="@drawable/style_texto_border" + android:fontFamily="@font/pixeled" + android:gravity="center" + android:padding="10dp" + android:text="Este es un resumen de tu partida" + android:textColor="#401201" + android:textSize="16sp" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/resumenRecyclerView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:divider="@android:color/darker_gray" + android:dividerHeight="1dp" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginTop="10dp" + android:background="#000000" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:fontFamily="@font/pixeled" + android:text="Dinero Final" + android:textColor="#401201" + android:textSize="14sp" + android:textStyle="bold" /> + + <LinearLayout + android:id="@+id/moneyLayout" + android:layout_width="160dp" + android:layout_height="30dp" + android:layout_marginTop="8dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/moneyImage" + android:layout_width="30dp" + android:layout_height="match_parent" + android:layout_marginStart="10dp" + android:contentDescription="Logo del juego" + android:src="@drawable/logo_pintia" + tools:ignore="HardcodedText" /> + + <TextView + android:id="@+id/moneyText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="30dp" + android:text="1200" + android:textColor="@color/pintiaTitleText" + android:textSize="20sp" + android:fontFamily="@font/pixeled" + tools:ignore="HardcodedText" /> + + + + </LinearLayout> + <Button + android:id="@+id/botonContinuar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:layout_marginTop="10dp" + android:text="Continuar" + android:textColor="@color/pintiaButtonText" /> + + <Button + android:id="@+id/botonRuleta" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:layout_marginTop="10dp" + android:text="Utilizar Ticket" + android:textColor="@color/pintiaButtonText" + android:visibility="gone"/> + </LinearLayout> + + + + + </ScrollView> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_ruleta.xml b/app/src/main/res/layout/activity_ruleta.xml new file mode 100644 index 0000000000000000000000000000000000000000..1024a6493ce65243d688e2baed81fe9246358d48 --- /dev/null +++ b/app/src/main/res/layout/activity_ruleta.xml @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="16dp" + android:background="@drawable/background_minijuego_ruleta"> + + <ImageView + android:id="@+id/ruletaTitulo" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_marginBottom="20dp" + android:contentDescription="TÃtulo de la ruleta" + android:src="@drawable/texto_ruleta_titulo" + app:layout_constraintWidth_default="percent" + app:layout_constraintWidth_percent="1" + app:layout_constraintDimensionRatio="2:1" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + + + <ImageView + android:id="@+id/ruletaPuntero" + android:layout_width="0dp" + android:layout_height="0dp" + android:contentDescription="Puntero de la ruleta" + android:src="@drawable/asi_ruleta_puntero" + app:layout_constraintWidth_default="percent" + app:layout_constraintWidth_percent="0.2" + app:layout_constraintDimensionRatio="2:1" + + + app:layout_constraintTop_toBottomOf="@id/ruletaTitulo" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + + <FrameLayout + android:id="@+id/ruletaContainer" + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintWidth_default="percent" + app:layout_constraintWidth_percent="1" + app:layout_constraintDimensionRatio="1:1" + app:layout_constraintTop_toBottomOf="@id/ruletaPuntero" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toTopOf="@id/puntuacion"> + + <ImageView + android:id="@+id/ruletaImage" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:rotation="-24" + android:src="@drawable/asi_ruleta_ruleta" + android:scaleType="centerCrop"/> + </FrameLayout> + + + + <TextView + android:id="@+id/puntuacion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Puntuación: 33" + android:textSize="35sp" + android:textColor="#FFFF00" + android:fontFamily="@font/pixeled" + android:textAlignment="center" + android:textStyle="bold" + android:layout_marginTop="16dp" + app:layout_constraintTop_toBottomOf="@id/ruletaContainer" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_taberna.xml b/app/src/main/res/layout/activity_taberna.xml new file mode 100644 index 0000000000000000000000000000000000000000..b3558fe793eeb171658771398dc9e347d3677824 --- /dev/null +++ b/app/src/main/res/layout/activity_taberna.xml @@ -0,0 +1,149 @@ +<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="@color/pintiaBackground" + tools:context=".exploradoresDePintia.ExploradoresDePintia" + tools:ignore="HardcodedText, UseCompoundDrawables"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Taberna" + android:src="@drawable/background_taberna" + android:scaleType="centerCrop" /> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + android:layout_marginBottom="60dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + <ImageView + android:id="@+id/tituloJuego" + android:layout_width="wrap_content" + android:layout_height="120dp" + android:layout_centerHorizontal="true" + android:contentDescription="Titulo del minijuego" + android:src="@drawable/texto_taberna" + android:text="Exploradores de Pintia" + android:textColor="#401201" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + + <TextView + android:id="@+id/nivelActual" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="18dp" + android:text="Nivel actual: 1" + android:textSize="30sp" + 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" + app:layout_constraintTop_toBottomOf="@id/tituloJuego"/> + + <TextView + android:id="@+id/textoDescripcion" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginEnd="20dp" + android:layout_marginStart="20dp" + android:textAlignment="center" + android:padding="18dp" + android:text="La taberna es el centro de reunión de los vacceos, un lugar donde la comunidad comparte historias, celebra y toma decisiones clave. Este edificio no solo refuerza los lazos sociales, sino que, al mejorarlo, aumenta el nivel de la villa y otorga ventajas estratégicas en el desarrollo del resto de los edificios." + 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_marginTop="40dp" + android:layout_centerHorizontal="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/nivelActual"/> + + <TextView + android:id="@+id/textoInformacion" + android:layout_width="match_parent" + android:layout_height="wrap_content" + 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" + 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> + </ScrollView> + <LinearLayout + android:id="@+id/bottom_navigation" + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/style_background_gradiente" + android:orientation="horizontal" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent"> + + + + <ImageButton + android:id="@+id/mapButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_map" + android:contentDescription="Abre el ranking" + android:layout_marginEnd="40dp" + android:layout_marginStart="40dp" + android:scaleType="fitCenter" /> + + + </LinearLayout> + + + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/activity_tienda.xml b/app/src/main/res/layout/activity_tienda.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e05b9169ae8baf73ee6901b026fa5be8906ed05 --- /dev/null +++ b/app/src/main/res/layout/activity_tienda.xml @@ -0,0 +1,494 @@ +<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="@color/pintiaBackground" + tools:context=".exploradoresDePintia.ExploradoresDePintia" + tools:ignore="HardcodedText, UseCompoundDrawables"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Taberna" + android:src="@drawable/background_tienda" + android:scaleType="centerCrop" /> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + android:layout_marginBottom="60dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + <ImageView + android:id="@+id/tituloJuego" + android:layout_width="wrap_content" + android:layout_height="120dp" + android:layout_centerHorizontal="true" + android:contentDescription="Titulo del minijuego" + android:src="@drawable/texto_tienda" + android:textColor="#401201" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <LinearLayout + android:id="@+id/layoutMonedas" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="5dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:layout_marginBottom="8dp" + app:layout_constraintTop_toBottomOf="@id/tituloJuego" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"> + + <TextView + android:id="@+id/textoMonedas" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + <GridLayout + android:id="@+id/inventarioGrid" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:layout_marginStart="5dp" + android:layout_marginEnd="5dp" + android:background="@drawable/style_texto_border" + android:columnCount="2" + android:padding="12dp" + android:rowCount="3" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/layoutMonedas"> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:id="@+id/slot01" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio01" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda01" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot02" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio02" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda02" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + + </LinearLayout> + + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot03" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio03" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda03" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot04" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio04" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda04" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + + <ImageView + android:id="@+id/slot05" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio05" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda05" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + + <LinearLayout + android:orientation="vertical" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_horizontal"> + + <androidx.cardview.widget.CardView + android:layout_width="100dp" + android:layout_height="100dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_marginEnd="15dp" + android:layout_marginStart="15dp" + android:layout_marginTop="15dp" + android:layout_marginBottom="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:id="@+id/slot06" + android:layout_width="100dp" + android:layout_height="100dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + + </androidx.cardview.widget.CardView> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal|bottom" + android:orientation="horizontal" + android:gravity="center" + android:layout_marginBottom="8dp"> + + <TextView + android:id="@+id/precio06" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="100" + android:textColor="#401201" + android:textSize="20sp" /> + + <ImageView + android:id="@+id/moneda06" + android:layout_width="20dp" + android:layout_height="20dp" + android:layout_marginStart="4dp" + android:contentDescription="Icono de moneda" + android:src="@drawable/logo_pintia" + android:scaleType="centerCrop" /> + </LinearLayout> + + </LinearLayout> + + </GridLayout> + + <TextView + android:id="@+id/textoInformacion" + android:layout_width="300dp" + android:layout_height="wrap_content" + android:text="Aquà aparecera la información relevante de las compras" + android:textSize="15sp" + android:fontFamily="@font/pixeled" + android:padding="6sp" + android:textColor="#401201" + android:background="@drawable/style_texto_border" + android:layout_marginTop="10dp" + app:layout_constraintTop_toBottomOf="@id/inventarioGrid" + app:layout_constraintStart_toStartOf="parent" + 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 5 monedas" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" + app:layout_constraintTop_toBottomOf="@id/textoInformacion" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + </LinearLayout> + </ScrollView> + <LinearLayout + android:id="@+id/bottom_navigation" + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/style_background_gradiente" + android:orientation="horizontal" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent"> + + + + <ImageButton + android:id="@+id/mapButton" + android:layout_width="0dp" + android:layout_height="60dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:src="@drawable/icon_map" + android:contentDescription="Abre el ranking" + android:layout_marginEnd="40dp" + android:layout_marginStart="40dp" + android:scaleType="fitCenter" /> + + + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/leaderboard_item.xml b/app/src/main/res/layout/leaderboard_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..0cee08e334b7ec051bbd47d2d2358c1681de172d --- /dev/null +++ b/app/src/main/res/layout/leaderboard_item.xml @@ -0,0 +1,44 @@ +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="16dp" + android:gravity="center_vertical" + tools:ignore="HardcodedText" + android:background="@drawable/style_texto_border" + android:layout_marginBottom="10dp"> + + <TextView + android:id="@+id/positionTextView" + android:layout_width="40dp" + android:layout_height="wrap_content" + android:text="1" + android:textSize="18sp" + android:textStyle="bold" + android:gravity="center" + android:fontFamily="@font/pixeled" + /> + + <TextView + android:id="@+id/playerNameTextView" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="Player Name" + android:textSize="18sp" + android:fontFamily="@font/pixeled" + android:paddingStart="16dp" /> + + <TextView + android:id="@+id/scoreTextView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="1000" + android:textSize="18sp" + android:textStyle="bold" + android:fontFamily="@font/pixeled" + android:gravity="end" /> + +</LinearLayout> 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 0000000000000000000000000000000000000000..73e21b3aeb2a195c63d0a111ef65c9b0eb4d51dd --- /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="wrap_content" + 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="vertical"> + + <Button + android:id="@+id/botonMejorar" + android:layout_width="145dp" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:textColor="@color/pintiaButtonText" + android:text="Mejorar" + android:fontFamily="@font/pixeled" + android:layout_marginEnd="0dp" + android:textStyle="bold"/> + + <Button + android:id="@+id/botonCancelar" + android:layout_width="145dp" + 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> diff --git a/app/src/main/res/layout/modal_detalles.xml b/app/src/main/res/layout/modal_detalles.xml new file mode 100644 index 0000000000000000000000000000000000000000..078619ae73114502b5de2e24da262887b5284777 --- /dev/null +++ b/app/src/main/res/layout/modal_detalles.xml @@ -0,0 +1,125 @@ +<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/nombreObjeto" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:textAlignment="center" + android:text="Poción de Vida" + 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" /> + + + <androidx.cardview.widget.CardView + android:id="@+id/objetoSeleccionado" + android:layout_width="150dp" + android:layout_height="150dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp"> + + <ImageView + android:id="@+id/imagenObjeto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Slot de equipo 1" + android:src="@drawable/asi_exploradores_vasito" + android:scaleType="centerCrop"/> + </androidx.cardview.widget.CardView> + + <TextView + android:id="@+id/descripcionObjeto" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:text="Bebe de la savia de los ancestros, y siente cómo la vitalidad fluye desde el pasado. Recupera 5 puntos de vida" + 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/botonUsar" + android:layout_width="135dp" + android:layout_height="wrap_content" + android:backgroundTint="@color/pintiaButton" + android:textColor="@color/pintiaButtonText" + android:text="Usar" + android:fontFamily="@font/pixeled" + android:layout_marginEnd="10dp" + android:textStyle="bold"/> + + <Button + android:id="@+id/botonDestruir" + android:layout_width="145dp" + android:layout_height="wrap_content" + android:backgroundTint="#c44841" + android:textColor="@color/pintiaButtonText" + android:text="Destruir" + 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> diff --git a/app/src/main/res/layout/modal_detalles_compra.xml b/app/src/main/res/layout/modal_detalles_compra.xml new file mode 100644 index 0000000000000000000000000000000000000000..0d5037cacd762a33203c1ebe878d9e7f52b30480 --- /dev/null +++ b/app/src/main/res/layout/modal_detalles_compra.xml @@ -0,0 +1,104 @@ +<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"> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/nombreObjeto" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/pixeled" + android:shadowColor="#000000" + android:shadowDx="2" + android:shadowDy="2" + android:shadowRadius="4" + android:text="Nombre del Objeto" + android:textAlignment="center" + android:textColor="#6A0000" + android:textSize="24sp" + android:textStyle="bold" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginBottom="10dp" + android:background="#000000" /> + + <androidx.cardview.widget.CardView + android:id="@+id/objetoSeleccionado" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenObjeto" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="-1" + android:src="@drawable/asi_objeto_casco"/> + </androidx.cardview.widget.CardView> + + <TextView + android:id="@+id/textoDescripcion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Descripción del objeto" + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + <TextView + android:id="@+id/textoPrecio" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Coste: 12" + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + <Button + android:id="@+id/botonComprar" + android:layout_width="135dp" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:fontFamily="@font/pixeled" + android:text="Comprar" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" /> + + </LinearLayout> + </ScrollView> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modal_enemigo.xml b/app/src/main/res/layout/modal_enemigo.xml new file mode 100644 index 0000000000000000000000000000000000000000..e1595087ce5412a5c95c24d93aa86ba9ee474b6b --- /dev/null +++ b/app/src/main/res/layout/modal_enemigo.xml @@ -0,0 +1,92 @@ +<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/nombreEnemigo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/pixeled" + android:shadowColor="#000000" + android:shadowDx="2" + android:shadowDy="2" + android:shadowRadius="4" + android:text="Enemigo" + android:textColor="#6A0000" + android:textSize="24sp" + android:textStyle="bold" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginBottom="10dp" + android:background="#000000" /> + + + <ImageView + android:id="@+id/imagenEnemigo" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="fitCenter" + android:scaleX="-1" + android:src="@drawable/monster_metal_idle_00" /> + + <TextView + android:id="@+id/textoPreEst" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="¡Cuanta más investigación tengas más información conseguirás!" + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + <TextView + android:id="@+id/textoAtaque" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="" + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + <TextView + android:id="@+id/textoVidaMaxima" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="" + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + + + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modal_habilidades_protagonista.xml b/app/src/main/res/layout/modal_habilidades_protagonista.xml new file mode 100644 index 0000000000000000000000000000000000000000..e6f032cb0275afaee57ffec77be42001d56dca13 --- /dev/null +++ b/app/src/main/res/layout/modal_habilidades_protagonista.xml @@ -0,0 +1,62 @@ +<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/nombreHabilidad" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/pixeled" + android:shadowColor="#000000" + android:shadowDx="2" + android:shadowDy="2" + android:shadowRadius="4" + android:text="Habilidades" + android:textColor="#6A0000" + android:textSize="24sp" + android:textStyle="bold" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginBottom="10dp" + android:background="#000000" /> + + + <ImageView + android:id="@+id/imagenProtagonista" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Imagen de tu personaje" + android:scaleType="fitCenter" + android:scaleX="-1" + android:src="@drawable/protagonista_idle_animation" /> + + <GridLayout + android:id="@+id/habilidadesContainer" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:columnCount="3" + android:padding="10dp"/> + + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modal_inventario.xml b/app/src/main/res/layout/modal_inventario.xml new file mode 100644 index 0000000000000000000000000000000000000000..7734de3f28d30dbf42ec4f6fb4e290f15d778bc2 --- /dev/null +++ b/app/src/main/res/layout/modal_inventario.xml @@ -0,0 +1,513 @@ +<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="@color/pintiaBackground" + android:padding="10dp" + tools:context=".exploradoresDePintia.ExploradoresDePintia" + tools:ignore="HardcodedText, UseCompoundDrawables"> + <ScrollView + android:id="@+id/scrollView" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginBottom="10dp" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@id/bottom_navigation" + android:paddingBottom="10dp"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + <ImageView + android:id="@+id/tituloJuego" + android:layout_width="wrap_content" + android:layout_height="90dp" + android:contentDescription="Titulo del minijuego" + android:src="@drawable/texto_inventario" + android:text="Exploradores de Pintia" + android:textColor="#401201" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <LinearLayout + android:id="@+id/moneyLayout" + android:layout_width="160dp" + android:layout_height="30dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:orientation="horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/tituloJuego"> + + <ImageView + android:id="@+id/moneyImage" + android:layout_width="30dp" + android:layout_height="match_parent" + android:layout_marginStart="10dp" + android:contentDescription="Logo del juego" + android:src="@drawable/logo_pintia" + tools:ignore="HardcodedText" /> + + <TextView + android:id="@+id/moneyText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="30dp" + android:text="1200" + android:textColor="@color/pintiaTitleText" + android:textSize="20sp" + android:fontFamily="@font/pixeled" + tools:ignore="HardcodedText" /> + + </LinearLayout> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="300dp" + android:layout_height="240dp" + android:layout_marginTop="8dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:orientation="vertical" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/moneyLayout"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <ImageView + android:id="@+id/imagenProtagonista" + android:layout_width="169dp" + android:layout_height="127dp" + android:layout_marginBottom="8dp" + android:contentDescription="Imagen del yacimiento arqueológico" + android:src="@drawable/protagonista_idle_animation" /> + + <ProgressBar + android:id="@+id/barraVida" + style="@android:style/Widget.ProgressBar.Horizontal" + android:layout_width="120dp" + android:layout_height="10dp" + android:max="100" + android:progress="100" + android:progressDrawable="@drawable/style_barra_evento" /> + </LinearLayout> + + <LinearLayout + android:id="@+id/slotsInventario" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:gravity="center" + android:orientation="horizontal"> + + <androidx.cardview.widget.CardView + android:id="@+id/slot1" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:layout_marginEnd="10dp" + android:scaleType="centerCrop" + android:background="@drawable/style_texto_border" + android:contentDescription="Slot de equipo 1" + android:src="@drawable/style_slot_inventario" /> + </androidx.cardview.widget.CardView> + + + <androidx.cardview.widget.CardView + android:id="@+id/slot2" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:scaleType="centerCrop" + android:layout_marginEnd="10dp" + android:background="@drawable/style_texto_border" + android:contentDescription="Slot de equipo 1" + android:src="@drawable/style_slot_inventario" /> + </androidx.cardview.widget.CardView> + + <androidx.cardview.widget.CardView + android:id="@+id/slot3" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:scaleType="centerCrop" + android:layout_marginEnd="10dp" + android:background="@drawable/style_texto_border" + android:contentDescription="Slot de equipo 1" + android:src="@drawable/style_slot_inventario" /> + </androidx.cardview.widget.CardView> + </LinearLayout> + + + </LinearLayout> + + + <GridLayout + android:columnCount="2" + android:id="@+id/estadisticas" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:background="@drawable/style_texto_border" + android:gravity="center" + android:orientation="horizontal" + android:padding="15dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/mainArea" + tools:layout_editor_absoluteY="570dp"> + + <LinearLayout + android:id="@+id/HealthArea" + android:layout_width="110dp" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/healthImage" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de vida" + android:src="@drawable/icon_vida" /> + + <TextView + android:id="@+id/vidaText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:fontFamily="@font/pixeled" + android:text="10" + android:textColor="#000000" + android:textSize="18sp" /> + </LinearLayout> + + + + + <LinearLayout + android:id="@+id/EnergyArea" + android:layout_width="110dp" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/EnergyImage" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de vida" + android:src="@drawable/icon_energia" /> + + <TextView + android:id="@+id/EnergiaText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:fontFamily="@font/pixeled" + android:text="10" + android:textColor="#000000" + android:textSize="18sp" /> + </LinearLayout> + + + <LinearLayout + android:id="@+id/InvestigacionArea" + android:layout_width="100dp" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/investigacionImagen" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de vida" + android:src="@drawable/icon_vasija" /> + + <TextView + android:id="@+id/investigacionText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:fontFamily="@font/pixeled" + android:text="1" + android:textColor="#000000" + android:textSize="18sp" /> + </LinearLayout> + <LinearLayout + android:id="@+id/ataqueArea" + android:layout_width="100dp" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="horizontal"> + + <ImageView + android:id="@+id/ataqueImage" + android:layout_width="30dp" + android:layout_height="30dp" + android:contentDescription="Imagen de ataque" + android:src="@drawable/icon_espada" /> + + <TextView + android:id="@+id/ataqueText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="5dp" + android:fontFamily="@font/pixeled" + android:text="1" + android:textColor="#000000" + android:textSize="18sp" /> + </LinearLayout> + + </GridLayout> + + + + + <GridLayout + android:id="@+id/inventarioGrid" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:background="@drawable/style_texto_border" + android:columnCount="3" + android:padding="12dp" + android:rowCount="3" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/estadisticas"> + + + + <androidx.cardview.widget.CardView + android:id="@+id/slot01" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 1" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + </androidx.cardview.widget.CardView> + + <androidx.cardview.widget.CardView + android:id="@+id/slot02" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 2" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_vasito" /> + </androidx.cardview.widget.CardView> + + + <androidx.cardview.widget.CardView + android:id="@+id/slot03" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 3" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + </androidx.cardview.widget.CardView> + + + <androidx.cardview.widget.CardView + android:id="@+id/slot04" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 4" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + </androidx.cardview.widget.CardView> + + + + <androidx.cardview.widget.CardView + android:id="@+id/slot05" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 5" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_vasito" /> + </androidx.cardview.widget.CardView> + + + <androidx.cardview.widget.CardView + android:id="@+id/slot06" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 6" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + </androidx.cardview.widget.CardView> + + + <androidx.cardview.widget.CardView + android:id="@+id/slot07" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 7" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + </androidx.cardview.widget.CardView> + + + <androidx.cardview.widget.CardView + android:id="@+id/slot08" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 8" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_vasito" /> + </androidx.cardview.widget.CardView> + + + <androidx.cardview.widget.CardView + android:id="@+id/slot09" + android:layout_width="70dp" + android:layout_height="70dp" + android:elevation="0dp" + app:cardCornerRadius="10dp" + android:layout_margin="5dp" + android:backgroundTint="#F2CDA0"> + + <ImageView + android:layout_width="70dp" + android:layout_height="70dp" + android:contentDescription="Imagen que sobresale de Slot 9" + android:scaleType="centerCrop" + android:src="@drawable/asi_exploradores_jabonera" /> + </androidx.cardview.widget.CardView> + + </GridLayout> + </LinearLayout> + </ScrollView> + <LinearLayout + android:id="@+id/bottom_navigation" + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:orientation="horizontal" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + + <ImageButton + android:id="@+id/eventButton" + android:layout_width="0dp" + android:layout_height="50dp" + android:layout_marginEnd="40dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:contentDescription="Abre la zona de eventos" + android:padding="5dp" + android:scaleType="fitCenter" + android:src="@drawable/icon_event" /> + + <ImageButton + android:id="@+id/inventoryButton" + android:layout_width="0dp" + android:layout_height="50dp" + android:layout_weight="1" + android:background="?attr/selectableItemBackground" + android:contentDescription="Abre el inventario" + android:padding="5dp" + android:scaleType="fitCenter" + android:src="@drawable/icon_inventario" /> + + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modal_juego_tutorial.xml b/app/src/main/res/layout/modal_juego_tutorial.xml new file mode 100644 index 0000000000000000000000000000000000000000..8959aedc61132202ed1906b0b529032ebe2921fa --- /dev/null +++ b/app/src/main/res/layout/modal_juego_tutorial.xml @@ -0,0 +1,139 @@ +<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:ignore="HardcodedText, UseCompoundDrawables,ButtonStyle"> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/nombreTitulo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/pixeled" + android:shadowColor="#000000" + android:shadowDx="2" + android:shadowDy="2" + android:shadowRadius="4" + android:text="Exploradorores de pintia." + android:textAlignment="center" + android:textColor="#6A0000" + android:textSize="24sp" + android:textStyle="bold" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginBottom="10dp" + android:background="#000000" /> + + <TextView + android:id="@+id/textoDescripcion2" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Bienvenido a exploradores de pintia, eres un explorador, tu mision es conseguir reliquias, ten cuidado con los peligros que te puedas encontrar." + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + <androidx.cardview.widget.CardView + android:id="@+id/foto1" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenBien" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_juego1"/> + + + + </androidx.cardview.widget.CardView> + <TextView + android:id="@+id/textoDescripcion1" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Pulsa el icono de la mochila para abrir el inventario." + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + <androidx.cardview.widget.CardView + android:id="@+id/foto2" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenBomba" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_juego2"/> + + </androidx.cardview.widget.CardView> + + + + + <TextView + android:id="@+id/textoDescripcion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Manten pulsado la barra de vida para ver mas detalles sobre ti." + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + + <Button + android:id="@+id/cerrar" + android:layout_width="135dp" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:fontFamily="@font/pixeled" + android:text="Cerrar" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" /> + + </LinearLayout> + </ScrollView> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modal_minijuego1_tutorial.xml b/app/src/main/res/layout/modal_minijuego1_tutorial.xml new file mode 100644 index 0000000000000000000000000000000000000000..444194b77b51d1087de60d79efa4fc8418650ac2 --- /dev/null +++ b/app/src/main/res/layout/modal_minijuego1_tutorial.xml @@ -0,0 +1,115 @@ +<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="wrap_content" + android:layout_height="wrap_content" + android:background="@drawable/style_background_gradiente" + android:padding="10dp" + tools:ignore="HardcodedText, UseCompoundDrawables,ButtonStyle"> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/nombreTitulo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/pixeled" + android:shadowColor="#000000" + android:shadowDx="2" + android:shadowDy="2" + android:shadowRadius="4" + android:text="Minijuego 1" + android:textAlignment="center" + android:textColor="#6A0000" + android:textSize="24sp" + android:textStyle="bold" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginBottom="10dp" + android:background="#000000" /> + + + <androidx.cardview.widget.CardView + android:id="@+id/foto1" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenHueso" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_minijuego1_hueso"/> + + </androidx.cardview.widget.CardView><androidx.cardview.widget.CardView + android:id="@+id/foto2" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenBomba" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_minijuego1_bomba"/> + + </androidx.cardview.widget.CardView> + + + + + <TextView + android:id="@+id/textoDescripcion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Toca todos los huesitos que puedas antes de que se te acabe el tiempo, evita tocar las bombas a toda costa." + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + + <Button + android:id="@+id/cerrar" + android:layout_width="135dp" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:fontFamily="@font/pixeled" + android:text="Cerrar" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" /> + + </LinearLayout> + </ScrollView> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modal_minijuego2_tutorial.xml b/app/src/main/res/layout/modal_minijuego2_tutorial.xml new file mode 100644 index 0000000000000000000000000000000000000000..68e59becaba385e5151059c1fb8ea05d81a152ca --- /dev/null +++ b/app/src/main/res/layout/modal_minijuego2_tutorial.xml @@ -0,0 +1,115 @@ +<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="wrap_content" + android:layout_height="wrap_content" + android:background="@drawable/style_background_gradiente" + android:padding="10dp" + tools:ignore="HardcodedText, UseCompoundDrawables,ButtonStyle"> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/nombreTitulo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/pixeled" + android:shadowColor="#000000" + android:shadowDx="2" + android:shadowDy="2" + android:shadowRadius="4" + android:text="Minijuego 2" + android:textAlignment="center" + android:textColor="#6A0000" + android:textSize="24sp" + android:textStyle="bold" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginBottom="10dp" + android:background="#000000" /> + + + <androidx.cardview.widget.CardView + android:id="@+id/foto1" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenBien" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_minijuego2_bien"/> + + </androidx.cardview.widget.CardView><androidx.cardview.widget.CardView + android:id="@+id/foto2" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenBomba" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_minijuego2_mal"/> + + </androidx.cardview.widget.CardView> + + + + + <TextView + android:id="@+id/textoDescripcion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Vuela con el explorador, pulsa para subir y suelta para bajar, intenta no chocarte con los pilares." + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + + <Button + android:id="@+id/cerrar" + android:layout_width="135dp" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:fontFamily="@font/pixeled" + android:text="Cerrar" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" /> + + </LinearLayout> + </ScrollView> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modal_minijuego3_tutorial.xml b/app/src/main/res/layout/modal_minijuego3_tutorial.xml new file mode 100644 index 0000000000000000000000000000000000000000..24ebcdcd0ef7168ddf97b044151c76442de75972 --- /dev/null +++ b/app/src/main/res/layout/modal_minijuego3_tutorial.xml @@ -0,0 +1,115 @@ +<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="wrap_content" + android:layout_height="wrap_content" + android:background="@drawable/style_background_gradiente" + android:padding="10dp" + tools:ignore="HardcodedText, UseCompoundDrawables,ButtonStyle"> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fillViewport="true" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + <LinearLayout + android:id="@+id/mainArea" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:orientation="vertical"> + + <TextView + android:id="@+id/nombreTitulo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/pixeled" + android:shadowColor="#000000" + android:shadowDx="2" + android:shadowDy="2" + android:shadowRadius="4" + android:text="Minijuego 3" + android:textAlignment="center" + android:textColor="#6A0000" + android:textSize="24sp" + android:textStyle="bold" /> + + <View + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_marginBottom="10dp" + android:background="#000000" /> + + + <androidx.cardview.widget.CardView + android:id="@+id/foto1" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenBien" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_minijuego3_bien"/> + + </androidx.cardview.widget.CardView><androidx.cardview.widget.CardView + android:id="@+id/foto2" + android:layout_width="150dp" + android:layout_height="150dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenBomba" + android:layout_width="150dp" + android:layout_height="150dp" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="1" + android:src="@drawable/tutorial_minijuego3_mal"/> + + </androidx.cardview.widget.CardView> + + + + + <TextView + android:id="@+id/textoDescripcion" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="3dp" + android:fontFamily="@font/pixeled" + android:padding="8dp" + android:text="Busca las parejas de cada reliquia haciendo click en las cartas, por cada pareja que encuentres se suma mas tiempo." + android:textAlignment="center" + android:textColor="#000000" + android:textSize="20sp" /> + + + <Button + android:id="@+id/cerrar" + android:layout_width="135dp" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:backgroundTint="@color/pintiaButton" + android:fontFamily="@font/pixeled" + android:text="Cerrar" + android:textColor="@color/pintiaButtonText" + android:textStyle="bold" /> + + </LinearLayout> + </ScrollView> + +</androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/resumen_item.xml b/app/src/main/res/layout/resumen_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..0e7183e8802070e81c89aaae129d704ce9199cc0 --- /dev/null +++ b/app/src/main/res/layout/resumen_item.xml @@ -0,0 +1,55 @@ +<LinearLayout + 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="wrap_content" + android:orientation="horizontal" + android:padding="5dp" + android:gravity="center_vertical" + tools:ignore="HardcodedText" + android:background="@drawable/style_texto_border" + android:layout_marginBottom="10dp"> + + <androidx.cardview.widget.CardView + android:id="@+id/objetoSeleccionado" + android:layout_width="50dp" + android:layout_height="50dp" + android:layout_margin="5dp" + android:elevation="0dp" + app:cardCornerRadius="10dp"> + + <ImageView + android:id="@+id/imagenObjeto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:contentDescription="Slot de equipo 1" + android:scaleType="centerCrop" + android:scaleX="-1" + android:src="@drawable/asi_objeto_casco"/> + </androidx.cardview.widget.CardView> + + <TextView + android:id="@+id/textoObjeto" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="Texto del objeto" + android:textSize="18sp" + android:textColor="#6A0000" + android:fontFamily="@font/pixeled" + android:paddingStart="16dp" /> + + <TextView + android:id="@+id/textoPrecio" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text=": 20" + android:textSize="18sp" + android:textStyle="bold" + android:textColor="#6A0000" + android:layout_marginEnd="10dp" + android:fontFamily="@font/pixeled" + android:gravity="end" /> + +</LinearLayout> 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_big_win.mp3 b/app/src/main/res/raw/sound_big_win.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..54c777ffaa77149e3c6e2e8c2452f9b50780f068 Binary files /dev/null and b/app/src/main/res/raw/sound_big_win.mp3 differ diff --git a/app/src/main/res/raw/sound_bomba.wav b/app/src/main/res/raw/sound_bomba.wav new file mode 100644 index 0000000000000000000000000000000000000000..c0c322860f9acb9ca712be706244a85c127c8497 Binary files /dev/null and b/app/src/main/res/raw/sound_bomba.wav differ diff --git a/app/src/main/res/raw/sound_button.mp3 b/app/src/main/res/raw/sound_button.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..91613051e506d72bd2573072391a17d1f1a3a2cb Binary files /dev/null and b/app/src/main/res/raw/sound_button.mp3 differ diff --git a/app/src/main/res/raw/sound_cardflip.mp3 b/app/src/main/res/raw/sound_cardflip.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..eaeda2059a250c41323e958baae64bf000274640 Binary files /dev/null and b/app/src/main/res/raw/sound_cardflip.mp3 differ diff --git a/app/src/main/res/raw/sound_casino.mp3 b/app/src/main/res/raw/sound_casino.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cf827864a5fca57ba4d4314f5e7bd2925294c87b Binary files /dev/null and b/app/src/main/res/raw/sound_casino.mp3 differ diff --git a/app/src/main/res/raw/sound_ciudad.mp3 b/app/src/main/res/raw/sound_ciudad.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8a5ec71e0ce71e24e7a68da8228f858dabfde9aa Binary files /dev/null and b/app/src/main/res/raw/sound_ciudad.mp3 differ diff --git a/app/src/main/res/raw/sound_cofre.mp3 b/app/src/main/res/raw/sound_cofre.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..87ed1808e5ba5330542279af1a860a1dddac8fed Binary files /dev/null and b/app/src/main/res/raw/sound_cofre.mp3 differ diff --git a/app/src/main/res/raw/sound_cuerno.mp3 b/app/src/main/res/raw/sound_cuerno.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..70a32cf7e7ab5bfe5b263746dfa8d6e1a0094520 Binary files /dev/null and b/app/src/main/res/raw/sound_cuerno.mp3 differ diff --git a/app/src/main/res/raw/sound_cueva.mp3 b/app/src/main/res/raw/sound_cueva.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ee8c0a839e62b9c828fff59fe7717bfb6f27ea79 Binary files /dev/null and b/app/src/main/res/raw/sound_cueva.mp3 differ diff --git a/app/src/main/res/raw/sound_dano.mp3 b/app/src/main/res/raw/sound_dano.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a97500921c38279356e01ea4472b95efcb875031 Binary files /dev/null and b/app/src/main/res/raw/sound_dano.mp3 differ diff --git a/app/src/main/res/raw/sound_dineros.wav b/app/src/main/res/raw/sound_dineros.wav new file mode 100644 index 0000000000000000000000000000000000000000..5dfd75e503c3f7392651e39eb79631a81216ec14 Binary files /dev/null and b/app/src/main/res/raw/sound_dineros.wav differ diff --git a/app/src/main/res/raw/sound_espada.mp3 b/app/src/main/res/raw/sound_espada.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..388ab6547faab8298360aff52243f39dd3e251bc Binary files /dev/null and b/app/src/main/res/raw/sound_espada.mp3 differ diff --git a/app/src/main/res/raw/sound_exploradores.mp3 b/app/src/main/res/raw/sound_exploradores.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c6678d86a9af9bb35e30768798b5157a9484f77b Binary files /dev/null and b/app/src/main/res/raw/sound_exploradores.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 diff --git a/app/src/main/res/raw/sound_golpe1.mp3 b/app/src/main/res/raw/sound_golpe1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..82101261c7910c8b062b4536344972c839b7c781 Binary files /dev/null and b/app/src/main/res/raw/sound_golpe1.mp3 differ diff --git a/app/src/main/res/raw/sound_habilidad.mp3 b/app/src/main/res/raw/sound_habilidad.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ea6c60cbdfa9d0c766c8b2e62927fa8caad51cca Binary files /dev/null and b/app/src/main/res/raw/sound_habilidad.mp3 differ diff --git a/app/src/main/res/raw/sound_healing.wav b/app/src/main/res/raw/sound_healing.wav new file mode 100644 index 0000000000000000000000000000000000000000..b6491ed5a86dfd9c01bdb5dc8551bc1d62176bd8 Binary files /dev/null and b/app/src/main/res/raw/sound_healing.wav differ diff --git a/app/src/main/res/raw/sound_huesito.mp3 b/app/src/main/res/raw/sound_huesito.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..893deb23063f96ecdd118ebe05f7bb44e7b56a78 Binary files /dev/null and b/app/src/main/res/raw/sound_huesito.mp3 differ diff --git a/app/src/main/res/raw/sound_laser.wav b/app/src/main/res/raw/sound_laser.wav new file mode 100644 index 0000000000000000000000000000000000000000..ab984567593fb8f21169aeb4b3b76a030dc3a55f Binary files /dev/null and b/app/src/main/res/raw/sound_laser.wav differ diff --git a/app/src/main/res/raw/sound_leader.mp3 b/app/src/main/res/raw/sound_leader.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..af7c83e083dcc9ece188a8f0854caf4b87996aae Binary files /dev/null and b/app/src/main/res/raw/sound_leader.mp3 differ diff --git a/app/src/main/res/raw/sound_login.mp3 b/app/src/main/res/raw/sound_login.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..92739ca792acb15612bc4b0e62e675f386ed7f85 Binary files /dev/null and b/app/src/main/res/raw/sound_login.mp3 differ diff --git a/app/src/main/res/raw/sound_match.mp3 b/app/src/main/res/raw/sound_match.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b1e2ee93e820f3841e4248c38d294313b5c7a938 Binary files /dev/null and b/app/src/main/res/raw/sound_match.mp3 differ diff --git a/app/src/main/res/raw/sound_memory.mp3 b/app/src/main/res/raw/sound_memory.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..29cfcc171788afb72ae41db914d7ac9c168d9e5e Binary files /dev/null and b/app/src/main/res/raw/sound_memory.mp3 differ diff --git a/app/src/main/res/raw/sound_miss.mp3 b/app/src/main/res/raw/sound_miss.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0946d2280d56c2abe142408b9d511ad957bff326 Binary files /dev/null and b/app/src/main/res/raw/sound_miss.mp3 differ diff --git a/app/src/main/res/raw/sound_nubes.mp3 b/app/src/main/res/raw/sound_nubes.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d4271e28045298d51586afac7e5b784ad3145a8d Binary files /dev/null and b/app/src/main/res/raw/sound_nubes.mp3 differ diff --git a/app/src/main/res/raw/sound_over.mp3 b/app/src/main/res/raw/sound_over.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b03955fca91d4eb7813a310165be7b5ed34d9104 Binary files /dev/null and b/app/src/main/res/raw/sound_over.mp3 differ diff --git a/app/src/main/res/raw/sound_piano_over.wav b/app/src/main/res/raw/sound_piano_over.wav new file mode 100644 index 0000000000000000000000000000000000000000..8d54349aa7fb79e0be51932a9e5fd1aac2ce1f7a Binary files /dev/null and b/app/src/main/res/raw/sound_piano_over.wav differ diff --git a/app/src/main/res/raw/sound_qte.mp3 b/app/src/main/res/raw/sound_qte.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ee265a372e49971e5af0a6e1523dc5983f4b6375 Binary files /dev/null and b/app/src/main/res/raw/sound_qte.mp3 differ diff --git a/app/src/main/res/raw/sound_reparar.mp3 b/app/src/main/res/raw/sound_reparar.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..abbddd5e1f17bd5245b3b2a70f9df6321c533a36 Binary files /dev/null and b/app/src/main/res/raw/sound_reparar.mp3 differ diff --git a/app/src/main/res/raw/sound_rocks.wav b/app/src/main/res/raw/sound_rocks.wav new file mode 100644 index 0000000000000000000000000000000000000000..27a4919b9b90abfb46d62c03a224fb3fc5176ffa Binary files /dev/null and b/app/src/main/res/raw/sound_rocks.wav differ diff --git a/app/src/main/res/raw/sound_romper.mp3 b/app/src/main/res/raw/sound_romper.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..16875e61d69e43bcdf11d7b5279c8d9e2baf8bb4 Binary files /dev/null and b/app/src/main/res/raw/sound_romper.mp3 differ diff --git a/app/src/main/res/raw/sound_ruleta.mp3 b/app/src/main/res/raw/sound_ruleta.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1f6ffc432fd8a8074f8ec6475c3a574d599883d8 Binary files /dev/null and b/app/src/main/res/raw/sound_ruleta.mp3 differ diff --git a/app/src/main/res/raw/sound_veneno2.mp3 b/app/src/main/res/raw/sound_veneno2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bfd245a2a7252aaafad5c15f9f4a382e506db249 Binary files /dev/null and b/app/src/main/res/raw/sound_veneno2.mp3 differ diff --git a/app/src/main/res/raw/sound_vida.mp3 b/app/src/main/res/raw/sound_vida.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..235c2435c6497d4ba33d85df36b9976fc49e8464 Binary files /dev/null and b/app/src/main/res/raw/sound_vida.mp3 differ diff --git a/app/src/main/res/raw/sound_worso.mp3 b/app/src/main/res/raw/sound_worso.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..004bdc26f43fadd521c734f6f62b463f629430b7 Binary files /dev/null and b/app/src/main/res/raw/sound_worso.mp3 differ diff --git a/build.gradle.kts b/build.gradle.kts index 922f551105e1b8c176391b38c9436d45f172b546..b8e06aa71bcb43e8649b99ffeae9eb91806ae00b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,4 +2,5 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false + alias(libs.plugins.google.services) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4b29045fcc3b37a1ff3e19d9a9a6bcb8199dd932..b1698e323cddbfffb663447af3b960d55bf9410a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,17 +1,20 @@ [versions] agp = "8.7.2" +firebaseBom = "33.6.0" kotlin = "1.9.24" -coreKtx = "1.10.1" +coreKtx = "1.10.0" junit = "4.13.2" -junitVersion = "1.1.5" -espressoCore = "3.5.1" -appcompat = "1.6.1" -material = "1.10.0" -activity = "1.8.0" -constraintlayout = "2.1.4" +junitVersion = "1.2.1" +espressoCore = "3.6.1" +appcompat = "1.7.0" +material = "1.12.0" +activity = "1.9.3" +constraintlayout = "2.2.0" +firestore = "25.1.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBom" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } @@ -19,8 +22,10 @@ androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version material = { group = "com.google.android.material", name = "material", version.ref = "material" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } - +firebase-auth = { module = "com.google.firebase:firebase-auth-ktx" } +firebase-firestore = { module = "com.google.firebase:firebase-firestore-ktx", version.ref = "firestore" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +google-services = { id = "com.google.gms.google-services", version = "4.4.2" }