M app/build.gradle.kts => app/build.gradle.kts +1 -1
@@ 15,7 15,7 @@ android {
minSdk = 28
targetSdk = 35
versionCode = 1
- versionName = "1.0"
+ versionName = "Alpha 0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
M app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt => app/src/main/java/com/github/nacabaro/vbhelper/MainActivity.kt +7 -3
@@ 14,6 14,7 @@ import com.github.nacabaro.vbhelper.screens.itemsScreen.ItemsScreenControllerImp
import com.github.nacabaro.vbhelper.screens.scanScreen.ScanScreenControllerImpl
import com.github.nacabaro.vbhelper.screens.settingsScreen.SettingsScreenControllerImpl
import com.github.nacabaro.vbhelper.screens.adventureScreen.AdventureScreenControllerImpl
+import com.github.nacabaro.vbhelper.screens.spriteViewer.SpriteViewerControllerImpl
import com.github.nacabaro.vbhelper.screens.storageScreen.StorageScreenControllerImpl
import com.github.nacabaro.vbhelper.ui.theme.VBHelperTheme
@@ 45,6 46,7 @@ class MainActivity : ComponentActivity() {
val adventureScreenController = AdventureScreenControllerImpl(this)
val storageScreenController = StorageScreenControllerImpl(this)
val homeScreenController = HomeScreenControllerImpl(this)
+ val spriteViewerController = SpriteViewerControllerImpl(this)
super.onCreate(savedInstanceState)
@@ 58,7 60,8 @@ class MainActivity : ComponentActivity() {
itemsScreenController = itemsScreenController,
adventureScreenController = adventureScreenController,
homeScreenController = homeScreenController,
- storageScreenController = storageScreenController
+ storageScreenController = storageScreenController,
+ spriteViewerController = spriteViewerController
)
}
}
@@ 90,7 93,7 @@ class MainActivity : ComponentActivity() {
adventureScreenController: AdventureScreenControllerImpl,
storageScreenController: StorageScreenControllerImpl,
homeScreenController: HomeScreenControllerImpl,
-
+ spriteViewerController: SpriteViewerControllerImpl
) {
AppNavigation(
applicationNavigationHandlers = AppNavigationHandlers(
@@ 99,7 102,8 @@ class MainActivity : ComponentActivity() {
itemsScreenController,
adventureScreenController,
storageScreenController,
- homeScreenController
+ homeScreenController,
+ spriteViewerController
)
)
}
M app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/AdventureDao.kt +6 -3
@@ 21,14 21,17 @@ interface AdventureDao {
@Query("""
SELECT
uc.*,
- c.sprite1 AS spriteIdle,
- c.spritesWidth AS spriteWidth,
- c.spritesHeight AS spriteHeight,
+ c.stage,
+ c.attribute,
+ s.spriteIdle1 AS spriteIdle,
+ s.width AS spriteWidth,
+ s.height AS spriteHeight,
d.isBEm as isBemCard,
a.finishesAdventure AS finishesAdventure,
a.originalDuration AS originalTimeInMinutes
FROM UserCharacter uc
JOIN Character c ON uc.charId = c.id
+ JOIN Sprite s ON s.id = c.spriteId
JOIN Card d ON c.dimId = d.id
JOIN Adventure a ON uc.id = a.characterId
""")
M app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/CharacterDao.kt +4 -4
@@ 4,7 4,7 @@ import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import com.github.nacabaro.vbhelper.domain.characters.Character
-import com.github.nacabaro.vbhelper.domain.Sprites
+import com.github.nacabaro.vbhelper.domain.characters.Sprite
import com.github.nacabaro.vbhelper.dtos.CharacterDtos
@Dao
@@ 16,10 16,10 @@ interface CharacterDao {
fun getCharacterByMonIndex(monIndex: Int, dimId: Long): Character
@Insert
- suspend fun insertSprite(vararg sprite: Sprites)
+ suspend fun insertSprite(vararg sprite: Sprite)
- @Query("SELECT * FROM Sprites")
- suspend fun getAllSprites(): List<Sprites>
+ @Query("SELECT * FROM Sprite")
+ suspend fun getAllSprites(): List<Sprite>
@Query(
"""
M app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/DexDao.kt +5 -4
@@ 19,11 19,12 @@ interface DexDao {
@Query("""
SELECT
c.id AS id,
- c.sprite1 AS spriteIdle,
- c.spritesWidth AS spriteWidth,
- c.spritesHeight AS spriteHeight,
+ s.spriteIdle1 AS spriteIdle,
+ s.width AS spriteWidth,
+ s.height AS spriteHeight,
d.discoveredOn AS discoveredOn
- FROM character c
+ FROM Character c
+ JOIN Sprite s ON c.spriteId = s.id
LEFT JOIN dex d ON c.id = d.id
WHERE c.dimId = :cardId
""")
A app/src/main/java/com/github/nacabaro/vbhelper/daos/SpriteDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/SpriteDao.kt +16 -0
@@ 0,0 1,16 @@
+package com.github.nacabaro.vbhelper.daos
+
+import androidx.room.Dao
+import androidx.room.Insert
+import androidx.room.OnConflictStrategy
+import androidx.room.Query
+import com.github.nacabaro.vbhelper.domain.characters.Sprite
+
+@Dao
+interface SpriteDao {
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
+ fun insertSprite(sprite: Sprite): Long
+
+ @Query("SELECT * FROM Sprite")
+ suspend fun getAllSprites(): List<Sprite>
+}<
\ No newline at end of file
M app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt => app/src/main/java/com/github/nacabaro/vbhelper/daos/UserCharacterDao.kt +38 -13
@@ 5,6 5,7 @@ import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Upsert
+import com.github.nacabaro.vbhelper.domain.characters.Character
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
@@ 39,13 40,14 @@ interface UserCharacterDao {
@Query("""
SELECT
c.id AS id,
- c.sprite1 AS spriteIdle,
- c.spritesWidth AS spriteWidth,
- c.spritesHeight AS spriteHeight,
+ s.spriteIdle1 AS spriteIdle,
+ s.width AS spriteWidth,
+ s.height AS spriteHeight,
c.monIndex AS monIndex,
t.transformationDate AS transformationDate
FROM TransformationHistory t
JOIN Character c ON c.id = t.stageId
+ JOIN Sprite s ON s.id = c.spriteId
WHERE monId = :monId
""")
suspend fun getTransformationHistory(monId: Long): List<CharacterDtos.TransformationHistory>?
@@ 54,9 56,12 @@ interface UserCharacterDao {
"""
SELECT
uc.*,
- c.sprite1 AS spriteIdle,
- c.spritesWidth AS spriteWidth,
- c.spritesHeight AS spriteHeight,
+ c.stage,
+ c.attribute,
+ s.spriteIdle1 AS spriteIdle,
+ s.spriteIdle2 AS spriteIdle2,
+ s.width AS spriteWidth,
+ s.height AS spriteHeight,
c.name as nameSprite,
c.nameWidth as nameSpriteWidth,
c.nameHeight as nameSpriteHeight,
@@ 64,7 69,8 @@ interface UserCharacterDao {
a.characterId = uc.id as isInAdventure
FROM UserCharacter uc
JOIN Character c ON uc.charId = c.id
- JOIN Card d ON c.dimId = d.id
+ JOIN Card d ON d.id = c.dimId
+ JOIN Sprite s ON s.id = c.spriteId
LEFT JOIN Adventure a ON a.characterId = uc.id
"""
)
@@ 74,9 80,12 @@ interface UserCharacterDao {
"""
SELECT
uc.*,
- c.sprite1 AS spriteIdle,
- c.spritesWidth AS spriteWidth,
- c.spritesHeight AS spriteHeight,
+ c.stage,
+ c.attribute,
+ s.spriteIdle1 AS spriteIdle,
+ s.spriteIdle2 AS spriteIdle2,
+ s.width AS spriteWidth,
+ s.height AS spriteHeight,
c.name as nameSprite,
c.nameWidth as nameSpriteWidth,
c.nameHeight as nameSpriteHeight,
@@ 85,6 94,7 @@ interface UserCharacterDao {
FROM UserCharacter uc
JOIN Character c ON uc.charId = c.id
JOIN Card d ON c.dimId = d.id
+ JOIN Sprite s ON s.id = c.spriteId
LEFT JOIN Adventure a ON a.characterId = uc.id
WHERE uc.id = :id
""")
@@ 106,9 116,12 @@ interface UserCharacterDao {
"""
SELECT
uc.*,
- c.sprite1 AS spriteIdle,
- c.spritesWidth AS spriteWidth,
- c.spritesHeight AS spriteHeight,
+ c.stage,
+ c.attribute,
+ s.spriteIdle1 AS spriteIdle,
+ s.spriteIdle2 AS spriteIdle2,
+ s.width AS spriteWidth,
+ s.height AS spriteHeight,
c.name as nameSprite,
c.nameWidth as nameSpriteWidth,
c.nameHeight as nameSpriteHeight,
@@ 117,6 130,7 @@ interface UserCharacterDao {
FROM UserCharacter uc
JOIN Character c ON uc.charId = c.id
JOIN Card d ON c.dimId = d.id
+ JOIN Sprite s ON s.id = c.spriteId
LEFT JOIN Adventure a ON a.characterId = uc.id
WHERE uc.isActive = 1
LIMIT 1
@@ 131,4 145,15 @@ interface UserCharacterDao {
@Query("UPDATE UserCharacter SET isActive = 1 WHERE id = :id")
fun setActiveCharacter(id: Long)
+
+ @Query(
+ """
+ SELECT c.*
+ FROM Character c
+ join UserCharacter uc on c.id = uc.charId
+ where uc.id = :charId
+ LIMIT 1
+ """
+ )
+ suspend fun getCharacterInfo(charId: Long): Character
}=
\ No newline at end of file
M app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt => app/src/main/java/com/github/nacabaro/vbhelper/database/AppDatabase.kt +4 -2
@@ 7,10 7,11 @@ import com.github.nacabaro.vbhelper.daos.CharacterDao
import com.github.nacabaro.vbhelper.daos.DexDao
import com.github.nacabaro.vbhelper.daos.DiMDao
import com.github.nacabaro.vbhelper.daos.ItemDao
+import com.github.nacabaro.vbhelper.daos.SpriteDao
import com.github.nacabaro.vbhelper.daos.UserCharacterDao
import com.github.nacabaro.vbhelper.domain.characters.Character
import com.github.nacabaro.vbhelper.domain.characters.Card
-import com.github.nacabaro.vbhelper.domain.Sprites
+import com.github.nacabaro.vbhelper.domain.characters.Sprite
import com.github.nacabaro.vbhelper.domain.characters.Adventure
import com.github.nacabaro.vbhelper.domain.characters.Dex
import com.github.nacabaro.vbhelper.domain.device_data.BECharacterData
@@ 25,7 26,7 @@ import com.github.nacabaro.vbhelper.domain.items.Items
entities = [
Card::class,
Character::class,
- Sprites::class,
+ Sprite::class,
UserCharacter::class,
BECharacterData::class,
VBCharacterData::class,
@@ 43,4 44,5 @@ abstract class AppDatabase : RoomDatabase() {
abstract fun dexDao(): DexDao
abstract fun itemDao(): ItemDao
abstract fun adventureDao(): AdventureDao
+ abstract fun spriteDao(): SpriteDao
}=
\ No newline at end of file
D app/src/main/java/com/github/nacabaro/vbhelper/domain/Sprites.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/Sprites.kt +0 -12
@@ 1,12 0,0 @@
-package com.github.nacabaro.vbhelper.domain
-
-import androidx.room.Entity
-import androidx.room.PrimaryKey
-
-@Entity
-data class Sprites(
- @PrimaryKey(autoGenerate = true) val id : Int,
- val sprite: ByteArray,
- val width: Int,
- val height: Int
-)
M app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Character.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Character.kt +16 -6
@@ 3,6 3,7 @@ package com.github.nacabaro.vbhelper.domain.characters
import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.ForeignKey
+import com.github.cfogrady.vbnfc.data.NfcCharacter
@Entity(
foreignKeys = [
@@ 11,23 12,32 @@ import androidx.room.ForeignKey
parentColumns = ["id"],
childColumns = ["dimId"],
onDelete = ForeignKey.CASCADE
+ ),
+ ForeignKey(
+ entity = Sprite::class,
+ parentColumns = ["id"],
+ childColumns = ["spriteId"],
+ onDelete = ForeignKey.CASCADE
)
]
)
+
+/*
+ * Character represents a character on a DIM card. There should only be one of these per dimId
+ * and monIndex.
+ * TODO: Customs will mean this should be unique per cardName and monIndex
+ */
data class Character (
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val dimId: Long,
+ val spriteId: Long,
val monIndex: Int,
val name: ByteArray,
val stage: Int, // These should be replaced with enums
- val attribute: Int, // This one too
+ val attribute: NfcCharacter.Attribute, // This one too
val baseHp: Int,
val baseBp: Int,
val baseAp: Int,
- val sprite1: ByteArray,
- val sprite2: ByteArray,
val nameWidth: Int,
- val nameHeight: Int,
- val spritesWidth: Int,
- val spritesHeight: Int
+ val nameHeight: Int
)
A app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Sprite.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/characters/Sprite.kt +23 -0
@@ 0,0 1,23 @@
+package com.github.nacabaro.vbhelper.domain.characters
+
+import androidx.room.Entity
+import androidx.room.PrimaryKey
+
+@Entity
+data class Sprite(
+ @PrimaryKey(autoGenerate = true) val id : Int = 0,
+ val spriteIdle1: ByteArray,
+ val spriteIdle2: ByteArray,
+ val spriteWalk1: ByteArray,
+ val spriteWalk2: ByteArray,
+ val spriteRun1: ByteArray,
+ val spriteRun2: ByteArray,
+ val spriteTrain1: ByteArray,
+ val spriteTrain2: ByteArray,
+ val spriteHappy: ByteArray,
+ val spriteSleep: ByteArray,
+ val spriteAttack: ByteArray,
+ val spriteDodge: ByteArray,
+ val width: Int,
+ val height: Int
+)
M app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt => app/src/main/java/com/github/nacabaro/vbhelper/domain/device_data/UserCharacter.kt +3 -2
@@ 17,11 17,12 @@ import com.github.nacabaro.vbhelper.domain.characters.Character
)
]
)
+/**
+ * UserCharacter represents and instance of a character. The charId should map to a Character
+ */
data class UserCharacter (
@PrimaryKey(autoGenerate = true) val id: Long = 0,
var charId: Long,
- var stage: Int,
- var attribute: NfcCharacter.Attribute,
var ageInDays: Int,
var mood: Int,
var vitalPoints: Int,
M app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt => app/src/main/java/com/github/nacabaro/vbhelper/dtos/CharacterDtos.kt +1 -0
@@ 25,6 25,7 @@ object CharacterDtos {
var heartRateCurrent: Int,
var characterType: DeviceType,
val spriteIdle: ByteArray,
+ val spriteIdle2: ByteArray,
val spriteWidth: Int,
val spriteHeight: Int,
val nameSprite: ByteArray,
M app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt => app/src/main/java/com/github/nacabaro/vbhelper/navigation/AppNavigation.kt +26 -3
@@ 1,5 1,8 @@
package com.github.nacabaro.vbhelper.navigation
+import androidx.compose.animation.core.tween
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
@@ 15,7 18,7 @@ import com.github.nacabaro.vbhelper.screens.itemsScreen.ItemsScreen
import com.github.nacabaro.vbhelper.screens.scanScreen.ScanScreen
import com.github.nacabaro.vbhelper.screens.scanScreen.ScanScreenControllerImpl
import com.github.nacabaro.vbhelper.screens.settingsScreen.SettingsScreen
-import com.github.nacabaro.vbhelper.screens.SpriteViewer
+import com.github.nacabaro.vbhelper.screens.spriteViewer.SpriteViewer
import com.github.nacabaro.vbhelper.screens.homeScreens.HomeScreenControllerImpl
import com.github.nacabaro.vbhelper.screens.storageScreen.StorageScreen
import com.github.nacabaro.vbhelper.screens.itemsScreen.ChooseCharacterScreen
@@ 23,6 26,8 @@ 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.settingsScreen.CreditsScreen
+import com.github.nacabaro.vbhelper.screens.spriteViewer.SpriteViewerControllerImpl
import com.github.nacabaro.vbhelper.screens.storageScreen.StorageScreenControllerImpl
data class AppNavigationHandlers(
@@ 31,7 36,8 @@ data class AppNavigationHandlers(
val itemsScreenController: ItemsScreenControllerImpl,
val adventureScreenController: AdventureScreenControllerImpl,
val storageScreenController: StorageScreenControllerImpl,
- val homeScreenController: HomeScreenControllerImpl
+ val homeScreenController: HomeScreenControllerImpl,
+ val spriteViewerController: SpriteViewerControllerImpl
)
@Composable
@@ 48,8 54,19 @@ fun AppNavigation(
NavHost(
navController = navController,
startDestination = NavigationItems.Home.route,
+ enterTransition = {
+ fadeIn(
+ animationSpec = tween(200)
+ )
+ },
+ exitTransition = {
+ fadeOut(
+ animationSpec = tween(200)
+ )
+ },
modifier = Modifier
.padding(contentPadding)
+
) {
composable(NavigationItems.Battles.route) {
BattlesScreen()
@@ 90,7 107,8 @@ fun AppNavigation(
}
composable(NavigationItems.Viewer.route) {
SpriteViewer(
- navController = navController
+ navController = navController,
+ spriteViewerController = applicationNavigationHandlers.spriteViewerController
)
}
composable(NavigationItems.CardView.route) {
@@ 125,6 143,11 @@ fun AppNavigation(
.adventureScreenController
)
}
+ composable(NavigationItems.Credits.route) {
+ CreditsScreen(
+ navController = navController
+ )
+ }
}
}
}
M app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt => app/src/main/java/com/github/nacabaro/vbhelper/navigation/BottomNavigationBar.kt +1 -0
@@ 19,6 19,7 @@ fun BottomNavigationBar(navController: NavController) {
NavigationItems.Dex,
NavigationItems.Storage,
)
+
NavigationBar {
val currentBackStackEntry = navController.currentBackStackEntryAsState()
val currentRoute = currentBackStackEntry.value?.destination?.route
M app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt => app/src/main/java/com/github/nacabaro/vbhelper/navigation/NavigationItems.kt +1 -0
@@ 20,4 20,5 @@ sealed class NavigationItems (
object ItemsStore : NavigationItems("ItemsStore", R.drawable.baseline_data_24, "Items store")
object ApplyItem : NavigationItems("ApplyItem/{itemId}", R.drawable.baseline_data_24, "Apply item")
object Adventure : NavigationItems("Adventure", R.drawable.baseline_fort_24, "Adventure")
+ object Credits : NavigationItems("Credits", R.drawable.baseline_data_24, "Credits")
}=
\ No newline at end of file
M app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt +25 -1
@@ 1,9 1,33 @@
package com.github.nacabaro.vbhelper.screens
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import com.github.nacabaro.vbhelper.components.TopBanner
@Composable
fun BattlesScreen() {
- Text("Battles Screen")
+ Scaffold (
+ topBar = {
+ TopBanner(
+ text = "Online battles"
+ )
+ }
+ ) { contentPadding ->
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center,
+ modifier = Modifier
+ .padding(top = contentPadding.calculateTopPadding())
+ .fillMaxSize()
+ ) {
+ Text("Coming soon")
+ }
+ }
}
M app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreenControllerImpl.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/adventureScreen/AdventureScreenControllerImpl.kt +1 -1
@@ 72,7 72,7 @@ class AdventureScreenControllerImpl(
private suspend fun generateItem(characterId: Long): ItemDtos.PurchasedItem {
val character = database
.userCharacterDao()
- .getCharacter(characterId)
+ .getCharacterInfo(characterId)
val randomItem = database
.itemDao()
A app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/BetaWarning.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/BetaWarning.kt +46 -0
@@ 0,0 1,46 @@
+package com.github.nacabaro.vbhelper.screens.homeScreens
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Button
+import androidx.compose.material3.Card
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.window.Dialog
+
+@Composable
+fun BetaWarning(
+ onDismissRequest: () -> Unit
+) {
+ Dialog(
+ onDismissRequest = onDismissRequest
+ ) {
+ Card {
+ Column (
+ modifier = Modifier
+ .padding(16.dp)
+ ) {
+ Text(
+ text = "This application is currently in alpha and it is not complete. Do not use to store important characters for you, as any future updates might delete all your characters. Sorry for the inconvenience!"
+ )
+ Spacer(modifier = Modifier.padding(8.dp))
+ Text(
+ text = "Also, this application does not work yet with the original VB."
+ )
+ Spacer(modifier = Modifier.padding(8.dp))
+ Text(
+ text = "Thank you for your understanding and patience. Sincerely, the dev team."
+ )
+ Spacer(modifier = Modifier.padding(8.dp))
+ Button(
+ onClick = onDismissRequest
+ ) {
+ Text(text = "Dismiss")
+ }
+ }
+ }
+ }
+}<
\ No newline at end of file
M app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/homeScreens/HomeScreen.kt +7 -0
@@ 46,6 46,7 @@ fun HomeScreen(
val beData = remember { mutableStateOf<BECharacterData?>(null) }
val vbData = remember { mutableStateOf<VBCharacterData?>(null) }
var adventureMissionsFinished by rememberSaveable { mutableStateOf(false) }
+ var betaWarning by rememberSaveable { mutableStateOf(true) }
LaunchedEffect(storageRepository, activeMon) {
withContext(Dispatchers.IO) {
@@ 140,6 141,12 @@ fun HomeScreen(
}
}
}
+
+ if (betaWarning) {
+ BetaWarning {
+ betaWarning = false
+ }
+ }
}
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreen.kt +11 -2
@@ 199,7 199,8 @@ fun ScanScreen(
}
}
}
- }
+ },
+ navController = navController
)
}
}
@@ 208,9 209,17 @@ fun ScanScreen(
fun ChooseConnectOption(
onClickRead: (() -> Unit)? = null,
onClickWrite: (() -> Unit)? = null,
+ navController: NavController
) {
Scaffold(
- topBar = { TopBanner(text = "Scan a Vital Bracelet") }
+ topBar = {
+ TopBanner(
+ text = "Scan a Vital Bracelet",
+ onBackClick = {
+ navController.popBackStack()
+ }
+ )
+ }
) { contentPadding ->
Column(
verticalArrangement = Arrangement.Center,
M app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/scanScreen/ScanScreenControllerImpl.kt +99 -13
@@ 11,19 11,22 @@ import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.lifecycle.lifecycleScope
import com.github.cfogrady.vbnfc.TagCommunicator
+import com.github.cfogrady.vbnfc.be.BENfcCharacter
import com.github.cfogrady.vbnfc.data.NfcCharacter
+import com.github.cfogrady.vbnfc.vb.VBNfcCharacter
import com.github.nacabaro.vbhelper.ActivityLifecycleListener
-import com.github.nacabaro.vbhelper.database.AppDatabase
import com.github.nacabaro.vbhelper.di.VBHelper
+import com.github.nacabaro.vbhelper.domain.device_data.BECharacterData
+import com.github.nacabaro.vbhelper.domain.device_data.UserCharacter
import com.github.nacabaro.vbhelper.source.getCryptographicTransformerMap
import com.github.nacabaro.vbhelper.source.isMissingSecrets
import com.github.nacabaro.vbhelper.source.proto.Secrets
-import com.github.nacabaro.vbhelper.screens.scanScreen.converters.FromNfcConverter
-import com.github.nacabaro.vbhelper.screens.scanScreen.converters.ToNfcConverter
+import com.github.nacabaro.vbhelper.utils.DeviceType
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
+import java.util.GregorianCalendar
class ScanScreenControllerImpl(
override val secretsFlow: Flow<Secrets>,
@@ 34,8 37,6 @@ class ScanScreenControllerImpl(
private val nfcAdapter: NfcAdapter
- private val storageRepository: AppDatabase
-
init {
val maybeNfcAdapter = NfcAdapter.getDefaultAdapter(componentActivity)
if (maybeNfcAdapter == null) {
@@ 43,8 44,6 @@ class ScanScreenControllerImpl(
}
nfcAdapter = maybeNfcAdapter
checkSecrets()
- val application = componentActivity.applicationContext as VBHelper
- storageRepository = application.container.db
}
override fun onClickRead(secrets: Secrets, onComplete: ()->Unit) {
@@ 153,13 152,100 @@ class ScanScreenControllerImpl(
}
private fun addCharacterScannedIntoDatabase(nfcCharacter: NfcCharacter): String {
- val fromNfcConverter = FromNfcConverter(componentActivity)
- return fromNfcConverter.addCharacter(nfcCharacter)
- }
+ val application = componentActivity.applicationContext as VBHelper
+ val storageRepository = application.container.db
+
+ val dimData = storageRepository
+ .dimDao()
+ .getDimById(nfcCharacter.dimId.toInt())
+
+ if (dimData == null) return "Card not found"
+
+ val cardCharData = storageRepository
+ .characterDao()
+ .getCharacterByMonIndex(nfcCharacter.charIndex.toInt(), dimData.id)
+
+ val characterData = UserCharacter(
+ charId = cardCharData.id,
+ ageInDays = nfcCharacter.ageInDays.toInt(),
+ nextAdventureMissionStage = nfcCharacter.nextAdventureMissionStage.toInt(),
+ mood = nfcCharacter.mood.toInt(),
+ vitalPoints = nfcCharacter.vitalPoints.toInt(),
+ transformationCountdown = nfcCharacter.transformationCountdownInMinutes.toInt(),
+ injuryStatus = nfcCharacter.injuryStatus,
+ trophies = nfcCharacter.trophies.toInt(),
+ currentPhaseBattlesWon = nfcCharacter.currentPhaseBattlesWon.toInt(),
+ currentPhaseBattlesLost = nfcCharacter.currentPhaseBattlesLost.toInt(),
+ totalBattlesWon = nfcCharacter.totalBattlesWon.toInt(),
+ totalBattlesLost = nfcCharacter.totalBattlesLost.toInt(),
+ activityLevel = nfcCharacter.activityLevel.toInt(),
+ heartRateCurrent = nfcCharacter.heartRateCurrent.toInt(),
+ characterType = when (nfcCharacter) {
+ is BENfcCharacter -> DeviceType.BEDevice
+ else -> DeviceType.VBDevice
+ },
+ isActive = true
+ )
+
+ storageRepository
+ .userCharacterDao()
+ .clearActiveCharacter()
+
+ val characterId: Long = storageRepository
+ .userCharacterDao()
+ .insertCharacterData(characterData)
+
+ if (nfcCharacter is BENfcCharacter) {
+ val extraCharacterData = BECharacterData(
+ id = characterId,
+ trainingHp = nfcCharacter.trainingHp.toInt(),
+ trainingAp = nfcCharacter.trainingAp.toInt(),
+ trainingBp = nfcCharacter.trainingBp.toInt(),
+ remainingTrainingTimeInMinutes = nfcCharacter.remainingTrainingTimeInMinutes.toInt(),
+ itemEffectActivityLevelValue = nfcCharacter.itemEffectActivityLevelValue.toInt(),
+ itemEffectMentalStateValue = nfcCharacter.itemEffectMentalStateValue.toInt(),
+ itemEffectMentalStateMinutesRemaining = nfcCharacter.itemEffectMentalStateMinutesRemaining.toInt(),
+ itemEffectActivityLevelMinutesRemaining = nfcCharacter.itemEffectActivityLevelMinutesRemaining.toInt(),
+ itemEffectVitalPointsChangeValue = nfcCharacter.itemEffectVitalPointsChangeValue.toInt(),
+ itemEffectVitalPointsChangeMinutesRemaining = nfcCharacter.itemEffectVitalPointsChangeMinutesRemaining.toInt(),
+ abilityRarity = nfcCharacter.abilityRarity,
+ abilityType = nfcCharacter.abilityType.toInt(),
+ abilityBranch = nfcCharacter.abilityBranch.toInt(),
+ abilityReset = nfcCharacter.abilityReset.toInt(),
+ rank = nfcCharacter.abilityReset.toInt(),
+ itemType = nfcCharacter.itemType.toInt(),
+ itemMultiplier = nfcCharacter.itemMultiplier.toInt(),
+ itemRemainingTime = nfcCharacter.itemRemainingTime.toInt(),
+ otp0 = "", //nfcCharacter.value!!.otp0.toString(),
+ otp1 = "", //nfcCharacter.value!!.otp1.toString(),
+ minorVersion = nfcCharacter.characterCreationFirmwareVersion.minorVersion.toInt(),
+ majorVersion = nfcCharacter.characterCreationFirmwareVersion.majorVersion.toInt(),
+ )
+
+ storageRepository
+ .userCharacterDao()
+ .insertBECharacterData(extraCharacterData)
+ val transformationHistoryWatch = nfcCharacter.transformationHistory
+ transformationHistoryWatch.map { item ->
+ if (item.toCharIndex.toInt() != 255) {
+ val date = GregorianCalendar(item.year.toInt(), item.month.toInt(), item.day.toInt())
+ .time
+ .time
+
+ storageRepository
+ .characterDao()
+ .insertTransformation(characterId, item.toCharIndex.toInt(), dimData.id, date)
+
+ storageRepository
+ .dexDao()
+ .insertCharacter(item.toCharIndex.toInt(), dimData.id, date)
+ }
+ }
+ } else if (nfcCharacter is VBNfcCharacter) {
+ return "Not implemented yet"
+ }
- override suspend fun characterToNfc(characterId: Long): NfcCharacter {
- val nfcCharacterConverter = ToNfcConverter(componentActivity)
- return nfcCharacterConverter.characterToNfc(characterId)
+ return "Done reading character!"
}
}=
\ No newline at end of file
A app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/CreditsScreen.kt +40 -0
@@ 0,0 1,40 @@
+package com.github.nacabaro.vbhelper.screens.settingsScreen
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Scaffold
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.navigation.NavController
+import com.github.nacabaro.vbhelper.components.TopBanner
+
+@Composable
+fun CreditsScreen(
+ navController: NavController
+) {
+ Scaffold (
+ topBar = {
+ TopBanner(
+ text = "Credits",
+ onBackClick = {
+ navController.popBackStack()
+ }
+ )
+ },
+ modifier = Modifier
+ .fillMaxSize()
+ ) { contentPadding ->
+ Column (
+ modifier = Modifier
+ .padding(top = contentPadding.calculateTopPadding())
+ ) {
+ SettingsSection("Reverse engineering")
+ SettingsEntry(title = "cyanic", description = "Reversed the firmware and helped us during development.") { }
+ SettingsSection("Application development")
+ SettingsEntry(title = "cfogrady", description = "Developed vb-lib-nfc and part of this application.") { }
+ SettingsEntry(title = "nacabaro", description = "Developed this application.") { }
+ SettingsEntry(title = "lightheel", description = "Developing the battling part for this application, including server. Still in the works.") { }
+ }
+ }
+}<
\ No newline at end of file
M app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreen.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreen.kt +4 -1
@@ 18,6 18,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.components.TopBanner
+import com.github.nacabaro.vbhelper.navigation.NavigationItems
@Composable
fun SettingsScreen(
@@ 52,7 53,9 @@ fun SettingsScreen(
}
SettingsEntry(title = "Rename DiM/BEm", description = "Set card name") { }
SettingsSection("About and credits")
- SettingsEntry(title = "Credits", description = "Credits") { }
+ SettingsEntry(title = "Credits", description = "Credits") {
+ navController.navigate(NavigationItems.Credits.route)
+ }
SettingsEntry(title = "About", description = "About") { }
SettingsSection("Data management")
SettingsEntry(title = "Export data", description = "Export application database") {
M app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/settingsScreen/SettingsScreenControllerImpl.kt +50 -20
@@ 10,10 10,12 @@ import androidx.activity.ComponentActivity
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import com.github.cfogrady.vb.dim.card.BemCard
+import com.github.cfogrady.vb.dim.card.DimCard
import com.github.cfogrady.vb.dim.card.DimReader
+import com.github.cfogrady.vbnfc.data.NfcCharacter
import com.github.nacabaro.vbhelper.database.AppDatabase
import com.github.nacabaro.vbhelper.di.VBHelper
-import com.github.nacabaro.vbhelper.domain.Sprites
+import com.github.nacabaro.vbhelper.domain.characters.Sprite
import com.github.nacabaro.vbhelper.domain.characters.Card
import com.github.nacabaro.vbhelper.domain.characters.Character
import com.github.nacabaro.vbhelper.source.ApkSecretsImporter
@@ 139,22 141,62 @@ class SettingsScreenControllerImpl(
val domainCharacters = mutableListOf<Character>()
for (index in 0 until characters.size) {
+ var domainSprite: Sprite? = null;
+
+ if (index < 2 && card is DimCard) {
+ domainSprite = Sprite(
+ width = card.spriteData.sprites[spriteCounter + 1].spriteDimensions.width,
+ height = card.spriteData.sprites[spriteCounter + 1].spriteDimensions.height,
+ spriteIdle1 = card.spriteData.sprites[spriteCounter + 1].pixelData,
+ spriteIdle2 = card.spriteData.sprites[spriteCounter + 2].pixelData,
+ spriteWalk1 = card.spriteData.sprites[spriteCounter + 1].pixelData,
+ spriteWalk2 = card.spriteData.sprites[spriteCounter + 3].pixelData,
+ spriteRun1 = card.spriteData.sprites[spriteCounter + 1].pixelData,
+ spriteRun2 = card.spriteData.sprites[spriteCounter + 3].pixelData,
+ spriteTrain1 = card.spriteData.sprites[spriteCounter + 1].pixelData,
+ spriteTrain2 = card.spriteData.sprites[spriteCounter + 3].pixelData,
+ 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
+ )
+ } else {
+ domainSprite = Sprite(
+ width = card.spriteData.sprites[spriteCounter + 1].spriteDimensions.width,
+ height = card.spriteData.sprites[spriteCounter + 1].spriteDimensions.height,
+ spriteIdle1 = card.spriteData.sprites[spriteCounter + 1].pixelData,
+ spriteIdle2 = card.spriteData.sprites[spriteCounter + 2].pixelData,
+ spriteWalk1 = card.spriteData.sprites[spriteCounter + 3].pixelData,
+ spriteWalk2 = card.spriteData.sprites[spriteCounter + 4].pixelData,
+ spriteRun1 = card.spriteData.sprites[spriteCounter + 5].pixelData,
+ spriteRun2 = card.spriteData.sprites[spriteCounter + 6].pixelData,
+ spriteTrain1 = card.spriteData.sprites[spriteCounter + 7].pixelData,
+ spriteTrain2 = card.spriteData.sprites[spriteCounter + 8].pixelData,
+ spriteHappy = card.spriteData.sprites[spriteCounter + 9].pixelData,
+ spriteSleep = card.spriteData.sprites[spriteCounter + 10].pixelData,
+ spriteAttack = card.spriteData.sprites[spriteCounter + 11].pixelData,
+ spriteDodge = card.spriteData.sprites[spriteCounter + 12].pixelData
+ )
+ }
+
+
+ val spriteId = database
+ .spriteDao()
+ .insertSprite(domainSprite)
+
domainCharacters.add(
Character(
dimId = dimId,
+ spriteId = spriteId,
monIndex = index,
name = card.spriteData.sprites[spriteCounter].pixelData,
stage = characters[index].stage,
- attribute = characters[index].attribute,
+ attribute = NfcCharacter.Attribute.entries[characters[index].attribute],
baseHp = characters[index].hp,
baseBp = characters[index].dp,
baseAp = characters[index].ap,
- sprite1 = card.spriteData.sprites[spriteCounter + 1].pixelData,
- sprite2 = card.spriteData.sprites[spriteCounter + 2].pixelData,
- nameWidth = card.spriteData.sprites[spriteCounter].width,
- nameHeight = card.spriteData.sprites[spriteCounter].height,
- spritesWidth = card.spriteData.sprites[spriteCounter + 1].width,
- spritesHeight = card.spriteData.sprites[spriteCounter + 1].height
+ nameWidth = card.spriteData.sprites[spriteCounter].spriteDimensions.width,
+ nameHeight = card.spriteData.sprites[spriteCounter].spriteDimensions.height,
)
)
@@ 172,18 214,6 @@ class SettingsScreenControllerImpl(
database
.characterDao()
.insertCharacter(*domainCharacters.toTypedArray())
-
- val sprites = card.spriteData.sprites.map { sprite ->
- Sprites(
- id = 0,
- sprite = sprite.pixelData,
- width = sprite.width,
- height = sprite.height
- )
- }
- database
- .characterDao()
- .insertSprite(*sprites.toTypedArray())
}
inputStream?.close()
R app/src/main/java/com/github/nacabaro/vbhelper/screens/SpriteViewer.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewer.kt +9 -32
@@ 1,55 1,38 @@
-package com.github.nacabaro.vbhelper.screens
+package com.github.nacabaro.vbhelper.screens.spriteViewer
import android.graphics.Bitmap
import android.util.Log
import androidx.compose.foundation.Image
-import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
-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.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
-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.mutableStateListOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.asImageBitmap
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import com.github.nacabaro.vbhelper.components.TopBanner
-import com.github.nacabaro.vbhelper.di.VBHelper
-import com.github.nacabaro.vbhelper.domain.Sprites
-import com.github.nacabaro.vbhelper.source.SpriteRepo
-import kotlinx.coroutines.launch
-import java.nio.ByteBuffer
@Composable
fun SpriteViewer(
- navController: NavController
+ navController: NavController,
+ spriteViewerController: SpriteViewerController
) {
- val coroutineScope = rememberCoroutineScope()
- val application = LocalContext.current.applicationContext as VBHelper
- val db = application.container.db
- val spriteRepo = SpriteRepo(db)
-
- val spriteList = remember { mutableStateListOf<Sprites>() }
+ val spriteList = remember { mutableStateListOf<Bitmap>() }
Log.d("SpriteViewer", "spriteList: $spriteList")
- LaunchedEffect(spriteRepo) {
- coroutineScope.launch {
- spriteList.clear()
- spriteList.addAll(spriteRepo.getAllSprites())
- }
+ LaunchedEffect(spriteViewerController) {
+ val sprites = spriteViewerController.getAllSprites()
+ val bitmapData = spriteViewerController.convertToBitmap(sprites)
+ spriteList.addAll(bitmapData)
}
Scaffold (
@@ 69,13 52,7 @@ fun SpriteViewer(
.padding(top = contentPadding.calculateTopPadding())
) {
items(spriteList) { sprite ->
- val bitmap = remember (sprite.sprite) {
- Log.d("SpriteViewer", "sprite: $sprite")
- Bitmap.createBitmap(sprite.width, sprite.height, Bitmap.Config.RGB_565).apply {
- copyPixelsFromBuffer(ByteBuffer.wrap(sprite.sprite))
- }
- }
- val imageBitmap = remember(bitmap) { bitmap.asImageBitmap() }
+ val imageBitmap = remember(sprite) { sprite.asImageBitmap() }
Image(
bitmap = imageBitmap,
contentDescription = "Sprite",
A app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerController.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerController.kt +9 -0
@@ 0,0 1,9 @@
+package com.github.nacabaro.vbhelper.screens.spriteViewer
+
+import android.graphics.Bitmap
+import com.github.nacabaro.vbhelper.domain.characters.Sprite
+
+interface SpriteViewerController {
+ suspend fun getAllSprites(): List<Sprite>
+ fun convertToBitmap(sprites: List<Sprite>): List<Bitmap>
+}<
\ No newline at end of file
A app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerControllerImpl.kt => app/src/main/java/com/github/nacabaro/vbhelper/screens/spriteViewer/SpriteViewerControllerImpl.kt +68 -0
@@ 0,0 1,68 @@
+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
+
+class SpriteViewerControllerImpl(
+ private val context: ComponentActivity
+) : SpriteViewerController {
+ override suspend fun getAllSprites(): List<Sprite> {
+ val applicationContext = context.applicationContext as VBHelper
+ val db = applicationContext.container.db
+ val sprites = db.spriteDao().getAllSprites()
+ return sprites
+ }
+
+ // I don't like this, chief
+ override fun convertToBitmap(sprites: List<Sprite>): List<Bitmap> {
+ val bitmapList = mutableListOf<Bitmap>()
+
+ 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))
+ })
+ }
+
+ return bitmapList
+ }
+}<
\ No newline at end of file
D app/src/main/java/com/github/nacabaro/vbhelper/source/SpriteRepo.kt => app/src/main/java/com/github/nacabaro/vbhelper/source/SpriteRepo.kt +0 -12
@@ 1,12 0,0 @@
-package com.github.nacabaro.vbhelper.source
-
-import com.github.nacabaro.vbhelper.database.AppDatabase
-import com.github.nacabaro.vbhelper.domain.Sprites
-
-class SpriteRepo (
- private val db: AppDatabase
-) {
- suspend fun getAllSprites(): List<Sprites> {
- return db.characterDao().getAllSprites()
- }
-}