atdalīts no mtcontrib/homedecor_modpack
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.
Šī revīzija ir iekļauta:
118
homedecor/cobweb.lua
Parasts fails
118
homedecor/cobweb.lua
Parasts fails
@@ -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",
|
||||
|
||||
Bināro failu nav iespējams attēlot.
|
Pirms Platums: | Augstums: | Izmērs: 242 B Pēc Platums: | Augstums: | Izmērs: 236 B |
Binārs
homedecor/textures/homedecor_cobweb_plantlike.png
Parasts fails
Binārs
homedecor/textures/homedecor_cobweb_plantlike.png
Parasts fails
Bināro failu nav iespējams attēlot.
|
Pēc Platums: | Augstums: | Izmērs: 242 B |
Binārs
homedecor/textures/homedecor_cobweb_torchlike.png
Parasts fails
Binārs
homedecor/textures/homedecor_cobweb_torchlike.png
Parasts fails
Bināro failu nav iespējams attēlot.
|
Pēc Platums: | Augstums: | Izmērs: 243 B |
Atsaukties uz šo jaunā problēmā
Block a user