doors code rework
parent
7bc342a486
commit
19b20abd57
|
@ -0,0 +1,64 @@
|
|||
--------------------------------------------------------------------------------
|
||||
-- Helper
|
||||
--------------------------------------------------------------------------------
|
||||
-- (c)2012 Fernando Zapata (ZLovesPancakes, Franz.ZPT)
|
||||
-- Code licensed under GNU GPLv2
|
||||
-- http://www.gnu.org/licenses/gpl-2.0.html
|
||||
-- Content licensed under CC BY-SA 3.0
|
||||
-- http://creativecommons.org/licenses/by-sa/3.0/
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
--------------------------------------------------------------- Globals --------
|
||||
|
||||
--helper = {}
|
||||
|
||||
------------------------------------------------------------- Functions --------
|
||||
|
||||
function xyz( i,j,k ) return {x=i,y=j,z=k} end
|
||||
|
||||
function dist3d( a, b )
|
||||
return math.sqrt( ( b.x - a.x )^2 + ( b.y - a.y )^2 + ( b.z - a.z )^2 )
|
||||
end
|
||||
|
||||
function inTable( v, t )
|
||||
for _, b in pairs(t) do
|
||||
if v == b then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function switch( c )
|
||||
local swtbl = {
|
||||
casevar = c,
|
||||
caseof = function (self, code)
|
||||
local f
|
||||
if (self.casevar) then
|
||||
f = code[self.casevar] or code.default
|
||||
else
|
||||
f = code.missing or code.default
|
||||
end
|
||||
if f then
|
||||
if type(f)=="function" then
|
||||
return f(self.casevar,self)
|
||||
else
|
||||
error("case "..
|
||||
tostring(self.casevar)..
|
||||
" not a function")
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
return swtbl
|
||||
end
|
||||
|
||||
function isDir( d )
|
||||
local f = io.open(d..'/.')
|
||||
if f then
|
||||
io.close(f)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
|
@ -1 +1,3 @@
|
|||
default
|
||||
helper
|
||||
doors
|
||||
|
|
|
@ -12,6 +12,20 @@
|
|||
-- 2012-01-08 11:03:57
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
------------------------------------------------------------- Constants --------
|
||||
|
||||
door = {}
|
||||
|
||||
------------------------------------------------------------- Functions --------
|
||||
|
||||
function door.toggle( p, n )
|
||||
local q = xyz( p.x, p.y+1, p.z )
|
||||
local a = minetest.env:get_meta( p )
|
||||
local b = minetest.env:get_meta( q )
|
||||
minetest.env:set_node( p, {name=a:get_string('alt'), param2=n.param2} )
|
||||
minetest.env:set_node( q, {name=b:get_string('alt'), param2=n.param2} )
|
||||
end
|
||||
|
||||
---------------------------------------------------------------- Blocks --------
|
||||
|
||||
minetest.register_craftitem( 'zdoor:door_wood', {
|
||||
|
@ -22,30 +36,23 @@ minetest.register_craftitem( 'zdoor:door_wood', {
|
|||
local e = minetest.env
|
||||
local f = minetest.dir_to_facedir( u:get_look_dir() )
|
||||
local pa = p.above
|
||||
local pb = { x=pa.x, y=pa.y+1, z=pa.z }
|
||||
local pc = { x=pa.x, y=pa.y-1, z=pa.z }
|
||||
local pb = xyz( pa.x, pa.y+1, pa.z )
|
||||
if e:get_node( pb ).name == 'air' then
|
||||
e:set_node( pa,
|
||||
{ name='zdoor:door_wood_b_t', param2=f } )
|
||||
e:set_node( pb,
|
||||
{ name='zdoor:door_wood_a_t', param2=f } )
|
||||
i:take_item()
|
||||
elseif e:get_node( pc ).name == 'air' then
|
||||
e:set_node( pa,
|
||||
{ name='zdoor:door_wood_a_t', param2=f } )
|
||||
e:set_node( pc,
|
||||
{ name='zdoor:door_wood_b_t', param2=f } )
|
||||
i:take_item()
|
||||
end
|
||||
return i
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node( 'zdoor:door_wood_a_t', {
|
||||
groups = { snappy=1,
|
||||
groups = { door=1,
|
||||
snappy=1,
|
||||
choppy=2,
|
||||
oddly_breakable_by_hand=2,
|
||||
flammable=3 },
|
||||
oddly_breakable_by_hand=2 },
|
||||
tiles = { 'zdoor_door_wood_s.png',
|
||||
'zdoor_door_wood_s.png',
|
||||
'zdoor_door_wood_s.png',
|
||||
|
@ -58,28 +65,20 @@ minetest.register_node( 'zdoor:door_wood_a_t', {
|
|||
node_box = { type = "fixed",
|
||||
fixed = { -1/2, -1/2, -1/2, 1/2, 1/2, -5/16 } },
|
||||
selection_box = { type = "fixed",
|
||||
fixed = { -1/2, -1/2, -1/2, 1/2, 1/2, -5/16 } },
|
||||
fixed = { 0, 0, 0, 0, 0, 0 } },
|
||||
drop = 'zdoor:door_wood',
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_punch = function( p, n ,u )
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_a_f', param2=n.param2 } )
|
||||
p.y = p.y - 1
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_b_f', param2=n.param2 } )
|
||||
end,
|
||||
on_dig = function( p, n, u )
|
||||
minetest.node_dig( p, n, u )
|
||||
p.y = p.y - 1
|
||||
minetest.env:remove_node( p )
|
||||
on_construct = function( p )
|
||||
local m = minetest.env:get_meta( p )
|
||||
m:set_string( 'alt', 'zdoor:door_wood_a_f' )
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node( 'zdoor:door_wood_a_f', {
|
||||
groups = { snappy=1,
|
||||
groups = { door=1,
|
||||
snappy=1,
|
||||
choppy=2,
|
||||
oddly_breakable_by_hand=2,
|
||||
flammable=3 },
|
||||
oddly_breakable_by_hand=2 },
|
||||
tiles = { 'zdoor_door_wood_s.png',
|
||||
'zdoor_door_wood_s.png',
|
||||
'zdoor_door_wood_a_f.png',
|
||||
|
@ -92,25 +91,18 @@ minetest.register_node( 'zdoor:door_wood_a_f', {
|
|||
node_box = { type = "fixed",
|
||||
fixed = { -1/2, -1/2, -1/2, -5/16, 1/2, 1/2 } },
|
||||
selection_box = { type = "fixed",
|
||||
fixed = { -1/2, -1/2, -1/2, -5/16, 1/2, 1/2 } },
|
||||
fixed = { 0, 0, 0, 0, 0, 0 } },
|
||||
drop = 'zdoor:door_wood',
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_punch = function( p, n ,u )
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_a_t', param2=n.param2 } )
|
||||
p.y = p.y - 1
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_b_t', param2=n.param2 } )
|
||||
end,
|
||||
on_dig = function( p, n, u )
|
||||
minetest.node_dig( p, n, u )
|
||||
p.y = p.y - 1
|
||||
minetest.env:remove_node( p )
|
||||
on_construct = function( p )
|
||||
local m = minetest.env:get_meta( p )
|
||||
m:set_string( 'alt', 'zdoor:door_wood_a_t' )
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node( 'zdoor:door_wood_b_t', {
|
||||
groups = { snappy=1,
|
||||
groups = { door=2,
|
||||
snappy=1,
|
||||
choppy=2,
|
||||
oddly_breakable_by_hand=2,
|
||||
flammable=3 },
|
||||
|
@ -129,22 +121,20 @@ minetest.register_node( 'zdoor:door_wood_b_t', {
|
|||
fixed = { -1/2, -1/2, -1/2, 1/2, 1/2, -5/16 } },
|
||||
drop = 'zdoor:door_wood',
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_punch = function( p, n ,u )
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_b_f', param2=n.param2 } )
|
||||
p.y = p.y + 1
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_a_f', param2=n.param2 } )
|
||||
on_construct = function( p )
|
||||
local m = minetest.env:get_meta( p )
|
||||
m:set_string( 'alt', 'zdoor:door_wood_b_f' )
|
||||
end,
|
||||
on_dig = function( p, n, u )
|
||||
minetest.node_dig( p, n, u )
|
||||
on_punch = door.toggle,
|
||||
after_dig_node = function( p, n, u )
|
||||
p.y = p.y + 1
|
||||
minetest.env:remove_node( p )
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node( 'zdoor:door_wood_b_f', {
|
||||
groups = { snappy=1,
|
||||
groups = { door=2,
|
||||
snappy=1,
|
||||
choppy=2,
|
||||
oddly_breakable_by_hand=2,
|
||||
flammable=3 },
|
||||
|
@ -163,15 +153,12 @@ minetest.register_node( 'zdoor:door_wood_b_f', {
|
|||
fixed = { -1/2, -1/2, -1/2, -5/16, 1/2, 1/2 } },
|
||||
drop = 'zdoor:door_wood',
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_punch = function( p, n ,u )
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_b_t', param2=n.param2 } )
|
||||
p.y = p.y + 1
|
||||
minetest.env:set_node( p,
|
||||
{ name='zdoor:door_wood_a_t', param2=n.param2 } )
|
||||
on_construct = function( p )
|
||||
local m = minetest.env:get_meta( p )
|
||||
m:set_string( 'alt', 'zdoor:door_wood_b_t' )
|
||||
end,
|
||||
on_dig = function( p, n, u )
|
||||
minetest.node_dig( p, n, u )
|
||||
on_punch = door.toggle,
|
||||
after_dig_node = function( p )
|
||||
p.y = p.y + 1
|
||||
minetest.env:remove_node( p )
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue