From 41077179fe855b4fc2fdcc1a8361e0f3488fbcbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Ma=C5=A1a?= Date: Mon, 24 Jun 2024 01:40:55 +0200 Subject: [PATCH] WIP --- .../common/character/CharacterDetailScreen.kt | 26 +++++++++++++++--- .../characteristics/CharacteristicsScreen.kt | 27 +------------------ .../common/core/ui/primitives/ItemIcon.kt | 7 ++--- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/CharacterDetailScreen.kt b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/CharacterDetailScreen.kt index 44940e07f..13b5d25e4 100644 --- a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/CharacterDetailScreen.kt +++ b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/CharacterDetailScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.material.icons.rounded.Edit import androidx.compose.material.icons.rounded.ExpandMore import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf @@ -28,6 +29,7 @@ import androidx.compose.ui.unit.dp import cafe.adriel.voyager.core.screen.Screen import cz.frantisekmasa.wfrp_master.common.Str import cz.frantisekmasa.wfrp_master.common.character.characteristics.CharacteristicsScreen +import cz.frantisekmasa.wfrp_master.common.character.characteristics.CompendiumCareer import cz.frantisekmasa.wfrp_master.common.character.combat.CharacterCombatScreen import cz.frantisekmasa.wfrp_master.common.character.conditions.ConditionsScreen import cz.frantisekmasa.wfrp_master.common.character.notes.NotesScreen @@ -105,7 +107,8 @@ data class CharacterDetailScreen( title = { CharacterTitle( partyId = state.characterId.partyId, - partyName = state.partyName, + // TODO: Use separate field in top level state + career = state.characteristicsScreenState.compendiumCareer, character = state.character, currentTab = currentTab, isGameMaster = state.isGameMaster, @@ -141,9 +144,9 @@ data class CharacterDetailScreen( @Composable private fun CharacterTitle( partyId: PartyId, - partyName: String, state: CharacterPickerState, character: Character, + career: CompendiumCareer?, assignCharacter: suspend (Character, UserId) -> Unit, currentTab: CharacterTab?, isGameMaster: Boolean, @@ -152,6 +155,9 @@ data class CharacterDetailScreen( val canAddCharacters = !isGameMaster val navigation = LocalNavigationTransaction.current + val subtitle = ((character.race?.let { "${it.localizedName} " } ?: "") + + careerName(career, character)).takeIf { it.isNotBlank() } + if (state.allCharacters.isNotEmpty() || canAddCharacters) { var unassignedCharactersDialogOpened by remember { mutableStateOf(false) } @@ -187,7 +193,7 @@ data class CharacterDetailScreen( ) { Column { Text(character.name) - Subtitle(partyName) + subtitle?.let { Subtitle(it) } } if (state.allCharacters.size > 1 || canAddCharacters) { @@ -255,7 +261,7 @@ data class CharacterDetailScreen( } else { Column { Text(character.name) - Subtitle(partyName) + subtitle?.let { Subtitle(it) } } } } @@ -398,3 +404,15 @@ private fun SkeletonScaffold() { FullScreenProgress() } } + +@Stable +private fun careerName( + career: CompendiumCareer?, + character: Character, +): String { + if (career == null) { + return character.career + } + + return career.level.name +} diff --git a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/characteristics/CharacteristicsScreen.kt b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/characteristics/CharacteristicsScreen.kt index 5a5eda908..c65a489dd 100644 --- a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/characteristics/CharacteristicsScreen.kt +++ b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/character/characteristics/CharacteristicsScreen.kt @@ -39,6 +39,7 @@ import cz.frantisekmasa.wfrp_master.common.core.domain.Characteristic import cz.frantisekmasa.wfrp_master.common.core.domain.Expression import cz.frantisekmasa.wfrp_master.common.core.domain.Stats import cz.frantisekmasa.wfrp_master.common.core.domain.character.Character +import cz.frantisekmasa.wfrp_master.common.core.domain.character.CurrentConditions import cz.frantisekmasa.wfrp_master.common.core.domain.character.Points import cz.frantisekmasa.wfrp_master.common.core.domain.character.Points.PointPool import cz.frantisekmasa.wfrp_master.common.core.domain.identifiers.CharacterId @@ -196,20 +197,6 @@ private fun CharacterTopPanel( Modifier.padding(start = Spacing.medium), horizontalAlignment = Alignment.End, ) { - Text( - character.name, - style = MaterialTheme.typography.h6, - softWrap = false, - overflow = TextOverflow.Ellipsis, - ) - Text( - (character.race?.let { "${it.localizedName} " } ?: "") + - careerName(career, character), - style = MaterialTheme.typography.caption, - softWrap = false, - overflow = TextOverflow.Ellipsis, - ) - WoundsBadge(character, points, update = onUpdate) } } @@ -220,18 +207,6 @@ private fun CharacterTopPanel( } } -@Stable -private fun careerName( - career: CompendiumCareer?, - character: Character, -): String { - if (career == null) { - return character.career - } - - return career.level.name -} - @Composable private fun WoundsBadge( character: Character, diff --git a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/ui/primitives/ItemIcon.kt b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/ui/primitives/ItemIcon.kt index af9a76ee6..f101f6ae0 100644 --- a/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/ui/primitives/ItemIcon.kt +++ b/common/src/commonMain/kotlin/cz/frantisekmasa/wfrp_master/common/core/ui/primitives/ItemIcon.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.ContentAlpha import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable @@ -64,8 +65,8 @@ fun ItemIcon( VISUAL_ONLY_ICON_DESCRIPTION, modifier = modifier - .clip(CircleShape) - .background(backgroundColor, CircleShape) + .clip(RoundedCornerShape(Spacing.small)) + .background(backgroundColor, RoundedCornerShape(Spacing.small)) .width(dimensions) .height(dimensions), ) @@ -109,7 +110,7 @@ private fun ItemIcon( colorFilter = ColorFilter.tint(tint), modifier = Modifier - .background(backgroundColor, CircleShape) + .background(backgroundColor, RoundedCornerShape(Spacing.small)) .padding(size.padding) .width(size.dimensions) .height(size.dimensions),