Updated BattleScreen.kt. Now starts battle and allow clicking of first attack button.

This commit is contained in:
lightheel 2025-08-02 06:26:27 -04:00
parent 1d21155198
commit a044d24f5f

View File

@ -49,6 +49,9 @@ import com.github.nacabaro.vbhelper.battle.APIBattleCharacter
import android.util.Log import android.util.Log
import com.github.nacabaro.vbhelper.components.TopBanner import com.github.nacabaro.vbhelper.components.TopBanner
import com.github.nacabaro.vbhelper.battle.RetrofitHelper import com.github.nacabaro.vbhelper.battle.RetrofitHelper
import com.github.nacabaro.vbhelper.battle.SpriteImage
import com.github.nacabaro.vbhelper.battle.AttackSpriteImage
import com.github.nacabaro.vbhelper.battle.SpriteFileManager
class ArenaBattleSystem { class ArenaBattleSystem {
companion object { companion object {
@ -192,6 +195,7 @@ fun BattleScreen(
stage: String = "rookie", stage: String = "rookie",
playerName: String = "Player", playerName: String = "Player",
opponentName: String = "Opponent", opponentName: String = "Opponent",
activeCharacter: APIBattleCharacter? = null,
onBattleComplete: (String?) -> Unit = {}, onBattleComplete: (String?) -> Unit = {},
onExitBattle: () -> Unit = {} onExitBattle: () -> Unit = {}
) { ) {
@ -243,13 +247,15 @@ fun BattleScreen(
battleSystem.startPlayerAttack() battleSystem.startPlayerAttack()
// Apply damage after animation // Apply damage after animation
battleSystem.applyDamage(false, 20f) // Opponent takes damage battleSystem.applyDamage(false, 20f) // Opponent takes damage
} },
activeCharacter = activeCharacter
) )
1 -> OpponentBattleView( 1 -> OpponentBattleView(
battleSystem = battleSystem, battleSystem = battleSystem,
stage = stage, stage = stage,
opponentName = opponentName, opponentName = opponentName,
attackAnimationProgress = animationProgress attackAnimationProgress = animationProgress,
activeCharacter = activeCharacter
) )
} }
@ -272,7 +278,8 @@ fun PlayerBattleView(
stage: String, stage: String,
playerName: String, playerName: String,
attackAnimationProgress: Float, attackAnimationProgress: Float,
onAttackClick: () -> Unit onAttackClick: () -> Unit,
activeCharacter: APIBattleCharacter? = null
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
@ -321,6 +328,21 @@ fun PlayerBattleView(
modifier = Modifier.size(120.dp), modifier = Modifier.size(120.dp),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
SpriteImage(
spriteName = "00", // The sprite number (00, 01, 02, etc.)
atlasName = when (stage) {
"rookie" -> "dim000_mon01"
"champion" -> "dim012_mon04"
"ultimate" -> "dim137_mon09"
"mega" -> "dim012_mon14"
else -> "dim000_mon01"
},
modifier = Modifier
.size(120.dp)
.scale(2f),
contentScale = ContentScale.Fit
)
/*
Image( Image(
painter = painterResource( painter = painterResource(
when (stage) { when (stage) {
@ -337,9 +359,22 @@ fun PlayerBattleView(
.scale(2f), .scale(2f),
contentScale = ContentScale.Fit contentScale = ContentScale.Fit
) )
*/
// Attack animation overlay // Attack animation overlay
if (attackAnimationProgress > 0) { if (attackAnimationProgress > 0) {
AttackSpriteImage(
characterId = activeCharacter?.charaId ?: "dim000_mon03",
isLarge = true,
modifier = Modifier
.size(60.dp)
.offset(
x = (attackAnimationProgress * 200 - 100).dp,
y = 0.dp
),
contentScale = ContentScale.Fit
)
/*
Image( Image(
painter = painterResource(R.drawable.atk_l_00), painter = painterResource(R.drawable.atk_l_00),
contentDescription = "Attack Animation", contentDescription = "Attack Animation",
@ -351,6 +386,7 @@ fun PlayerBattleView(
), ),
contentScale = ContentScale.Fit contentScale = ContentScale.Fit
) )
*/
} }
} }
@ -387,7 +423,8 @@ fun OpponentBattleView(
battleSystem: ArenaBattleSystem, battleSystem: ArenaBattleSystem,
stage: String, stage: String,
opponentName: String, opponentName: String,
attackAnimationProgress: Float attackAnimationProgress: Float,
activeCharacter: APIBattleCharacter? = null
) { ) {
Column( Column(
modifier = Modifier modifier = Modifier
@ -436,6 +473,21 @@ fun OpponentBattleView(
modifier = Modifier.size(120.dp), modifier = Modifier.size(120.dp),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
SpriteImage(
spriteName = "00", // The sprite number (00, 01, 02, etc.)
atlasName = when (stage) {
"rookie" -> "dim000_mon01"
"champion" -> "dim012_mon04"
"ultimate" -> "dim137_mon09"
"mega" -> "dim012_mon14"
else -> "dim000_mon01"
},
modifier = Modifier
.size(120.dp)
.scale(2f),
contentScale = ContentScale.Fit
)
/*
Image( Image(
painter = painterResource( painter = painterResource(
when (stage) { when (stage) {
@ -452,12 +504,13 @@ fun OpponentBattleView(
.scale(-2f, 2f), // Flip horizontally .scale(-2f, 2f), // Flip horizontally
contentScale = ContentScale.Fit contentScale = ContentScale.Fit
) )
*/
// Attack animation overlay // Attack animation overlay
if (attackAnimationProgress > 0) { if (attackAnimationProgress > 0) {
Image( AttackSpriteImage(
painter = painterResource(R.drawable.atk_l_00), characterId = activeCharacter?.charaId ?: "dim000_mon03",
contentDescription = "Attack Animation", isLarge = true,
modifier = Modifier modifier = Modifier
.size(60.dp) .size(60.dp)
.offset( .offset(
@ -489,6 +542,17 @@ fun BattlesScreen() {
var selectedStage by remember { mutableStateOf("") } var selectedStage by remember { mutableStateOf("") }
val context = LocalContext.current val context = LocalContext.current
// Initialize sprite files on first load
LaunchedEffect(Unit) {
val spriteFileManager = SpriteFileManager(context)
if (!spriteFileManager.checkSpriteFilesExist()) {
println("Copying sprite files to internal storage...")
spriteFileManager.copySpriteFilesToInternalStorage()
} else {
println("Sprite files already exist in internal storage")
}
}
val rookieButton = @Composable { val rookieButton = @Composable {
Button( Button(
@ -772,6 +836,7 @@ fun BattlesScreen() {
onClick = { onClick = {
activeCharacter?.let { activeCharacter?.let {
RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 0, 0, opponent.name, 0) { apiResult -> RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 0, 0, opponent.name, 0) { apiResult ->
currentView = "battle-main"
} }
} }
}, },
@ -808,6 +873,7 @@ fun BattlesScreen() {
onClick = { onClick = {
activeCharacter?.let { activeCharacter?.let {
RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 1, 0, opponent.name, 1) { apiResult -> RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 1, 0, opponent.name, 1) { apiResult ->
currentView = "battle-main"
} }
} }
}, },
@ -844,6 +910,7 @@ fun BattlesScreen() {
onClick = { onClick = {
activeCharacter?.let { activeCharacter?.let {
RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 2, 0, opponent.name, 2) { apiResult -> RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 2, 0, opponent.name, 2) { apiResult ->
currentView = "battle-main"
} }
} }
}, },
@ -880,6 +947,7 @@ fun BattlesScreen() {
onClick = { onClick = {
activeCharacter?.let { activeCharacter?.let {
RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 3, 0, opponent.name, 3) { apiResult -> RetrofitHelper().getPVPWinner(context, 0, 2, it.name, 3, 0, opponent.name, 3) { apiResult ->
currentView = "battle-main"
} }
} }
}, },
@ -902,11 +970,74 @@ fun BattlesScreen() {
} }
"battle-main" -> { "battle-main" -> {
var battleSystem by remember { mutableStateOf(ArenaBattleSystem()) }
var currentStage by remember { mutableStateOf("rookie") }
// Initialize battle with character stats
LaunchedEffect(activeCharacter) {
activeCharacter?.let { character ->
battleSystem.initializeBattle(
playerHP = character.currentHp.toFloat(),
opponentHP = character.currentHp.toFloat(),
playerMaxHP = character.baseHp.toFloat(),
opponentMaxHP = character.baseHp.toFloat()
)
}
}
BattleScreen(
battleSystem = battleSystem,
stage = currentStage,
playerName = activeCharacter?.name ?: "Player",
opponentName = "Opponent",
activeCharacter = activeCharacter,
onBattleComplete = { winner ->
// Handle battle completion
currentView = "battle-results"
},
onExitBattle = {
currentView = "main"
}
)
} }
"battle-results" -> { "battle-results" -> {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "Battle Complete!",
fontSize = 24.sp,
fontWeight = FontWeight.Bold,
color = Color.White
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = "Results will be displayed here",
fontSize = 16.sp,
color = Color.White
)
Spacer(modifier = Modifier.height(32.dp))
Button(
onClick = {
currentView = "main"
},
modifier = Modifier
.fillMaxWidth()
.height(50.dp),
colors = ButtonDefaults.buttonColors(
containerColor = Color.Blue
),
shape = RoundedCornerShape(8.dp)
) {
Text("Back to Main Menu", color = Color.White, fontSize = 16.sp)
}
}
} }
} }
} }