Add the old ui to the new one.
This commit is contained in:
parent
d8ce46fe43
commit
f51a83cf6e
38 changed files with 635 additions and 250 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ class RollUseCase {
|
|||
if (quantity > 1 && left != 1) print(",")
|
||||
}
|
||||
}.also {
|
||||
println("}")
|
||||
print("}")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue