summaryrefslogtreecommitdiff
path: root/mods/vzxv/utils.lua
blob: c22f696939bb0badb9c89bcc766fb16392239ea4 (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

vzxv.include "event.lua"

function vzxv.mundane_block(name,visualname,tiles,settings)
	settings = settings or {}
	settings.description = visualname
	if type(tiles)=="string" then tiles = {"vzxv"..tiles..".png"} end
	if not tiles then tiles = {name:gsub(':','')..".png"} end
	settings.tiles = tiles
	minetest.register_node(name, settings)
end

function vzxv.slabs(name,visualname,tiles,settings)
	settings = settings or {}
	vzxv.mundane_block(name,visualname,tiles,settings)
	for i=1, 3 do
		local newsettings = {}
		for k, v in pairs(settings) do newsettings[k] = v end
		newsettings.node_box = {type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0.25*i-0.5, 0.5}}
		newsettings.drawtype = "nodebox"
		vzxv.mundane_block(name..i,(i==2 and "1/2" or i.."/4")..visualname,tiles,newsettings)
	end
end

function vzxv.check_adjacent(pos,block)
	local gn = minetest.get_node
	return
		gn{x=pos.x + 1, y=pos.y    , z=pos.z    }.name == block or
		gn{x=pos.x - 1, y=pos.y    , z=pos.z    }.name == block or
		gn{x=pos.x    , y=pos.y + 1, z=pos.z    }.name == block or
		gn{x=pos.x    , y=pos.y - 1, z=pos.z    }.name == block or
		gn{x=pos.x    , y=pos.y    , z=pos.z + 1}.name == block or
		gn{x=pos.x    , y=pos.y    , z=pos.z - 1}.name == block or
		gn{x=pos.x    , y=pos.y    , z=pos.z    }.name == block
end

function vzxv.round_pos(pos)
	return {
		x = math.floor(pos.x+0.5),
		y = math.floor(pos.y+0.5),
		z = math.floor(pos.z+0.5),
	}
end
function vzxv.floor_pos(pos)
	return {
		x = math.floor(pos.x),
		y = math.floor(pos.y),
		z = math.floor(pos.z),
	}
end

-- wrap metadata
function vzxv.meta(pos)
	local meta = minetest.get_meta(pos)
	local m = meta:to_table()
	setmetatable(m, {pos=pos})
	return m
end

-- store wrapped metadata
function vzxv.store(data)
	local pos = getmetatable(data).pos
	return minetest.get_meta(pos):from_table(data)
end