diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml
index fd9b1bf..a28bf69 100644
--- a/composeApp/src/commonMain/composeResources/values/strings.xml
+++ b/composeApp/src/commonMain/composeResources/values/strings.xml
@@ -185,9 +185,10 @@
Difficulté
%1$s passe à %2$d d'état diminuée
- %1$s passe à %2$d %3$s
- Hp
- Pp
+ %1$s subit %2$d point(s) de dommage
+ %1$s récupère %2$d point(s) de vie
+ %1$s utilise %2$d point(s) de pouvoir
+ %1$s récupère %2$d point(s) de pouvoir
Paramètres de l'application
Paramètres par défault
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/campaign/CampaignStore.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/campaign/CampaignStore.kt
index d763745..0b1a648 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/campaign/CampaignStore.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/repository/campaign/CampaignStore.kt
@@ -123,7 +123,7 @@ class CampaignStore(
is CampaignMessage.UpdateCharacteristic -> updateCharacteristic(
characterInstanceId = instanceId,
characteristic = factory.convertFromJson(json = message.characteristic),
- value = message.value,
+ value = message.newValue,
)
is CampaignMessage.UpdateDiminished -> updateDiminished(
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/characteristic/CharacterDetailCharacteristicDialogViewModel.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/characteristic/CharacterDetailCharacteristicDialogViewModel.kt
index cd859ac..611c61c 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/characteristic/CharacterDetailCharacteristicDialogViewModel.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/composable/character/characteristic/CharacterDetailCharacteristicDialogViewModel.kt
@@ -11,7 +11,9 @@ import com.pixelized.shared.lwa.model.AlteredCharacterSheetFactory
import com.pixelized.shared.lwa.model.alteration.FieldAlteration
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.Campaign.CharacterInstance.Characteristic
+import com.pixelized.shared.lwa.model.campaign.damage
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
+import com.pixelized.shared.lwa.model.campaign.power
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
@@ -65,6 +67,9 @@ class CharacterDetailCharacteristicDialogViewModel(
val sheet = characterSheetRepository.characterDetail(
characterSheetId = characterInstanceId.characterSheetId,
) ?: return
+ val characterInstance = campaignRepository.instance(
+ characterInstanceId = characterInstanceId,
+ )
val alterations = alterationRepository.alterations(
characterInstanceId = characterInstanceId,
)
@@ -85,7 +90,11 @@ class CharacterDetailCharacteristicDialogViewModel(
characterSheetId = characterInstanceId.characterSheetId,
instanceId = characterInstanceId.instanceId,
characteristic = characteristicJson,
- value = when (characteristic) {
+ oldValue = when (characteristic) {
+ Characteristic.Damage -> characterInstance.damage
+ Characteristic.Power -> characterInstance.power
+ },
+ newValue = when (characteristic) {
Characteristic.Damage -> alteredSheet.maxHp - value
Characteristic.Power -> alteredSheet.maxPp - value
},
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/TextMessageFactory.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/TextMessageFactory.kt
index 34b4bbc..3b6a121 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/TextMessageFactory.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/TextMessageFactory.kt
@@ -7,21 +7,22 @@ import com.pixelized.desktop.lwa.ui.screen.campaign.text.messages.DiminishedText
import com.pixelized.desktop.lwa.ui.screen.campaign.text.messages.RollTextMessageUio
import com.pixelized.desktop.lwa.ui.screen.campaign.text.messages.TextMessage
import com.pixelized.shared.lwa.model.AlteredCharacterSheetFactory
-import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Damage
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Power
-import com.pixelized.shared.lwa.protocol.websocket.SocketMessage
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.GameMasterEvent
import com.pixelized.shared.lwa.protocol.websocket.RestSynchronisation
import com.pixelized.shared.lwa.protocol.websocket.RollMessage
+import com.pixelized.shared.lwa.protocol.websocket.SocketMessage
import com.pixelized.shared.lwa.protocol.websocket.ToggleActiveAlteration
import com.pixelized.shared.lwa.protocol.websocket.UpdateSkillUsageMessage
import lwacharactersheet.composeapp.generated.resources.Res
-import lwacharactersheet.composeapp.generated.resources.chat__characteristic__hp
-import lwacharactersheet.composeapp.generated.resources.chat__characteristic__pp
-import org.jetbrains.compose.resources.getString
+import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change__hp_down
+import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change__hp_up
+import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change__pp_down
+import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change__pp_up
import java.text.SimpleDateFormat
+import kotlin.math.abs
class TextMessageFactory(
private val characterSheetRepository: CharacterSheetRepository,
@@ -80,30 +81,21 @@ class TextMessageFactory(
val sheet = characterSheetRepository.characterDetail(
characterSheetId = message.characterSheetId,
) ?: return null
- val characterInstanceId = Campaign.CharacterInstance.Id(
- prefix = message.prefix,
- characterSheetId = message.characterSheetId,
- instanceId = message.instanceId,
- )
- val alterations = alterationRepository.alterations(
- characterInstanceId = characterInstanceId,
- )
- val alteredSheet = alteredCharacterSheetFactory.sheet(
- characterSheet = sheet,
- alterations = alterations,
- )
+
+ // We are talking about damage / consumption there so old value have to be put first.
+ val value = message.oldValue - message.newValue
+
CharacteristicTextMessageUio(
id = "${message.timestamp}-$id-Characteristic",
timestamp = formatTime.format(time),
+ label = when {
+ message.characteristic == Damage && value < 0 -> Res.string.chat__characteristic_change__hp_down
+ message.characteristic == Damage -> Res.string.chat__characteristic_change__hp_up
+ message.characteristic == Power && value < 0 -> Res.string.chat__characteristic_change__pp_down
+ else -> Res.string.chat__characteristic_change__pp_up
+ },
character = sheet.name,
- value = when (message.characteristic) {
- Damage -> alteredSheet.maxHp - message.value
- Power -> alteredSheet.maxPp - message.value
- },
- characteristic = when (message.characteristic) {
- Damage -> getString(Res.string.chat__characteristic__hp)
- Power -> getString(Res.string.chat__characteristic__pp)
- },
+ value = abs(value),
)
}
diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/messages/CharacteristicTextMessage.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/messages/CharacteristicTextMessage.kt
index 2c28c30..9e31927 100644
--- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/messages/CharacteristicTextMessage.kt
+++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/ui/screen/campaign/text/messages/CharacteristicTextMessage.kt
@@ -11,17 +11,16 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.pixelized.desktop.lwa.ui.theme.lwa
-import lwacharactersheet.composeapp.generated.resources.Res
-import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change
+import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
@Stable
data class CharacteristicTextMessageUio(
override val id: String,
override val timestamp: String,
+ val label: StringResource,
val character: String,
val value: Int,
- val characteristic: String,
) : TextMessage
@Composable
@@ -53,12 +52,7 @@ fun CharacteristicTextMessage(
style = MaterialTheme.lwa.typography.chat.text,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
- text = stringResource(
- Res.string.chat__characteristic_change,
- message.character,
- message.value,
- message.characteristic,
- ),
+ text = stringResource(message.label, message.character, message.value),
)
}
}
\ No newline at end of file
diff --git a/server/src/main/kotlin/com/pixelized/server/lwa/server/Engine.kt b/server/src/main/kotlin/com/pixelized/server/lwa/server/Engine.kt
index 9bda4df..288ab43 100644
--- a/server/src/main/kotlin/com/pixelized/server/lwa/server/Engine.kt
+++ b/server/src/main/kotlin/com/pixelized/server/lwa/server/Engine.kt
@@ -37,7 +37,7 @@ class Engine(
is CampaignMessage.UpdateCharacteristic -> campaignService.updateCharacteristic(
characterInstanceId = instanceId,
characteristic = campaignJsonFactory.convertFromJson(json = message.characteristic),
- value = message.value,
+ value = message.newValue,
)
is CampaignMessage.UpdateDiminished -> campaignService.updateDiminished(
diff --git a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/protocol/websocket/CampaignMessage.kt b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/protocol/websocket/CampaignMessage.kt
index f651f15..3648abe 100644
--- a/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/protocol/websocket/CampaignMessage.kt
+++ b/shared/src/commonMain/kotlin/com/pixelized/shared/lwa/protocol/websocket/CampaignMessage.kt
@@ -16,7 +16,8 @@ sealed interface CampaignMessage : SocketMessage, CharacterInstanceIdMessage {
override val characterSheetId: String,
override val instanceId: Int,
val characteristic: CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1,
- val value: Int,
+ val oldValue: Int,
+ val newValue: Int,
) : CampaignMessage
@Serializable