From c8be033292a3a511196655d65ff48c72da53ab8a Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Thu, 7 Nov 2013 21:22:16 -0500 Subject: [PATCH] Rewrite lighting to use engine's 6d facedir prediction code changed the names of a couple of internal functions to compensate. this makes lib_6d.lua obsolete. --- init.lua | 15 ++++++++++++++- lib_6d.lua | 52 --------------------------------------------------- lighting.lua | 51 ++++++-------------------------------------------- ownership.lua | 2 +- 4 files changed, 21 insertions(+), 99 deletions(-) delete mode 100644 lib_6d.lua diff --git a/init.lua b/init.lua index c0a5ca4..d88412f 100644 --- a/init.lua +++ b/init.lua @@ -59,8 +59,21 @@ function homedecor.table_copy(t) return nt end +-- protection wrapper for 6d stuff + +function homedecor.protect_and_rotate(itemstack, placer, pointed_thing) + if not homedecor.node_is_owned(pointed_thing.under, placer) + and not homedecor.node_is_owned(pointed_thing.above, placer) then + local keys=placer:get_player_control() + minetest.rotate_and_place(itemstack, placer, pointed_thing, + homedecor.expect_infinite_stacks, {invert_wall = keys.sneak}) + end + return itemstack +end + +-- load various other components + dofile(homedecor.modpath.."/ownership.lua") -dofile(homedecor.modpath.."/lib_6d.lua") dofile(homedecor.modpath.."/misc_nodes.lua") -- the catch-all for all misc nodes dofile(homedecor.modpath.."/tables.lua") diff --git a/lib_6d.lua b/lib_6d.lua deleted file mode 100644 index 1841bd9..0000000 --- a/lib_6d.lua +++ /dev/null @@ -1,52 +0,0 @@ --- Simplified 6d facedir rotation/prediction library --- by VanessaE --- license: WTFPL - -lib_6d = {} - -local dirs1 = { 20, 23, 22, 21 } -local dirs2 = { 9, 18, 7, 12 } - -function lib_6d:rotate_and_place(itemstack, placer, pointed_thing, infinitestacks) - local node = minetest.get_node(pointed_thing.under) - if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then - - local above = pointed_thing.above - local under = pointed_thing.under - local pitch = placer:get_look_pitch() - local pname = minetest.get_node(under).name - local node = minetest.get_node(above) - local fdir = minetest.dir_to_facedir(placer:get_look_dir()) - local wield_name = itemstack:get_name() - - if not minetest.registered_nodes[pname] - or not minetest.registered_nodes[pname].on_rightclick then - - local iswall = (above.x ~= under.x) or (above.z ~= under.z) - local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0) - local pos1 = above - - if minetest.registered_nodes[pname]["buildable_to"] then - pos1 = under - iswall = false - end - - if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end - - if iswall then - minetest.add_node(pos1, {name = wield_name, param2 = dirs2[fdir+1] }) -- place wall variant - elseif isceiling then - minetest.add_node(pos1, {name = wield_name, param2 = 20 }) -- place upside down variant - else - minetest.add_node(pos1, {name = wield_name, param2 = 0 }) -- place right side up - end - - if not infinitestacks then - itemstack:take_item() - return itemstack - end - end - else - minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) - end -end diff --git a/lighting.lua b/lighting.lua index 4fbf5d8..4b22a16 100644 --- a/lighting.lua +++ b/lighting.lua @@ -87,14 +87,7 @@ minetest.register_node('homedecor:glowlight_half_yellow', { groups = { snappy = 3 }, light_source = LIGHT_MAX, sounds = default.node_sound_wood_defaults(), - - on_place = function(itemstack, placer, pointed_thing) - if not homedecor:node_is_owned(pointed_thing.under, placer) - and not homedecor:node_is_owned(pointed_thing.above, placer) then - lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) - end - return itemstack - end + on_place = homedecor.protect_and_rotate }) minetest.register_node('homedecor:glowlight_quarter_yellow', { @@ -124,17 +117,9 @@ minetest.register_node('homedecor:glowlight_quarter_yellow', { groups = { snappy = 3 }, light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if not homedecor:node_is_owned(pointed_thing.under, placer) - and not homedecor:node_is_owned(pointed_thing.above, placer) then - lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) - end - return itemstack - end + on_place = homedecor.protect_and_rotate }) - - -- White minetest.register_node('homedecor:glowlight_half_white', { @@ -164,13 +149,7 @@ minetest.register_node('homedecor:glowlight_half_white', { groups = { snappy = 3 }, light_source = LIGHT_MAX, sounds = default.node_sound_wood_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if not homedecor:node_is_owned(pointed_thing.under, placer) - and not homedecor:node_is_owned(pointed_thing.above, placer) then - lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) - end - return itemstack - end + on_place = homedecor.protect_and_rotate }) minetest.register_node('homedecor:glowlight_quarter_white', { @@ -200,13 +179,7 @@ minetest.register_node('homedecor:glowlight_quarter_white', { groups = { snappy = 3 }, light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if not homedecor:node_is_owned(pointed_thing.under, placer) - and not homedecor:node_is_owned(pointed_thing.above, placer) then - lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) - end - return itemstack - end + on_place = homedecor.protect_and_rotate }) -- Glowlight "cubes" @@ -239,13 +212,7 @@ minetest.register_node('homedecor:glowlight_small_cube_yellow', { light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if not homedecor:node_is_owned(pointed_thing.under, placer) - and not homedecor:node_is_owned(pointed_thing.above, placer) then - lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) - end - return itemstack - end + on_place = homedecor.protect_and_rotate }) minetest.register_node('homedecor:glowlight_small_cube_white', { @@ -275,12 +242,6 @@ minetest.register_node('homedecor:glowlight_small_cube_white', { groups = { snappy = 3 }, light_source = LIGHT_MAX-1, sounds = default.node_sound_wood_defaults(), - on_place = function(itemstack, placer, pointed_thing) - if not homedecor:node_is_owned(pointed_thing.under, placer) - and not homedecor:node_is_owned(pointed_thing.above, placer) then - lib_6d:rotate_and_place(itemstack, placer, pointed_thing, homedecor.expect_infinite_stacks) - end - return itemstack - end + on_place = homedecor.protect_and_rotate }) diff --git a/ownership.lua b/ownership.lua index a9ca82f..06bc726 100644 --- a/ownership.lua +++ b/ownership.lua @@ -1,7 +1,7 @@ local S = homedecor.gettext -function homedecor:node_is_owned(pos, placer) +function homedecor.node_is_owned(pos, placer) local ownername = false if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod if HasOwner(pos, placer) then -- returns true if the node is owned