From ac02205f762917cacb9423de8f775357d9eb91ec Mon Sep 17 00:00:00 2001 From: lightheel Date: Sun, 19 Oct 2025 10:20:01 -0400 Subject: [PATCH] Updated sprites to load from phone's internal storage. --- .../vbhelper/battle/AttackSpriteManager.kt | 14 ++- .../vbhelper/battle/BattleSpriteManager.kt | 5 +- .../vbhelper/battle/HitEffectSpriteManager.kt | 5 +- .../battle/IndividualSpriteManager.kt | 5 +- .../vbhelper/battle/SpriteFileManager.kt | 102 ++++++++++++++++-- .../vbhelper/screens/BattlesScreen.kt | 20 ++-- 6 files changed, 114 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/battle/AttackSpriteManager.kt b/app/src/main/java/com/github/nacabaro/vbhelper/battle/AttackSpriteManager.kt index 4f7d1ec..2a03ea8 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/battle/AttackSpriteManager.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/battle/AttackSpriteManager.kt @@ -32,9 +32,9 @@ class AttackSpriteManager(private val context: Context) { private val gson = Gson() private val characterDataCache = mutableMapOf() - // Get the external storage directory for attack sprites + // Get the internal storage directory for attack sprites private fun getAttackTexturesPath(): String { - return "VBHelper/battle_sprites/extracted_atksprites" + return "battle_sprites/extracted_atksprites" } fun getAttackSprite(characterId: String, isLarge: Boolean = false): Bitmap? { @@ -58,10 +58,9 @@ class AttackSpriteManager(private val context: Context) { return null } - // Load the attack sprite from external storage - val externalDir = Environment.getExternalStorageDirectory() + // Load the attack sprite from internal storage 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 exists = ${attackFile.exists()}") @@ -89,9 +88,8 @@ class AttackSpriteManager(private val context: Context) { } try { - // Load character data from JSON file in external storage - val externalDir = Environment.getExternalStorageDirectory() - val characterDataFile = File(externalDir, "VBHelper/battle_sprites/extracted_digimon_stats/character_data/CharacterData.json") + // Load character data from JSON file in internal storage + val characterDataFile = File(context.filesDir, "battle_sprites/extracted_digimon_stats/character_data/CharacterData.json") println("AttackSpriteManager: Character data file path = ${characterDataFile.absolutePath}") println("AttackSpriteManager: Character data file exists = ${characterDataFile.exists()}") diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/battle/BattleSpriteManager.kt b/app/src/main/java/com/github/nacabaro/vbhelper/battle/BattleSpriteManager.kt index f7fd5c1..7f1708b 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/battle/BattleSpriteManager.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/battle/BattleSpriteManager.kt @@ -38,10 +38,9 @@ class BattleSpriteManager(private val context: Context) { private val gson = Gson() private val spriteCache = mutableMapOf() - // Get the external storage directory for sprite files + // Get the internal storage directory for sprite files private fun getSpriteBaseDir(): File { - val externalDir = Environment.getExternalStorageDirectory() - return File(externalDir, "VBHelper/battle_sprites/extracted_assets") + return File(context.filesDir, "battle_sprites/extracted_assets") } fun loadSprite(spriteName: String, atlasName: String): Bitmap? { diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/battle/HitEffectSpriteManager.kt b/app/src/main/java/com/github/nacabaro/vbhelper/battle/HitEffectSpriteManager.kt index 6536040..b7fabfa 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/battle/HitEffectSpriteManager.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/battle/HitEffectSpriteManager.kt @@ -10,10 +10,9 @@ import java.io.File class HitEffectSpriteManager(private val context: Context) { private val spriteCache = mutableMapOf() - // Get the external storage directory for hit effect sprites + // Get the internal storage directory for hit effect sprites private fun getHitSpritesDir(): File { - val externalDir = Environment.getExternalStorageDirectory() - return File(externalDir, "VBHelper/battle_sprites/extracted_hit_sprites") + return File(context.filesDir, "battle_sprites/extracted_hit_sprites") } /** diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/battle/IndividualSpriteManager.kt b/app/src/main/java/com/github/nacabaro/vbhelper/battle/IndividualSpriteManager.kt index f6b9179..09a87e7 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/battle/IndividualSpriteManager.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/battle/IndividualSpriteManager.kt @@ -9,10 +9,9 @@ import java.io.File class IndividualSpriteManager(private val context: Context) { private val spriteCache = mutableMapOf() - // Get the external storage directory for sprite files + // Get the internal storage directory for sprite files private fun getSpriteBaseDir(): File { - val externalDir = Environment.getExternalStorageDirectory() - return File(externalDir, "VBHelper/battle_sprites/extracted_assets/sprites") + return File(context.filesDir, "battle_sprites/extracted_assets/sprites") } /** diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/battle/SpriteFileManager.kt b/app/src/main/java/com/github/nacabaro/vbhelper/battle/SpriteFileManager.kt index 2f663cb..1baa2cd 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/battle/SpriteFileManager.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/battle/SpriteFileManager.kt @@ -1,19 +1,70 @@ package com.github.nacabaro.vbhelper.battle import android.content.Context -import android.os.Environment import java.io.File import java.io.FileOutputStream import java.io.IOException +import java.io.FileInputStream class SpriteFileManager(private val context: Context) { - // Get the external storage directory for sprite files - private fun getSpriteBaseDir(): File { - val externalDir = Environment.getExternalStorageDirectory() + // Get the external storage directory where files are already located + private fun getExternalSpriteBaseDir(): File { + val externalDir = android.os.Environment.getExternalStorageDirectory() 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() { try { 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 - val battleSpritesDir = getSpriteBaseDir() + val battleSpritesDir = getExternalSpriteBaseDir() if (!battleSpritesDir.exists()) { battleSpritesDir.mkdirs() 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) { try { val inputStream = context.assets.open(assetPath) @@ -187,7 +271,7 @@ class SpriteFileManager(private val context: Context) { } fun checkSpriteFilesExist(): Boolean { - val battleSpritesDir = getSpriteBaseDir() + val battleSpritesDir = getInternalSpriteBaseDir() val extractedAssetsDir = File(battleSpritesDir, "extracted_assets") val extractedStatsDir = File(battleSpritesDir, "extracted_digimon_stats") 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 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(" extracted_assets exists: $assetsExist") println(" extracted_digimon_stats exists: $statsExist") @@ -211,11 +295,11 @@ class SpriteFileManager(private val context: Context) { fun clearSpriteFiles() { try { - val battleSpritesDir = getSpriteBaseDir() + val battleSpritesDir = getInternalSpriteBaseDir() if (battleSpritesDir.exists()) { deleteDirectory(battleSpritesDir) - println("Cleared battle_sprites directory") + println("Cleared battle_sprites directory from internal storage") } } catch (e: Exception) { diff --git a/app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt b/app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt index 11c39a6..8f50f31 100644 --- a/app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt +++ b/app/src/main/java/com/github/nacabaro/vbhelper/screens/BattlesScreen.kt @@ -1602,10 +1602,10 @@ fun BattlesScreen() { println("BATTLESCREEN: LaunchedEffect triggered - checking sprite files...") val spriteFileManager = SpriteFileManager(context) if (!spriteFileManager.checkSpriteFilesExist()) { - println("BATTLESCREEN: Copying sprite files to external storage...") - spriteFileManager.copySpriteFilesToExternalStorage() + println("BATTLESCREEN: Copying sprite files from external storage to internal storage...") + spriteFileManager.copySpriteFilesToInternalStorage() } 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") } - // Load background image from external storage + // Load background image from internal storage LaunchedEffect(Unit) { try { - val externalDir = Environment.getExternalStorageDirectory() - val backgroundFile = File(externalDir, "VBHelper/battle_sprites/extracted_battlebgs/BattleBg_0015_BattleBg_0012.png") + val backgroundFile = File(context.filesDir, "battle_sprites/extracted_battlebgs/BattleBg_0015_BattleBg_0012.png") if (backgroundFile.exists()) { backgroundBitmap = BitmapFactory.decodeFile(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") } - // Load all three background layers from external storage + // Load all three background layers from internal storage LaunchedEffect(backgroundSetIndex) { try { - val externalDir = Environment.getExternalStorageDirectory() val selectedSet = backgroundSets[backgroundSetIndex] // 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()) { backLayerBitmap = BitmapFactory.decodeFile(backLayerFile.absolutePath) println("Successfully loaded back layer background (Set ${backgroundSetIndex + 1}): ${backLayerFile.absolutePath}") @@ -2388,7 +2386,7 @@ fun MultiLayerAnimatedBattleBackground( } // 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()) { middleLayerBitmap = BitmapFactory.decodeFile(middleLayerFile.absolutePath) println("Successfully loaded middle layer background (Set ${backgroundSetIndex + 1}): ${middleLayerFile.absolutePath}") @@ -2397,7 +2395,7 @@ fun MultiLayerAnimatedBattleBackground( } // 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()) { frontLayerBitmap = BitmapFactory.decodeFile(frontLayerFile.absolutePath) println("Successfully loaded front layer background (Set ${backgroundSetIndex + 1}): ${frontLayerFile.absolutePath}")