From 7160eb792a6e01e77c2644c298ef3e996b188224 Mon Sep 17 00:00:00 2001 From: Nacho Date: Wed, 10 Sep 2025 02:09:15 +0200 Subject: [PATCH] Adventure Missions progress - Viewing the adventure missions completed in a card is now possible. --- app/build.gradle.kts | 2 +- .../nacabaro/vbhelper/daos/AdventureDao.kt | 2 +- .../vbhelper/daos/CardAdventureDao.kt | 58 +++++++++ .../github/nacabaro/vbhelper/daos/CardDao.kt | 2 +- .../nacabaro/vbhelper/daos/CardFusionsDao.kt | 32 +++++ .../nacabaro/vbhelper/daos/CardProgressDao.kt | 2 +- .../nacabaro/vbhelper/daos/CharacterDao.kt | 16 +-- .../github/nacabaro/vbhelper/daos/DexDao.kt | 8 +- .../vbhelper/daos/UserCharacterDao.kt | 20 +-- .../nacabaro/vbhelper/database/AppDatabase.kt | 12 +- .../vbhelper/domain/card/CardAdventure.kt | 32 +++++ .../{CharacterData.kt => CardCharacter.kt} | 2 +- .../vbhelper/domain/card/CardFusions.kt | 48 +++++++ .../domain/card/PossibleTransformations.kt | 4 +- .../vbhelper/domain/characters/Dex.kt | 4 +- .../device_data/TransformationHistory.kt | 4 +- .../domain/device_data/UserCharacter.kt | 4 +- .../github/nacabaro/vbhelper/dtos/CardDtos.kt | 14 ++ .../nacabaro/vbhelper/dtos/CharacterDtos.kt | 2 +- .../vbhelper/navigation/AppNavigation.kt | 14 +- .../vbhelper/navigation/NavigationItems.kt | 1 + .../screens/cardScreen/CardAdventureEntry.kt | 122 ++++++++++++++++++ .../screens/cardScreen/CardAdventureScreen.kt | 63 +++++++++ .../cardScreen/CardScreenController.kt | 4 + .../cardScreen/CardScreenControllerImpl.kt | 14 +- .../screens/cardScreen/CardViewScreen.kt | 18 ++- .../SettingsScreenControllerImpl.kt | 70 +++++++++- 27 files changed, 528 insertions(+), 46 deletions(-) create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/daos/CardAdventureDao.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/daos/CardFusionsDao.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardAdventure.kt rename app/src/main/java/com/github/nacabaro/vbhelper/domain/card/{CharacterData.kt => CardCharacter.kt} (97%) create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardFusions.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureEntry.kt create mode 100644 app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 40b711f3564f6a2be6673089935c2ef2a0f065a0..a5fea01470a36a5fbd7230085ce7d4d0e27c6fb1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,7 +15,7 @@ android { minSdk = 28 targetSdk = 35 versionCode = 1 - versionName = "Alpha 0.6" + versionName = "Alpha 0.6.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt index 5197e7d04879b689339bac36c52c399b1f41a492..a1db8f2d73198cea62a19413c808fec3f53c6855 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt @@ -31,7 +31,7 @@ interface AdventureDao { a.finishesAdventure AS finishesAdventure, a.originalDuration AS originalTimeInMinutes FROM UserCharacter uc - JOIN CharacterData c ON uc.charId = c.id + JOIN CardCharacter c ON uc.charId = c.id JOIN Sprite s ON s.id = c.spriteId JOIN Card d ON c.cardId = d.id JOIN Adventure a ON uc.id = a.characterId diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardAdventureDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardAdventureDao.kt new file mode 100644 index 0000000000000000000000000000000000000000..03db5aceed77a84bc4514a04fc629495701272d6 --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardAdventureDao.kt @@ -0,0 +1,58 @@ +package com.github.nacabaro.vbhelper.daos + +import androidx.room.Dao +import androidx.room.Query +import com.github.nacabaro.vbhelper.dtos.CardDtos + +@Dao +interface CardAdventureDao { + @Query(""" + INSERT INTO + CardAdventure (cardId, characterId, steps, bossAp, bossHp, bossDp, bossBp) + SELECT + :cardId, + cc.id, + :steps, + :bossAp, + :bossHp, + :bossDp, + :bossBp + FROM + CardCharacter cc + WHERE + cc.charaIndex = :characterId AND + cc.cardId = :cardId + """) + suspend fun insertNewAdventure( + cardId: Long, + characterId: Int, + steps: Int, + bossAp: Int, + bossHp: Int, + bossDp: Int, + bossBp: Int? + ) + + @Query(""" + SELECT + cc.nameSprite as characterName, + cc.nameWidth as characterNameWidth, + cc.nameHeight as characterNameHeight, + s.spriteIdle1 as characterIdleSprite, + s.width as characterIdleSpriteWidth, + s.height as characterIdleSpriteHeight, + ca.bossAp as characterAp, + ca.bossBp as characterBp, + ca.bossDp as characterDp, + ca.bossHp as characterHp, + ca.steps as steps + FROM CardCharacter cc + JOIN Sprite s ON cc.spriteId = s.id + JOIN CardAdventure ca ON cc.id = ca.characterId + WHERE + cc.cardId = :cardId + """) + suspend fun getAdventureForCard( + cardId: Long + ): 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 a55ad14c3db6ddfa80ddf8829af6455811899d7a..0401f9e299150bc7869fc52a413b89d6d6280dcf 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 @@ -21,7 +21,7 @@ interface CardDao { """ SELECT ca.* FROM Card ca - JOIN CharacterData ch ON ca.id = ch.cardId + JOIN CardCharacter ch ON ca.id = ch.cardId JOIN UserCharacter uc ON ch.id = uc.charId WHERE uc.id = :id """ diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardFusionsDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardFusionsDao.kt new file mode 100644 index 0000000000000000000000000000000000000000..e9f7e34a794cf8cafeeaebf589b4e00759afef83 --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardFusionsDao.kt @@ -0,0 +1,32 @@ +package com.github.nacabaro.vbhelper.daos + +import androidx.room.Dao +import androidx.room.Query + +@Dao +interface CardFusionsDao { + @Query(""" + INSERT INTO + CardFusions ( + fromCharaId, + attribute1Fusion, + attribute2Fusion, + attribute3Fusion, + attribute4Fusion + ) + SELECT + (SELECT id FROM CardCharacter WHERE cardId = :cardId AND charaIndex = :fromCharaId), + (SELECT id FROM CardCharacter WHERE cardId = :cardId AND charaIndex = :toCharaIdAttr1), + (SELECT id FROM CardCharacter WHERE cardId = :cardId AND charaIndex = :toCharaIdAttr2), + (SELECT id FROM CardCharacter WHERE cardId = :cardId AND charaIndex = :toCharaIdAttr3), + (SELECT id FROM CardCharacter WHERE cardId = :cardId AND charaIndex = :toCharaIdAttr4) + """) + suspend fun insertNewFusion( + cardId: Long, + fromCharaId: Int, + toCharaIdAttr1: Int, + toCharaIdAttr2: Int, + toCharaIdAttr3: Int, + toCharaIdAttr4: Int + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt index 788dc770479038b331a1ce24fdda85cb9bfd61c4..b5c1d808596aa9a9a374d768f920e0e33d263d5d 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/CardProgressDao.kt @@ -13,5 +13,5 @@ interface CardProgressDao { @Query( "SELECT currentStage FROM CardProgress WHERE cardId = :cardId" ) - fun getCardProgress(cardId: Int): Int + fun getCardProgress(cardId: Long): Int } \ 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 a7683f1bfeaa1b18c644bf7f2d8d8be719605344..56066c531ac582a786a2070ce9967055794e12cd 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 @@ -3,17 +3,17 @@ 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.CharacterData +import com.github.nacabaro.vbhelper.domain.card.CardCharacter import com.github.nacabaro.vbhelper.domain.characters.Sprite import com.github.nacabaro.vbhelper.dtos.CharacterDtos @Dao interface CharacterDao { @Insert - suspend fun insertCharacter(vararg characterData: CharacterData) + suspend fun insertCharacter(vararg characterData: CardCharacter) - @Query("SELECT * FROM CharacterData WHERE charaIndex = :monIndex AND cardId = :dimId LIMIT 1") - fun getCharacterByMonIndex(monIndex: Int, dimId: Long): CharacterData + @Query("SELECT * FROM CardCharacter WHERE charaIndex = :monIndex AND cardId = :dimId LIMIT 1") + fun getCharacterByMonIndex(monIndex: Int, dimId: Long): CardCharacter @Insert suspend fun insertSprite(vararg sprite: Sprite) @@ -25,7 +25,7 @@ interface CharacterDao { c.charaIndex as charId, c.stage as stage, c.attribute as attribute - FROM CharacterData c + FROM CardCharacter c JOIN UserCharacter uc ON c.id = uc.charId JOIN Card d ON c.cardId = d.id WHERE c.id = :charId @@ -37,14 +37,14 @@ interface CharacterDao { """ INSERT INTO PossibleTransformations (charaId, requiredVitals, requiredTrophies, requiredBattles, requiredWinRate, changeTimerHours, requiredAdventureLevelCompleted, toCharaId) SELECT - (SELECT id FROM CharacterData WHERE charaIndex = :fromChraraIndex AND cardId = :cardId), + (SELECT id FROM CardCharacter WHERE charaIndex = :fromChraraIndex AND cardId = :cardId), :requiredVitals, :requiredTrophies, :requiredBattles, :requiredWinRate, :changeTimerHours, :requiredAdventureLevelCompleted, - (SELECT id FROM CharacterData WHERE charaIndex = :toChraraIndex AND cardId = :cardId) + (SELECT id FROM CardCharacter WHERE charaIndex = :toChraraIndex AND cardId = :cardId) """ ) suspend fun insertPossibleTransformation( @@ -76,7 +76,7 @@ interface CharacterDao { pt.requiredAdventureLevelCompleted as requiredAdventureLevelCompleted FROM PossibleTransformations pt - JOIN CharacterData c on pt.toCharaId = c.id + 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 WHERE diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt index ecba234dac7c8030b2e55361734be78ab252817a..f31b365c6bb0b94fccf50df690cacf9f10d8a48e 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt @@ -11,7 +11,7 @@ interface DexDao { """ INSERT OR IGNORE INTO Dex(id, discoveredOn) VALUES ( - (SELECT id FROM CharacterData WHERE charaIndex = :charIndex AND cardId = :cardId), + (SELECT id FROM CardCharacter WHERE charaIndex = :charIndex AND cardId = :cardId), :discoveredOn ) """ @@ -34,7 +34,7 @@ interface DexDao { c.baseAp as baseAp, c.stage as stage, c.attribute as attribute - FROM CharacterData c + FROM CardCharacter c JOIN Sprite s ON c.spriteId = s.id LEFT JOIN dex d ON c.id = d.id WHERE c.cardId = :cardId @@ -50,8 +50,8 @@ interface DexDao { c.logo as cardLogo, c.logoWidth as logoWidth, c.logoHeight as logoHeight, - (SELECT COUNT(*) FROM CharacterData cc WHERE cc.cardId = c.id) AS totalCharacters, - (SELECT COUNT(*) FROM Dex d JOIN CharacterData cc ON d.id = cc.id WHERE cc.cardId = c.id AND d.discoveredOn IS NOT NULL) AS obtainedCharacters + (SELECT COUNT(*) FROM CardCharacter cc WHERE cc.cardId = c.id) AS totalCharacters, + (SELECT COUNT(*) FROM Dex d JOIN CardCharacter cc ON d.id = cc.id WHERE cc.cardId = c.id AND d.discoveredOn IS NOT NULL) AS obtainedCharacters FROM Card c """ ) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt b/app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt index 00cc1df916e48075382b35913fb9d37384121aca..42fb503b5a242de08ff5ef7d38867df501821bca 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt @@ -5,7 +5,7 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.Upsert -import com.github.nacabaro.vbhelper.domain.card.CharacterData +import com.github.nacabaro.vbhelper.domain.card.CardCharacter import com.github.nacabaro.vbhelper.domain.device_data.UserCharacter import com.github.nacabaro.vbhelper.domain.device_data.BECharacterData import com.github.nacabaro.vbhelper.domain.device_data.SpecialMissions @@ -47,7 +47,7 @@ interface UserCharacterDao { c.charaIndex AS monIndex, t.transformationDate AS transformationDate FROM TransformationHistory t - JOIN CharacterData c ON c.id = t.stageId + JOIN CardCharacter c ON c.id = t.stageId JOIN Sprite s ON s.id = c.spriteId WHERE monId = :monId """ @@ -70,7 +70,7 @@ interface UserCharacterDao { d.isBEm as isBemCard, a.characterId = uc.id as isInAdventure FROM UserCharacter uc - JOIN CharacterData c ON uc.charId = c.id + JOIN CardCharacter c ON uc.charId = c.id JOIN Card d ON d.id = c.cardId JOIN Sprite s ON s.id = c.spriteId LEFT JOIN Adventure a ON a.characterId = uc.id @@ -94,7 +94,7 @@ interface UserCharacterDao { d.isBEm as isBemCard, a.characterId = uc.id as isInAdventure FROM UserCharacter uc - JOIN CharacterData c ON uc.charId = c.id + JOIN CardCharacter c ON uc.charId = c.id JOIN Card d ON c.cardId = d.id JOIN Sprite s ON s.id = c.spriteId LEFT JOIN Adventure a ON a.characterId = uc.id @@ -131,7 +131,7 @@ interface UserCharacterDao { d.isBEm as isBemCard, a.characterId as isInAdventure FROM UserCharacter uc - JOIN CharacterData c ON uc.charId = c.id + JOIN CardCharacter c ON uc.charId = c.id JOIN Card d ON c.cardId = d.id JOIN Sprite s ON s.id = c.spriteId LEFT JOIN Adventure a ON a.characterId = uc.id @@ -153,13 +153,13 @@ interface UserCharacterDao { @Query( """ SELECT c.* - FROM CharacterData c + FROM CardCharacter c join UserCharacter uc on c.id = uc.charId where uc.id = :charId LIMIT 1 """ ) - suspend fun getCharacterInfo(charId: Long): CharacterData + suspend fun getCharacterInfo(charId: Long): CardCharacter @Query( @@ -167,7 +167,7 @@ interface UserCharacterDao { INSERT INTO TransformationHistory(monId, stageId, transformationDate) VALUES (:monId, - (SELECT id FROM CharacterData WHERE charaIndex = :stage AND cardId = :dimId), + (SELECT id FROM CardCharacter WHERE charaIndex = :stage AND cardId = :dimId), :transformationDate) """ ) @@ -195,7 +195,7 @@ interface UserCharacterDao { d.isBEm as isBemCard, a.characterId = uc.id as isInAdventure FROM UserCharacter uc - JOIN CharacterData c ON uc.charId = c.id + JOIN CardCharacter c ON uc.charId = c.id JOIN Card d ON d.id = c.cardId JOIN Sprite s ON s.id = c.spriteId LEFT JOIN Adventure a ON a.characterId = uc.id @@ -220,7 +220,7 @@ interface UserCharacterDao { d.isBEm as isBemCard, a.characterId = uc.id as isInAdventure FROM UserCharacter uc - JOIN CharacterData c ON uc.charId = c.id + JOIN CardCharacter c ON uc.charId = c.id JOIN Card d ON d.id = c.cardId JOIN Sprite s ON s.id = c.spriteId LEFT JOIN Adventure a ON a.characterId = uc.id 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 bec8d12d5bdca5b01319b4baef0df30f77ef4ff1..7aa784c3d71b423095370a9328ebf1de71141c10 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 @@ -3,17 +3,21 @@ package com.github.nacabaro.vbhelper.database 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.CharacterDao import com.github.nacabaro.vbhelper.daos.DexDao import com.github.nacabaro.vbhelper.daos.CardDao +import com.github.nacabaro.vbhelper.daos.CardFusionsDao import com.github.nacabaro.vbhelper.daos.CardProgressDao 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.CharacterData +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.characters.Sprite @@ -32,7 +36,9 @@ import com.github.nacabaro.vbhelper.domain.items.Items entities = [ Card::class, CardProgress::class, - CharacterData::class, + CardCharacter::class, + CardAdventure::class, + CardFusions::class, Sprite::class, UserCharacter::class, BECharacterData::class, @@ -57,4 +63,6 @@ abstract class AppDatabase : RoomDatabase() { abstract fun adventureDao(): AdventureDao abstract fun spriteDao(): SpriteDao abstract fun specialMissionDao(): SpecialMissionDao + abstract fun cardAdventureDao(): CardAdventureDao + abstract fun cardFusionsDao(): CardFusionsDao } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardAdventure.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardAdventure.kt new file mode 100644 index 0000000000000000000000000000000000000000..b8f4f562653ef00c7e97ff139e0242801d0e4550 --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardAdventure.kt @@ -0,0 +1,32 @@ +package com.github.nacabaro.vbhelper.domain.card + +import androidx.room.Entity +import androidx.room.ForeignKey +import androidx.room.PrimaryKey + +@Entity( + foreignKeys = [ + ForeignKey( + entity = CardCharacter::class, + parentColumns = ["id"], + childColumns = ["characterId"], + onDelete = ForeignKey.CASCADE + ), + ForeignKey( + entity = Card::class, + parentColumns = ["id"], + childColumns = ["cardId"], + onDelete = ForeignKey.CASCADE + ) + ] +) +data class CardAdventure( + @PrimaryKey(autoGenerate = true) val id: Long = 0, + val cardId: Long, + val characterId: Long, + val steps: Int, + val bossHp: Int, + val bossAp: Int, + val bossDp: Int, + val bossBp: Int? +) \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CharacterData.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardCharacter.kt similarity index 97% rename from app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CharacterData.kt rename to app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardCharacter.kt index 0c3f99d210ab21ccaaeab9bb37ec446b78995060..050cc9adc52f9d435ce576aa002d7f04a70e24f4 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CharacterData.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardCharacter.kt @@ -28,7 +28,7 @@ import com.github.nacabaro.vbhelper.domain.characters.Sprite * and monIndex. * TODO: Customs will mean this should be unique per cardName and monIndex */ -data class CharacterData ( +data class CardCharacter ( @PrimaryKey(autoGenerate = true) val id: Long = 0, val cardId: Long, val spriteId: Long, diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardFusions.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardFusions.kt new file mode 100644 index 0000000000000000000000000000000000000000..0ced483643735f25a1d2c9654689707f083a2e4d --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/card/CardFusions.kt @@ -0,0 +1,48 @@ +package com.github.nacabaro.vbhelper.domain.card + +import androidx.room.Entity +import androidx.room.ForeignKey +import androidx.room.PrimaryKey + +@Entity( + foreignKeys = [ + ForeignKey( + entity = CardCharacter::class, + parentColumns = ["id"], + childColumns = ["fromCharaId"], + onDelete = ForeignKey.CASCADE + ), + ForeignKey( + entity = CardCharacter::class, + parentColumns = ["id"], + childColumns = ["attribute1Fusion"], + onDelete = ForeignKey.CASCADE + ), + ForeignKey( + entity = CardCharacter::class, + parentColumns = ["id"], + childColumns = ["attribute2Fusion"], + onDelete = ForeignKey.CASCADE + ), + ForeignKey( + entity = CardCharacter::class, + parentColumns = ["id"], + childColumns = ["attribute3Fusion"], + onDelete = ForeignKey.CASCADE + ), + ForeignKey( + entity = CardCharacter::class, + parentColumns = ["id"], + childColumns = ["attribute4Fusion"], + onDelete = ForeignKey.CASCADE + ) + ] +) +data class CardFusions( + @PrimaryKey(autoGenerate = true) val id: Long, + val fromCharaId: Long, + val attribute1Fusion: Long?, + val attribute2Fusion: Long?, + val attribute3Fusion: Long?, + val attribute4Fusion: Long? +) \ No newline at end of file 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/PossibleTransformations.kt index 1aabaed136c18860cbc9af7e03d8991fc56d14aa..2dc2e8bbf1820858d69b61c59ccc6ae6d0227631 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/PossibleTransformations.kt @@ -7,13 +7,13 @@ import androidx.room.PrimaryKey @Entity( foreignKeys = [ ForeignKey( - entity = CharacterData::class, + entity = CardCharacter::class, parentColumns = ["id"], childColumns = ["charaId"], onDelete = ForeignKey.CASCADE ), ForeignKey( - entity = CharacterData::class, + entity = CardCharacter::class, parentColumns = ["id"], childColumns = ["toCharaId"], onDelete = ForeignKey.CASCADE diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Dex.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Dex.kt index a2f0430828883b1e6006017efe96c6f7121cc1e6..14f0c09b3ffc0b4044bb3a67a8c658d97327b836 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Dex.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Dex.kt @@ -3,12 +3,12 @@ package com.github.nacabaro.vbhelper.domain.characters import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.PrimaryKey -import com.github.nacabaro.vbhelper.domain.card.CharacterData +import com.github.nacabaro.vbhelper.domain.card.CardCharacter @Entity( foreignKeys = [ ForeignKey( - entity = CharacterData::class, + entity = CardCharacter::class, parentColumns = ["id"], childColumns = ["id"], onDelete = ForeignKey.CASCADE diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/TransformationHistory.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/TransformationHistory.kt index 10912e0b822a314e0aa2a4617885b2e18f4793e8..0a560ccffc1da080272581fad1790f9ed1c4cd17 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/TransformationHistory.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/TransformationHistory.kt @@ -3,7 +3,7 @@ package com.github.nacabaro.vbhelper.domain.device_data import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.PrimaryKey -import com.github.nacabaro.vbhelper.domain.card.CharacterData +import com.github.nacabaro.vbhelper.domain.card.CardCharacter @Entity( foreignKeys = [ @@ -14,7 +14,7 @@ import com.github.nacabaro.vbhelper.domain.card.CharacterData onDelete = ForeignKey.CASCADE ), ForeignKey( - entity = CharacterData::class, + entity = CardCharacter::class, parentColumns = ["id"], childColumns = ["stageId"], onDelete = ForeignKey.CASCADE diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt b/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt index 66eedf2dd2cf3db9f15c68da2c0dea8dfad6417c..e34b57d8f2bcaf7e1e113d2096df791f29f17f1f 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt @@ -5,12 +5,12 @@ import androidx.room.ForeignKey import androidx.room.PrimaryKey import com.github.cfogrady.vbnfc.data.NfcCharacter import com.github.nacabaro.vbhelper.utils.DeviceType -import com.github.nacabaro.vbhelper.domain.card.CharacterData +import com.github.nacabaro.vbhelper.domain.card.CardCharacter @Entity( foreignKeys = [ ForeignKey( - entity = CharacterData::class, + entity = CardCharacter::class, parentColumns = ["id"], childColumns = ["charId"], onDelete = ForeignKey.CASCADE diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CardDtos.kt b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CardDtos.kt index 48e7c74572eed7a3664ba6beb57f89bcb3f9659d..252b553a4f2eeaa6f800f2fe03d48960c5428049 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CardDtos.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CardDtos.kt @@ -10,4 +10,18 @@ object CardDtos { val totalCharacters: Int, val obtainedCharacters: Int, ) + + data class CardAdventureWithSprites ( + val characterName: ByteArray, + val characterNameWidth: Int, + val characterNameHeight: Int, + val characterIdleSprite: ByteArray, + val characterIdleSpriteWidth: Int, + val characterIdleSpriteHeight: Int, + val characterAp: Int, + val characterBp: Int?, + val characterDp: Int, + val characterHp: Int, + val steps: Int, + ) } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt index 463d9235d07fc275a9497f76b784886f5e3869c3..b27943271ecf1a786f7cbaadfad572f6848eafb4 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt @@ -35,7 +35,7 @@ object CharacterDtos { ) data class CardCharacterInfo( - val cardId: Int, + val cardId: Long, val charId: Int, val stage: Int, val attribute: NfcCharacter.Attribute diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt index 76d900981955f70124f49ec0fdeb5703ecf6e7c6..013b083d27916f34854e3c22792dbe045456b033 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt @@ -34,6 +34,7 @@ import com.github.nacabaro.vbhelper.screens.itemsScreen.ItemsScreenControllerImp import com.github.nacabaro.vbhelper.screens.settingsScreen.SettingsScreenControllerImpl import com.github.nacabaro.vbhelper.screens.adventureScreen.AdventureScreen import com.github.nacabaro.vbhelper.screens.adventureScreen.AdventureScreenControllerImpl +import com.github.nacabaro.vbhelper.screens.cardScreen.CardAdventureScreen import com.github.nacabaro.vbhelper.screens.cardScreen.CardScreenControllerImpl import com.github.nacabaro.vbhelper.screens.settingsScreen.CreditsScreen import com.github.nacabaro.vbhelper.screens.spriteViewer.SpriteViewerControllerImpl @@ -145,7 +146,7 @@ fun AppNavigation( if (cardId != null) { CardViewScreen( navController = navController, - dimId = cardId.toLong() + cardId = cardId.toLong() ) } } @@ -177,6 +178,17 @@ fun AppNavigation( navController = navController ) } + composable(NavigationItems.CardAdventure.route) { + val cardId = it.arguments?.getString("cardId") + if (cardId != null) { + CardAdventureScreen( + navController = navController, + cardId = cardId.toLong(), + cardScreenController = applicationNavigationHandlers + .cardScreenController + ) + } + } } } } diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt index 623ae8acd81bb9df0f7201faa04010a53faf5b94..ca187ea447f05cf5f04a19a4a473d907acb8fcea 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt @@ -11,6 +11,7 @@ sealed class NavigationItems ( object Battles : NavigationItems("Battle", R.drawable.baseline_swords_24, "Battle") object Home : NavigationItems("Home", R.drawable.baseline_cottage_24, "Home") object Dex : NavigationItems("Dex", R.drawable.baseline_menu_book_24, "Dex") + object CardAdventure : NavigationItems("CardAdventure/{cardId}", R.drawable.baseline_fort_24, "Card adventure") object Storage : NavigationItems("Storage", R.drawable.baseline_catching_pokemon_24, "Storage") object Settings : NavigationItems("Settings", R.drawable.baseline_settings_24, "Settings") object Viewer : NavigationItems("Viewer", R.drawable.baseline_image_24, "Viewer") diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureEntry.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureEntry.kt new file mode 100644 index 0000000000000000000000000000000000000000..8927f26fbac5be0c6745231fc0fd465862016ce0 --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureEntry.kt @@ -0,0 +1,122 @@ +package com.github.nacabaro.vbhelper.screens.cardScreen + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Card +import androidx.compose.material3.CardColors +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.FilterQuality +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import com.github.nacabaro.vbhelper.dtos.CardDtos +import com.github.nacabaro.vbhelper.utils.BitmapData +import com.github.nacabaro.vbhelper.utils.getImageBitmap + +@Composable +fun CardAdventureEntry( + cardAdventureEntry: CardDtos.CardAdventureWithSprites, + obscure: Boolean +) { + val charaImageBitmapData = BitmapData( + bitmap = cardAdventureEntry.characterIdleSprite, + width = cardAdventureEntry.characterIdleSpriteWidth, + height = cardAdventureEntry.characterIdleSpriteHeight + ).getImageBitmap( + context = LocalContext.current, + multiplier = 4, + obscure = obscure + ) + + val nameImageBitmapData = BitmapData( + bitmap = cardAdventureEntry.characterName, + width = cardAdventureEntry.characterNameWidth, + height = cardAdventureEntry.characterNameHeight + ).getImageBitmap( + context = LocalContext.current, + multiplier = 3, + obscure = obscure + ) + + Card ( + modifier = Modifier + .fillMaxWidth() + .padding(8.dp) + ) { + Row ( + modifier = Modifier + .padding(8.dp) + ){ + Card ( + colors = CardColors( + containerColor = MaterialTheme.colorScheme.surfaceVariant, + contentColor = MaterialTheme.colorScheme.contentColorFor( + backgroundColor = MaterialTheme.colorScheme.surfaceVariant, + ), + disabledContainerColor = MaterialTheme.colorScheme.surfaceVariant, + disabledContentColor = MaterialTheme.colorScheme.contentColorFor( + backgroundColor = MaterialTheme.colorScheme.surfaceVariant, + ) + ) + ) { + Image( + bitmap = charaImageBitmapData.imageBitmap, + contentDescription = "Icon", + modifier = Modifier + .size(charaImageBitmapData.dpWidth) + .padding(8.dp), + colorFilter = when (obscure) { + true -> ColorFilter.tint(color = MaterialTheme.colorScheme.secondary) + false -> null + }, + filterQuality = FilterQuality.None + ) + } + + Spacer(modifier = Modifier.padding(8.dp)) + + Column { + if (!obscure) { + Image( + bitmap = nameImageBitmapData.imageBitmap, + contentDescription = "Icon", + modifier = Modifier + .width(nameImageBitmapData.dpWidth) + .height(nameImageBitmapData.dpHeight), + filterQuality = FilterQuality.None + ) + + Spacer(modifier = Modifier.padding(4.dp)) + + Text( + text = "HP: ${cardAdventureEntry.characterHp}, DP: ${cardAdventureEntry.characterDp}, AP: ${cardAdventureEntry.characterAp}" + ) + if (cardAdventureEntry.characterBp != null) { + Text(text = "BP: ${cardAdventureEntry.characterBp}") + } + Text(text = "Steps: ${cardAdventureEntry.steps}") + } else { + Text(text = "????????????????") + Text( + text = "HP: -, BP: -, AP: -" + ) + if (cardAdventureEntry.characterBp != null) { + Text(text = "DP: -") + } + Text(text = "Steps: -") + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt new file mode 100644 index 0000000000000000000000000000000000000000..016d935a4a8e5194b62c5a2b7ec1024b7a3ad712 --- /dev/null +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardAdventureScreen.kt @@ -0,0 +1,63 @@ +package com.github.nacabaro.vbhelper.screens.cardScreen + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.navigation.NavController +import com.github.nacabaro.vbhelper.components.TopBanner +import com.github.nacabaro.vbhelper.dtos.CardDtos +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +@Composable +fun CardAdventureScreen( + navController: NavController, + cardScreenController: CardScreenControllerImpl, + cardId: Long +) { + val cardAdventureMissions = remember { mutableStateOf(emptyList()) } + var currentCardAdventure = remember { 0 } + + LaunchedEffect(cardId) { + withContext(Dispatchers.IO) { + cardAdventureMissions.value = + cardScreenController + .getCardAdventureMissions(cardId) + + currentCardAdventure = + cardScreenController + .getCardProgress(cardId) + } + } + + Scaffold ( + topBar = { + TopBanner( + text = "Adventure missions", + onBackClick = { + navController.popBackStack() + } + ) + } + ) { contentPadding -> + Column ( + modifier = Modifier + .padding(top = contentPadding.calculateTopPadding()) + .verticalScroll(state = rememberScrollState()) + ) { + cardAdventureMissions.value.mapIndexed { index, it -> + CardAdventureEntry( + cardAdventureEntry = it, + obscure = index > currentCardAdventure + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenController.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenController.kt index d47d888759ee10585d0f3d0bef498ddc42ce7dd9..6e53a605ba8d13422fbcfc0a38bc8ac6d1e532ea 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenController.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenController.kt @@ -1,6 +1,10 @@ package com.github.nacabaro.vbhelper.screens.cardScreen +import com.github.nacabaro.vbhelper.dtos.CardDtos + interface CardScreenController { fun renameCard(cardId: Long, newName: String, onRenamed: (String) -> Unit) fun deleteCard(cardId: Long, onDeleted: () -> Unit) + suspend fun getCardAdventureMissions(cardId: Long): List + suspend fun getCardProgress(cardId: Long): Int } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenControllerImpl.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenControllerImpl.kt index 0e54d15bd62d985013e6efe663ba62acad00c14e..0fe45b5323b01244fcde5f8279c37d97ebc9a756 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenControllerImpl.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardScreenControllerImpl.kt @@ -3,6 +3,7 @@ package com.github.nacabaro.vbhelper.screens.cardScreen import androidx.activity.ComponentActivity import androidx.lifecycle.lifecycleScope import com.github.nacabaro.vbhelper.di.VBHelper +import com.github.nacabaro.vbhelper.dtos.CardDtos import kotlinx.coroutines.launch class CardScreenControllerImpl( @@ -11,7 +12,6 @@ class CardScreenControllerImpl( private val application = componentActivity.applicationContext as VBHelper private val database = application.container.db - override fun renameCard(cardId: Long, newName: String, onRenamed: (String) -> Unit) { componentActivity.lifecycleScope.launch { database @@ -31,4 +31,16 @@ class CardScreenControllerImpl( onDeleted() } } + + override suspend fun getCardAdventureMissions(cardId: Long): List { + return database + .cardAdventureDao() + .getAdventureForCard(cardId) + } + + override suspend fun getCardProgress(cardId: Long): Int { + return database + .cardProgressDao() + .getCardProgress(cardId) + } } \ No newline at end of file diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardViewScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardViewScreen.kt index 330293b3b66d46252d11cd497cb548df02a55258..2cd5838923d00ef241dc40d5a39831bcdcc96be7 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardViewScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/cardScreen/CardViewScreen.kt @@ -16,6 +16,7 @@ import com.github.nacabaro.vbhelper.components.CharacterEntry import com.github.nacabaro.vbhelper.components.TopBanner import com.github.nacabaro.vbhelper.di.VBHelper import com.github.nacabaro.vbhelper.dtos.CharacterDtos +import com.github.nacabaro.vbhelper.navigation.NavigationItems import com.github.nacabaro.vbhelper.screens.cardScreen.dialogs.DexCharaDetailsDialog import com.github.nacabaro.vbhelper.source.DexRepository import kotlinx.coroutines.launch @@ -23,7 +24,7 @@ import kotlinx.coroutines.launch @Composable fun CardViewScreen( navController: NavController, - dimId: Long + cardId: Long ) { val coroutineScope = rememberCoroutineScope() val application = LocalContext.current.applicationContext as VBHelper @@ -36,10 +37,10 @@ fun CardViewScreen( LaunchedEffect(dexRepository) { coroutineScope.launch { - val newCharacterList = dexRepository.getCharactersByCardId(dimId) + val newCharacterList = dexRepository.getCharactersByCardId(cardId) characterList.value = newCharacterList - val newCardPossibleTransformations = dexRepository.getCardPossibleTransformations(dimId) + val newCardPossibleTransformations = dexRepository.getCardPossibleTransformations(cardId) cardPossibleTransformations.value = newCardPossibleTransformations } } @@ -50,6 +51,17 @@ fun CardViewScreen( text = "Discovered characters", onBackClick = { navController.popBackStack() + }, + onAdventureClick = { + navController + .navigate(route = NavigationItems + .CardAdventure + .route + .replace( + "{cardId}", + cardId.toString() + ) + ) } ) } 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 95b2437d30ddb8aac60f6a2e804de1e7cd1d59c2..cadae136483e548f0a743950f28f8e2d0e822b46 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 @@ -18,7 +18,7 @@ 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.CardProgress -import com.github.nacabaro.vbhelper.domain.card.CharacterData +import com.github.nacabaro.vbhelper.domain.card.CardCharacter import com.github.nacabaro.vbhelper.source.ApkSecretsImporter import com.github.nacabaro.vbhelper.source.SecretsImporter import com.github.nacabaro.vbhelper.source.SecretsRepository @@ -192,7 +192,7 @@ class SettingsScreenControllerImpl( false -> 10 } - val domainCharacters = mutableListOf() + val domainCharacters = mutableListOf() val characters = card .characterStats @@ -242,7 +242,7 @@ class SettingsScreenControllerImpl( domainCharacters.add( - CharacterData( + CardCharacter( cardId = cardId, spriteId = spriteId, charaIndex = index, @@ -273,6 +273,66 @@ class SettingsScreenControllerImpl( .insertCharacter(*domainCharacters.toTypedArray()) } + private suspend fun importAdventureMissions( + cardId: Long, + card: com.github.cfogrady.vb.dim.card.Card<*, *, *, *, *, *> + ) { + Log.d("importAdventureMissions", "Importing adventure missions") + if (card is BemCard) { + card.adventureLevels.levels.forEach { + database + .cardAdventureDao() + .insertNewAdventure( + cardId = cardId, + characterId = it.bossCharacterIndex, + steps = it.steps, + bossAp = it.bossAp, + bossHp = it.bossHp, + bossDp = it.bossDp, + bossBp = it.bossBp + ) + } + } else if (card is DimCard) { + card.adventureLevels.levels.map { + database + .cardAdventureDao() + .insertNewAdventure( + cardId = cardId, + characterId = it.bossCharacterIndex, + steps = it.steps, + bossAp = it.bossAp, + bossHp = it.bossHp, + bossDp = it.bossDp, + bossBp = null + ) + } + } + } + + private suspend fun importCardFusions( + cardId: Long, + card: com.github.cfogrady.vb.dim.card.Card<*, *, *, *, *, *> + ) { + Log.d("importCardFusions", "Importing card fusions") + if (card is DimCard) { + card + .attributeFusions + .entries + .forEach { + database + .cardFusionsDao() + .insertNewFusion( + cardId = cardId, + fromCharaId = it.characterIndex, + toCharaIdAttr1 = it.attribute1Fusion, + toCharaIdAttr2 = it.attribute2Fusion, + toCharaIdAttr3 = it.attribute3Fusion, + toCharaIdAttr4 = it.attribute4Fusion + ) + } + } + } + private fun updateCardProgress( cardId: Long, ) { @@ -315,6 +375,10 @@ class SettingsScreenControllerImpl( importCharacterData(cardId, card) importEvoData(cardId, card) + + importAdventureMissions(cardId, card) + + importCardFusions(cardId, card) } inputStream?.close()