fix 'prototype key' in MapTileDictionary
This commit is contained in:
parent
648cb31de8
commit
bb54f6666b
2 changed files with 13 additions and 20 deletions
|
|
@ -3,8 +3,7 @@ import {Converters} from "./converters";
|
|||
import EventUpdatesManager, {EventUpdates} from "../cache/EventDataCache";
|
||||
import {
|
||||
KafkatorioPacketData,
|
||||
MapChunkPosition,
|
||||
MapTileDictionary
|
||||
MapChunkPosition
|
||||
} from "../../generated/kafkatorio-schema/kafkatorio-schema";
|
||||
import CacheKey = EventUpdates.PacketKey;
|
||||
import Type = KafkatorioPacketData.Type;
|
||||
|
|
@ -13,18 +12,6 @@ import Type = KafkatorioPacketData.Type;
|
|||
type MapChunkUpdater = (data: KafkatorioPacketData.MapChunkUpdate) => void
|
||||
|
||||
|
||||
const mapProtoNameToKey: { [key: string]: uint } = {}
|
||||
let protoIndex: uint = 0
|
||||
|
||||
|
||||
function getProtoKey(protoName: string): uint {
|
||||
if (mapProtoNameToKey[protoName] == undefined) {
|
||||
mapProtoNameToKey[protoName] = protoIndex++
|
||||
}
|
||||
return mapProtoNameToKey[protoName]
|
||||
}
|
||||
|
||||
|
||||
function mapTilesUpdateDebounce(
|
||||
surface: LuaSurface | undefined,
|
||||
chunkPosition: MapChunkPosition,
|
||||
|
|
@ -47,27 +34,31 @@ function mapTilesUpdateDebounce(
|
|||
key,
|
||||
Type.MapChunkUpdate,
|
||||
data => {
|
||||
data.tileDictionary ??= <MapTileDictionary>{
|
||||
|
||||
// tile dictionary update
|
||||
data.tileDictionary ??= {
|
||||
tilesXY: {},
|
||||
protos: {},
|
||||
}
|
||||
|
||||
let protosCount: uint = 0
|
||||
for (const tile of tiles) {
|
||||
data.tileDictionary.protos[tile.name] ??= protosCount++
|
||||
const protoKey = data.tileDictionary.protos[tile.name]
|
||||
|
||||
const xString = `${tile.position.x}`
|
||||
const yString = `${tile.position.y}`
|
||||
const protoKey = getProtoKey(tile.name)
|
||||
|
||||
data.tileDictionary.protos[tile.name] = protoIndex
|
||||
|
||||
data.tileDictionary.tilesXY[xString] ??= {}
|
||||
data.tileDictionary.tilesXY[xString][yString] = protoKey
|
||||
}
|
||||
|
||||
// events count update
|
||||
data.eventCounts ??= {}
|
||||
data.eventCounts[eventName] ??= 0
|
||||
data.eventCounts[eventName]++
|
||||
|
||||
// apply mutator
|
||||
if (updater != undefined) {
|
||||
updater(data)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,15 +50,17 @@ data class MapTileDictionary(
|
|||
val protoName = protosIndexToName[protoIndex]
|
||||
if (x != null && y != null && protoName != null) {
|
||||
add(MapTile(x, y, protoName))
|
||||
} else if (protoName == null) {
|
||||
println("warning: no prototype name found for index:$protoIndex. $protosIndexToName")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** The collection-index of a prototype in [MapTileDictionary.protos] */
|
||||
/** An arbitrary ID for a prototype in [MapTileDictionary.protos]. */
|
||||
@Serializable
|
||||
@JvmInline
|
||||
value class PrototypeKey(val index: Int)
|
||||
value class PrototypeKey(private val index: Int)
|
||||
|
||||
companion object {
|
||||
fun MapTileDictionary?.isNullOrEmpty(): Boolean {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue