diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardBackgroundDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardBackgroundDao.kt new file mode 100644 index 0000000..915cf88 --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardBackgroundDao.kt @@ -0,0 +1,24 @@ +package com.github.nacabaro.vbhelper.daos + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query +import com.github.nacabaro.vbhelper.domain.card.CardBackground + +@Dao +interface CardBackgroundDao { + @Insert + suspend fun insertCardBackground(vararg cardBackground: CardBackground) + + @Query(""" + SELECT * FROM CardBackground + WHERE cardId = :cardId + """) + suspend fun getCardBackground(cardId: Long): CardBackground + + @Query(""" + SELECT * FROM CardBackground + """) + suspend fun getBackgrounds(): List + +} \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardDao.kt index 0401f9e..caea56e 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardDao.kt @@ -5,6 +5,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import com.github.nacabaro.vbhelper.domain.card.Card +import com.github.nacabaro.vbhelper.domain.card.CardSprites @Dao interface CardDao { @@ -33,4 +34,11 @@ interface CardDao { @Query("DELETE FROM Card WHERE id = :id") suspend fun deleteCard(id: Long) + + @Insert + suspend fun insertSprites(vararg sprites: CardSprites) + + @Query("SELECT * FROM CardSprites") + suspend fun getSprites(): List + } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt index 56066c5..0dbc1f2 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt @@ -35,7 +35,7 @@ interface CharacterDao { @Query( """ - INSERT INTO PossibleTransformations (charaId, requiredVitals, requiredTrophies, requiredBattles, requiredWinRate, changeTimerHours, requiredAdventureLevelCompleted, toCharaId) + INSERT INTO CardTransformations (charaId, requiredVitals, requiredTrophies, requiredBattles, requiredWinRate, changeTimerHours, requiredAdventureLevelCompleted, toCharaId) SELECT (SELECT id FROM CardCharacter WHERE charaIndex = :fromChraraIndex AND cardId = :cardId), :requiredVitals, @@ -75,7 +75,7 @@ interface CharacterDao { pt.changeTimerHours as changeTimerHours, pt.requiredAdventureLevelCompleted as requiredAdventureLevelCompleted FROM - PossibleTransformations pt + CardTransformations pt JOIN CardCharacter c on pt.toCharaId = c.id JOIN Sprite s ON s.id = c.spriteId LEFT JOIN Dex d ON d.id = pt.toCharaId diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt b/app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt index 7aa784c..c951a7e 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt @@ -4,6 +4,7 @@ import androidx.room.Database import androidx.room.RoomDatabase import com.github.nacabaro.vbhelper.daos.AdventureDao import com.github.nacabaro.vbhelper.daos.CardAdventureDao +import com.github.nacabaro.vbhelper.daos.CardBackgroundDao import com.github.nacabaro.vbhelper.daos.CharacterDao import com.github.nacabaro.vbhelper.daos.DexDao import com.github.nacabaro.vbhelper.daos.CardDao @@ -13,13 +14,14 @@ import com.github.nacabaro.vbhelper.daos.ItemDao import com.github.nacabaro.vbhelper.daos.SpecialMissionDao import com.github.nacabaro.vbhelper.daos.SpriteDao import com.github.nacabaro.vbhelper.daos.UserCharacterDao -import com.github.nacabaro.vbhelper.domain.card.Background +import com.github.nacabaro.vbhelper.domain.card.CardBackground import com.github.nacabaro.vbhelper.domain.card.CardCharacter import com.github.nacabaro.vbhelper.domain.card.Card import com.github.nacabaro.vbhelper.domain.card.CardAdventure import com.github.nacabaro.vbhelper.domain.card.CardFusions import com.github.nacabaro.vbhelper.domain.card.CardProgress -import com.github.nacabaro.vbhelper.domain.card.PossibleTransformations +import com.github.nacabaro.vbhelper.domain.card.CardSprites +import com.github.nacabaro.vbhelper.domain.card.CardTransformations import com.github.nacabaro.vbhelper.domain.characters.Sprite import com.github.nacabaro.vbhelper.domain.characters.Adventure import com.github.nacabaro.vbhelper.domain.characters.Dex @@ -39,6 +41,7 @@ import com.github.nacabaro.vbhelper.domain.items.Items CardCharacter::class, CardAdventure::class, CardFusions::class, + CardSprites::class, Sprite::class, UserCharacter::class, BECharacterData::class, @@ -49,8 +52,8 @@ import com.github.nacabaro.vbhelper.domain.items.Items Dex::class, Items::class, Adventure::class, - Background::class, - PossibleTransformations::class + CardBackground::class, + CardTransformations::class ] ) abstract class AppDatabase : RoomDatabase() { @@ -65,4 +68,5 @@ abstract class AppDatabase : RoomDatabase() { abstract fun specialMissionDao(): SpecialMissionDao abstract fun cardAdventureDao(): CardAdventureDao abstract fun cardFusionsDao(): CardFusionsDao + abstract fun cardBackgroundDao(): CardBackgroundDao } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/Evolutions.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/Evolutions.kt deleted file mode 100644 index ba4583e..0000000 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/Evolutions.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.github.nacabaro.vbhelper.domain - -import androidx.room.Entity -import androidx.room.ForeignKey -import androidx.room.PrimaryKey - -@Entity( - foreignKeys = [ - ForeignKey( - entity = Character::class, - parentColumns = ["id"], - childColumns = ["monId"], - onDelete = ForeignKey.CASCADE - ), - ForeignKey( - entity = Character::class, - parentColumns = ["id"], - childColumns = ["nextMon"], - onDelete = ForeignKey.CASCADE - ) - ] -) -data class Evolutions( - @PrimaryKey val monId: Int, - @PrimaryKey val nextMon: Int, - val trophies: Int, - val vitals: Int, - val totalBattles: Int, - val winRate: Int // Does not need to be a floating point -) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/Background.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardBackground.kt similarity index 85% rename from app/src/main/java/com/github/nacabaro/vbhelper/domain/card/Background.kt rename to app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardBackground.kt index 23766d4..5b07dc6 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/Background.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardBackground.kt @@ -14,8 +14,8 @@ import androidx.room.PrimaryKey ) ] ) -data class Background ( - @PrimaryKey(autoGenerate = true) val id: Long, +data class CardBackground ( + @PrimaryKey(autoGenerate = true) val id: Long = 0, val cardId: Long, val background: ByteArray, val backgroundWidth: Int, diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardSprites.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardSprites.kt new file mode 100644 index 0000000..011ca22 --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardSprites.kt @@ -0,0 +1,12 @@ +package com.github.nacabaro.vbhelper.domain.card + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity +data class CardSprites( + @PrimaryKey(autoGenerate = true) val id: Long = 0, + val sprite: ByteArray, + val width: Int, + val height: Int +) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/PossibleTransformations.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardTransformations.kt similarity index 95% rename from app/src/main/java/com/github/nacabaro/vbhelper/domain/card/PossibleTransformations.kt rename to app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardTransformations.kt index 2dc2e8b..98d23b1 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/PossibleTransformations.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardTransformations.kt @@ -20,7 +20,7 @@ import androidx.room.PrimaryKey ) ] ) -data class PossibleTransformations ( +data class CardTransformations ( @PrimaryKey(autoGenerate = true) val id: Long = 0, var charaId: Long, val requiredVitals: Int, diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt index 1b8f41a..7a835df 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt @@ -8,6 +8,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.NavController import com.github.nacabaro.vbhelper.components.TopBanner +import com.github.nacabaro.vbhelper.navigation.NavigationItems @Composable fun CreditsScreen( @@ -19,6 +20,9 @@ fun CreditsScreen( text = "Credits", onBackClick = { navController.popBackStack() + }, + onGearClick = { + navController.navigate(NavigationItems.Viewer.route) } ) }, diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt index cadae13..a4fbe00 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt @@ -17,8 +17,10 @@ import com.github.nacabaro.vbhelper.database.AppDatabase import com.github.nacabaro.vbhelper.di.VBHelper import com.github.nacabaro.vbhelper.domain.characters.Sprite import com.github.nacabaro.vbhelper.domain.card.Card +import com.github.nacabaro.vbhelper.domain.card.CardBackground import com.github.nacabaro.vbhelper.domain.card.CardProgress import com.github.nacabaro.vbhelper.domain.card.CardCharacter +import com.github.nacabaro.vbhelper.domain.card.CardSprites import com.github.nacabaro.vbhelper.source.ApkSecretsImporter import com.github.nacabaro.vbhelper.source.SecretsImporter import com.github.nacabaro.vbhelper.source.SecretsRepository @@ -215,7 +217,7 @@ class SettingsScreenControllerImpl( spriteHappy = card.spriteData.sprites[spriteCounter + 4].pixelData, spriteSleep = card.spriteData.sprites[spriteCounter + 5].pixelData, spriteAttack = card.spriteData.sprites[spriteCounter + 2].pixelData, - spriteDodge = card.spriteData.sprites[spriteCounter + 3].pixelData + spriteDodge = card.spriteData.sprites[spriteCounter + 3].pixelData, ) } else { domainSprite = Sprite( @@ -324,10 +326,10 @@ class SettingsScreenControllerImpl( .insertNewFusion( cardId = cardId, fromCharaId = it.characterIndex, - toCharaIdAttr1 = it.attribute1Fusion, - toCharaIdAttr2 = it.attribute2Fusion, - toCharaIdAttr3 = it.attribute3Fusion, - toCharaIdAttr4 = it.attribute4Fusion + toCharaIdVirus = it.attribute1Fusion, + toCharaIdData = it.attribute2Fusion, + toCharaIdVaccine = it.attribute3Fusion, + toCharaIdFree = it.attribute4Fusion ) } } @@ -347,6 +349,40 @@ class SettingsScreenControllerImpl( .updateDimProgress(cardProgress) } + private suspend fun importBackgrounds( + cardId: Long, + card: com.github.cfogrady.vb.dim.card.Card<*, *, *, *, *, *> + ) { + val backgrounds = mutableListOf() + + if (card is DimCard) { + backgrounds.add( + CardBackground( + cardId = cardId, + background = card.spriteData.sprites[1].pixelData, + backgroundWidth = card.spriteData.sprites[1].width, + backgroundHeight = card.spriteData.sprites[1].height + ) + ) + } else if (card is BemCard) { + val possibleBackgroundsIds = listOf(1, 10, 30, 31, 32, 33) + for (id in possibleBackgroundsIds) { + backgrounds.add( + CardBackground( + cardId = cardId, + background = card.spriteData.sprites[id].pixelData, + backgroundWidth = card.spriteData.sprites[id].width, + backgroundHeight = card.spriteData.sprites[id].height + ) + ) + } + } + + database + .cardBackgroundDao() + .insertCardBackground(*backgrounds.toTypedArray()) + } + private fun importCard(uri: Uri) { context.lifecycleScope.launch(Dispatchers.IO) { val contentResolver = context.contentResolver @@ -379,6 +415,20 @@ class SettingsScreenControllerImpl( importAdventureMissions(cardId, card) importCardFusions(cardId, card) + + importBackgrounds(cardId, card) + + val cardSprites: List = card.spriteData.sprites.map { + CardSprites( + sprite = it.pixelData, + width = it.width, + height = it.height + ) + } + + database + .cardDao() + .insertSprites(*cardSprites.toTypedArray()) } inputStream?.close() diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerController.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerController.kt index f53d800..694ad90 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerController.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerController.kt @@ -1,9 +1,9 @@ package com.github.nacabaro.vbhelper.screens.spriteViewer import android.graphics.Bitmap -import com.github.nacabaro.vbhelper.domain.characters.Sprite +import com.github.nacabaro.vbhelper.domain.card.CardBackground interface SpriteViewerController { - suspend fun getAllSprites(): List - fun convertToBitmap(sprites: List): List + suspend fun getAllSprites(): List + fun convertToBitmap(sprites: List): List } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerControllerImpl.kt index 1413f6b..5a64cd4 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerControllerImpl.kt @@ -1,65 +1,29 @@ package com.github.nacabaro.vbhelper.screens.spriteViewer import android.graphics.Bitmap -import android.util.Log import androidx.activity.ComponentActivity -import androidx.compose.runtime.remember -import androidx.compose.ui.graphics.asImageBitmap import com.github.nacabaro.vbhelper.di.VBHelper -import com.github.nacabaro.vbhelper.domain.characters.Sprite import java.nio.ByteBuffer +import androidx.core.graphics.createBitmap +import com.github.nacabaro.vbhelper.domain.card.CardBackground class SpriteViewerControllerImpl( private val context: ComponentActivity ) : SpriteViewerController { - override suspend fun getAllSprites(): List { + override suspend fun getAllSprites(): List { val applicationContext = context.applicationContext as VBHelper val db = applicationContext.container.db - val sprites = db.spriteDao().getAllSprites() + val sprites = db.cardBackgroundDao().getBackgrounds() return sprites } // I don't like this, chief - override fun convertToBitmap(sprites: List): List { + override fun convertToBitmap(sprites: List): List { val bitmapList = mutableListOf() for (sprite in sprites) { - Log.d("SpriteViewer", "sprite: $sprite") - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteIdle1)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteIdle2)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteWalk1)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteWalk2)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteRun1)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteRun2)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteTrain1)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteTrain2)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteHappy)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteSleep)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteAttack)) - }) - bitmapList.add(Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply { - copyPixelsFromBuffer(ByteBuffer.wrap(sprite.spriteDodge)) + bitmapList.add(createBitmap(sprite.backgroundWidth, sprite.backgroundHeight, Bitmap.Config.RGB_565).apply { + copyPixelsFromBuffer(ByteBuffer.wrap(sprite.background)) }) }