mirror of
https://github.com/mt-mods/homedecor_modpack.git
synced 2024-12-23 08:20:21 +01:00
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.
This commit is contained in:
parent
95d852691d
commit
60d34095a5
118
homedecor/cobweb.lua
Normal file
118
homedecor/cobweb.lua
Normal file
@ -0,0 +1,118 @@
|
||||
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
|
||||
})
|
@ -105,6 +105,8 @@ dofile(homedecor.modpath.."/furniture_bathroom.lua")
|
||||
dofile(homedecor.modpath.."/furniture_recipes.lua")
|
||||
dofile(homedecor.modpath.."/climate-control.lua")
|
||||
|
||||
dofile(homedecor.modpath.."/cobweb.lua")
|
||||
|
||||
dofile(homedecor.modpath.."/locked.lua")
|
||||
|
||||
|
||||
|
@ -893,26 +893,6 @@ minetest.register_node("homedecor:trash_can", {
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:cobweb", {
|
||||
description = "Cobweb",
|
||||
drawtype = "plantlike",
|
||||
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}
|
||||
},
|
||||
visual_scale = 1.189,
|
||||
groups = { snappy = 3 },
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
minetest.add_node(pos, { name = "homedecor:cobweb", param2 = 0 })
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("homedecor:well_base", {
|
||||
tiles = {
|
||||
"homedecor_well_base_top.png",
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 242 B After Width: | Height: | Size: 236 B |
BIN
homedecor/textures/homedecor_cobweb_plantlike.png
Normal file
BIN
homedecor/textures/homedecor_cobweb_plantlike.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 242 B |
BIN
homedecor/textures/homedecor_cobweb_torchlike.png
Normal file
BIN
homedecor/textures/homedecor_cobweb_torchlike.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 243 B |
Loading…
Reference in New Issue
Block a user