Render buildings and resources
- create LuaJsonList to handle empty Lua JSON lists being sent as empty objects - fix exporting of resources and entities - split up map tiles into different layer directories - add 'chunk size' to MapChunkPosition - move tests to correct packages - bump tstl - decrease tstl logging - remove some defined, but unused, kafka topics - syslog, rest, websocket servers & web-map: decrease logging - webmap: add additional layers for buildings and resources
This commit is contained in:
parent
a805d2ad63
commit
b507081eac
72 changed files with 2167 additions and 1068 deletions
|
|
@ -78,7 +78,7 @@ class App(
|
|||
wsService.packetsFlow
|
||||
.filterIsInstance<EventServerPacket.ChunkTileSaved>()
|
||||
.onEach { tileSavedEvent ->
|
||||
println("[packetsFlow] triggering tile refresh ${tileSavedEvent.filename.value}")
|
||||
// println("[packetsFlow] triggering tile refresh ${tileSavedEvent.filename.value}")
|
||||
gameState.map.refreshUpdatedTilePng(tileSavedEvent.filename)
|
||||
}.launchIn(this)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package dev.adamko.kafkatorio.webmap
|
||||
|
||||
import dev.adamko.kafkatorio.schema.common.TilePngFilename
|
||||
import dev.adamko.kafkatorio.schema.common.ServerMapTileLayer
|
||||
import dev.adamko.kafkatorio.schema.common.ServerMapTilePngFilename
|
||||
import dev.adamko.kafkatorio.webmap.externals.TileOnLoadFn
|
||||
import dev.adamko.kafkatorio.webmap.externals.tileOnLoad
|
||||
import io.kvision.maps.Maps
|
||||
|
|
@ -30,9 +31,7 @@ import org.w3c.fetch.RequestInit
|
|||
import org.w3c.fetch.RequestMode
|
||||
|
||||
|
||||
class FactorioMap(
|
||||
private val tileUrlTemplate: String = """/kafkatorio/data/servers/syslog-test/map/tiles/s1/z{z}/x{x}/y{y}.png""",
|
||||
) {
|
||||
class FactorioMap {
|
||||
|
||||
val kvMap: Maps = Maps {
|
||||
width = 800.px
|
||||
|
|
@ -40,18 +39,22 @@ class FactorioMap(
|
|||
margin = 10.px
|
||||
}
|
||||
|
||||
private val factorioTerrainLayer: TileLayer<*> = buildFactorioTerrainLayer()
|
||||
private val terrainTileLayer: TileLayer<*> = createServerTileLayer(ServerMapTileLayer.TERRAIN)
|
||||
private val resourcesTileLayer: TileLayer<*> = createServerTileLayer(ServerMapTileLayer.RESOURCE)
|
||||
private val buildingsTileLayer: TileLayer<*> = createServerTileLayer(ServerMapTileLayer.BUILDING)
|
||||
|
||||
val playerIconsLayer: LayerGroup = LayerGroup()
|
||||
|
||||
init {
|
||||
|
||||
val baseLayers: Control.LayersObject = jso {
|
||||
set("Terrain", factorioTerrainLayer)
|
||||
set("Terrain", terrainTileLayer)
|
||||
}
|
||||
|
||||
val overlays: Control.LayersObject = jso {
|
||||
set("Players", playerIconsLayer)
|
||||
set("Resources", resourcesTileLayer)
|
||||
set("Buildings", buildingsTileLayer)
|
||||
}
|
||||
|
||||
val layersControl = Layers(
|
||||
|
|
@ -76,14 +79,17 @@ class FactorioMap(
|
|||
// options.fadeAnimation = false
|
||||
addControl(layersControl)
|
||||
|
||||
factorioTerrainLayer.addTo(this)
|
||||
terrainTileLayer.addTo(this)
|
||||
resourcesTileLayer.addTo(this)
|
||||
buildingsTileLayer.addTo(this)
|
||||
|
||||
playerIconsLayer.addTo(this)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
suspend fun refreshUpdatedTilePng(
|
||||
tilePngFilename: TilePngFilename,
|
||||
tilePngFilename: ServerMapTilePngFilename,
|
||||
): Unit = coroutineScope {
|
||||
document
|
||||
.querySelectorAll("img.leaflet-tile-loaded")
|
||||
|
|
@ -111,10 +117,14 @@ class FactorioMap(
|
|||
}
|
||||
}
|
||||
|
||||
private fun buildFactorioTerrainLayer(): TileLayer<TileLayer.TileLayerOptions> {
|
||||
private fun createServerTileLayer(
|
||||
layer: ServerMapTileLayer
|
||||
): TileLayer<TileLayer.TileLayerOptions> {
|
||||
|
||||
val urlTemplate: String = tileLayerUrlTemplate(layer)
|
||||
|
||||
val baseTileLayer = L.tileLayer(
|
||||
tileUrlTemplate
|
||||
urlTemplate
|
||||
) {
|
||||
attribution = "kafkatorio"
|
||||
tileSize = 256
|
||||
|
|
@ -147,5 +157,8 @@ class FactorioMap(
|
|||
|
||||
companion object {
|
||||
const val DYNAMIC_RELOAD_ATT = "dynamic-reload"
|
||||
|
||||
private fun tileLayerUrlTemplate(layer: ServerMapTileLayer): String =
|
||||
"/kafkatorio/data/servers/syslog-test/map/layers/${layer.dir}/s1/z{z}/x{x}/y{y}.png"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,8 +5,9 @@ import dev.adamko.kafkatorio.schema.packets.ConsoleChatUpdate
|
|||
import dev.adamko.kafkatorio.schema.packets.ConsoleCommandUpdate
|
||||
import dev.adamko.kafkatorio.schema.packets.EntityUpdate
|
||||
import dev.adamko.kafkatorio.schema.packets.EventServerPacket
|
||||
import dev.adamko.kafkatorio.schema.packets.KafkatorioPacketData
|
||||
import dev.adamko.kafkatorio.schema.packets.KafkatorioPacketDataError
|
||||
import dev.adamko.kafkatorio.schema.packets.MapChunkEntityUpdate
|
||||
import dev.adamko.kafkatorio.schema.packets.MapChunkResourceUpdate
|
||||
import dev.adamko.kafkatorio.schema.packets.MapChunkTileUpdate
|
||||
import dev.adamko.kafkatorio.schema.packets.PlayerUpdate
|
||||
import dev.adamko.kafkatorio.schema.packets.PrototypesUpdate
|
||||
|
|
@ -76,18 +77,19 @@ class WebsocketService(
|
|||
|
||||
is EventServerPacket.Kafkatorio ->
|
||||
when (val packetData = packet.packet.data) {
|
||||
is PlayerUpdate -> reduxStore.dispatch(
|
||||
FactorioUpdate.Player(packet.packet.tick, packetData)
|
||||
)
|
||||
is PlayerUpdate ->
|
||||
reduxStore.dispatch(FactorioUpdate.Player(packet.packet.tick, packetData))
|
||||
|
||||
is ConfigurationUpdate,
|
||||
is ConsoleChatUpdate,
|
||||
is ConsoleCommandUpdate,
|
||||
is EntityUpdate,
|
||||
is MapChunkEntityUpdate,
|
||||
is MapChunkResourceUpdate,
|
||||
is MapChunkTileUpdate,
|
||||
is PrototypesUpdate,
|
||||
is SurfaceUpdate,
|
||||
is KafkatorioPacketData.Error -> {
|
||||
is KafkatorioPacketDataError -> {
|
||||
// to be continued...
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue