Updated sprites to load from phone's internal storage.

This commit is contained in:
lightheel 2025-10-19 10:20:01 -04:00
parent 68ad57b78f
commit ac02205f76
6 changed files with 114 additions and 37 deletions

View File

@ -32,9 +32,9 @@ class AttackSpriteManager(private val context: Context) {
private val gson = Gson() private val gson = Gson()
private val characterDataCache = mutableMapOf<String, CharacterData>() private val characterDataCache = mutableMapOf<String, CharacterData>()
// Get the external storage directory for attack sprites // Get the internal storage directory for attack sprites
private fun getAttackTexturesPath(): String { private fun getAttackTexturesPath(): String {
return "VBHelper/battle_sprites/extracted_atksprites" return "battle_sprites/extracted_atksprites"
} }
fun getAttackSprite(characterId: String, isLarge: Boolean = false): Bitmap? { fun getAttackSprite(characterId: String, isLarge: Boolean = false): Bitmap? {
@ -58,10 +58,9 @@ class AttackSpriteManager(private val context: Context) {
return null return null
} }
// Load the attack sprite from external storage // Load the attack sprite from internal storage
val externalDir = Environment.getExternalStorageDirectory()
val attackFilePath = "${getAttackTexturesPath()}/$attackFileName.png" val attackFilePath = "${getAttackTexturesPath()}/$attackFileName.png"
val attackFile = File(externalDir, attackFilePath) val attackFile = File(context.filesDir, attackFilePath)
println("AttackSpriteManager: Attack file path = ${attackFile.absolutePath}") println("AttackSpriteManager: Attack file path = ${attackFile.absolutePath}")
println("AttackSpriteManager: Attack file exists = ${attackFile.exists()}") println("AttackSpriteManager: Attack file exists = ${attackFile.exists()}")
@ -89,9 +88,8 @@ class AttackSpriteManager(private val context: Context) {
} }
try { try {
// Load character data from JSON file in external storage // Load character data from JSON file in internal storage
val externalDir = Environment.getExternalStorageDirectory() val characterDataFile = File(context.filesDir, "battle_sprites/extracted_digimon_stats/character_data/CharacterData.json")
val characterDataFile = File(externalDir, "VBHelper/battle_sprites/extracted_digimon_stats/character_data/CharacterData.json")
println("AttackSpriteManager: Character data file path = ${characterDataFile.absolutePath}") println("AttackSpriteManager: Character data file path = ${characterDataFile.absolutePath}")
println("AttackSpriteManager: Character data file exists = ${characterDataFile.exists()}") println("AttackSpriteManager: Character data file exists = ${characterDataFile.exists()}")

View File

@ -38,10 +38,9 @@ class BattleSpriteManager(private val context: Context) {
private val gson = Gson() private val gson = Gson()
private val spriteCache = mutableMapOf<String, Bitmap>() private val spriteCache = mutableMapOf<String, Bitmap>()
// Get the external storage directory for sprite files // Get the internal storage directory for sprite files
private fun getSpriteBaseDir(): File { private fun getSpriteBaseDir(): File {
val externalDir = Environment.getExternalStorageDirectory() return File(context.filesDir, "battle_sprites/extracted_assets")
return File(externalDir, "VBHelper/battle_sprites/extracted_assets")
} }
fun loadSprite(spriteName: String, atlasName: String): Bitmap? { fun loadSprite(spriteName: String, atlasName: String): Bitmap? {

View File

@ -10,10 +10,9 @@ import java.io.File
class HitEffectSpriteManager(private val context: Context) { class HitEffectSpriteManager(private val context: Context) {
private val spriteCache = mutableMapOf<String, Bitmap>() private val spriteCache = mutableMapOf<String, Bitmap>()
// Get the external storage directory for hit effect sprites // Get the internal storage directory for hit effect sprites
private fun getHitSpritesDir(): File { private fun getHitSpritesDir(): File {
val externalDir = Environment.getExternalStorageDirectory() return File(context.filesDir, "battle_sprites/extracted_hit_sprites")
return File(externalDir, "VBHelper/battle_sprites/extracted_hit_sprites")
} }
/** /**

View File

@ -9,10 +9,9 @@ import java.io.File
class IndividualSpriteManager(private val context: Context) { class IndividualSpriteManager(private val context: Context) {
private val spriteCache = mutableMapOf<String, Bitmap>() private val spriteCache = mutableMapOf<String, Bitmap>()
// Get the external storage directory for sprite files // Get the internal storage directory for sprite files
private fun getSpriteBaseDir(): File { private fun getSpriteBaseDir(): File {
val externalDir = Environment.getExternalStorageDirectory() return File(context.filesDir, "battle_sprites/extracted_assets/sprites")
return File(externalDir, "VBHelper/battle_sprites/extracted_assets/sprites")
} }
/** /**

View File

@ -1,19 +1,70 @@
package com.github.nacabaro.vbhelper.battle package com.github.nacabaro.vbhelper.battle
import android.content.Context import android.content.Context
import android.os.Environment
import java.io.File import java.io.File
import java.io.FileOutputStream import java.io.FileOutputStream
import java.io.IOException import java.io.IOException
import java.io.FileInputStream
class SpriteFileManager(private val context: Context) { class SpriteFileManager(private val context: Context) {
// Get the external storage directory for sprite files // Get the external storage directory where files are already located
private fun getSpriteBaseDir(): File { private fun getExternalSpriteBaseDir(): File {
val externalDir = Environment.getExternalStorageDirectory() val externalDir = android.os.Environment.getExternalStorageDirectory()
return File(externalDir, "VBHelper/battle_sprites") return File(externalDir, "VBHelper/battle_sprites")
} }
// Get the internal storage directory for sprite files
private fun getInternalSpriteBaseDir(): File {
return File(context.filesDir, "battle_sprites")
}
fun copySpriteFilesToInternalStorage() {
try {
println("Starting sprite file copy process from external storage to internal storage...")
val externalDir = getExternalSpriteBaseDir()
val internalDir = getInternalSpriteBaseDir()
// Check if external directory exists
if (!externalDir.exists()) {
println("External sprite directory does not exist: ${externalDir.absolutePath}")
return
}
println("External sprite directory exists: ${externalDir.absolutePath}")
println("Copying to internal storage: ${internalDir.absolutePath}")
// Create internal directory if it doesn't exist
if (!internalDir.exists()) {
val created = internalDir.mkdirs()
println("Created internal sprite directory: $created")
}
// Copy all subdirectories from external to internal storage
val externalFiles = externalDir.listFiles()
if (externalFiles != null) {
println("Found ${externalFiles.size} items in external directory")
externalFiles.forEach { item ->
val targetItem = File(internalDir, item.name)
if (item.isDirectory) {
println("Copying directory: ${item.name}")
copyDirectory(item, targetItem)
} else {
println("Copying file: ${item.name}")
copyFile(item, targetItem)
}
}
}
println("Sprite files copied successfully to internal storage: ${internalDir.absolutePath}")
} catch (e: Exception) {
println("Error copying sprite files to internal storage: ${e.message}")
e.printStackTrace()
}
}
fun copySpriteFilesToExternalStorage() { fun copySpriteFilesToExternalStorage() {
try { try {
println("Starting sprite file copy process to external storage...") println("Starting sprite file copy process to external storage...")
@ -55,7 +106,7 @@ class SpriteFileManager(private val context: Context) {
} }
// Create the base directory for battle_sprites in external storage // Create the base directory for battle_sprites in external storage
val battleSpritesDir = getSpriteBaseDir() val battleSpritesDir = getExternalSpriteBaseDir()
if (!battleSpritesDir.exists()) { if (!battleSpritesDir.exists()) {
battleSpritesDir.mkdirs() battleSpritesDir.mkdirs()
println("Created battle_sprites directory in external storage: ${battleSpritesDir.absolutePath}") println("Created battle_sprites directory in external storage: ${battleSpritesDir.absolutePath}")
@ -171,6 +222,39 @@ class SpriteFileManager(private val context: Context) {
} }
} }
private fun copyDirectory(sourceDir: File, targetDir: File) {
if (!targetDir.exists()) {
targetDir.mkdirs()
}
val files = sourceDir.listFiles()
if (files != null) {
files.forEach { file ->
val targetFile = File(targetDir, file.name)
if (file.isDirectory) {
copyDirectory(file, targetFile)
} else {
copyFile(file, targetFile)
}
}
}
}
private fun copyFile(sourceFile: File, targetFile: File) {
try {
val inputStream = FileInputStream(sourceFile)
val outputStream = FileOutputStream(targetFile)
inputStream.copyTo(outputStream)
inputStream.close()
outputStream.close()
println("Copied: ${sourceFile.name} -> ${targetFile.absolutePath}")
} catch (e: IOException) {
println("Error copying file ${sourceFile.name}: ${e.message}")
}
}
private fun copyAssetFile(assetPath: String, targetFile: File) { private fun copyAssetFile(assetPath: String, targetFile: File) {
try { try {
val inputStream = context.assets.open(assetPath) val inputStream = context.assets.open(assetPath)
@ -187,7 +271,7 @@ class SpriteFileManager(private val context: Context) {
} }
fun checkSpriteFilesExist(): Boolean { fun checkSpriteFilesExist(): Boolean {
val battleSpritesDir = getSpriteBaseDir() val battleSpritesDir = getInternalSpriteBaseDir()
val extractedAssetsDir = File(battleSpritesDir, "extracted_assets") val extractedAssetsDir = File(battleSpritesDir, "extracted_assets")
val extractedStatsDir = File(battleSpritesDir, "extracted_digimon_stats") val extractedStatsDir = File(battleSpritesDir, "extracted_digimon_stats")
val atkspritesDir = File(battleSpritesDir, "extracted_atksprites") val atkspritesDir = File(battleSpritesDir, "extracted_atksprites")
@ -199,7 +283,7 @@ class SpriteFileManager(private val context: Context) {
val atkspritesExist = atkspritesDir.exists() && atkspritesDir.listFiles()?.isNotEmpty() == true val atkspritesExist = atkspritesDir.exists() && atkspritesDir.listFiles()?.isNotEmpty() == true
val battlebgsExist = battlebgsDir.exists() && battlebgsDir.listFiles()?.isNotEmpty() == true val battlebgsExist = battlebgsDir.exists() && battlebgsDir.listFiles()?.isNotEmpty() == true
println("Checking sprite files exist:") println("Checking sprite files exist in internal storage:")
println(" battle_sprites exists: $battleSpritesExist") println(" battle_sprites exists: $battleSpritesExist")
println(" extracted_assets exists: $assetsExist") println(" extracted_assets exists: $assetsExist")
println(" extracted_digimon_stats exists: $statsExist") println(" extracted_digimon_stats exists: $statsExist")
@ -211,11 +295,11 @@ class SpriteFileManager(private val context: Context) {
fun clearSpriteFiles() { fun clearSpriteFiles() {
try { try {
val battleSpritesDir = getSpriteBaseDir() val battleSpritesDir = getInternalSpriteBaseDir()
if (battleSpritesDir.exists()) { if (battleSpritesDir.exists()) {
deleteDirectory(battleSpritesDir) deleteDirectory(battleSpritesDir)
println("Cleared battle_sprites directory") println("Cleared battle_sprites directory from internal storage")
} }
} catch (e: Exception) { } catch (e: Exception) {

View File

@ -1602,10 +1602,10 @@ fun BattlesScreen() {
println("BATTLESCREEN: LaunchedEffect triggered - checking sprite files...") println("BATTLESCREEN: LaunchedEffect triggered - checking sprite files...")
val spriteFileManager = SpriteFileManager(context) val spriteFileManager = SpriteFileManager(context)
if (!spriteFileManager.checkSpriteFilesExist()) { if (!spriteFileManager.checkSpriteFilesExist()) {
println("BATTLESCREEN: Copying sprite files to external storage...") println("BATTLESCREEN: Copying sprite files from external storage to internal storage...")
spriteFileManager.copySpriteFilesToExternalStorage() spriteFileManager.copySpriteFilesToInternalStorage()
} else { } else {
println("BATTLESCREEN: Sprite files already exist in external storage") println("BATTLESCREEN: Sprite files already exist in internal storage")
} }
} }
@ -2265,11 +2265,10 @@ fun AnimatedBattleBackground(
println("DEBUG: Screen dimensions = ${screenWidth.value}x${screenHeight.value}dp") println("DEBUG: Screen dimensions = ${screenWidth.value}x${screenHeight.value}dp")
} }
// Load background image from external storage // Load background image from internal storage
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
try { try {
val externalDir = Environment.getExternalStorageDirectory() val backgroundFile = File(context.filesDir, "battle_sprites/extracted_battlebgs/BattleBg_0015_BattleBg_0012.png")
val backgroundFile = File(externalDir, "VBHelper/battle_sprites/extracted_battlebgs/BattleBg_0015_BattleBg_0012.png")
if (backgroundFile.exists()) { if (backgroundFile.exists()) {
backgroundBitmap = BitmapFactory.decodeFile(backgroundFile.absolutePath) backgroundBitmap = BitmapFactory.decodeFile(backgroundFile.absolutePath)
println("Successfully loaded battle background: ${backgroundFile.absolutePath}") println("Successfully loaded battle background: ${backgroundFile.absolutePath}")
@ -2372,14 +2371,13 @@ fun MultiLayerAnimatedBattleBackground(
println("DEBUG: Multi-layer screen dimensions = ${screenWidth.value}x${screenHeight.value}dp") println("DEBUG: Multi-layer screen dimensions = ${screenWidth.value}x${screenHeight.value}dp")
} }
// Load all three background layers from external storage // Load all three background layers from internal storage
LaunchedEffect(backgroundSetIndex) { LaunchedEffect(backgroundSetIndex) {
try { try {
val externalDir = Environment.getExternalStorageDirectory()
val selectedSet = backgroundSets[backgroundSetIndex] val selectedSet = backgroundSets[backgroundSetIndex]
// Back layer // Back layer
val backLayerFile = File(externalDir, "VBHelper/battle_sprites/extracted_battlebgs/${selectedSet.backLayer}") val backLayerFile = File(context.filesDir, "battle_sprites/extracted_battlebgs/${selectedSet.backLayer}")
if (backLayerFile.exists()) { if (backLayerFile.exists()) {
backLayerBitmap = BitmapFactory.decodeFile(backLayerFile.absolutePath) backLayerBitmap = BitmapFactory.decodeFile(backLayerFile.absolutePath)
println("Successfully loaded back layer background (Set ${backgroundSetIndex + 1}): ${backLayerFile.absolutePath}") println("Successfully loaded back layer background (Set ${backgroundSetIndex + 1}): ${backLayerFile.absolutePath}")
@ -2388,7 +2386,7 @@ fun MultiLayerAnimatedBattleBackground(
} }
// Middle layer // Middle layer
val middleLayerFile = File(externalDir, "VBHelper/battle_sprites/extracted_battlebgs/${selectedSet.middleLayer}") val middleLayerFile = File(context.filesDir, "battle_sprites/extracted_battlebgs/${selectedSet.middleLayer}")
if (middleLayerFile.exists()) { if (middleLayerFile.exists()) {
middleLayerBitmap = BitmapFactory.decodeFile(middleLayerFile.absolutePath) middleLayerBitmap = BitmapFactory.decodeFile(middleLayerFile.absolutePath)
println("Successfully loaded middle layer background (Set ${backgroundSetIndex + 1}): ${middleLayerFile.absolutePath}") println("Successfully loaded middle layer background (Set ${backgroundSetIndex + 1}): ${middleLayerFile.absolutePath}")
@ -2397,7 +2395,7 @@ fun MultiLayerAnimatedBattleBackground(
} }
// Front layer // Front layer
val frontLayerFile = File(externalDir, "VBHelper/battle_sprites/extracted_battlebgs/${selectedSet.frontLayer}") val frontLayerFile = File(context.filesDir, "battle_sprites/extracted_battlebgs/${selectedSet.frontLayer}")
if (frontLayerFile.exists()) { if (frontLayerFile.exists()) {
frontLayerBitmap = BitmapFactory.decodeFile(frontLayerFile.absolutePath) frontLayerBitmap = BitmapFactory.decodeFile(frontLayerFile.absolutePath)
println("Successfully loaded front layer background (Set ${backgroundSetIndex + 1}): ${frontLayerFile.absolutePath}") println("Successfully loaded front layer background (Set ${backgroundSetIndex + 1}): ${frontLayerFile.absolutePath}")