Add the old ui to the new one.

This commit is contained in:
Thomas Andres Gomez 2025-02-27 19:15:06 +01:00
parent d8ce46fe43
commit f51a83cf6e
38 changed files with 635 additions and 250 deletions

View file

@ -2,7 +2,8 @@ package com.pixelized.shared.lwa
import com.pixelized.shared.lwa.model.AlteredCharacterSheetFactory
import com.pixelized.shared.lwa.model.alteration.AlterationJsonFactory
import com.pixelized.shared.lwa.model.campaign.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonFactory
import com.pixelized.shared.lwa.model.campaign.factory.CampaignJsonV1Factory
import com.pixelized.shared.lwa.model.characterSheet.CharacterSheetJsonFactory
import com.pixelized.shared.lwa.parser.dice.DiceParser
import com.pixelized.shared.lwa.parser.expression.ExpressionParser
@ -38,6 +39,7 @@ val factoryDependencies
get() = module {
factoryOf(::CharacterSheetJsonFactory)
factoryOf(::CampaignJsonFactory)
factoryOf(::CampaignJsonV1Factory)
factoryOf(::AlteredCharacterSheetFactory)
factoryOf(::AlterationJsonFactory)
}

View file

@ -3,6 +3,7 @@ package com.pixelized.shared.lwa.model.campaign
data class Campaign(
val characters: Map<CharacterInstance.Id, CharacterInstance>,
val npcs: Map<CharacterInstance.Id, CharacterInstance>,
val scene: Scene,
) {
data class CharacterInstance(
val characteristic: Map<Characteristic, Int>,
@ -26,10 +27,21 @@ data class Campaign(
}
}
data class Scene(
val name: String,
) {
companion object {
fun empty() = Scene(
name = "",
)
}
}
companion object {
val EMPTY = Campaign(
characters = emptyMap(),
npcs = emptyMap(),
scene = Scene.empty(),
)
}
}

View file

@ -3,4 +3,15 @@ package com.pixelized.shared.lwa.model.campaign
import kotlinx.serialization.Serializable
@Serializable
sealed interface CampaignJson
sealed interface CampaignJson {
@Serializable
sealed interface CharacterInstanceJson {
@Serializable
sealed interface CharacteristicJson
}
@Serializable
sealed interface SceneJson
}

View file

@ -1,101 +0,0 @@
package com.pixelized.shared.lwa.model.campaign
class CampaignJsonFactory {
fun convertFromJson(
json: CampaignJson,
): Campaign {
return when (json) {
is CampaignJsonV1 -> convertFromV1(campaignJson = json)
}
}
private fun convertFromV1(
campaignJson: CampaignJsonV1,
): Campaign {
return Campaign(
characters = campaignJson.characters
.map {
convertFromV1(characterInstanceIdJson = it.key) to convertFromV1(
characterInstanceJson = it.value
)
}
.toMap(),
npcs = campaignJson.npcs
.map {
convertFromV1(characterInstanceIdJson = it.key) to convertFromV1(
characterInstanceJson = it.value
)
}
.toMap(),
)
}
fun convertFromV1(
characterInstanceIdJson: String,
): Campaign.CharacterInstance.Id {
return Campaign.CharacterInstance.Id(
characterSheetId = characterInstanceIdJson.drop(4), // drop first 3 number then the -
instanceId = characterInstanceIdJson.take(3).toIntOrNull() ?: 0,
)
}
fun convertFromV1(
characterInstanceJson: CampaignJsonV1.CharacterInstanceJson,
): Campaign.CharacterInstance {
return Campaign.CharacterInstance(
characteristic = characterInstanceJson.characteristic
.map { char -> convertFromV1(characteristicJson = char.key) to char.value }
.toMap(),
diminished = characterInstanceJson.diminished ?: 0,
)
}
fun convertFromV1(
characteristicJson: CampaignJsonV1.CharacterInstanceJson.Characteristic,
): Campaign.CharacterInstance.Characteristic {
return when (characteristicJson) {
CampaignJsonV1.CharacterInstanceJson.Characteristic.Damage -> Campaign.CharacterInstance.Characteristic.Damage
CampaignJsonV1.CharacterInstanceJson.Characteristic.Power -> Campaign.CharacterInstance.Characteristic.Power
}
}
fun convertToJson(
data: Campaign,
): CampaignJson {
return CampaignJsonV1(
characters = data.characters
.map { convertToJson(id = it.key) to convertToJson(data = it.value) }
.toMap(),
npcs = data.npcs
.map { convertToJson(id = it.key) to convertToJson(data = it.value) }
.toMap(),
)
}
fun convertToJson(
id: Campaign.CharacterInstance.Id,
): String {
return "${String.format("%03d", id.instanceId)}-${id.characterSheetId}"
}
fun convertToJson(
data: Campaign.CharacterInstance,
): CampaignJsonV1.CharacterInstanceJson {
return CampaignJsonV1.CharacterInstanceJson(
characteristic = data.characteristic
.map { char -> convertToJson(characteristic = char.key) to char.value }
.toMap(),
diminished = data.diminished,
)
}
fun convertToJson(
characteristic: Campaign.CharacterInstance.Characteristic,
): CampaignJsonV1.CharacterInstanceJson.Characteristic {
return when (characteristic) {
Campaign.CharacterInstance.Characteristic.Damage -> CampaignJsonV1.CharacterInstanceJson.Characteristic.Damage
Campaign.CharacterInstance.Characteristic.Power -> CampaignJsonV1.CharacterInstanceJson.Characteristic.Power
}
}
}

