Change the damage text message message.

This commit is contained in:
Thomas Andres Gomez 2025-03-19 19:13:15 +01:00
parent 4c37d8b937
commit 49723892fc
7 changed files with 38 additions and 41 deletions

View file

@ -185,9 +185,10 @@
<string name="roll_history__item__difficulty">Difficulté</string> <string name="roll_history__item__difficulty">Difficulté</string>
<string name="chat__diminished_change">%1$s passe à %2$d d'état diminuée</string> <string name="chat__diminished_change">%1$s passe à %2$d d'état diminuée</string>
<string name="chat__characteristic_change">%1$s passe à %2$d %3$s</string> <string name="chat__characteristic_change__hp_down">%1$s subit %2$d point(s) de dommage</string>
<string name="chat__characteristic__hp">Hp</string> <string name="chat__characteristic_change__hp_up">%1$s récupère %2$d point(s) de vie</string>
<string name="chat__characteristic__pp">Pp</string> <string name="chat__characteristic_change__pp_down">%1$s utilise %2$d point(s) de pouvoir</string>
<string name="chat__characteristic_change__pp_up">%1$s récupère %2$d point(s) de pouvoir</string>
<string name="settings__title">Paramètres de l'application</string> <string name="settings__title">Paramètres de l'application</string>
<string name="settings__reset_action">Paramètres par défault</string> <string name="settings__reset_action">Paramètres par défault</string>

View file

