11package cz.frantisekmasa.wfrp_master.common.character.trappings
22
3+ import androidx.compose.foundation.layout.Column
34import androidx.compose.foundation.text.KeyboardOptions
45import androidx.compose.runtime.Composable
56import androidx.compose.runtime.MutableState
@@ -91,14 +92,18 @@ fun NonCompendiumTrappingForm(
9192 keyboardOptions = KeyboardOptions .Default .copy(keyboardType = KeyboardType .Number ),
9293 )
9394
94- TextInput (
95- label = stringResource(Str .trappings_label_encumbrance_per_unit),
96- value = formData.encumbrance,
97- maxLength = 8 ,
98- validate = validate,
99- keyboardOptions = KeyboardOptions .Default .copy(keyboardType = KeyboardType .Number ),
100- filters = listOf (Filter .DecimalNumber ),
101- )
95+ Column {
96+ TextInput (
97+ label = stringResource(Str .trappings_label_encumbrance_per_unit),
98+ value = formData.encumbrance,
99+ maxLength = 8 ,
100+ validate = validate,
101+ keyboardOptions = KeyboardOptions .Default .copy(keyboardType = KeyboardType .Number ),
102+ filters = listOf (Filter .DecimalNumber ),
103+ )
104+
105+ EncumbranceCountedCheckbox (formData.isEncumbranceCounted)
106+ }
102107
103108 TextInput (
104109 label = stringResource(Str .trappings_label_description),
@@ -170,6 +175,7 @@ private fun TrappingTypeForm(
170175 WeaponQualitiesPicker (formData)
171176 WeaponFlawsPicker (formData)
172177 }
178+
173179 TrappingTypeOption .ARMOUR -> {
174180 SelectBox (
175181 label = stringResource(Str .armour_label_type),
@@ -187,9 +193,11 @@ private fun TrappingTypeForm(
187193 ArmourQualitiesPicker (formData.armourQualities)
188194 ArmourFlawsPicker (formData.armourFlaws)
189195 }
196+
190197 TrappingTypeOption .CLOTHING_OR_ACCESSORY , TrappingTypeOption .PROSTHETIC -> {
191198 WornCheckbox (formData)
192199 }
200+
193201 TrappingTypeOption .CONTAINER -> {
194202 TextInput (
195203 label = stringResource(Str .trappings_label_carries),
@@ -198,6 +206,7 @@ private fun TrappingTypeForm(
198206 )
199207 WornCheckbox (formData)
200208 }
209+
201210 TrappingTypeOption .MELEE_WEAPON -> {
202211 WeaponEquipSelect (formData)
203212 SelectBox (
@@ -216,6 +225,7 @@ private fun TrappingTypeForm(
216225 WeaponQualitiesPicker (formData)
217226 WeaponFlawsPicker (formData)
218227 }
228+
219229 TrappingTypeOption .RANGED_WEAPON -> {
220230 WeaponEquipSelect (formData)
221231 SelectBox (
@@ -241,6 +251,7 @@ private fun TrappingTypeForm(
241251 WeaponQualitiesPicker (formData)
242252 WeaponFlawsPicker (formData)
243253 }
254+
244255 TrappingTypeOption .BOOK_OR_DOCUMENT ,
245256 TrappingTypeOption .DRUG_OR_POISON ,
246257 TrappingTypeOption .MISCELLANEOUS ,
@@ -249,7 +260,8 @@ private fun TrappingTypeForm(
249260 TrappingTypeOption .SPELL_INGREDIENT ,
250261 TrappingTypeOption .TOOL_OR_KIT ,
251262 TrappingTypeOption .TRADE_TOOLS ,
252- -> {}
263+ -> {
264+ }
253265 }
254266}
255267
@@ -312,6 +324,7 @@ private class InventoryItemFormData(
312324 val itemFlaws : MutableState <Set <ItemFlaw >>,
313325 val description : InputValue ,
314326 val type : TrappingTypeFormData ,
327+ val isEncumbranceCounted : MutableState <Boolean >,
315328) : HydratedFormData<InventoryItem> {
316329 override fun isValid () = listOf (name, encumbrance, quantity, description).all { it.isValid() } && type.isValid()
317330
@@ -337,6 +350,7 @@ private class InventoryItemFormData(
337350 containerId
338351 },
339352 compendiumId = null ,
353+ isEncumbranceCounted = isEncumbranceCounted.value,
340354 )
341355 }
342356
@@ -365,6 +379,12 @@ private class InventoryItemFormData(
365379 description = inputValue(item?.description ? : " " ),
366380 type = TrappingTypeFormData .fromTrappingType(item?.trappingType),
367381 containerId = item?.containerId ? : defaultContainerId,
382+ isEncumbranceCounted =
383+ rememberSaveable {
384+ mutableStateOf(
385+ item?.isEncumbranceCounted ? : true ,
386+ )
387+ },
368388 )
369389 }
370390}
@@ -396,6 +416,7 @@ private class TrappingTypeFormData(
396416 ammunitionWeaponGroups.value.isNotEmpty() &&
397417 damage.isValid()
398418 }
419+
399420 TrappingTypeOption .ARMOUR -> armourLocations.value.isNotEmpty() && armourPoints.isValid()
400421 TrappingTypeOption .CONTAINER -> carries.isValid()
401422 TrappingTypeOption .MELEE_WEAPON -> damage.isValid()
@@ -423,6 +444,7 @@ private class TrappingTypeFormData(
423444 flaws = weaponFlaws.toMap(),
424445 damage = DamageExpression (damage.value),
425446 )
447+
426448 TrappingTypeOption .ARMOUR ->
427449 TrappingType .Armour (
428450 locations = armourLocations.value,
@@ -432,16 +454,19 @@ private class TrappingTypeFormData(
432454 qualities = armourQualities.toMap(),
433455 flaws = armourFlaws.toMap(),
434456 )
457+
435458 TrappingTypeOption .BOOK_OR_DOCUMENT -> TrappingType .BookOrDocument
436459 TrappingTypeOption .CLOTHING_OR_ACCESSORY ->
437460 TrappingType .ClothingOrAccessory (
438461 worn = worn.value,
439462 )
463+
440464 TrappingTypeOption .CONTAINER ->
441465 TrappingType .Container (
442466 carries = Encumbrance (carries.toDouble()),
443467 worn = worn.value,
444468 )
469+
445470 TrappingTypeOption .DRUG_OR_POISON -> TrappingType .DrugOrPoison
446471 TrappingTypeOption .FOOD_OR_DRINK -> TrappingType .FoodOrDrink
447472 TrappingTypeOption .HERB_OR_DRAUGHT -> TrappingType .HerbOrDraught
@@ -454,6 +479,7 @@ private class TrappingTypeFormData(
454479 flaws = weaponFlaws.toMap(),
455480 equipped = weaponEquipped.value,
456481 )
482+
457483 TrappingTypeOption .PROSTHETIC -> TrappingType .Prosthetic (worn = worn.value)
458484 TrappingTypeOption .RANGED_WEAPON ->
459485 TrappingType .RangedWeapon (
@@ -464,6 +490,7 @@ private class TrappingTypeFormData(
464490 flaws = weaponFlaws.toMap(),
465491 equipped = weaponEquipped.value,
466492 )
493+
467494 TrappingTypeOption .SPELL_INGREDIENT -> TrappingType .SpellIngredient
468495 TrappingTypeOption .MISCELLANEOUS -> null
469496 TrappingTypeOption .TOOL_OR_KIT -> TrappingType .ToolOrKit
@@ -484,6 +511,7 @@ private class TrappingTypeFormData(
484511 weaponQualities = type.qualities,
485512 weaponFlaws = type.flaws,
486513 )
514+
487515 is TrappingType .Armour ->
488516 fromDefaults(
489517 type = TrappingTypeOption .ARMOUR ,
@@ -494,18 +522,21 @@ private class TrappingTypeFormData(
494522 armourFlaws = type.flaws,
495523 worn = type.worn,
496524 )
525+
497526 is TrappingType .BookOrDocument -> fromDefaults(TrappingTypeOption .BOOK_OR_DOCUMENT )
498527 is TrappingType .ClothingOrAccessory ->
499528 fromDefaults(
500529 type = TrappingTypeOption .CLOTHING_OR_ACCESSORY ,
501530 worn = type.worn,
502531 )
532+
503533 is TrappingType .Container ->
504534 fromDefaults(
505535 type = TrappingTypeOption .CONTAINER ,
506536 carries = type.carries,
507537 worn = type.worn,
508538 )
539+
509540 is TrappingType .DrugOrPoison -> fromDefaults(TrappingTypeOption .DRUG_OR_POISON )
510541 is TrappingType .HerbOrDraught -> fromDefaults(TrappingTypeOption .HERB_OR_DRAUGHT )
511542 is TrappingType .MeleeWeapon ->
@@ -518,11 +549,13 @@ private class TrappingTypeFormData(
518549 weaponFlaws = type.flaws,
519550 weaponEquipped = type.equipped,
520551 )
552+
521553 is TrappingType .Prosthetic ->
522554 fromDefaults(
523555 type = TrappingTypeOption .PROSTHETIC ,
524556 worn = type.worn,
525557 )
558+
526559 is TrappingType .RangedWeapon ->
527560 fromDefaults(
528561 type = TrappingTypeOption .RANGED_WEAPON ,
@@ -533,6 +566,7 @@ private class TrappingTypeFormData(
533566 weaponFlaws = type.flaws,
534567 weaponEquipped = type.equipped,
535568 )
569+
536570 is TrappingType .SpellIngredient -> fromDefaults(TrappingTypeOption .SPELL_INGREDIENT )
537571 TrappingType .FoodOrDrink -> fromDefaults(TrappingTypeOption .FOOD_OR_DRINK )
538572 TrappingType .ToolOrKit -> fromDefaults(TrappingTypeOption .TOOL_OR_KIT )
0 commit comments