diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/ribbon/CharacterRibbonFactory.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/ribbon/CharacterRibbonFactory.kt index 806ff47..4cb9c87 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/ribbon/CharacterRibbonFactory.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/player/ribbon/CharacterRibbonFactory.kt @@ -4,6 +4,7 @@ import com.pixelized.desktop.lwa.ui.composable.tooltip.BasicTooltipUio import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.common.CharacterRibbonAlterationUio import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.common.CharacterRibbonPortraitUio import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.common.CharacterRibbonUio +import com.pixelized.desktop.lwa.utils.extention.foldInto import com.pixelized.shared.lwa.model.AlteredCharacterSheetFactory import com.pixelized.shared.lwa.model.alteration.Alteration import com.pixelized.shared.lwa.model.alteration.FieldAlteration @@ -47,7 +48,7 @@ class CharacterRibbonFactory( ) }, ), - status = takeIf { enableCharacterStats }?.let { + status = takeIf { enableCharacterStatus }?.let { alterations.map { alteration -> CharacterRibbonAlterationUio( icon = alteration.metadata.icon ?: DEFAULT_ICON, @@ -56,13 +57,8 @@ class CharacterRibbonFactory( description = alteration.metadata.description, ), ) - }.fold( - initial = mutableListOf>(), - operation = { acc, item -> - if (acc.isEmpty() || acc.last().size == 5) acc.add(mutableListOf()) - acc.last().add(item) - acc - } + }.foldInto( + size = 5, ) } ?: emptyList(), ) diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/GMCharacterEditFactory.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/GMCharacterEditFactory.kt index aaaa196..01e91bb 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/GMCharacterEditFactory.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/GMCharacterEditFactory.kt @@ -153,9 +153,6 @@ class GMCharacterEditFactory( commonSkills = form.commonSkills.map { editedSkill -> val skillId: String = editedSkill.id.unpack() ?: error("Missing skill id") - val currentSkill = sheet?.commonSkills?.firstOrNull { - it.id == skillId - } CharacterSheet.Skill( id = skillId, label = editedSkill.label.unpack() @@ -167,15 +164,12 @@ class GMCharacterEditFactory( bonus = editedSkill.bonus.unpack(), level = editedSkill.level.unpack() ?: 1, occupation = editedSkill.occupation.checked.value, - used = currentSkill?.used ?: false, + used = editedSkill.used, ) }, specialSkills = form.specialSkills.map { editedSkill -> val skillId: String = editedSkill.id.unpack() ?: error("Missing skill id") - val currentSkill = sheet?.commonSkills?.firstOrNull { - it.id == skillId - } CharacterSheet.Skill( id = skillId, label = editedSkill.label.unpack() @@ -185,15 +179,13 @@ class GMCharacterEditFactory( bonus = editedSkill.bonus.unpack(), level = editedSkill.level.unpack() ?: 1, occupation = editedSkill.occupation.checked.value, - used = currentSkill?.used ?: false, + used = editedSkill.used, ) }, magicSkills = form.magicSkills.map { editedSkill -> val skillId: String = editedSkill.id.unpack() ?: error("Missing skill id") - val currentSkill = sheet?.commonSkills?.firstOrNull { - it.id == skillId - } + CharacterSheet.Skill( id = skillId, label = editedSkill.label.unpack() @@ -203,7 +195,7 @@ class GMCharacterEditFactory( bonus = editedSkill.bonus.unpack(), level = editedSkill.level.unpack() ?: 1, occupation = editedSkill.occupation.checked.value, - used = currentSkill?.used ?: false, + used = editedSkill.used, ) }, actions = form.actions.map { @@ -392,7 +384,10 @@ class GMCharacterEditFactory( checkForError = { it.isNotBlank() && it.toIntOrNull() == null }, ), level = levelFlow.createLwaTextField( - checkForError = { it.toIntOrNull() == null }, + checkForError = { + val value = it.toIntOrNull() + value == null || value < 1 + }, ), occupation = MutableStateFlow(skill.occupation).let { flow -> LwaCheckBoxUio( @@ -407,6 +402,7 @@ class GMCharacterEditFactory( }, ) }, + used = skill.used, ) } @@ -458,7 +454,10 @@ class GMCharacterEditFactory( checkForError = { it.isNotBlank() && it.toIntOrNull() == null }, ), level = levelFlow.createLwaTextField( - checkForError = { it.toIntOrNull() == null }, + checkForError = { + val value = it.toIntOrNull() + value == null || value < 1 + }, ), occupation = LwaCheckBoxUio( enable = true, @@ -471,6 +470,7 @@ class GMCharacterEditFactory( occupationFlow.value = it }, ), + used = skill?.used ?: false ) } diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/item/GMSkillFieldUio.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/item/GMSkillFieldUio.kt index c72e155..6e8e31a 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/item/GMSkillFieldUio.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/gamemaster/character/edit/item/GMSkillFieldUio.kt @@ -43,6 +43,7 @@ data class GMSkillFieldUio( val bonus: LwaTextFieldUio, val level: LwaTextFieldUio, val occupation: LwaCheckBoxUio, + val used: Boolean, ) @Stable diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/utils/extention/List+foldInto.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/utils/extention/List+foldInto.kt new file mode 100644 index 0000000..52a6b9d --- /dev/null +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/utils/extention/List+foldInto.kt @@ -0,0 +1,13 @@ +package com.pixelized.desktop.lwa.utils.extention + +fun List.foldInto(size: Int): List> = fold( + initial = mutableListOf>(), + operation = { acc, item -> + if (acc.isEmpty() || acc.last().size == size) { + acc.add(mutableListOf()) + } + acc.also { + it.last().add(item) + } + } +) \ No newline at end of file