1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2024-12-14 10:13:13 +02:00
RedMew/map_gen/shared/chunklist.lua

68 lines
1.8 KiB
Lua
Raw Normal View History

2019-01-25 02:12:24 +02:00
-- 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
2019-02-04 20:22:58 +02:00
chunk_index :: the index of the chunk in Chunklist's table
2019-01-25 02:12:24 +02:00
]]
on_chunk_registered = script.generate_event_name()
}
}
-- 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
2019-02-04 20:22:58 +02:00
local area = event.area
2019-01-25 02:12:24 +02:00
2019-02-04 20:22:58 +02:00
chunk_list[new_entry_index] = area.left_top
raise_event(
Public.events.on_chunk_registered,
{
area = area,
surface = surface,
chunk_index = new_entry_index
}
)
2019-01-25 02:12:24 +02:00
end
Event.add(defines.events.on_chunk_generated, on_chunk_generated)
return Public