mirror of
https://github.com/nacabaro/vbhelper.git
synced 2026-06-05 13:52:54 +00:00
Added BGM to battles.
This commit is contained in:
parent
c774fd1536
commit
eb82c2afc1
@ -49,6 +49,8 @@ import android.os.Build
|
|||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.media.MediaPlayer
|
||||||
|
import android.os.Environment
|
||||||
//import androidx.compose.animation.core.animateFloatAsState
|
//import androidx.compose.animation.core.animateFloatAsState
|
||||||
//import androidx.compose.animation.core.tween
|
//import androidx.compose.animation.core.tween
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
@ -231,6 +233,9 @@ fun BattleScreen(
|
|||||||
val battleSystem = remember { ArenaBattleSystem() }
|
val battleSystem = remember { ArenaBattleSystem() }
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
|
|
||||||
|
// Background music MediaPlayer
|
||||||
|
var mediaPlayer by remember { mutableStateOf<MediaPlayer?>(null) }
|
||||||
|
|
||||||
// Initialize HP when battle starts
|
// Initialize HP when battle starts
|
||||||
LaunchedEffect(activeCharacter, opponentCharacter) {
|
LaunchedEffect(activeCharacter, opponentCharacter) {
|
||||||
val playerMaxHP = activeCharacter?.baseHp?.toFloat() ?: 100f
|
val playerMaxHP = activeCharacter?.baseHp?.toFloat() ?: 100f
|
||||||
@ -238,6 +243,61 @@ fun BattleScreen(
|
|||||||
battleSystem.initializeHP(playerMaxHP, opponentMaxHP)
|
battleSystem.initializeHP(playerMaxHP, opponentMaxHP)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Start background music when battle starts
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
context?.let { ctx ->
|
||||||
|
try {
|
||||||
|
// Get external storage directory
|
||||||
|
val externalDir = Environment.getExternalStorageDirectory()
|
||||||
|
val musicDir = File(externalDir, "VBHelper/extracted_audio/background_music")
|
||||||
|
|
||||||
|
// Pick a random BGM file (bgm_001.wav to bgm_004.wav)
|
||||||
|
val bgmNumber = kotlin.random.Random.nextInt(1, 5) // 1 to 4
|
||||||
|
val bgmFileName = String.format("bgm_%03d.wav", bgmNumber)
|
||||||
|
val bgmFile = File(musicDir, bgmFileName)
|
||||||
|
|
||||||
|
if (bgmFile.exists()) {
|
||||||
|
println("BATTLESCREEN: Starting background music: $bgmFileName")
|
||||||
|
val player = MediaPlayer().apply {
|
||||||
|
setDataSource(bgmFile.absolutePath)
|
||||||
|
prepare()
|
||||||
|
setOnCompletionListener {
|
||||||
|
// Stop after one playthrough
|
||||||
|
println("BATTLESCREEN: Background music completed, stopping")
|
||||||
|
it.release()
|
||||||
|
mediaPlayer = null
|
||||||
|
}
|
||||||
|
start()
|
||||||
|
}
|
||||||
|
mediaPlayer = player
|
||||||
|
} else {
|
||||||
|
println("BATTLESCREEN: Background music file not found: ${bgmFile.absolutePath}")
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
println("BATTLESCREEN: Error starting background music: ${e.message}")
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up MediaPlayer when battle ends or composable is disposed
|
||||||
|
DisposableEffect(Unit) {
|
||||||
|
onDispose {
|
||||||
|
mediaPlayer?.let { player ->
|
||||||
|
try {
|
||||||
|
if (player.isPlaying) {
|
||||||
|
player.stop()
|
||||||
|
}
|
||||||
|
player.release()
|
||||||
|
println("BATTLESCREEN: Background music stopped and released")
|
||||||
|
} catch (e: Exception) {
|
||||||
|
println("BATTLESCREEN: Error stopping background music: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mediaPlayer = null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Pending damage state for API integration
|
// Pending damage state for API integration
|
||||||
var pendingPlayerDamage by remember { mutableStateOf(0f) }
|
var pendingPlayerDamage by remember { mutableStateOf(0f) }
|
||||||
var pendingOpponentDamage by remember { mutableStateOf(0f) }
|
var pendingOpponentDamage by remember { mutableStateOf(0f) }
|
||||||
@ -2307,9 +2367,13 @@ fun BattlesScreen() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Exit button
|
// Exit button - stop music before exiting
|
||||||
Button(
|
Button(
|
||||||
onClick = { currentView = "main" },
|
onClick = {
|
||||||
|
// Stop background music before exiting
|
||||||
|
// Note: Music will also be stopped by DisposableEffect in BattleScreen
|
||||||
|
currentView = "main"
|
||||||
|
},
|
||||||
modifier = Modifier.align(Alignment.TopCenter),
|
modifier = Modifier.align(Alignment.TopCenter),
|
||||||
colors = ButtonDefaults.buttonColors(containerColor = Color.Red)
|
colors = ButtonDefaults.buttonColors(containerColor = Color.Red)
|
||||||
) {
|
) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user