Add support for the diminished state.

This commit is contained in:
Thomas Andres Gomez 2025-02-27 16:38:08 +01:00
parent 1fe75062b7
commit d8ce46fe43
20 changed files with 337 additions and 155 deletions

View file

@ -6,6 +6,7 @@ data class Campaign(
) {
data class CharacterInstance(
val characteristic: Map<Characteristic, Int>,
val diminished: Int,
) {
data class Id(
val characterSheetId: String,
@ -16,6 +17,13 @@ data class Campaign(
Damage,
Power,
}
companion object {
fun empty() = CharacterInstance(
characteristic = emptyMap(),
diminished = 0,
)
}
}
companion object {
@ -27,15 +35,11 @@ data class Campaign(
}
fun Campaign.character(id: Campaign.CharacterInstance.Id): Campaign.CharacterInstance {
return characters[id] ?: Campaign.CharacterInstance(
characteristic = emptyMap(),
)
return characters[id] ?: Campaign.CharacterInstance.empty()
}
fun Campaign.npc(id: Campaign.CharacterInstance.Id): Campaign.CharacterInstance {
return npcs[id] ?: Campaign.CharacterInstance(
characteristic = emptyMap(),
)
return npcs[id] ?: Campaign.CharacterInstance.empty()
}
val Campaign.CharacterInstance.level

View file

@ -47,6 +47,7 @@ class CampaignJsonFactory {
characteristic = characterInstanceJson.characteristic
.map { char -> convertFromV1(characteristicJson = char.key) to char.value }
.toMap(),
diminished = characterInstanceJson.diminished ?: 0,
)
}
@ -85,6 +86,7 @@ class CampaignJsonFactory {
characteristic = data.characteristic
.map { char -> convertToJson(characteristic = char.key) to char.value }
.toMap(),
diminished = data.diminished,
)
}

View file

@ -11,6 +11,7 @@ data class CampaignJsonV1(
@Serializable
data class CharacterInstanceJson(
val characteristic: Map<Characteristic, Int>,
val diminished: Int?,
) {
enum class Characteristic {
Damage,

View file

@ -0,0 +1,25 @@
package com.pixelized.shared.lwa.protocol.websocket.payload
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1
import kotlinx.serialization.Serializable
@Serializable
sealed interface CampaignMessage : MessagePayload {
val characterSheetId: String
val instanceId: Int
@Serializable
data class UpdateCharacteristic(
override val characterSheetId: String,
override val instanceId: Int,
val characteristic: CampaignJsonV1.CharacterInstanceJson.Characteristic,
val value: Int,
) : CampaignMessage
@Serializable
data class UpdateDiminished(
override val characterSheetId: String,
override val instanceId: Int,
val diminished: Int,
) : CampaignMessage
}

View file

@ -1,11 +0,0 @@
package com.pixelized.shared.lwa.protocol.websocket.payload
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1
import kotlinx.serialization.Serializable
@Serializable
data class UpdatePlayerCharacteristicMessage(
val characterInstanceId: String,
val characteristic: CampaignJsonV1.CharacterInstanceJson.Characteristic,
val value: Int,
) : MessagePayload

View file

@ -5,14 +5,23 @@ import com.pixelized.shared.lwa.model.campaign.Campaign
class CampaignUseCase {
fun updateCharacteristic(
character: Campaign.CharacterInstance,
instance: Campaign.CharacterInstance,
characteristic: Campaign.CharacterInstance.Characteristic,
value: Int,
): Campaign.CharacterInstance {
return character.copy(
characteristic = character.characteristic.toMutableMap().also {
return instance.copy(
characteristic = instance.characteristic.toMutableMap().also {
it[characteristic] = value
}
)
}
fun updateDiminished(
instance: Campaign.CharacterInstance,
diminished: Int,
): Campaign.CharacterInstance {
return instance.copy(
diminished = diminished,
)
}
}

View file

@ -24,6 +24,7 @@ class ExpressionUseCase(
fun computeSkillValue(
sheet: CharacterSheet,
alterations: Map<String, List<FieldAlteration>>,
diminished: Int,
skill: CharacterSheet.Skill,
): Int {
val context = Context(
@ -51,7 +52,7 @@ class ExpressionUseCase(
context.evaluate(it.expression)
} ?: 0
return max(base + bonus + level + alteration, 0)
return max(base + bonus + level + alteration - diminished, 0)
}
fun computeRoll(