use tuples for colours

This commit is contained in:
Adam 2022-04-20 17:04:24 +02:00
parent 1c55fae236
commit 6bfcd30558
8 changed files with 145 additions and 365 deletions

View file

@ -171,12 +171,12 @@ export interface PlayerUpdateKey {
export type UnitNumber = UInt; export type UnitNumber = UInt;
export interface Colour { export type Colour = [
red?: Float; red: Float,
green?: Float; green: Float,
blue?: Float; blue: Float,
alpha?: Float; alpha: Float,
} ];
export type MapEntityPosition = [ export type MapEntityPosition = [
x: Double, x: Double,

View file

@ -86,12 +86,12 @@ export namespace Converters {
// } // }
export function mapColour(color: ColorTable): Colour { export function mapColour(color: ColorTable): Colour {
return { return [
red: color.r ?? 0, color.r ?? 0,
green: color.g ?? 0, color.g ?? 0,
blue: color.b ?? 0, color.b ?? 0,
alpha: color.a ?? 0, color.a ?? 0,
} ]
} }

View file

@ -9,8 +9,7 @@
"engines": { "engines": {
"node": "~14.19.1" "node": "~14.19.1"
}, },
"devDependencies": { "devDependencies": {},
},
"dependencies": { "dependencies": {
"lua-types": "^2.11.0", "lua-types": "^2.11.0",
"typescript-to-lua": "1.4.3", "typescript-to-lua": "1.4.3",
@ -19,10 +18,7 @@
}, },
"// @types/node": "^12.0.8", "// @types/node": "^12.0.8",
"license": "UNLICENSED", "license": "UNLICENSED",
"peerDependencies": { "peerDependencies": {},
}, "optionalDependencies": {},
"optionalDependencies": { "bundledDependencies": []
},
"bundledDependencies": [
]
} }

View file

@ -1,5 +1,6 @@
package dev.adamko.kafkatorio.schema.common package dev.adamko.kafkatorio.schema.common
import dev.adamko.kxstsgen.core.experiments.TupleSerializer
import kotlin.math.roundToInt import kotlin.math.roundToInt
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -9,13 +10,32 @@ import kotlinx.serialization.Serializable
* *
* All values here are optional. Colour channels default to `0`, the alpha channel defaults to `1`. * All values here are optional. Colour channels default to `0`, the alpha channel defaults to `1`.
*/ */
@Serializable @Serializable(with = Colour.Serializer::class)
data class Colour( data class Colour(
val red: Float = 0f, val red: Float = 0f,
val green: Float = 0f, val green: Float = 0f,
val blue: Float = 0f, val blue: Float = 0f,
val alpha: Float = 1f, val alpha: Float = 1f,
) ) {
object Serializer : TupleSerializer<Colour>(
"Colour",
{
element(Colour::red)
element(Colour::green)
element(Colour::blue)
element(Colour::alpha)
}
) {
override fun tupleConstructor(elements: Iterator<*>): Colour {
return Colour(
elements.next() as Float,
elements.next() as Float,
elements.next() as Float,
elements.next() as Float,
)
}
}
}
/** Size-efficient version of [Colour] (`4*4` bytes vs `4*1` bytes) */ /** Size-efficient version of [Colour] (`4*4` bytes vs `4*1` bytes) */

View file

@ -19,12 +19,7 @@ class ColourHexTest : BehaviorSpec({
//Language=JSON //Language=JSON
val colourJson = """ val colourJson = """
{ [0.1, 0.4, 0.7, 0.6]
"red": 0.1,
"green": 0.4,
"blue": 0.7,
"alpha": 0.6
}
""".trimIndent() """.trimIndent()
val colour: Colour = jsonMapperKafkatorio.decodeFromString(colourJson) val colour: Colour = jsonMapperKafkatorio.decodeFromString(colourJson)
@ -68,12 +63,12 @@ class ColourHexTest : BehaviorSpec({
//Language=JSON //Language=JSON
val colourJson = """ val colourJson = """
{ [
"red": ${r.toFloat() / UByte.MAX_VALUE.toFloat()}, ${r.toFloat() / UByte.MAX_VALUE.toFloat()},
"green": ${g.toFloat() / UByte.MAX_VALUE.toFloat()}, ${g.toFloat() / UByte.MAX_VALUE.toFloat()},
"blue": ${b.toFloat() / UByte.MAX_VALUE.toFloat()}, ${b.toFloat() / UByte.MAX_VALUE.toFloat()},
"alpha": ${a.toFloat() / UByte.MAX_VALUE.toFloat()} ${a.toFloat() / UByte.MAX_VALUE.toFloat()}
} ]
""".trimIndent() """.trimIndent()
val colour: Colour = jsonMapperKafkatorio.decodeFromString(colourJson) val colour: Colour = jsonMapperKafkatorio.decodeFromString(colourJson)

View file

@ -28,12 +28,7 @@ class PrototypesTest : BehaviorSpec({
"order": "z-a", "order": "z-a",
"layer": 0, "layer": 0,
"collisionMasks": {}, "collisionMasks": {},
"mapColour": { "mapColour": [0, 0, 0, 255],
"red": 0,
"green": 0,
"blue": 0,
"alpha": 255
},
"canBeMined": false "canBeMined": false
} }
] ]
@ -65,12 +60,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [86, 82, 74, 255],
"red": 86,
"green": 82,
"blue": 74,
"alpha": 255
},
"canBeMined": true "canBeMined": true
}, },
{ {
@ -81,12 +71,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [63, 61, 59, 255],
"red": 63,
"green": 61,
"blue": 59,
"alpha": 255
},
"canBeMined": true "canBeMined": true
}, },
{ {
@ -97,12 +82,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [176, 142, 39, 255],
"red": 176,
"green": 142,
"blue": 39,
"alpha": 255
},
"canBeMined": true "canBeMined": true
}, },
{ {
@ -113,12 +93,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [176, 142, 39, 255],
"red": 176,
"green": 142,
"blue": 39,
"alpha": 255
},
"canBeMined": true "canBeMined": true
}, },
{ {
@ -129,12 +104,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [49, 48, 45, 255],
"red": 49,
"green": 48,
"blue": 45,
"alpha": 255
},
"canBeMined": true "canBeMined": true
}, },
{ {
@ -145,12 +115,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [116, 94, 26, 255],
"red": 116,
"green": 94,
"blue": 26,
"alpha": 255
},
"canBeMined": true "canBeMined": true
}, },
{ {
@ -161,12 +126,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [116, 94, 26, 255],
"red": 116,
"green": 94,
"blue": 26,
"alpha": 255
},
"canBeMined": true "canBeMined": true
}, },
{ {
@ -177,12 +137,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [57, 39, 26, 255],
"red": 57,
"green": 39,
"blue": 26,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -193,12 +148,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [142, 194, 40, 127],
"red": 142,
"green": 194,
"blue": 40,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -209,12 +159,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [25, 25, 25, 127],
"red": 25,
"green": 25,
"blue": 25,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -225,12 +170,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [39, 137, 228, 127],
"red": 39,
"green": 137,
"blue": 228,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -241,12 +181,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [76, 29, 0, 127],
"red": 76,
"green": 29,
"blue": 0,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -257,12 +192,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [70, 192, 181, 127],
"red": 70,
"green": 192,
"blue": 181,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -273,12 +203,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [23, 195, 43, 127],
"red": 23,
"green": 195,
"blue": 43,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -289,12 +214,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [221, 127, 33, 127],
"red": 221,
"green": 127,
"blue": 33,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -305,12 +225,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [236, 98, 131, 127],
"red": 236,
"green": 98,
"blue": 131,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -321,12 +236,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [123, 28, 168, 127],
"red": 123,
"green": 28,
"blue": 168,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -337,12 +247,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [207, 6, 0, 127],
"red": 207,
"green": 6,
"blue": 0,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -353,12 +258,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [212, 169, 19, 127],
"red": 212,
"green": 169,
"blue": 19,
"alpha": 127
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -369,12 +269,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [55, 53, 11, 255],
"red": 55,
"green": 53,
"blue": 11,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -385,12 +280,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [66, 57, 15, 255],
"red": 66,
"green": 57,
"blue": 15,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -401,12 +291,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [65, 52, 28, 255],
"red": 65,
"green": 52,
"blue": 28,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -417,12 +302,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [59, 40, 18, 255],
"red": 59,
"green": 40,
"blue": 18,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -433,12 +313,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [94, 66, 37, 255],
"red": 94,
"green": 66,
"blue": 37,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -449,12 +324,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [141, 104, 60, 255],
"red": 141,
"green": 104,
"blue": 60,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -465,12 +335,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [136, 96, 59, 255],
"red": 136,
"green": 96,
"blue": 59,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -481,12 +346,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [133, 92, 53, 255],
"red": 133,
"green": 92,
"blue": 53,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -497,12 +357,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [103, 72, 43, 255],
"red": 103,
"green": 72,
"blue": 43,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -513,12 +368,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [91, 63, 38, 255],
"red": 91,
"green": 63,
"blue": 38,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -529,12 +379,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [80, 55, 31, 255],
"red": 80,
"green": 55,
"blue": 31,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -545,12 +390,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [80, 54, 28, 255],
"red": 80,
"green": 54,
"blue": 28,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -561,12 +401,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [138, 103, 58, 255],
"red": 138,
"green": 103,
"blue": 58,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -577,12 +412,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [128, 93, 52, 255],
"red": 128,
"green": 93,
"blue": 52,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -593,12 +423,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [115, 83, 47, 255],
"red": 115,
"green": 83,
"blue": 47,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -609,12 +434,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [103, 70, 32, 255],
"red": 103,
"green": 70,
"blue": 32,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -625,12 +445,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [116, 81, 39, 255],
"red": 116,
"green": 81,
"blue": 39,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -641,12 +456,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [116, 84, 43, 255],
"red": 116,
"green": 84,
"blue": 43,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -657,12 +467,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [128, 93, 52, 255],
"red": 128,
"green": 93,
"blue": 52,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -677,12 +482,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [51, 83, 95, 255],
"red": 51,
"green": 83,
"blue": 95,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -697,12 +497,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [38, 64, 73, 255],
"red": 38,
"green": 64,
"blue": 73,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -717,12 +512,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [31, 48, 18, 255],
"red": 31,
"green": 48,
"blue": 18,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -737,12 +527,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [23, 37, 16, 255],
"red": 23,
"green": 37,
"blue": 16,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -756,12 +541,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [82, 98, 92, 255],
"red": 82,
"green": 98,
"blue": 92,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -775,12 +555,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [65, 89, 90, 255],
"red": 65,
"green": 89,
"blue": 90,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -791,12 +566,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [48, 40, 35, 255],
"red": 48,
"green": 40,
"blue": 35,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -811,12 +581,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [0, 0, 0, 255],
"red": 0,
"green": 0,
"blue": 0,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -826,12 +591,7 @@ class PrototypesTest : BehaviorSpec({
"layer": 0, "layer": 0,
"collisionMasks": { "collisionMasks": {
}, },
"mapColour": { "mapColour": [0, 0, 0, 255],
"red": 0,
"green": 0,
"blue": 0,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -849,12 +609,7 @@ class PrototypesTest : BehaviorSpec({
"resource-layer", "resource-layer",
"water-tile" "water-tile"
], ],
"mapColour": { "mapColour": [0, 0, 0, 255],
"red": 0,
"green": 0,
"blue": 0,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -865,12 +620,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [49, 49, 49, 255],
"red": 49,
"green": 49,
"blue": 49,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -881,12 +631,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [0, 0, 0, 255],
"red": 0,
"green": 0,
"blue": 0,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -897,12 +642,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [255, 255, 255, 255],
"red": 255,
"green": 255,
"blue": 255,
"alpha": 255
},
"canBeMined": false "canBeMined": false
}, },
{ {
@ -913,12 +653,7 @@ class PrototypesTest : BehaviorSpec({
"collisionMasks": [ "collisionMasks": [
"ground-tile" "ground-tile"
], ],
"mapColour": { "mapColour": [122, 122, 122, 255],
"red": 122,
"green": 122,
"blue": 122,
"alpha": 255
},
"canBeMined": false "canBeMined": false
} }
] ]

View file

@ -30,18 +30,8 @@ class UpdatePacketsTest : FunSpec({
"type": "dev.adamko.kafkatorio.schema2.PlayerUpdate", "type": "dev.adamko.kafkatorio.schema2.PlayerUpdate",
"key": {"index": 1}, "key": {"index": 1},
"afkTime": 0, "afkTime": 0,
"chatColour": { "chatColour": [1, 0.4, 0.6, 1],
"red": 1, "colour": [0.8, 0.5, 0.2, 0.5],
"green": 0.4,
"blue": 0.6,
"alpha": 1
},
"colour": {
"red": 0.8,
"green": 0.5,
"blue": 0.2,
"alpha": 0.5
},
"eventCounts": { "eventCounts": {
"on_player_changed_position": 7, "on_player_changed_position": 7,
"on_player_joined_game": 1 "on_player_joined_game": 1
@ -54,7 +44,10 @@ class UpdatePacketsTest : FunSpec({
"lastOnline": 0, "lastOnline": 0,
"name": "fredthedeadhead", "name": "fredthedeadhead",
"onlineTime": 0, "onlineTime": 0,
"position": [-58, 13], "position": [
-58,
13
],
"tag": "" "tag": ""
} }
} }

View file

@ -0,0 +1,41 @@
package dev.adamko.kafkatorio.processor.serdes
import dev.adamko.kafkatorio.schema.common.MapTileDictionary
import dev.adamko.kafkatorio.schema.common.PrototypeName
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.equality.shouldBeEqualToComparingFields
import kotlinx.serialization.decodeFromByteArray
import kotlinx.serialization.encodeToByteArray
class MapTileDictionaryTest : FunSpec({
context("encode MapTileDictionary") {
val actual = MapTileDictionary(
tilesXY = mapOf(
"-192" to mapOf("-65" to MapTileDictionary.PrototypeKey(2)),
"161" to mapOf(
"-96" to MapTileDictionary.PrototypeKey(1),
"-95" to MapTileDictionary.PrototypeKey(2),
"94" to MapTileDictionary.PrototypeKey(2),
"93" to MapTileDictionary.PrototypeKey(32),
),
// unknown prototype
"44" to mapOf("1" to MapTileDictionary.PrototypeKey(44)),
),
protos = mapOf(
PrototypeName("water") to MapTileDictionary.PrototypeKey(1),
PrototypeName("grass-4") to MapTileDictionary.PrototypeKey(2),
PrototypeName("grass-3") to MapTileDictionary.PrototypeKey(32),
PrototypeName("not-used") to MapTileDictionary.PrototypeKey(99),
)
)
test("binary round trip") {
val encoded: ByteArray = kxsBinary.encodeToByteArray(actual)
val decoded: MapTileDictionary = kxsBinary.decodeFromByteArray(encoded)
decoded.shouldBeEqualToComparingFields(actual)
}
}
})