1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2024-12-04 09:42:30 +02:00
RedMew/map_gen/shared/chunklist.lua
2019-03-03 13:03:24 -05:00

68 lines
1.9 KiB
Lua

-- This module stores chunks as they are generated, keeping their left_top coordinate in an arrayed table.
-- An event is raised on each chunk stored that other modules can hook on to.
-- When 0.17 is released, this module should be modified take advantage of the on_chunk_deleted event in order to remove entries from the table
-- Dependencies
local Global = require 'utils.global'
local RS = require 'map_gen.shared.redmew_surface'
local Event = require 'utils.event'
-- Localized functions
local raise_event = script.raise_event
-- Local vars
local surface
local Public = {
chunk_list = {},
events = {
--[[
on_chunk_registered
Triggered when a chunk is recorded into the table
Contains
name :: defines.events: Identifier of the event
tick :: uint: Tick the event was generated.
area :: BoundingBox: Area of the chunk
surface :: LuaSurface: The surface the chunk is on
chunk_index :: the index of the chunk in Chunklist's table
]]
on_chunk_registered = Event.generate_event_name('on_chunk_registered')
}
}
-- Global register
Global.register_init(
{chunk_list = Public.chunk_list},
function(tbl)
tbl.surface = RS.get_surface()
end,
function(tbl)
Public.chunk_list = tbl.chunk_list
surface = tbl.surface
end
)
local function on_chunk_generated(event)
if surface ~= event.surface then
return
end
local chunk_list = Public.chunk_list
local new_entry_index = #chunk_list + 1
local area = event.area
chunk_list[new_entry_index] = area.left_top
raise_event(
Public.events.on_chunk_registered,
{
area = area,
surface = surface,
chunk_index = new_entry_index
}
)
end
Event.add(defines.events.on_chunk_generated, on_chunk_generated)
return Public