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 interface Colour {
red?: Float;
green?: Float;
blue?: Float;
alpha?: Float;
}
export type Colour = [
red: Float,
green: Float,
blue: Float,
alpha: Float,
];
export type MapEntityPosition = [
x: Double,

View file

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

View file

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

View file

@ -1,5 +1,6 @@
package dev.adamko.kafkatorio.schema.common
import dev.adamko.kxstsgen.core.experiments.TupleSerializer
import kotlin.math.roundToInt
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`.
*/
@Serializable
@Serializable(with = Colour.Serializer::class)
data class Colour(
val red: Float = 0f,
val green: Float = 0f,
val blue: Float = 0f,
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) */

View file

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

View file

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

View file

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