doors code rework

master
Fernando Zapata 2012-09-13 14:31:29 -06:00
parent 7bc342a486
commit 19b20abd57
3 changed files with 109 additions and 56 deletions

64
helper/init.lua Normal file
View File

@ -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
--------------------------------------------------------------------------------

View File

@ -1 +1,3 @@
default
helper
doors

View File

@ -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