massive refactor to export entities (buildings and resources)
- minor version bumps - new Factorio version - use both prototype name and type to identify a prototype - kxs-ts-gen: use BrandTyping, but exclude some identifiers - kxs-ts-gen: manually create zip dist, so it can run after the project compiles - mod: use typed-factorio strict types - mod: refactor event handlers to be a little more consistent and object-oriented
This commit is contained in:
parent
88982d818a
commit
90dc520d22
62 changed files with 2629 additions and 713 deletions
|
|
@ -1,7 +1,22 @@
|
|||
local ____exports = {}
|
||||
local ____kafkatorio_2Dschema = require("generated.kafkatorio-schema")
|
||||
local EntityStatus = ____kafkatorio_2Dschema.EntityStatus
|
||||
local FactorioEntityData = ____kafkatorio_2Dschema.FactorioEntityData
|
||||
____exports.Converters = {}
|
||||
local Converters = ____exports.Converters
|
||||
do
|
||||
local convertEntityStatus, EntityStatusRecord
|
||||
function convertEntityStatus(status)
|
||||
if status == nil then
|
||||
return nil
|
||||
else
|
||||
return EntityStatusRecord[status]
|
||||
end
|
||||
end
|
||||
function Converters.prototypeId(____type, name)
|
||||
return (____type .. "/") .. name
|
||||
end
|
||||
local floor = math.floor
|
||||
local mapEventIdToName = {}
|
||||
for eventName, eventId in pairs(defines.events) do
|
||||
mapEventIdToName[eventId] = eventName
|
||||
|
|
@ -36,5 +51,86 @@ do
|
|||
end
|
||||
return masks
|
||||
end
|
||||
function Converters.convertResourceEntity(entity)
|
||||
if entity.type ~= "resource" then
|
||||
return nil
|
||||
else
|
||||
return {
|
||||
type = FactorioEntityData.Type.Resource,
|
||||
protoId = Converters.prototypeId(entity.type, entity.name),
|
||||
status = convertEntityStatus(entity.status),
|
||||
amount = entity.amount,
|
||||
initialAmount = entity.initial_amount,
|
||||
position = Converters.convertMapTablePosition(entity.position)
|
||||
}
|
||||
end
|
||||
end
|
||||
function Converters.prototypeIdEntity(entity)
|
||||
return Converters.prototypeId(entity.type, entity.name)
|
||||
end
|
||||
function Converters.tilePositionToChunkPosition(mapPosition)
|
||||
return {
|
||||
floor(mapPosition.x / 32),
|
||||
floor(mapPosition.y)
|
||||
}
|
||||
end
|
||||
function Converters.mapPositionToChunkPosition(mapPosition)
|
||||
return {
|
||||
floor(mapPosition.x / 32),
|
||||
floor(mapPosition.y)
|
||||
}
|
||||
end
|
||||
function Converters.entityStatus(status)
|
||||
if status == nil then
|
||||
return nil
|
||||
else
|
||||
return EntityStatusRecord[status]
|
||||
end
|
||||
end
|
||||
EntityStatusRecord = {
|
||||
[defines.entity_status.cant_divide_segments] = EntityStatus.CANT_DIVIDE_SEGMENTS,
|
||||
[defines.entity_status.charging] = EntityStatus.CHARGING,
|
||||
[defines.entity_status.closed_by_circuit_network] = EntityStatus.CLOSED_BY_CIRCUIT_NETWORK,
|
||||
[defines.entity_status.disabled] = EntityStatus.DISABLED,
|
||||
[defines.entity_status.disabled_by_control_behavior] = EntityStatus.DISABLED_BY_CONTROL_BEHAVIOR,
|
||||
[defines.entity_status.disabled_by_script] = EntityStatus.DISABLED_BY_SCRIPT,
|
||||
[defines.entity_status.discharging] = EntityStatus.DISCHARGING,
|
||||
[defines.entity_status.fluid_ingredient_shortage] = EntityStatus.FLUID_INGREDIENT_SHORTAGE,
|
||||
[defines.entity_status.fully_charged] = EntityStatus.FULLY_CHARGED,
|
||||
[defines.entity_status.full_output] = EntityStatus.FULL_OUTPUT,
|
||||
[defines.entity_status.item_ingredient_shortage] = EntityStatus.ITEM_INGREDIENT_SHORTAGE,
|
||||
[defines.entity_status.launching_rocket] = EntityStatus.LAUNCHING_ROCKET,
|
||||
[defines.entity_status.low_input_fluid] = EntityStatus.LOW_INPUT_FLUID,
|
||||
[defines.entity_status.low_power] = EntityStatus.LOW_POWER,
|
||||
[defines.entity_status.low_temperature] = EntityStatus.LOW_TEMPERATURE,
|
||||
[defines.entity_status.marked_for_deconstruction] = EntityStatus.MARKED_FOR_DECONSTRUCTION,
|
||||
[defines.entity_status.missing_required_fluid] = EntityStatus.MISSING_REQUIRED_FLUID,
|
||||
[defines.entity_status.missing_science_packs] = EntityStatus.MISSING_SCIENCE_PACKS,
|
||||
[defines.entity_status.networks_connected] = EntityStatus.NETWORKS_CONNECTED,
|
||||
[defines.entity_status.networks_disconnected] = EntityStatus.NETWORKS_DISCONNECTED,
|
||||
[defines.entity_status.normal] = EntityStatus.NORMAL,
|
||||
[defines.entity_status.not_connected_to_rail] = EntityStatus.NOT_CONNECTED_TO_RAIL,
|
||||
[defines.entity_status.not_plugged_in_electric_network] = EntityStatus.NOT_PLUGGED_IN_ELECTRIC_NETWORK,
|
||||
[defines.entity_status.no_ammo] = EntityStatus.NO_AMMO,
|
||||
[defines.entity_status.no_fuel] = EntityStatus.NO_FUEL,
|
||||
[defines.entity_status.no_ingredients] = EntityStatus.NO_INGREDIENTS,
|
||||
[defines.entity_status.no_input_fluid] = EntityStatus.NO_INPUT_FLUID,
|
||||
[defines.entity_status.no_minable_resources] = EntityStatus.NO_MINABLE_RESOURCES,
|
||||
[defines.entity_status.no_modules_to_transmit] = EntityStatus.NO_MODULES_TO_TRANSMIT,
|
||||
[defines.entity_status.no_power] = EntityStatus.NO_POWER,
|
||||
[defines.entity_status.no_recipe] = EntityStatus.NO_RECIPE,
|
||||
[defines.entity_status.no_research_in_progress] = EntityStatus.NO_RESEARCH_IN_PROGRESS,
|
||||
[defines.entity_status.opened_by_circuit_network] = EntityStatus.OPENED_BY_CIRCUIT_NETWORK,
|
||||
[defines.entity_status.out_of_logistic_network] = EntityStatus.OUT_OF_LOGISTIC_NETWORK,
|
||||
[defines.entity_status.preparing_rocket_for_launch] = EntityStatus.PREPARING_ROCKET_FOR_LAUNCH,
|
||||
[defines.entity_status.recharging_after_power_outage] = EntityStatus.RECHARGING_AFTER_POWER_OUTAGE,
|
||||
[defines.entity_status.turned_off_during_daytime] = EntityStatus.TURNED_OFF_DURING_DAYTIME,
|
||||
[defines.entity_status.waiting_for_source_items] = EntityStatus.WAITING_FOR_SOURCE_ITEMS,
|
||||
[defines.entity_status.waiting_for_space_in_destination] = EntityStatus.WAITING_FOR_SPACE_IN_DESTINATION,
|
||||
[defines.entity_status.waiting_for_target_to_be_built] = EntityStatus.WAITING_FOR_TARGET_TO_BE_BUILT,
|
||||
[defines.entity_status.waiting_for_train] = EntityStatus.WAITING_FOR_TRAIN,
|
||||
[defines.entity_status.waiting_to_launch_rocket] = EntityStatus.WAITING_TO_LAUNCH_ROCKET,
|
||||
[defines.entity_status.working] = EntityStatus.WORKING
|
||||
}
|
||||
end
|
||||
return ____exports
|
||||
|
|
|
|||
|
|
@ -1,105 +1,203 @@
|
|||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__New = ____lualib.__TS__New
|
||||
local ____exports = {}
|
||||
local handleBuiltEntityEvent, handleMinedEntityEvent
|
||||
local ____converters = require("main.events.converters")
|
||||
local Converters = ____converters.Converters
|
||||
local ____EventDataCache = require("main.cache.EventDataCache")
|
||||
local EventDataCache = ____EventDataCache.default
|
||||
local ____kafkatorio_2Dschema = require("generated.kafkatorio-schema")
|
||||
local FactorioEntityData = ____kafkatorio_2Dschema.FactorioEntityData
|
||||
local KafkatorioPacketData = ____kafkatorio_2Dschema.KafkatorioPacketData
|
||||
function handleBuiltEntityEvent(event)
|
||||
local eventName = Converters.eventNameString(event.name)
|
||||
if event.created_entity.unit_number == nil then
|
||||
____exports.EntityUpdatesHandler = __TS__Class()
|
||||
local EntityUpdatesHandler = ____exports.EntityUpdatesHandler
|
||||
EntityUpdatesHandler.name = "EntityUpdatesHandler"
|
||||
function EntityUpdatesHandler.prototype.____constructor(self)
|
||||
end
|
||||
function EntityUpdatesHandler.prototype.handleMinedTileEvent(self, event)
|
||||
local surface = game.get_surface(event.surface_index)
|
||||
if surface == nil then
|
||||
return
|
||||
end
|
||||
local key = {name = event.created_entity.name, protoType = event.created_entity.prototype.name, unitNumber = event.created_entity.unit_number}
|
||||
EventDataCache:debounce(
|
||||
key,
|
||||
KafkatorioPacketData.Type.EntityUpdate,
|
||||
local tilesByChunk = {}
|
||||
for ____, tile in ipairs(event.tiles) do
|
||||
local chunkPosition = Converters.tilePositionToChunkPosition(tile.position)
|
||||
tilesByChunk[chunkPosition] = tile
|
||||
end
|
||||
for chunkPos, tiles in pairs(tilesByChunk) do
|
||||
local entities = {}
|
||||
for tile in pairs(tiles) do
|
||||
local resources = ____exports.EntityUpdatesHandler:getTileResourceEntities(surface, chunkPos)
|
||||
for ____, resource in ipairs(resources) do
|
||||
entities[#entities + 1] = resource
|
||||
end
|
||||
end
|
||||
____exports.EntityUpdatesHandler:throttleResourceEntitiesUpdate(
|
||||
Converters.eventNameString(event.name),
|
||||
event.tick,
|
||||
event.surface_index,
|
||||
{chunkPos[1], chunkPos[2]},
|
||||
entities
|
||||
)
|
||||
end
|
||||
end
|
||||
function EntityUpdatesHandler.prototype.handleMinedEntityEvent(self, event)
|
||||
____exports.EntityUpdatesHandler:throttleEntityUpdate(event, event.entity)
|
||||
end
|
||||
function EntityUpdatesHandler.prototype.handleBuiltEntityEvent(self, event)
|
||||
____exports.EntityUpdatesHandler:throttleEntityUpdate(event, event.created_entity)
|
||||
end
|
||||
function EntityUpdatesHandler.prototype.handleChunkGeneratedEvent(self, event)
|
||||
local entities = ____exports.EntityUpdatesHandler:getAreaResourceEntities(event.surface, event.area)
|
||||
____exports.EntityUpdatesHandler:throttleResourceEntitiesUpdate(
|
||||
Converters.eventNameString(event.name),
|
||||
event.tick,
|
||||
event.surface.index,
|
||||
{event.position.x, event.position.y},
|
||||
entities
|
||||
)
|
||||
end
|
||||
function EntityUpdatesHandler.throttleEntityUpdate(self, event, entity)
|
||||
if entity.unit_number == nil then
|
||||
return
|
||||
end
|
||||
local eventName = Converters.eventNameString(event.name)
|
||||
local entityUpdateKey = {
|
||||
protoId = Converters.prototypeIdEntity(entity),
|
||||
surfaceIndex = entity.surface.index,
|
||||
chunkPosition = Converters.mapPositionToChunkPosition(entity.position)
|
||||
}
|
||||
local ____FactorioEntityData_Type_Standard_2 = FactorioEntityData.Type.Standard
|
||||
local ____Converters_prototypeIdEntity_result_3 = Converters.prototypeIdEntity(entity)
|
||||
local ____entity_graphics_variation_4 = entity.graphics_variation
|
||||
local ____entity_health_5 = entity.health
|
||||
local ____entity_active_6 = entity.active
|
||||
local ____entity_rotatable_7 = entity.rotatable
|
||||
local ____entity_last_user_index_0 = entity.last_user
|
||||
if ____entity_last_user_index_0 ~= nil then
|
||||
____entity_last_user_index_0 = ____entity_last_user_index_0.index
|
||||
end
|
||||
local entityUpdate = {
|
||||
type = ____FactorioEntityData_Type_Standard_2,
|
||||
protoId = ____Converters_prototypeIdEntity_result_3,
|
||||
graphicsVariation = ____entity_graphics_variation_4,
|
||||
health = ____entity_health_5,
|
||||
isActive = ____entity_active_6,
|
||||
isRotatable = ____entity_rotatable_7,
|
||||
lastUser = ____entity_last_user_index_0,
|
||||
localisedDescription = nil,
|
||||
localisedName = nil,
|
||||
position = {entity.position.x, entity.position.y},
|
||||
status = Converters.entityStatus(entity.status)
|
||||
}
|
||||
local entityKey = tostring(entity.unit_number)
|
||||
EventDataCache:throttle(
|
||||
entityUpdateKey,
|
||||
KafkatorioPacketData.Type.MapChunkEntityUpdate,
|
||||
function(data)
|
||||
if data.events == nil then
|
||||
data.events = {}
|
||||
end
|
||||
local ____data_events_0, ____eventName_1 = data.events, eventName
|
||||
if ____data_events_0[____eventName_1] == nil then
|
||||
____data_events_0[____eventName_1] = {}
|
||||
local ____data_events_8, ____eventName_9 = data.events, eventName
|
||||
if ____data_events_8[____eventName_9] == nil then
|
||||
____data_events_8[____eventName_9] = {}
|
||||
end
|
||||
local ____data_events_eventName_2 = data.events[eventName]
|
||||
____data_events_eventName_2[#____data_events_eventName_2 + 1] = event.tick
|
||||
data.chunkPosition = Converters.convertMapTablePosition(event.created_entity.position)
|
||||
data.graphicsVariation = event.created_entity.graphics_variation
|
||||
data.health = event.created_entity.health
|
||||
data.isActive = event.created_entity.active
|
||||
data.isRotatable = event.created_entity.rotatable
|
||||
local ____data_5 = data
|
||||
local ____event_created_entity_last_user_index_3 = event.created_entity.last_user
|
||||
if ____event_created_entity_last_user_index_3 ~= nil then
|
||||
____event_created_entity_last_user_index_3 = ____event_created_entity_last_user_index_3.index
|
||||
local ____data_events_eventName_10 = data.events[eventName]
|
||||
____data_events_eventName_10[#____data_events_eventName_10 + 1] = event.tick
|
||||
if data.distinctEntities == nil then
|
||||
data.distinctEntities = {}
|
||||
end
|
||||
____data_5.lastUser = ____event_created_entity_last_user_index_3
|
||||
data.prototype = event.created_entity.prototype.name
|
||||
data.distinctEntities[entityKey] = entityUpdate
|
||||
end
|
||||
)
|
||||
end
|
||||
function handleMinedEntityEvent(event)
|
||||
local eventName = Converters.eventNameString(event.name)
|
||||
if event.entity.unit_number == nil then
|
||||
return
|
||||
function EntityUpdatesHandler.throttleResourceEntitiesUpdate(self, eventName, eventTick, surfaceIndex, chunkPosition, entities)
|
||||
local entitiesByProtoId = {}
|
||||
for ____, entity in ipairs(entities) do
|
||||
local ____entitiesByProtoId_11, ____entity_protoId_12 = entitiesByProtoId, entity.protoId
|
||||
if ____entitiesByProtoId_11[____entity_protoId_12] == nil then
|
||||
____entitiesByProtoId_11[____entity_protoId_12] = {}
|
||||
end
|
||||
local ____entitiesByProtoId_entity_protoId_13 = entitiesByProtoId[entity.protoId]
|
||||
____entitiesByProtoId_entity_protoId_13[#____entitiesByProtoId_entity_protoId_13 + 1] = entity
|
||||
end
|
||||
local key = {name = event.entity.name, protoType = event.entity.prototype.name, unitNumber = event.entity.unit_number}
|
||||
EventDataCache:debounce(
|
||||
key,
|
||||
KafkatorioPacketData.Type.EntityUpdate,
|
||||
function(data)
|
||||
if data.events == nil then
|
||||
data.events = {}
|
||||
for protoId, resourceEntities in pairs(entitiesByProtoId) do
|
||||
local entityUpdateKey = {protoId = protoId, surfaceIndex = surfaceIndex, chunkPosition = {chunkPosition[1], chunkPosition[2]}}
|
||||
EventDataCache:throttle(
|
||||
entityUpdateKey,
|
||||
KafkatorioPacketData.Type.MapChunkEntityUpdate,
|
||||
function(data)
|
||||
if data.events == nil then
|
||||
data.events = {}
|
||||
end
|
||||
local ____data_events_14, ____eventName_15 = data.events, eventName
|
||||
if ____data_events_14[____eventName_15] == nil then
|
||||
____data_events_14[____eventName_15] = {}
|
||||
end
|
||||
local ____data_events_eventName_16 = data.events[eventName]
|
||||
____data_events_eventName_16[#____data_events_eventName_16 + 1] = eventTick
|
||||
for ____, entity in ipairs(resourceEntities) do
|
||||
local x, y = table.unpack(entity.position)
|
||||
local entityKey = (tostring(x) .. ",") .. tostring(y)
|
||||
if data.distinctEntities == nil then
|
||||
data.distinctEntities = {}
|
||||
end
|
||||
data.distinctEntities[entityKey] = entity
|
||||
end
|
||||
end
|
||||
local ____data_events_6, ____eventName_7 = data.events, eventName
|
||||
if ____data_events_6[____eventName_7] == nil then
|
||||
____data_events_6[____eventName_7] = {}
|
||||
end
|
||||
local ____data_events_eventName_8 = data.events[eventName]
|
||||
____data_events_eventName_8[#____data_events_eventName_8 + 1] = event.tick
|
||||
data.chunkPosition = Converters.convertMapTablePosition(event.entity.position)
|
||||
data.graphicsVariation = event.entity.graphics_variation
|
||||
data.health = event.entity.health
|
||||
data.isActive = event.entity.active
|
||||
data.isRotatable = event.entity.rotatable
|
||||
local ____data_11 = data
|
||||
local ____event_entity_last_user_index_9 = event.entity.last_user
|
||||
if ____event_entity_last_user_index_9 ~= nil then
|
||||
____event_entity_last_user_index_9 = ____event_entity_last_user_index_9.index
|
||||
end
|
||||
____data_11.lastUser = ____event_entity_last_user_index_9
|
||||
data.prototype = event.entity.prototype.name
|
||||
end
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
function EntityUpdatesHandler.getTileResourceEntities(self, surface, mapPosition)
|
||||
local rawEntities = surface.find_entities_filtered({position = mapPosition, collision_mask = "resource-layer"})
|
||||
local resources = {}
|
||||
for ____, rawEntity in ipairs(rawEntities) do
|
||||
local entity = Converters.convertResourceEntity(rawEntity)
|
||||
if entity ~= nil then
|
||||
resources[#resources + 1] = entity
|
||||
end
|
||||
end
|
||||
return resources
|
||||
end
|
||||
function EntityUpdatesHandler.getAreaResourceEntities(self, surface, area)
|
||||
local rawEntities = surface.find_entities_filtered({area = area, collision_mask = "resource-layer"})
|
||||
local resources = {}
|
||||
for ____, rawEntity in ipairs(rawEntities) do
|
||||
local entity = Converters.convertResourceEntity(rawEntity)
|
||||
if entity ~= nil then
|
||||
resources[#resources + 1] = entity
|
||||
end
|
||||
end
|
||||
return resources
|
||||
end
|
||||
local EntityUpdates = __TS__New(____exports.EntityUpdatesHandler)
|
||||
____exports.default = EntityUpdates
|
||||
script.on_event(
|
||||
defines.events.on_built_entity,
|
||||
function(e)
|
||||
log("on_built_entity " .. tostring(e.tick))
|
||||
handleBuiltEntityEvent(e)
|
||||
EntityUpdates:handleBuiltEntityEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_robot_built_entity,
|
||||
function(e)
|
||||
log("on_robot_built_entity " .. tostring(e.tick))
|
||||
handleBuiltEntityEvent(e)
|
||||
EntityUpdates:handleBuiltEntityEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_player_mined_entity,
|
||||
function(e)
|
||||
log("on_player_mined_entity " .. tostring(e.tick))
|
||||
handleMinedEntityEvent(e)
|
||||
EntityUpdates:handleMinedEntityEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_robot_mined_entity,
|
||||
function(e)
|
||||
log("on_robot_mined_entity " .. tostring(e.tick))
|
||||
handleMinedEntityEvent(e)
|
||||
EntityUpdates:handleMinedEntityEvent(e)
|
||||
end
|
||||
)
|
||||
return ____exports
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local Map = ____lualib.Map
|
||||
local __TS__Iterator = ____lualib.__TS__Iterator
|
||||
local __TS__New = ____lualib.__TS__New
|
||||
local ____exports = {}
|
||||
local mapTilesUpdateDebounce, getTiles, getSurface, groupTiles, handleBuiltTileEvent, handleMinedTileEvent, Type
|
||||
local ____eventTypeCheck = require("main.events.eventTypeCheck")
|
||||
local isEventType = ____eventTypeCheck.isEventType
|
||||
local ____converters = require("main.events.converters")
|
||||
|
|
@ -12,65 +12,16 @@ local ____EventDataCache = require("main.cache.EventDataCache")
|
|||
local EventUpdatesManager = ____EventDataCache.default
|
||||
local ____kafkatorio_2Dschema = require("generated.kafkatorio-schema")
|
||||
local KafkatorioPacketData = ____kafkatorio_2Dschema.KafkatorioPacketData
|
||||
function mapTilesUpdateDebounce(surface, chunkPosition, tiles, event, updater, expirationDurationTicks)
|
||||
if surface == nil then
|
||||
return
|
||||
end
|
||||
local eventName = Converters.eventNameString(event.name)
|
||||
local key = {surfaceIndex = surface.index, chunkPosition = chunkPosition}
|
||||
EventUpdatesManager:debounce(
|
||||
key,
|
||||
Type.MapChunkUpdate,
|
||||
function(data)
|
||||
if data.tileDictionary == nil then
|
||||
data.tileDictionary = {tilesXY = {}, protos = {}}
|
||||
end
|
||||
local protosCount = table_size(data.tileDictionary.protos)
|
||||
for ____, tile in ipairs(tiles) do
|
||||
local ____data_tileDictionary_protos_1, ____tile_name_2 = data.tileDictionary.protos, tile.name
|
||||
if ____data_tileDictionary_protos_1[____tile_name_2] == nil then
|
||||
local ____protosCount_0 = protosCount
|
||||
protosCount = ____protosCount_0 + 1
|
||||
____data_tileDictionary_protos_1[____tile_name_2] = ____protosCount_0
|
||||
end
|
||||
local protoKey = data.tileDictionary.protos[tile.name]
|
||||
local xString = tostring(tile.position.x)
|
||||
local yString = tostring(tile.position.y)
|
||||
local ____data_tileDictionary_tilesXY_3, ____xString_4 = data.tileDictionary.tilesXY, xString
|
||||
if ____data_tileDictionary_tilesXY_3[____xString_4] == nil then
|
||||
____data_tileDictionary_tilesXY_3[____xString_4] = {}
|
||||
end
|
||||
data.tileDictionary.tilesXY[xString][yString] = protoKey
|
||||
end
|
||||
if data.events == nil then
|
||||
data.events = {}
|
||||
end
|
||||
local ____data_events_5, ____eventName_6 = data.events, eventName
|
||||
if ____data_events_5[____eventName_6] == nil then
|
||||
____data_events_5[____eventName_6] = {}
|
||||
end
|
||||
local ____data_events_eventName_7 = data.events[eventName]
|
||||
____data_events_eventName_7[#____data_events_eventName_7 + 1] = event.tick
|
||||
if updater ~= nil then
|
||||
updater(data)
|
||||
end
|
||||
end,
|
||||
expirationDurationTicks
|
||||
)
|
||||
local ____entityUpdates = require("main.events.entityUpdates")
|
||||
local EntityUpdates = ____entityUpdates.default
|
||||
local Type = KafkatorioPacketData.Type
|
||||
local MapChunkUpdateHandler = __TS__Class()
|
||||
MapChunkUpdateHandler.name = "MapChunkUpdateHandler"
|
||||
function MapChunkUpdateHandler.prototype.____constructor(self)
|
||||
end
|
||||
function getTiles(surface, area)
|
||||
local ____surface_find_tiles_filtered_result_8 = surface
|
||||
if ____surface_find_tiles_filtered_result_8 ~= nil then
|
||||
____surface_find_tiles_filtered_result_8 = ____surface_find_tiles_filtered_result_8.find_tiles_filtered({area = area})
|
||||
end
|
||||
return ____surface_find_tiles_filtered_result_8 or ({})
|
||||
end
|
||||
function getSurface(surfaceIndex)
|
||||
return game.surfaces[surfaceIndex]
|
||||
end
|
||||
function ____exports.handleChunkGeneratedEvent(event, expirationDurationTicks)
|
||||
local tiles = getTiles(event.surface, event.area)
|
||||
mapTilesUpdateDebounce(
|
||||
function MapChunkUpdateHandler.prototype.handleChunkGeneratedEvent(self, event, expirationDurationTicks)
|
||||
local tiles = event.surface.find_tiles_filtered({area = event.area})
|
||||
MapChunkUpdateHandler:mapTilesUpdateDebounce(
|
||||
event.surface,
|
||||
Converters.convertMapTablePosition(event.position),
|
||||
tiles,
|
||||
|
|
@ -79,38 +30,19 @@ function ____exports.handleChunkGeneratedEvent(event, expirationDurationTicks)
|
|||
expirationDurationTicks
|
||||
)
|
||||
end
|
||||
function groupTiles(tiles)
|
||||
local mapChunkPositionToTiles = __TS__New(Map)
|
||||
for ____, tile in ipairs(tiles) do
|
||||
local chunkPosition = {
|
||||
math.floor(tile.position.x / 32),
|
||||
math.floor(tile.position.y / 32)
|
||||
}
|
||||
if not mapChunkPositionToTiles:has(chunkPosition) then
|
||||
mapChunkPositionToTiles:set(chunkPosition, {})
|
||||
end
|
||||
local ____mapChunkPositionToTiles_get_result_push_result_10 = mapChunkPositionToTiles:get(chunkPosition)
|
||||
if ____mapChunkPositionToTiles_get_result_push_result_10 ~= nil then
|
||||
local ____temp_11 = mapChunkPositionToTiles:get(chunkPosition)
|
||||
____temp_11[#____temp_11 + 1] = tile
|
||||
____mapChunkPositionToTiles_get_result_push_result_10 = nil
|
||||
end
|
||||
end
|
||||
return mapChunkPositionToTiles
|
||||
end
|
||||
function handleBuiltTileEvent(event)
|
||||
local surface = getSurface(event.surface_index)
|
||||
function MapChunkUpdateHandler.prototype.handleBuiltTileEvent(self, event)
|
||||
local surface = game.get_surface(event.surface_index)
|
||||
if surface == nil then
|
||||
local eventName = Converters.eventNameString(event.name)
|
||||
log("[handleBuiltTileEvent] undefined surface " .. eventName)
|
||||
return
|
||||
end
|
||||
local tiles = Converters.convertPlacedTiles(event.tile, event.tiles)
|
||||
local groupedTiles = groupTiles(tiles)
|
||||
local groupedTiles = MapChunkUpdateHandler:groupTiles(tiles)
|
||||
for ____, ____value in __TS__Iterator(groupedTiles) do
|
||||
local chunkPos = ____value[1]
|
||||
local tiles = ____value[2]
|
||||
mapTilesUpdateDebounce(
|
||||
MapChunkUpdateHandler:mapTilesUpdateDebounce(
|
||||
surface,
|
||||
chunkPos,
|
||||
tiles,
|
||||
|
|
@ -121,12 +53,15 @@ function handleBuiltTileEvent(event)
|
|||
return
|
||||
end
|
||||
if isEventType(event, defines.events.on_robot_built_tile) then
|
||||
local ____data_15 = data
|
||||
local ____event_robot_unit_number_13 = event.robot
|
||||
if ____event_robot_unit_number_13 ~= nil then
|
||||
____event_robot_unit_number_13 = ____event_robot_unit_number_13.unit_number
|
||||
local ____data_2 = data
|
||||
local ____event_robot_unit_number_0 = event.robot
|
||||
if ____event_robot_unit_number_0 ~= nil then
|
||||
____event_robot_unit_number_0 = ____event_robot_unit_number_0.unit_number
|
||||
end
|
||||
____data_15.robot = {unitNumber = ____event_robot_unit_number_13 or nil, name = event.robot.name, protoType = event.robot.type}
|
||||
____data_2.robot = {
|
||||
unitNumber = ____event_robot_unit_number_0 or nil,
|
||||
protoId = Converters.prototypeId(event.robot.type, event.robot.name)
|
||||
}
|
||||
return
|
||||
end
|
||||
local exhaustiveCheck = event
|
||||
|
|
@ -134,19 +69,19 @@ function handleBuiltTileEvent(event)
|
|||
)
|
||||
end
|
||||
end
|
||||
function handleMinedTileEvent(event)
|
||||
local surface = getSurface(event.surface_index)
|
||||
function MapChunkUpdateHandler.prototype.handleMinedTileEvent(self, event)
|
||||
local surface = game.get_surface(event.surface_index)
|
||||
if surface == nil then
|
||||
local eventName = Converters.eventNameString(event.name)
|
||||
log("[handleMinedTileEvent] undefined surface " .. eventName)
|
||||
return
|
||||
end
|
||||
local tiles = Converters.convertRemovedTiles(surface, event.tiles)
|
||||
local groupedTiles = groupTiles(tiles)
|
||||
local groupedTiles = MapChunkUpdateHandler:groupTiles(tiles)
|
||||
for ____, ____value in __TS__Iterator(groupedTiles) do
|
||||
local chunkPos = ____value[1]
|
||||
local tiles = ____value[2]
|
||||
mapTilesUpdateDebounce(
|
||||
MapChunkUpdateHandler:mapTilesUpdateDebounce(
|
||||
surface,
|
||||
chunkPos,
|
||||
tiles,
|
||||
|
|
@ -157,12 +92,15 @@ function handleMinedTileEvent(event)
|
|||
return
|
||||
end
|
||||
if isEventType(event, defines.events.on_robot_mined_tile) then
|
||||
local ____data_18 = data
|
||||
local ____event_robot_unit_number_16 = event.robot
|
||||
if ____event_robot_unit_number_16 ~= nil then
|
||||
____event_robot_unit_number_16 = ____event_robot_unit_number_16.unit_number
|
||||
local ____data_5 = data
|
||||
local ____event_robot_unit_number_3 = event.robot
|
||||
if ____event_robot_unit_number_3 ~= nil then
|
||||
____event_robot_unit_number_3 = ____event_robot_unit_number_3.unit_number
|
||||
end
|
||||
____data_18.robot = {unitNumber = ____event_robot_unit_number_16 or nil, name = event.robot.name, protoType = event.robot.type}
|
||||
____data_5.robot = {
|
||||
unitNumber = ____event_robot_unit_number_3 or nil,
|
||||
protoId = Converters.prototypeId(event.robot.type, event.robot.name)
|
||||
}
|
||||
return
|
||||
end
|
||||
local exhaustiveCheck = event
|
||||
|
|
@ -170,78 +108,155 @@ function handleMinedTileEvent(event)
|
|||
)
|
||||
end
|
||||
end
|
||||
Type = KafkatorioPacketData.Type
|
||||
function MapChunkUpdateHandler.prototype.handleScriptSetTilesEvent(self, event)
|
||||
local surface = game.get_surface(event.surface_index)
|
||||
if surface == nil then
|
||||
return
|
||||
end
|
||||
local groupedTiles = MapChunkUpdateHandler:groupTiles(event.tiles)
|
||||
for ____, ____value in __TS__Iterator(groupedTiles) do
|
||||
local chunkPos = ____value[1]
|
||||
local tiles = ____value[2]
|
||||
MapChunkUpdateHandler:mapTilesUpdateDebounce(surface, chunkPos, tiles, event)
|
||||
end
|
||||
end
|
||||
function MapChunkUpdateHandler.prototype.handlePreChunkDeleted(self, event)
|
||||
local surface = game.get_surface(event.surface_index)
|
||||
if surface == nil then
|
||||
return
|
||||
end
|
||||
for ____, position in ipairs(event.positions) do
|
||||
local key = {surfaceIndex = surface.index, chunkPosition = {position.x, position.y}}
|
||||
EventUpdatesManager:debounce(
|
||||
key,
|
||||
Type.MapChunkTileUpdate,
|
||||
function(data)
|
||||
data.isDeleted = true
|
||||
return true
|
||||
end,
|
||||
0
|
||||
)
|
||||
end
|
||||
end
|
||||
function MapChunkUpdateHandler.mapTilesUpdateDebounce(self, surface, chunkPosition, tiles, event, updater, expirationDurationTicks)
|
||||
if surface == nil then
|
||||
return
|
||||
end
|
||||
local eventName = Converters.eventNameString(event.name)
|
||||
local key = {surfaceIndex = surface.index, chunkPosition = chunkPosition}
|
||||
EventUpdatesManager:debounce(
|
||||
key,
|
||||
Type.MapChunkTileUpdate,
|
||||
function(data)
|
||||
if data.tileDictionary == nil then
|
||||
data.tileDictionary = {tilesXY = {}, protos = {}}
|
||||
end
|
||||
local protosCount = table_size(data.tileDictionary.protos)
|
||||
for ____, tile in ipairs(tiles) do
|
||||
local protoId = Converters.prototypeId("tile", tile.name)
|
||||
if data.tileDictionary.protos[protoId] == nil then
|
||||
end
|
||||
local ____data_tileDictionary_protos_7, ____protoId_8 = data.tileDictionary.protos, protoId
|
||||
if ____data_tileDictionary_protos_7[____protoId_8] == nil then
|
||||
local ____protosCount_6 = protosCount
|
||||
protosCount = ____protosCount_6 + 1
|
||||
____data_tileDictionary_protos_7[____protoId_8] = ____protosCount_6
|
||||
end
|
||||
local protoKey = data.tileDictionary.protos[protoId]
|
||||
local xString = tostring(tile.position.x)
|
||||
local yString = tostring(tile.position.y)
|
||||
local ____data_tileDictionary_tilesXY_9, ____xString_10 = data.tileDictionary.tilesXY, xString
|
||||
if ____data_tileDictionary_tilesXY_9[____xString_10] == nil then
|
||||
____data_tileDictionary_tilesXY_9[____xString_10] = {}
|
||||
end
|
||||
data.tileDictionary.tilesXY[xString][yString] = protoKey
|
||||
end
|
||||
if data.events == nil then
|
||||
data.events = {}
|
||||
end
|
||||
local ____data_events_11, ____eventName_12 = data.events, eventName
|
||||
if ____data_events_11[____eventName_12] == nil then
|
||||
____data_events_11[____eventName_12] = {}
|
||||
end
|
||||
local ____data_events_eventName_13 = data.events[eventName]
|
||||
____data_events_eventName_13[#____data_events_eventName_13 + 1] = event.tick
|
||||
if updater ~= nil then
|
||||
updater(data)
|
||||
end
|
||||
end,
|
||||
expirationDurationTicks
|
||||
)
|
||||
end
|
||||
function MapChunkUpdateHandler.groupTiles(self, tiles)
|
||||
local mapChunkPositionToTiles = __TS__New(Map)
|
||||
for ____, tile in ipairs(tiles) do
|
||||
local chunkPosition = {
|
||||
math.floor(tile.position.x / 32),
|
||||
math.floor(tile.position.y / 32)
|
||||
}
|
||||
if not mapChunkPositionToTiles:has(chunkPosition) then
|
||||
mapChunkPositionToTiles:set(chunkPosition, {})
|
||||
end
|
||||
local ____mapChunkPositionToTiles_get_result_push_result_14 = mapChunkPositionToTiles:get(chunkPosition)
|
||||
if ____mapChunkPositionToTiles_get_result_push_result_14 ~= nil then
|
||||
local ____temp_15 = mapChunkPositionToTiles:get(chunkPosition)
|
||||
____temp_15[#____temp_15 + 1] = tile
|
||||
____mapChunkPositionToTiles_get_result_push_result_14 = nil
|
||||
end
|
||||
end
|
||||
return mapChunkPositionToTiles
|
||||
end
|
||||
local MapChunkUpdate = __TS__New(MapChunkUpdateHandler)
|
||||
____exports.default = MapChunkUpdate
|
||||
script.on_event(
|
||||
defines.events.on_chunk_generated,
|
||||
function(e)
|
||||
log("on_chunk_generated " .. tostring(e.tick))
|
||||
____exports.handleChunkGeneratedEvent(e)
|
||||
MapChunkUpdate:handleChunkGeneratedEvent(e)
|
||||
EntityUpdates:handleChunkGeneratedEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.script_raised_set_tiles,
|
||||
function(event)
|
||||
log("script_raised_set_tiles " .. tostring(event.tick))
|
||||
local surface = getSurface(event.surface_index)
|
||||
if surface == nil then
|
||||
return
|
||||
end
|
||||
local groupedTiles = groupTiles(event.tiles)
|
||||
for ____, ____value in __TS__Iterator(groupedTiles) do
|
||||
local chunkPos = ____value[1]
|
||||
local tiles = ____value[2]
|
||||
mapTilesUpdateDebounce(surface, chunkPos, tiles, event)
|
||||
end
|
||||
MapChunkUpdate:handleScriptSetTilesEvent(event)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_player_built_tile,
|
||||
function(e)
|
||||
log("on_player_built_tile " .. tostring(e.tick))
|
||||
handleBuiltTileEvent(e)
|
||||
MapChunkUpdate:handleBuiltTileEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_robot_built_tile,
|
||||
function(e)
|
||||
log("on_robot_built_tile " .. tostring(e.tick))
|
||||
handleBuiltTileEvent(e)
|
||||
MapChunkUpdate:handleBuiltTileEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_player_mined_tile,
|
||||
function(e)
|
||||
log("on_player_mined_tile " .. tostring(e.tick))
|
||||
handleMinedTileEvent(e)
|
||||
MapChunkUpdate:handleMinedTileEvent(e)
|
||||
EntityUpdates:handleMinedTileEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_robot_mined_tile,
|
||||
function(e)
|
||||
log("on_robot_mined_tile " .. tostring(e.tick))
|
||||
handleMinedTileEvent(e)
|
||||
MapChunkUpdate:handleMinedTileEvent(e)
|
||||
end
|
||||
)
|
||||
script.on_event(
|
||||
defines.events.on_pre_chunk_deleted,
|
||||
function(e)
|
||||
log("on_pre_chunk_deleted " .. tostring(e.tick))
|
||||
local surface = getSurface(e.surface_index)
|
||||
if surface == nil then
|
||||
return
|
||||
end
|
||||
for ____, position in ipairs(e.positions) do
|
||||
local key = {surfaceIndex = surface.index, chunkPosition = {position.x, position.y}}
|
||||
EventUpdatesManager:debounce(
|
||||
key,
|
||||
Type.MapChunkUpdate,
|
||||
function(data)
|
||||
data.isDeleted = true
|
||||
return true
|
||||
end,
|
||||
0
|
||||
)
|
||||
end
|
||||
MapChunkUpdate:handlePreChunkDeleted(e)
|
||||
end
|
||||
)
|
||||
return ____exports
|
||||
|
|
|
|||
|
|
@ -115,7 +115,10 @@ script.on_event(
|
|||
data.ticksToRespawn = player.ticks_to_respawn or nil
|
||||
playerOnlineInfo(player, data)
|
||||
if e.cause ~= nil then
|
||||
data.diedCause = {unitNumber = e.cause.unit_number or nil, name = e.cause.name, protoType = e.cause.type}
|
||||
data.diedCause = {
|
||||
unitNumber = e.cause.unit_number or nil,
|
||||
protoId = Converters.prototypeId(e.cause.type, e.cause.name)
|
||||
}
|
||||
end
|
||||
end
|
||||
)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ function getMapTilePrototypes()
|
|||
for ____, tile in pairs(game.tile_prototypes) do
|
||||
tiles[#tiles + 1] = {
|
||||
type = FactorioPrototype.Type.MapTile,
|
||||
name = tile.name,
|
||||
protoId = Converters.prototypeId("tile", tile.name),
|
||||
order = tile.order,
|
||||
layer = tile.layer,
|
||||
collisionMasks = Converters.convertCollisionMaskToNames(tile.collision_mask),
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ local ____eventTypeCheck = require("main.events.eventTypeCheck")
|
|||
local isEventType = ____eventTypeCheck.isEventType
|
||||
local ____converters = require("main.events.converters")
|
||||
local Converters = ____converters.Converters
|
||||
local ____mapChunkUpdates = require("main.events.mapChunkUpdates")
|
||||
local handleChunkGeneratedEvent = ____mapChunkUpdates.handleChunkGeneratedEvent
|
||||
local ____surfaceUpdates = require("main.events.surfaceUpdates")
|
||||
local handleSurfaceUpdate = ____surfaceUpdates.handleSurfaceUpdate
|
||||
local ____EventDataCache = require("main.cache.EventDataCache")
|
||||
local EventCacheService = ____EventDataCache.default
|
||||
local ____mapChunkUpdates = require("main.events.mapChunkUpdates")
|
||||
local MapChunkUpdate = ____mapChunkUpdates.default
|
||||
script.on_event(
|
||||
defines.events.on_tick,
|
||||
function(event)
|
||||
|
|
@ -38,7 +38,7 @@ script.on_event(
|
|||
if isEventType(event, defines.events.on_chunk_generated) then
|
||||
local eName = Converters.eventNameString(event.name)
|
||||
log((((("[on_tick:" .. tostring(event.tick)) .. "] dequed event ") .. eName) .. ", delay ") .. tostring(i))
|
||||
handleChunkGeneratedEvent(event, i)
|
||||
MapChunkUpdate:handleChunkGeneratedEvent(event, i)
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue