Add support for the diminished state.
This commit is contained in:
parent
1fe75062b7
commit
d8ce46fe43
20 changed files with 337 additions and 155 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ data class CampaignJsonV1(
|
|||
@Serializable
|
||||
data class CharacterInstanceJson(
|
||||
val characteristic: Map<Characteristic, Int>,
|
||||
val diminished: Int?,
|
||||
) {
|
||||
enum class Characteristic {
|
||||
Damage,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue