115 lines
3.0 KiB
Lua

remote_api = {}
BUILDING_TYPE = 'storage-tank'
--[[
factory = {
+id = *,
(+)inactive = *,
+outside_surface = *,
+outside_x = *,
+outside_y = *,
+outside_door_x = *,
+outside_door_y = *,
+inside_surface = *,
+inside_x = *,
+inside_y = *,
+inside_door_x = *,
+inside_door_y = *,
+force = *,
+layout = *,
+building = *,
+outside_energy_receiver = *,
+outside_overlay_displays = {*},
+outside_port_markers = {*},
+inside_overlay_controller = *,
+inside_power_poles = {*},
(+)outside_power_pole = *,
(+)middleman_id = *,
(+)direct_connection = *,
+stored_pollution = *,
+connections = {*},
+connection_settings = {{*}*},
+connection_indicators = {*},
+upgrades = {},
}
]]--
remote_api.get_global = function(path)
if not path then return global end
local g = global
for _, point in ipairs(path) do
g = g[point]
end
return g
end
remote_api.set_global = function(path, v)
local g = global
for i = 1, #path - 1 do
g = g[path[i]]
end
g[path[#path]] = v
end
remote_api.get_factory_by_entity = function(entity)
if entity == nil then return nil end
return global.factories_by_entity[entity.unit_number]
end
remote_api.get_factory_by_building = function(entity)
local factory = global.factories_by_entity[entity.unit_number]
if factory == nil then
game.print('ERROR: Unbound factory building: ' .. entity.name .. '@' .. entity.surface.name .. '(' .. entity.position.x .. ', ' .. entity.position.y .. ')')
end
return factory
end
local bt = BUILDING_TYPE
remote_api.find_factory_by_building = function(surface, area)
for _,entity in pairs(surface.find_entities_filtered{area = area, type = bt}) do
if Layout.has_layout(entity.name) then return remote_api.get_factory_by_building(entity) end
end
return nil
end
remote_api.find_surrounding_factory = function(surface, position)
local factories = global.surface_factories[surface.name]
if factories == nil then return nil end
local x = math.floor(0.5+position.x/(16*32))
local y = math.floor(0.5+position.y/(16*32))
if (x > 7 or x < 0) then return nil end
return factories[8*y+x+1]
end
remote_api.power_middleman_surface = function()
if game.surfaces['factory-power-connection'] then
return game.surfaces['factory-power-connection']
end
local map_gen_settings = {height=1, width=1, property_expression_names={}}
map_gen_settings.autoplace_settings = {
['decorative'] = {treat_missing_as_default=false, settings={}},
['entity'] = {treat_missing_as_default=false, settings={}},
['tile'] = {treat_missing_as_default=false, settings={['out-of-map']={}}},
}
local surface = game.create_surface('factory-power-connection', map_gen_settings)
surface.set_chunk_generated_status({0, 0}, defines.chunk_generated_status.entities)
surface.set_chunk_generated_status({-1, 0}, defines.chunk_generated_status.entities)
surface.set_chunk_generated_status({0, -1}, defines.chunk_generated_status.entities)
surface.set_chunk_generated_status({-1, -1}, defines.chunk_generated_status.entities)
return surface
end
return remote_api