From a9782a4d908e6d80a0e8c38da3e337d2354e4f3b Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Fri, 4 Mar 2022 23:54:45 +0100 Subject: [PATCH] version bumps, schema tweaks, code tweaks, --- .../kafkatorio-schema/object-data.d.ts | 2 +- .../kafkatorio-schema/prototype.d.ts | 12 +- .../generated/kafkatorio-schema/schema.d.ts | 16 +- .../typescript/main/cache/cacheChecker.ts | 1 - .../main/commands/kafkatorioCommands.ts | 4 +- .../main/typescript/main/events/converters.ts | 2 +- .../main/events/onMapChunkEventListeners.ts | 14 +- .../src/main/typescript/package-lock.json | 26 +- .../src/main/typescript/package.json | 4 +- .../events/schema/factorioLuaObjects.kt | 2 +- .../events/schema/kafkatorioPacket.kt | 2 +- .../events/schema/PrototypesTest.kt | 921 +++++++++++++++++- .../adamko/kafkatorio/events/schema/kt2ts.kt | 2 + .../processor/KafkatorioTopology.kt | 3 +- .../processor/topology/flowMapTiles.kt | 2 +- 15 files changed, 954 insertions(+), 59 deletions(-) diff --git a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/object-data.d.ts b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/object-data.d.ts index 62bb0c4..60cd5c8 100644 --- a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/object-data.d.ts +++ b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/object-data.d.ts @@ -23,7 +23,7 @@ interface EntityData extends FactorioObjectData, FactorioLuaControl { active: boolean; force: uint; health: double | null; - healthRatio: double; + healthRatio: double | null; name: string; objectName: ObjectName; playerIndex: uint | null; diff --git a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/prototype.d.ts b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/prototype.d.ts index 01d4958..a18dd09 100644 --- a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/prototype.d.ts +++ b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/prototype.d.ts @@ -6,12 +6,6 @@ interface FactorioPrototype { prototypeObjectName: PrototypeObjectName; } -interface FactorioPrototypes extends KafkatorioPacket { - modVersion: string; - packetType: PacketType; - prototypes: FactorioPrototype[]; -} - interface MapTilePrototype extends FactorioPrototype { canBeMined: boolean; collisionMasks: string[]; @@ -21,3 +15,9 @@ interface MapTilePrototype extends FactorioPrototype { order: string; prototypeObjectName: PrototypeObjectName; } + +interface FactorioPrototypes extends KafkatorioPacket { + modVersion: string; + packetType: PacketType; + prototypes: FactorioPrototype[]; +} diff --git a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts index 7091073..d60941b 100644 --- a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts +++ b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts @@ -7,14 +7,6 @@ interface KafkatorioPacket { packetType: PacketType; } -interface FactorioEvent extends KafkatorioPacket { - data: FactorioObjectData; - eventType: string; - modVersion: string; - packetType: PacketType; - tick: uint; -} - interface MapEntityPosition { x: double; y: double; @@ -54,6 +46,14 @@ interface MapTile { y: int; } +interface FactorioEvent extends KafkatorioPacket { + data: FactorioObjectData; + eventType: string; + modVersion: string; + packetType: PacketType; + tick: uint; +} + interface EntityIdentifiers { name: string; type: string; diff --git a/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts b/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts index 9a7e056..3a3f7ab 100644 --- a/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts +++ b/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts @@ -3,7 +3,6 @@ import {emitPacket} from "../emitKafkatorioPacket"; /** Every 0.1 seconds */ script.on_nth_tick(6, (nthTick: NthTickEventData) => { - const cachedEvents: Array = EventDataCache.extractExpired() if (cachedEvents.length > 0) { diff --git a/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts b/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts index 8286f8c..940b8d6 100644 --- a/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts +++ b/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts @@ -40,8 +40,8 @@ commands.add_command( let chunkYMin = chunkPosition.y - radius let chunkYMax = chunkPosition.y + radius - for (let [, surface] of game.surfaces) { - for (let chunk of surface.get_chunks()) { + for (const [, surface] of game.surfaces) { + for (const chunk of surface.get_chunks()) { if ( (chunk.x >= chunkXMin && chunk.x <= chunkXMax) && diff --git a/modules/events-mod/src/main/typescript/main/events/converters.ts b/modules/events-mod/src/main/typescript/main/events/converters.ts index 75b8de0..c29e1c5 100644 --- a/modules/events-mod/src/main/typescript/main/events/converters.ts +++ b/modules/events-mod/src/main/typescript/main/events/converters.ts @@ -41,7 +41,7 @@ export namespace Converters { type: entity.type, active: entity.active, health: entity.health ?? null, - healthRatio: entity.get_health_ratio(), + healthRatio: entity.get_health_ratio() ?? null, surface: entity.surface.index, unitNumber: entity.unit_number ?? null, position: mapEntityPosition(entity.position), diff --git a/modules/events-mod/src/main/typescript/main/events/onMapChunkEventListeners.ts b/modules/events-mod/src/main/typescript/main/events/onMapChunkEventListeners.ts index 7d6851b..9ec0d13 100644 --- a/modules/events-mod/src/main/typescript/main/events/onMapChunkEventListeners.ts +++ b/modules/events-mod/src/main/typescript/main/events/onMapChunkEventListeners.ts @@ -31,19 +31,21 @@ function mapTilesUpdateDebounce( return } + const key: CacheKey<"MAP_CHUNK"> = { + surfaceIndex: surface.index, + chunkPosition: chunkPosition, + updateType: "MAP_CHUNK", + } + EventDataCache.debounce<"MAP_CHUNK">( - { - surfaceIndex: surface.index, - chunkPosition: chunkPosition, - updateType: "MAP_CHUNK", - }, + key, data => { data.tileDictionary ??= { tilesXY: {}, protos: {}, } - for (let tile of tiles) { + for (const tile of tiles) { const xString = `${tile.position.x}` const yString = `${tile.position.y}` diff --git a/modules/events-mod/src/main/typescript/package-lock.json b/modules/events-mod/src/main/typescript/package-lock.json index 44d891d..12bc07a 100644 --- a/modules/events-mod/src/main/typescript/package-lock.json +++ b/modules/events-mod/src/main/typescript/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -50,11 +50,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "resolve": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", - "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "requires": { - "is-core-module": "^2.8.0", + "is-core-module": "^2.8.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -75,9 +75,9 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "typed-factorio": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/typed-factorio/-/typed-factorio-0.18.1.tgz", - "integrity": "sha512-osjGO4V809tlDnDI7lXTIOPCcDBwBfKfW6o8zFR04S0/uBAzP4eY3X3GXTPzWK/P3HJ9GXDUHV2Nai2ZRicbkA==" + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/typed-factorio/-/typed-factorio-0.19.1.tgz", + "integrity": "sha512-/iLa916Cw33vC6wgmCb4cPLjmvUA2zVviTx/vy80iEvpOHjoNkuHkGSsmvss1aItwUKUlHaLi3k0fK5OPiw1iA==" }, "typescript": { "version": "4.5.5", @@ -85,9 +85,9 @@ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" }, "typescript-to-lua": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/typescript-to-lua/-/typescript-to-lua-1.3.3.tgz", - "integrity": "sha512-Fkt0+dLufN5CK0G/qpINY7Sb0+SNmWpov+PHhO/dq0HFoNBzR47M1SJd+hQbG92vTVFLBO4f+Np29LuVvoemMA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/typescript-to-lua/-/typescript-to-lua-1.3.4.tgz", + "integrity": "sha512-9NkUOSUd9tufvwCGiWJ6Z1edizYcECUfjdZJZfDRKTEXKIddbAdV3IFR6u5gxvYYRfXhfNV6IKvqHS2HxHFs6w==", "requires": { "enhanced-resolve": "^5.8.2", "resolve": "^1.15.1", diff --git a/modules/events-mod/src/main/typescript/package.json b/modules/events-mod/src/main/typescript/package.json index 5190f46..c477325 100644 --- a/modules/events-mod/src/main/typescript/package.json +++ b/modules/events-mod/src/main/typescript/package.json @@ -13,8 +13,8 @@ }, "dependencies": { "lua-types": "^2.11.0", - "typescript-to-lua": "1.3.3", - "typed-factorio": "0.18.1", + "typescript-to-lua": "1.3.4", + "typed-factorio": "0.19.1", "typescript": "4.5.5" }, "// @types/node": "^12.0.8", diff --git a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioLuaObjects.kt b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioLuaObjects.kt index 796914d..e4b45db 100644 --- a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioLuaObjects.kt +++ b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioLuaObjects.kt @@ -114,7 +114,7 @@ data class EntityData( override val surface: SurfaceIndex, val active: Boolean, val health: Double?, - val healthRatio: Double, + val healthRatio: Double?, val name: String, val playerIndex: PlayerIndex? = null, val type: String, diff --git a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/kafkatorioPacket.kt b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/kafkatorioPacket.kt index be9bfef..e5e947e 100644 --- a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/kafkatorioPacket.kt +++ b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/kafkatorioPacket.kt @@ -38,7 +38,7 @@ object KafkatorioPacketJsonSerializer : JsonContentPolymorphicSerializer { - val type = element + val type: KafkatorioPacket.PacketType? = element .jsonObject[key] ?.jsonPrimitive ?.contentOrNull diff --git a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt index 98da4ef..5356ad2 100644 --- a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt +++ b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt @@ -1,13 +1,14 @@ package dev.adamko.kafkatorio.events.schema import io.kotest.core.spec.style.BehaviorSpec +import io.kotest.matchers.collections.shouldContain +import io.kotest.matchers.types.shouldBeInstanceOf import kotlinx.serialization.decodeFromString -class PrototypesTest : BehaviorSpec( - { - Given("Prototypes Json") { - //Language=JSON - val raw = """ +class PrototypesTest : BehaviorSpec({ + Given("Prototypes Json") { + // language=JSON + val raw = """ { "modVersion":"0.2.4", "packetType":"PROTOTYPES", @@ -30,16 +31,908 @@ class PrototypesTest : BehaviorSpec( } ] } -""".trimIndent() - - Then("expect can be parsed") { - val data = jsonMapperKafkatorio.decodeFromString(raw) - println(data) - } + """.trimIndent() + Then("expect can be parsed") { + val data = jsonMapperKafkatorio.decodeFromString(raw) + println(data) } + } -) { - companion object { + + Given("Big prototypes json") { + // language=JSON + val raw = """ + { + "modVersion":"0.3.2", + "packetType":"PROTOTYPES", + "prototypes":[ + { + "prototypeObjectName":"LuaTilePrototype", + "name":"stone-path", + "order":"a[artificial]-a[tier-1]-a[stone-path]", + "layer":60, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":86, + "green":82, + "blue":74, + "alpha":255 + }, + "canBeMined":true + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"concrete", + "order":"a[artificial]-b[tier-2]-a[concrete]", + "layer":61, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":63, + "green":61, + "blue":59, + "alpha":255 + }, + "canBeMined":true + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"hazard-concrete-left", + "order":"a[artificial]-b[tier-2]-b[hazard-concrete-left]", + "layer":62, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":176, + "green":142, + "blue":39, + "alpha":255 + }, + "canBeMined":true + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"hazard-concrete-right", + "order":"a[artificial]-b[tier-2]-c[hazard-concrete-right]", + "layer":62, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":176, + "green":142, + "blue":39, + "alpha":255 + }, + "canBeMined":true + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"refined-concrete", + "order":"a[artificial]-c[tier-3]-a[refined-concrete]", + "layer":64, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":49, + "green":48, + "blue":45, + "alpha":255 + }, + "canBeMined":true + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"refined-hazard-concrete-left", + "order":"a[artificial]-c[tier-3]-b[refined-hazard-concrete-left]", + "layer":65, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":116, + "green":94, + "blue":26, + "alpha":255 + }, + "canBeMined":true + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"refined-hazard-concrete-right", + "order":"a[artificial]-c[tier-3]-c[refined-hazard-concrete-right]", + "layer":65, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":116, + "green":94, + "blue":26, + "alpha":255 + }, + "canBeMined":true + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"landfill", + "order":"a[artificial]-d[utility]-a[landfill]", + "layer":57, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":57, + "green":39, + "blue":26, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"acid-refined-concrete", + "order":"a[artificial]-e[color-concrete]-acid", + "layer":97, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":142, + "green":194, + "blue":40, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"black-refined-concrete", + "order":"a[artificial]-e[color-concrete]-black", + "layer":88, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":25, + "green":25, + "blue":25, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"blue-refined-concrete", + "order":"a[artificial]-e[color-concrete]-blue", + "layer":73, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":39, + "green":137, + "blue":228, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"brown-refined-concrete", + "order":"a[artificial]-e[color-concrete]-brown", + "layer":91, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":76, + "green":29, + "blue":0, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"cyan-refined-concrete", + "order":"a[artificial]-e[color-concrete]-cyan", + "layer":94, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":70, + "green":192, + "blue":181, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"green-refined-concrete", + "order":"a[artificial]-e[color-concrete]-green", + "layer":70, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":23, + "green":195, + "blue":43, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"orange-refined-concrete", + "order":"a[artificial]-e[color-concrete]-orange", + "layer":76, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":221, + "green":127, + "blue":33, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"pink-refined-concrete", + "order":"a[artificial]-e[color-concrete]-pink", + "layer":82, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":236, + "green":98, + "blue":131, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"purple-refined-concrete", + "order":"a[artificial]-e[color-concrete]-purple", + "layer":85, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":123, + "green":28, + "blue":168, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"red-refined-concrete", + "order":"a[artificial]-e[color-concrete]-red", + "layer":67, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":207, + "green":6, + "blue":0, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"yellow-refined-concrete", + "order":"a[artificial]-e[color-concrete]-yellow", + "layer":79, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":212, + "green":169, + "blue":19, + "alpha":127 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"grass-1", + "order":"b[natural]-a[grass]-a[grass-1]", + "layer":26, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":55, + "green":53, + "blue":11, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"grass-2", + "order":"b[natural]-a[grass]-b[grass-2]", + "layer":28, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":66, + "green":57, + "blue":15, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"grass-3", + "order":"b[natural]-a[grass]-c[grass-3]", + "layer":29, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":65, + "green":52, + "blue":28, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"grass-4", + "order":"b[natural]-a[grass]-d[grass-4]", + "layer":30, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":59, + "green":40, + "blue":18, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dry-dirt", + "order":"b[natural]-b[dirt]-a[dry-dirt]", + "layer":18, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":94, + "green":66, + "blue":37, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dirt-1", + "order":"b[natural]-b[dirt]-b[dirt-1]", + "layer":19, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":141, + "green":104, + "blue":60, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dirt-2", + "order":"b[natural]-b[dirt]-c[dirt-2]", + "layer":20, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":136, + "green":96, + "blue":59, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dirt-3", + "order":"b[natural]-b[dirt]-d[dirt-3]", + "layer":21, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":133, + "green":92, + "blue":53, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dirt-4", + "order":"b[natural]-b[dirt]-e[dirt-4]", + "layer":22, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":103, + "green":72, + "blue":43, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dirt-5", + "order":"b[natural]-b[dirt]-f[dirt-5]", + "layer":23, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":91, + "green":63, + "blue":38, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dirt-6", + "order":"b[natural]-b[dirt]-g[dirt-6]", + "layer":24, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":80, + "green":55, + "blue":31, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"dirt-7", + "order":"b[natural]-b[dirt]-h[dirt-7]", + "layer":25, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":80, + "green":54, + "blue":28, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"sand-1", + "order":"b[natural]-c[sand]-a[sand-1]", + "layer":8, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":138, + "green":103, + "blue":58, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"sand-2", + "order":"b[natural]-c[sand]-b[sand-2]", + "layer":9, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":128, + "green":93, + "blue":52, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"sand-3", + "order":"b[natural]-c[sand]-c[sand-3]", + "layer":10, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":115, + "green":83, + "blue":47, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"red-desert-0", + "order":"b[natural]-d[red-desert]-a[red-desert-0]", + "layer":31, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":103, + "green":70, + "blue":32, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"red-desert-1", + "order":"b[natural]-d[red-desert]-b[red-desert-1]", + "layer":14, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":116, + "green":81, + "blue":39, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"red-desert-2", + "order":"b[natural]-d[red-desert]-c[red-desert-2]", + "layer":15, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":116, + "green":84, + "blue":43, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"red-desert-3", + "order":"b[natural]-d[red-desert]-d[red-desert-3]", + "layer":16, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":128, + "green":93, + "blue":52, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"water", + "order":"c[water]-a[water]", + "layer":3, + "collisionMasks":[ + "doodad-layer", + "item-layer", + "player-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":51, + "green":83, + "blue":95, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"deepwater", + "order":"c[water]-b[deep-water]", + "layer":3, + "collisionMasks":[ + "doodad-layer", + "item-layer", + "player-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":38, + "green":64, + "blue":73, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"water-green", + "order":"c[water]-c[water-green]", + "layer":3, + "collisionMasks":[ + "doodad-layer", + "item-layer", + "player-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":31, + "green":48, + "blue":18, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"deepwater-green", + "order":"c[water]-d[deepwater-green]", + "layer":3, + "collisionMasks":[ + "doodad-layer", + "item-layer", + "player-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":23, + "green":37, + "blue":16, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"water-shallow", + "order":"c[water]-e[water-shallow]", + "layer":6, + "collisionMasks":[ + "item-layer", + "object-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":82, + "green":98, + "blue":92, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"water-mud", + "order":"c[water]-g[water-mud]", + "layer":7, + "collisionMasks":[ + "item-layer", + "object-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":65, + "green":89, + "blue":90, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"nuclear-ground", + "order":"d[destruction]-a[nuclear]-a[nuclear-ground]", + "layer":33, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":48, + "green":40, + "blue":35, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"water-wube", + "order":"x[wube]-a[water-wube]", + "layer":2, + "collisionMasks":[ + "doodad-layer", + "item-layer", + "player-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":0, + "green":0, + "blue":0, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"tile-unknown", + "order":"z-a", + "layer":0, + "collisionMasks":{ + + }, + "mapColour":{ + "red":0, + "green":0, + "blue":0, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"out-of-map", + "order":"z[other]-a[out-of-map]", + "layer":0, + "collisionMasks":[ + "doodad-layer", + "floor-layer", + "ground-tile", + "item-layer", + "object-layer", + "player-layer", + "resource-layer", + "water-tile" + ], + "mapColour":{ + "red":0, + "green":0, + "blue":0, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"lab-dark-1", + "order":"z[other]-b[lab]-a[lab-dark-1]", + "layer":70, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":49, + "green":49, + "blue":49, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"lab-dark-2", + "order":"z[other]-b[lab]-b[lab-dark-2]", + "layer":70, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":0, + "green":0, + "blue":0, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"lab-white", + "order":"z[other]-b[lab]-c[lab-white]", + "layer":70, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":255, + "green":255, + "blue":255, + "alpha":255 + }, + "canBeMined":false + }, + { + "prototypeObjectName":"LuaTilePrototype", + "name":"tutorial-grid", + "order":"z[other]-c[tutorial]-a[tutorial-grid]", + "layer":55, + "collisionMasks":[ + "ground-tile" + ], + "mapColour":{ + "red":122, + "green":122, + "blue":122, + "alpha":255 + }, + "canBeMined":false + } + ] + } + """.trimIndent() + + Then("expect can be parsed") { + val data: KafkatorioPacket = jsonMapperKafkatorio.decodeFromString(raw) + println(data) + + data.shouldBeInstanceOf() + + data.prototypes.shouldContain( + MapTilePrototype( + name = PrototypeName("tutorial-grid"), + order = "z[other]-c[tutorial]-a[tutorial-grid]", + layer = 55u, + collisionMasks = listOf("ground-tile"), + mapColour = Colour(122f, 122f, 122f, 255f), + canBeMined = false, + ) + ) + } + } -} +}) diff --git a/modules/events-schema/src/jvmMain/kotlin/dev/adamko/kafkatorio/events/schema/kt2ts.kt b/modules/events-schema/src/jvmMain/kotlin/dev/adamko/kafkatorio/events/schema/kt2ts.kt index 8483604..3a04314 100644 --- a/modules/events-schema/src/jvmMain/kotlin/dev/adamko/kafkatorio/events/schema/kt2ts.kt +++ b/modules/events-schema/src/jvmMain/kotlin/dev/adamko/kafkatorio/events/schema/kt2ts.kt @@ -21,6 +21,8 @@ fun main(args: Array) { add(FactorioPrototypes::class) add(FactorioConfigurationUpdate::class) + add(FactorioEvent::class) + add(FactorioEventUpdatePacket::class) addAll(FactorioEventUpdate::class.sealedSubclasses) addAll(FactorioEventUpdateKey::class.sealedSubclasses) diff --git a/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/KafkatorioTopology.kt b/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/KafkatorioTopology.kt index 5fe672b..1e8dd10 100644 --- a/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/KafkatorioTopology.kt +++ b/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/KafkatorioTopology.kt @@ -109,7 +109,6 @@ internal class KafkatorioTopology( ) ) - val topology = builder.build() launchTopology("groupTilesMapChunks", topology) } @@ -117,7 +116,7 @@ internal class KafkatorioTopology( private fun saveTiles() { val builder = StreamsBuilder() - val groupedMapChunkTiles: KTable> = + val groupedMapChunkTiles: KTable?> = builder.table( TOPIC_GROUPED_MAP_CHUNKS, consumedAs("consume.grouped-map-chunks", kxsBinary.serde(), kxsBinary.serde()) diff --git a/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/flowMapTiles.kt b/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/flowMapTiles.kt index 3b30df1..f0b189e 100644 --- a/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/flowMapTiles.kt +++ b/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/flowMapTiles.kt @@ -47,7 +47,7 @@ private val serverMapChunkHandler = ServerMapChunkHandler() fun saveMapTiles( - serverMapTable: KTable> + serverMapTable: KTable?> ) { serverMapTable