summaryrefslogtreecommitdiff
path: root/builtin/async/game.lua
blob: 212a33e17ed63870000e593b5f925b80836f209c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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
	assert(core.transferred_globals)
	local all = core.deserialize(core.transferred_globals, true)
	core.transferred_globals = nil

	-- reassemble other tables
	all.registered_nodes = {}
	all.registered_craftitems = {}
	all.registered_tools = {}
	for k, v in pairs(all.registered_items) do
		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