@ -123,7 +123,7 @@ class CampaignStore(
is CampaignMessage.UpdateCharacteristic -> updateCharacteristic( is CampaignMessage.UpdateCharacteristic -> updateCharacteristic(
characterInstanceId = instanceId, characterInstanceId = instanceId,
characteristic = factory.convertFromJson(json = message.characteristic), characteristic = factory.convertFromJson(json = message.characteristic),
value = message.value, value = message.newValue,
) )
is CampaignMessage.UpdateDiminished -> updateDiminished( is CampaignMessage.UpdateDiminished -> updateDiminished(

View file

@ -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.alteration.FieldAlteration
import com.pixelized.shared.lwa.model.campaign.Campaign 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.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.factory.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.power
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet import com.pixelized.shared.lwa.model.characterSheet.CharacterSheet
import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage import com.pixelized.shared.lwa.protocol.websocket.CampaignMessage
@ -65,6 +67,9 @@ class CharacterDetailCharacteristicDialogViewModel(
val sheet = characterSheetRepository.characterDetail( val sheet = characterSheetRepository.characterDetail(
characterSheetId = characterInstanceId.characterSheetId, characterSheetId = characterInstanceId.characterSheetId,
) ?: return ) ?: return
val characterInstance = campaignRepository.instance(
characterInstanceId = characterInstanceId,
)
val alterations = alterationRepository.alterations( val alterations = alterationRepository.alterations(
characterInstanceId = characterInstanceId, characterInstanceId = characterInstanceId,
) )
@ -85,7 +90,11 @@ class CharacterDetailCharacteristicDialogViewModel(
characterSheetId = characterInstanceId.characterSheetId, characterSheetId = characterInstanceId.characterSheetId,
instanceId = characterInstanceId.instanceId, instanceId = characterInstanceId.instanceId,
characteristic = characteristicJson, 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.Damage -> alteredSheet.maxHp - value
Characteristic.Power -> alteredSheet.maxPp - value Characteristic.Power -> alteredSheet.maxPp - value
}, },

View file

@ -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.RollTextMessageUio
import com.pixelized.desktop.lwa.ui.screen.campaign.text.messages.TextMessage import com.pixelized.desktop.lwa.ui.screen.campaign.text.messages.TextMessage
import com.pixelized.shared.lwa.model.AlteredCharacterSheetFactory 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.Damage
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Power 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.CampaignMessage
import com.pixelized.shared.lwa.protocol.websocket.GameMasterEvent import com.pixelized.shared.lwa.protocol.websocket.GameMasterEvent
import com.pixelized.shared.lwa.protocol.websocket.RestSynchronisation import com.pixelized.shared.lwa.protocol.websocket.RestSynchronisation
import com.pixelized.shared.lwa.protocol.websocket.RollMessage 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.ToggleActiveAlteration
import com.pixelized.shared.lwa.protocol.websocket.UpdateSkillUsageMessage import com.pixelized.shared.lwa.protocol.websocket.UpdateSkillUsageMessage
import lwacharactersheet.composeapp.generated.resources.Res import lwacharactersheet.composeapp.generated.resources.Res
import lwacharactersheet.composeapp.generated.resources.chat__characteristic__hp import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change__hp_down
import lwacharactersheet.composeapp.generated.resources.chat__characteristic__pp import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change__hp_up
import org.jetbrains.compose.resources.getString 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 java.text.SimpleDateFormat
import kotlin.math.abs
class TextMessageFactory( class TextMessageFactory(
private val characterSheetRepository: CharacterSheetRepository, private val characterSheetRepository: CharacterSheetRepository,
@ -80,30 +81,21 @@ class TextMessageFactory(
val sheet = characterSheetRepository.characterDetail( val sheet = characterSheetRepository.characterDetail(
characterSheetId = message.characterSheetId, characterSheetId = message.characterSheetId,
) ?: return null ) ?: return null
val characterInstanceId = Campaign.CharacterInstance.Id(
prefix = message.prefix, // We are talking about damage / consumption there so old value have to be put first.
characterSheetId = message.characterSheetId, val value = message.oldValue - message.newValue
instanceId = message.instanceId,
)
val alterations = alterationRepository.alterations(
characterInstanceId = characterInstanceId,
)
val alteredSheet = alteredCharacterSheetFactory.sheet(
characterSheet = sheet,
alterations = alterations,
)
CharacteristicTextMessageUio( CharacteristicTextMessageUio(
id = "${message.timestamp}-$id-Characteristic", id = "${message.timestamp}-$id-Characteristic",
timestamp = formatTime.format(time), 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, character = sheet.name,
value = when (message.characteristic) { value = abs(value),
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)
},
) )
} }

View file

@ -11,17 +11,16 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.pixelized.desktop.lwa.ui.theme.lwa import com.pixelized.desktop.lwa.ui.theme.lwa
import lwacharactersheet.composeapp.generated.resources.Res import org.jetbrains.compose.resources.StringResource
import lwacharactersheet.composeapp.generated.resources.chat__characteristic_change
import org.jetbrains.compose.resources.stringResource import org.jetbrains.compose.resources.stringResource
@Stable @Stable
data class CharacteristicTextMessageUio( data class CharacteristicTextMessageUio(
override val id: String, override val id: String,
override val timestamp: String, override val timestamp: String,
val label: StringResource,
val character: String, val character: String,
val value: Int, val value: Int,
val characteristic: String,
) : TextMessage ) : TextMessage
@Composable @Composable
@ -53,12 +52,7 @@ fun CharacteristicTextMessage(
style = MaterialTheme.lwa.typography.chat.text, style = MaterialTheme.lwa.typography.chat.text,
overflow = TextOverflow.Ellipsis, overflow = TextOverflow.Ellipsis,
maxLines = 1, maxLines = 1,
text = stringResource( text = stringResource(message.label, message.character, message.value),
Res.string.chat__characteristic_change,
message.character,
message.value,
message.characteristic,
),
) )
} }
} }

View file

@ -37,7 +37,7 @@ class Engine(
is CampaignMessage.UpdateCharacteristic -> campaignService.updateCharacteristic( is CampaignMessage.UpdateCharacteristic -> campaignService.updateCharacteristic(
characterInstanceId = instanceId, characterInstanceId = instanceId,
characteristic = campaignJsonFactory.convertFromJson(json = message.characteristic), characteristic = campaignJsonFactory.convertFromJson(json = message.characteristic),
value = message.value, value = message.newValue,
) )
is CampaignMessage.UpdateDiminished -> campaignService.updateDiminished( is CampaignMessage.UpdateDiminished -> campaignService.updateDiminished(

View file

@ -16,7 +16,8 @@ sealed interface CampaignMessage : SocketMessage, CharacterInstanceIdMessage {
override val characterSheetId: String, override val characterSheetId: String,
override val instanceId: Int, override val instanceId: Int,
val characteristic: CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1, val characteristic: CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1,
val value: Int, val oldValue: Int,
val newValue: Int,
) : CampaignMessage ) : CampaignMessage
@Serializable @Serializable