115 lines
3.4 KiB
Kotlin
115 lines
3.4 KiB
Kotlin
package components.endcard
|
|
|
|
import androidx.compose.foundation.BorderStroke
|
|
import androidx.compose.foundation.border
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.material.Button
|
|
import androidx.compose.material.ButtonDefaults
|
|
import androidx.compose.material.Text
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.graphics.Color
|
|
import androidx.compose.ui.unit.TextUnit
|
|
import androidx.compose.ui.unit.dp
|
|
import androidx.compose.ui.unit.em
|
|
import components.common.BorderBox
|
|
import data.Player
|
|
import data.toColorOrDefault
|
|
|
|
@Suppress("FunctionName")
|
|
@Composable
|
|
fun EndCard(
|
|
playerPointMap: Map<Player, Long>,
|
|
reviewBoard: () -> Unit,
|
|
close: () -> Unit,
|
|
) {
|
|
val sortedPlayersPoints = playerPointMap.entries
|
|
.sortedByDescending { it.value }
|
|
val firstPlayer = sortedPlayersPoints.first()
|
|
.key
|
|
BorderBox(
|
|
borderColor = firstPlayer.color.toColorOrDefault()
|
|
) {
|
|
Column(
|
|
horizontalAlignment = Alignment.CenterHorizontally,
|
|
verticalArrangement = Arrangement.Center
|
|
) {
|
|
val fontSizeLarge = 5.em
|
|
val spacerHeight = 25.dp
|
|
val fontSizeSmall = 3.em
|
|
Row {
|
|
Text(text = "Congratulations, ${firstPlayer.name}!", fontSize = fontSizeLarge)
|
|
}
|
|
Spacer(modifier = Modifier.fillMaxWidth().height(spacerHeight))
|
|
HighScoreList(sortedPlayersPoints, fontSizeSmall)
|
|
Spacer(modifier = Modifier.fillMaxWidth().height(spacerHeight))
|
|
EndCardButtons(reviewBoard, close)
|
|
}
|
|
}
|
|
}
|
|
|
|
@Suppress("FunctionName")
|
|
@Composable
|
|
fun HighScoreList(sortedPlayersPoints: List<Map.Entry<Player, Long>>, fontSize: TextUnit) {
|
|
Row {
|
|
Column {
|
|
for ((index, data) in sortedPlayersPoints.withIndex()) {
|
|
HighScoreListEntry(player = data.key, rank = index + 1, points = data.value, fontSize = fontSize)
|
|
Spacer(modifier = Modifier.height(5.dp))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Suppress("FunctionName")
|
|
@Composable
|
|
fun HighScoreListEntry(
|
|
player: Player,
|
|
rank: Int,
|
|
points: Long,
|
|
fontSize: TextUnit,
|
|
) {
|
|
Box(
|
|
modifier = Modifier.border(border = BorderStroke(5.dp, player.color.toColorOrDefault()))
|
|
.padding(10.dp),
|
|
contentAlignment = Alignment.Center
|
|
) {
|
|
Row(horizontalArrangement = Arrangement.SpaceBetween) {
|
|
Text(text = "$rank.", fontSize = fontSize)
|
|
Text(text = "${player.name} ($points Pts.)", fontSize = 3.em)
|
|
}
|
|
}
|
|
}
|
|
|
|
@Suppress("FunctionName")
|
|
@Composable
|
|
fun EndCardButtons(reviewBoard: () -> Unit, close: () -> Unit) {
|
|
Row(
|
|
horizontalArrangement = Arrangement.SpaceAround,
|
|
verticalAlignment = Alignment.Bottom
|
|
) {
|
|
Button(
|
|
onClick = reviewBoard,
|
|
colors = ButtonDefaults.buttonColors(Color.DarkGray)
|
|
) {
|
|
Text(
|
|
text = "Review",
|
|
fontSize = 5.em,
|
|
color = Color.White
|
|
)
|
|
}
|
|
Spacer(modifier = Modifier.width(5.dp))
|
|
Button(
|
|
onClick = close,
|
|
colors = ButtonDefaults.buttonColors(Color.Red)
|
|
) {
|
|
Text(
|
|
text = "Close",
|
|
fontSize = 5.em,
|
|
color = Color.White
|
|
)
|
|
}
|
|
}
|
|
}
|