1
0
mirror of https://github.com/mt-mods/homedecor_modpack.git synced 2024-09-30 15:10:22 +02:00
homedecor_modpack/homedecor/cobweb.lua
Vanessa Ezekowitz 60d34095a5 make cobwebs sit in corners when so-placed.
Algorithm tries to find an X-/Z+ or X+/Z- corner first (places the
cobweb using the torchlike "on-floor" mode) then an X-/Z- or X+/Z+
corner ("on-ceiling), then opposing X-/X+ walls (nodebox, not rotated),
then opposing Z-/Z+ walls (nodebox, rotated 90 degrees), then falls back
to plantlike (which also happens to fit places where e.g. three walls
come together only 1m apart)

ABM added to convert old ones.

Node name has changed so if you have cobwebs in your inventory, sorry
about that.
2014-09-04 16:27:05 -04:00

119 lines
3.6 KiB
Lua

minetest.register_node("homedecor:cobweb_corner", {
description = "Cobweb",
drawtype = "torchlike",
tiles = { "homedecor_cobweb_torchlike.png" },
inventory_image = "homedecor_cobweb_inv.png",
wield_image = "homedecor_cobweb_inv.png",
paramtype = "light",
paramtype2 = "wallmounted",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
},
visual_scale = 1.4,
groups = { snappy = 3 },
after_place_node = function(pos, placer, itemstack, pointed_thing)
homedecor.rotate_cobweb(pos)
end
})
minetest.register_node("homedecor:cobweb_centered", {
description = "Cobweb",
drawtype = "nodebox",
tiles = { "homedecor_cobweb.png" },
inventory_image = "homedecor_cobweb_inv.png",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
},
node_box = {
type = "fixed",
fixed = { -0.5, -0.5, 0, 0.5, 0.5, 0 }
},
groups = { snappy = 3, not_in_creative_inventory = 1 },
drop = "homedecor:cobweb_corner"
})
minetest.register_node("homedecor:cobweb_plantlike", {
description = "Cobweb",
drawtype = "plantlike",
tiles = { "homedecor_cobweb_plantlike.png" },
inventory_image = "homedecor_cobweb_inv.png",
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}
},
visual_scale = 1.189,
groups = { snappy = 3, not_in_creative_inventory = 1 },
drop = "homedecor:cobweb_corner"
})
-- helper function to rotate the cobweb after it's placed
function homedecor.rotate_cobweb(pos)
local wall_xm = minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name
local wall_xp = minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name
local wall_zm = minetest.get_node({ x=pos.x, y=pos.y, z=pos.z-1}).name
local wall_zp = minetest.get_node({ x=pos.x, y=pos.y, z=pos.z+1}).name
local iswall_xm = (wall_xm ~= "air")
local iswall_xp = (wall_xp ~= "air")
local iswall_zm = (wall_zm ~= "air")
local iswall_zp = (wall_zp ~= "air")
print("wall_xm: "..dump(wall_xm))
print("wall_xp: "..dump(wall_xp))
print("wall_zm: "..dump(wall_zm))
print("wall_zp: "..dump(wall_zp))
-- only xm+zp, or only xp+zm means on-floor torchlike
if (iswall_xm and iswall_zp and not iswall_xp and not iswall_zm)
or (iswall_xp and iswall_zm and not iswall_xm and not iswall_zp) then
minetest.set_node(pos, {name = "homedecor:cobweb_corner", param2 = 1})
-- only xm+zm, or only xp+zp means on-ceiling torchlike
elseif (iswall_xm and iswall_zm and not iswall_xp and not iswall_zp)
or (iswall_xp and iswall_zp and not iswall_xm and not iswall_zm) then
minetest.set_node(pos, {name = "homedecor:cobweb_corner", param2 = 0})
-- only xm+xp means nodebox (not rotated, 0 degrees)
elseif iswall_xm and iswall_xp and not iswall_zm and not iswall_zp then
minetest.set_node(pos, {name = "homedecor:cobweb_centered", param2 = 0})
-- only zm+zp means nodebox rotated to 90 degrees
elseif iswall_zm and iswall_zp and not iswall_xm and not iswall_xp then
minetest.set_node(pos, {name = "homedecor:cobweb_centered", param2 = 1})
-- if all else fails, place the plantlike version as a fallback.
else
minetest.set_node(pos, {name = "homedecor:cobweb_plantlike", param2 = 0})
end
end
-- convert existing cobwebs
minetest.register_abm({
nodenames = { "homedecor:cobweb" },
interval = 1,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
homedecor_rotate_cobweb(pos)
end
})