diff options
Diffstat (limited to 'builtin/async')
-rw-r--r-- | builtin/async/game.lua | 59 | ||||
-rw-r--r-- | builtin/async/mainmenu.lua (renamed from builtin/async/init.lua) | 4 |
2 files changed, 60 insertions, 3 deletions
diff --git a/builtin/async/game.lua b/builtin/async/game.lua new file mode 100644 index 000000000..6512f0706 --- /dev/null +++ b/builtin/async/game.lua @@ -0,0 +1,59 @@ +core.log("info", "Initializing asynchronous environment (game)") + +local function pack2(...) + return {n=select('#', ...), ...} +end + +-- Entrypoint to run async jobs, called by C++ +function core.job_processor(func, params) + local retval = pack2(func(unpack(params, 1, params.n))) + + return retval +end + +-- Import a bunch of individual files from builtin/game/ +local gamepath = core.get_builtin_path() .. "game" .. DIR_DELIM + +dofile(gamepath .. "constants.lua") +dofile(gamepath .. "item_s.lua") +dofile(gamepath .. "misc_s.lua") +dofile(gamepath .. "features.lua") +dofile(gamepath .. "voxelarea.lua") + +-- Transfer of globals +do + local all = assert(core.transferred_globals) + core.transferred_globals = nil + + all.registered_nodes = {} + all.registered_craftitems = {} + all.registered_tools = {} + for k, v in pairs(all.registered_items) do + -- Disable further modification + setmetatable(v, {__newindex = {}}) + -- Reassemble the other tables + if v.type == "node" then + all.registered_nodes[k] = v + elseif v.type == "craftitem" then + all.registered_craftitems[k] = v + elseif v.type == "tool" then + all.registered_tools[k] = v + end + end + + for k, v in pairs(all) do + core[k] = v + end +end + +-- For tables that are indexed by item name: +-- If table[X] does not exist, default to table[core.registered_aliases[X]] +local alias_metatable = { + __index = function(t, name) + return rawget(t, core.registered_aliases[name]) + end +} +setmetatable(core.registered_items, alias_metatable) +setmetatable(core.registered_nodes, alias_metatable) +setmetatable(core.registered_craftitems, alias_metatable) +setmetatable(core.registered_tools, alias_metatable) diff --git a/builtin/async/init.lua b/builtin/async/mainmenu.lua index 3803994d6..0e9c222d1 100644 --- a/builtin/async/init.lua +++ b/builtin/async/mainmenu.lua @@ -1,5 +1,4 @@ - -core.log("info", "Initializing Asynchronous environment") +core.log("info", "Initializing asynchronous environment") function core.job_processor(func, serialized_param) local param = core.deserialize(serialized_param) @@ -8,4 +7,3 @@ function core.job_processor(func, serialized_param) return retval or core.serialize(nil) end - |