View file

@ -4,18 +4,24 @@ import kotlinx.serialization.Serializable
@Serializable
data class CampaignJsonV1(
val characters: Map<String, CharacterInstanceJson>,
val npcs: Map<String, CharacterInstanceJson>,
val characters: Map<String, CharacterInstanceJsonV1>,
val npcs: Map<String, CharacterInstanceJsonV1>,
val scene: SceneJsonV1?,
) : CampaignJson {
@Serializable
data class CharacterInstanceJson(
val characteristic: Map<Characteristic, Int>,
data class CharacterInstanceJsonV1(
val characteristic: Map<CharacteristicV1, Int>,
val diminished: Int?,
) {
enum class Characteristic {
) : CampaignJson.CharacterInstanceJson {
enum class CharacteristicV1 : CampaignJson.CharacterInstanceJson.CharacteristicJson {
Damage,
Power,
}
}
}
@Serializable
data class SceneJsonV1(
val name: String,
) : CampaignJson.SceneJson
}

View file

@ -0,0 +1,98 @@
package com.pixelized.shared.lwa.model.campaign.factory
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJson
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1
class CampaignJsonFactory(
private val v1: CampaignJsonV1Factory,
) {
fun characterInstanceIdFromJson(
characterInstanceIdJson: String,
): Campaign.CharacterInstance.Id {
return v1.convertFromV1(characterInstanceIdJson)
}
fun convertFromJson(
json: CampaignJson,
): Campaign {
return when (json) {
is CampaignJsonV1 -> v1.convertFromV1(campaignJson = json)
}
}
fun convertFromJson(
json: CampaignJson.CharacterInstanceJson,
): Campaign.CharacterInstance {
return when (json) {
is CampaignJsonV1.CharacterInstanceJsonV1 -> v1.convertFromV1(characterInstanceJson = json)
}
}
fun convertFromJson(
json: CampaignJson.CharacterInstanceJson.CharacteristicJson,
): Campaign.CharacterInstance.Characteristic {
return when (json) {
CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Damage -> Campaign.CharacterInstance.Characteristic.Damage
CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Power -> Campaign.CharacterInstance.Characteristic.Power
}
}
fun convertFromJson(
json: CampaignJson.SceneJson,
): Campaign.Scene {
return when (json) {
is CampaignJsonV1.SceneJsonV1 -> v1.convertFromV1(sceneJson = json)
}
}
fun convertToJson(
data: Campaign,
): CampaignJson {
return CampaignJsonV1(
characters = data.characters
.map { convertToJson(id = it.key) to convertToJson(data = it.value) }
.toMap(),
npcs = data.npcs
.map { convertToJson(id = it.key) to convertToJson(data = it.value) }
.toMap(),
scene = CampaignJsonV1.SceneJsonV1(
name = data.scene.name
)
)
}
fun convertToJson(
id: Campaign.CharacterInstance.Id,
): String {
return "${String.format("%03d", id.instanceId)}-${id.characterSheetId}"
}
fun convertToJson(
data: Campaign.CharacterInstance,
): CampaignJsonV1.CharacterInstanceJsonV1 {
return CampaignJsonV1.CharacterInstanceJsonV1(
characteristic = data.characteristic
.map { char -> convertToJson(characteristic = char.key) to char.value }
.toMap(),
diminished = data.diminished,
)
}
fun convertToJson(
characteristic: Campaign.CharacterInstance.Characteristic,
): CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1 {
return when (characteristic) {
Campaign.CharacterInstance.Characteristic.Damage -> CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Damage
Campaign.CharacterInstance.Characteristic.Power -> CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Power
}
}
fun convertToJson(
scene: Campaign.Scene,
): CampaignJsonV1.SceneJsonV1 {
return CampaignJsonV1.SceneJsonV1(
name = scene.name,
)
}
}

View file

@ -0,0 +1,68 @@
package com.pixelized.shared.lwa.model.campaign.factory
import com.pixelized.shared.lwa.model.campaign.Campaign
import com.pixelized.shared.lwa.model.campaign.CampaignJsonV1
class CampaignJsonV1Factory {
fun convertFromV1(
campaignJson: CampaignJsonV1,
): Campaign {
return Campaign(
characters = campaignJson.characters
.map {
val key = convertFromV1(characterInstanceIdJson = it.key)
val instance = convertFromV1(characterInstanceJson = it.value)
key to instance
}
.toMap(),
npcs = campaignJson.npcs
.map {
val key = convertFromV1(characterInstanceIdJson = it.key)
val instance = convertFromV1(characterInstanceJson = it.value)
key to instance
}
.toMap(),
scene = campaignJson.scene
?.let { convertFromV1(it) }
?: Campaign.Scene.empty(),
)
}
fun convertFromV1(
characterInstanceIdJson: String,
): Campaign.CharacterInstance.Id {
return Campaign.CharacterInstance.Id(
characterSheetId = characterInstanceIdJson.drop(4), // drop first 3 number then the -
instanceId = characterInstanceIdJson.take(3).toIntOrNull() ?: 0,
)
}
fun convertFromV1(
characterInstanceJson: CampaignJsonV1.CharacterInstanceJsonV1,
): Campaign.CharacterInstance {
return Campaign.CharacterInstance(
characteristic = characterInstanceJson.characteristic
.mapKeys { convertFromV1(characteristicJson = it.key) }
.toMap(),
diminished = characterInstanceJson.diminished ?: 0,
)
}
fun convertFromV1(
characteristicJson: CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1,
): Campaign.CharacterInstance.Characteristic {
return when (characteristicJson) {
CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Damage -> Campaign.CharacterInstance.Characteristic.Damage
CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1.Power -> Campaign.CharacterInstance.Characteristic.Power
}
}
fun convertFromV1(
sceneJson: CampaignJsonV1.SceneJsonV1,
): Campaign.Scene {
return Campaign.Scene(
name = sceneJson.name
)
}
}

View file

@ -12,7 +12,7 @@ sealed interface CampaignMessage : MessagePayload {
data class UpdateCharacteristic(
override val characterSheetId: String,
override val instanceId: Int,
val characteristic: CampaignJsonV1.CharacterInstanceJson.Characteristic,
val characteristic: CampaignJsonV1.CharacterInstanceJsonV1.CharacteristicV1,
val value: Int,
) : CampaignMessage

View file

@ -60,13 +60,16 @@ class ExpressionUseCase(
alterations: Map<String, List<FieldAlteration>>,
expression: String,
): Int {
return expressionParser.parse(input = expression)?.let {
print("Roll::$expression::")
val roll = expressionParser.parse(input = expression)?.let {
computeExpression(
sheet = sheet,
alterations = alterations,
expression = it,
)
} ?: 0
println("::$roll")
return roll
}
fun computeExpression(

View file

@ -59,7 +59,7 @@ class RollUseCase {
if (quantity > 1 && left != 1) print(",")
}
}.also {
println("}")
print("}")
}
}