-
Notifications
You must be signed in to change notification settings - Fork 5
/
stairsplus_convert.lua
133 lines (110 loc) · 3.96 KB
/
stairsplus_convert.lua
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
-- Function to convert all stairs/slabs/etc nodes from
-- inverted, wall, etc to regular + 6d facedir
local dirs1 = { 21, 20, 23, 22, 21 }
local dirs2 = { 15, 8, 17, 6, 15 }
local dirs3 = { 14, 11, 16, 5, 14 }
function register_6dfacedir_conversion(modname, material)
--print("Register stairsplus 6d facedir conversion")
--print('ABM for '..modname..' "'..material..'"')
local objects_list1 = {
modname..":slab_" .. material .. "_inverted",
modname..":slab_" .. material .. "_quarter_inverted",
modname..":slab_" .. material .. "_three_quarter_inverted",
modname..":stair_" .. material .. "_inverted",
modname..":stair_" .. material .. "_wall",
modname..":stair_" .. material .. "_wall_half",
modname..":stair_" .. material .. "_wall_half_inverted",
modname..":stair_" .. material .. "_half_inverted",
modname..":stair_" .. material .. "_right_half_inverted",
modname..":panel_" .. material .. "_vertical",
modname..":panel_" .. material .. "_top",
}
local objects_list2 = {
modname..":slab_" .. material .. "_wall",
modname..":slab_" .. material .. "_quarter_wall",
modname..":slab_" .. material .. "_three_quarter_wall",
modname..":stair_" .. material .. "_inner_inverted",
modname..":stair_" .. material .. "_outer_inverted",
modname..":micro_" .. material .. "_top"
}
for j in ipairs(objects_list1) do
local flip_upside_down = false
local flip_to_wall = false
local object = objects_list1[j]
local dest_object = objects_list1[j]
if string.find(dest_object, "_inverted") then
flip_upside_down = true
dest_object = string.gsub(dest_object, "_inverted", "")
end
if string.find(dest_object, "_top") then
flip_upside_down = true
dest_object = string.gsub(dest_object, "_top", "")
end
if string.find(dest_object, "_wall") then
flip_to_wall = true
dest_object = string.gsub(dest_object, "_wall", "")
end
if string.find(dest_object, "_vertical") then
flip_to_wall = true
dest_object = string.gsub(dest_object, "_vertical", "")
end
if string.find(dest_object, "_half") and not string.find(dest_object, "_right_half") then
dest_object = string.gsub(dest_object, "_half", "_right_half")
elseif string.find(dest_object, "_right_half") then
dest_object = string.gsub(dest_object, "_right_half", "_half")
end
--print(" +---> convert "..object)
--print(" | to "..dest_object)
minetest.register_abm({
nodenames = { object },
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local fdir = node.param2 or 0
if flip_upside_down and not flip_to_wall then
nfdir = dirs1[fdir+2]
elseif flip_to_wall and not flip_upside_down then
nfdir = dirs2[fdir+1]
elseif flip_to_wall and flip_upside_down then
nfdir = dirs3[fdir+2]
end
minetest.env:add_node(pos, {name = dest_object, param2 = nfdir})
end
})
end
for j in ipairs(objects_list2) do
local flip_upside_down = false
local flip_to_wall = false
local object = objects_list2[j]
local dest_object = objects_list2[j]
if string.find(dest_object, "_inverted") then
flip_upside_down = true
dest_object = string.gsub(dest_object, "_inverted", "")
end
if string.find(dest_object, "_top") then
flip_upside_down = true
dest_object = string.gsub(dest_object, "_top", "")
end
if string.find(dest_object, "_wall") then
flip_to_wall = true
dest_object = string.gsub(dest_object, "_wall", "")
end
--print(" +---> convert "..object)
--print(" | to "..dest_object)
minetest.register_abm({
nodenames = { object },
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local fdir = node.param2
local nfdir = 20
if flip_upside_down and not flip_to_wall then
nfdir = dirs1[fdir+1]
elseif flip_to_wall and not flip_upside_down then
nfdir = dirs2[fdir+2]
end
minetest.env:add_node(pos, {name = dest_object, param2 = nfdir})
end
})
end
end