aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWuzzy <wuzzy2@mail.ru>2021-04-20 17:50:03 +0000
committerGitHub <noreply@github.com>2021-04-20 19:50:03 +0200
commit90a7bd6a0afb6509e96bcb373f95b448ee7f3b1d (patch)
treeb3243491bdddb11c2ac01a488ad700840f1b5e85
parent16e5b39e1dbe503684effb11f4b87a641c3e43e6 (diff)
downloadhax-minetest-server-90a7bd6a0afb6509e96bcb373f95b448ee7f3b1d.tar.gz
hax-minetest-server-90a7bd6a0afb6509e96bcb373f95b448ee7f3b1d.zip
Put torch/signlike node on floor if no paramtype2 (#11074)
-rw-r--r--builtin/game/falling.lua15
-rw-r--r--doc/lua_api.txt16
-rw-r--r--games/devtest/mods/testnodes/drawtypes.lua24
-rw-r--r--src/client/wieldmesh.cpp10
-rw-r--r--src/mapnode.cpp5
5 files changed, 43 insertions, 27 deletions
diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua
index 5450542ff..1f0a63993 100644
--- a/builtin/game/falling.lua
+++ b/builtin/game/falling.lua
@@ -84,9 +84,6 @@ core.register_entity(":__builtin:falling_node", {
local textures
if def.tiles and def.tiles[1] then
local tile = def.tiles[1]
- if def.drawtype == "torchlike" and def.paramtype2 ~= "wallmounted" then
- tile = def.tiles[2] or def.tiles[1]
- end
if type(tile) == "table" then
tile = tile.name
end
@@ -147,11 +144,7 @@ core.register_entity(":__builtin:falling_node", {
-- Rotate entity
if def.drawtype == "torchlike" then
- if def.paramtype2 == "wallmounted" then
- self.object:set_yaw(math.pi*0.25)
- else
- self.object:set_yaw(-math.pi*0.25)
- end
+ self.object:set_yaw(math.pi*0.25)
elseif ((node.param2 ~= 0 or def.drawtype == "nodebox" or def.drawtype == "mesh")
and (def.wield_image == "" or def.wield_image == nil))
or def.drawtype == "signlike"
@@ -165,8 +158,12 @@ core.register_entity(":__builtin:falling_node", {
if euler then
self.object:set_rotation(euler)
end
- elseif (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted") then
+ elseif (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted" or def.drawtype == "signlike") then
local rot = node.param2 % 8
+ if (def.drawtype == "signlike" and def.paramtype2 ~= "wallmounted" and def.paramtype2 ~= "colorwallmounted") then
+ -- Change rotation to "floor" by default for non-wallmounted paramtype2
+ rot = 1
+ end
local pitch, yaw, roll = 0, 0, 0
if def.drawtype == "nodebox" or def.drawtype == "mesh" then
if rot == 0 then
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 4c963465a..5f72b8b2b 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1140,14 +1140,20 @@ Look for examples in `games/devtest` or `games/minetest_game`.
used to compensate for how `glasslike` reduces visual thickness.
* `torchlike`
* A single vertical texture.
- * If placed on top of a node, uses the first texture specified in `tiles`.
- * If placed against the underside of a node, uses the second texture
- specified in `tiles`.
- * If placed on the side of a node, uses the third texture specified in
- `tiles` and is perpendicular to that node.
+ * If `paramtype2="[color]wallmounted":
+ * If placed on top of a node, uses the first texture specified in `tiles`.
+ * If placed against the underside of a node, uses the second texture
+ specified in `tiles`.
+ * If placed on the side of a node, uses the third texture specified in
+ `tiles` and is perpendicular to that node.
+ * If `paramtype2="none"`:
+ * Will be rendered as if placed on top of a node (see
+ above) and only the first texture is used.
* `signlike`
* A single texture parallel to, and mounted against, the top, underside or
side of a node.
+ * If `paramtype2="[color]wallmounted", it rotates according to `param2`
+ * If `paramtype2="none"`, it will always be on the floor.
* `plantlike`
* Two vertical and diagonal textures at right-angles to each other.
* See `paramtype2 = "meshoptions"` above for other options.
diff --git a/games/devtest/mods/testnodes/drawtypes.lua b/games/devtest/mods/testnodes/drawtypes.lua
index f6d48b06f..881ba75aa 100644
--- a/games/devtest/mods/testnodes/drawtypes.lua
+++ b/games/devtest/mods/testnodes/drawtypes.lua
@@ -129,14 +129,10 @@ minetest.register_node("testnodes:fencelike", {
})
minetest.register_node("testnodes:torchlike", {
- description = S("Torchlike Drawtype Test Node"),
+ description = S("Floor Torchlike Drawtype Test Node"),
drawtype = "torchlike",
paramtype = "light",
- tiles = {
- "testnodes_torchlike_floor.png",
- "testnodes_torchlike_ceiling.png",
- "testnodes_torchlike_wall.png",
- },
+ tiles = { "testnodes_torchlike_floor.png^[colorize:#FF0000:64" },
walkable = false,
@@ -161,9 +157,21 @@ minetest.register_node("testnodes:torchlike_wallmounted", {
groups = { dig_immediate = 3 },
})
+minetest.register_node("testnodes:signlike", {
+ description = S("Floor Signlike Drawtype Test Node"),
+ drawtype = "signlike",
+ paramtype = "light",
+ tiles = { "testnodes_signlike.png^[colorize:#FF0000:64" },
-minetest.register_node("testnodes:signlike", {
+ walkable = false,
+ groups = { dig_immediate = 3 },
+ sunlight_propagates = true,
+ inventory_image = fallback_image("testnodes_signlike.png"),
+})
+
+
+minetest.register_node("testnodes:signlike_wallmounted", {
description = S("Wallmounted Signlike Drawtype Test Node"),
drawtype = "signlike",
paramtype = "light",
@@ -583,7 +591,7 @@ scale("plantlike",
scale("torchlike_wallmounted",
S("Double-sized Wallmounted Torchlike Drawtype Test Node"),
S("Half-sized Wallmounted Torchlike Drawtype Test Node"))
-scale("signlike",
+scale("signlike_wallmounted",
S("Double-sized Wallmounted Signlike Drawtype Test Node"),
S("Half-sized Wallmounted Signlike Drawtype Test Node"))
scale("firelike",
diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp
index e76bbfa9e..d9d5e57cd 100644
--- a/src/client/wieldmesh.cpp
+++ b/src/client/wieldmesh.cpp
@@ -313,12 +313,14 @@ static scene::SMesh *createSpecialNodeMesh(Client *client, MapNode n,
// keep it
} else if (f.param_type_2 == CPT2_WALLMOUNTED ||
f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
- if (f.drawtype == NDT_TORCHLIKE)
- n.setParam2(1);
- else if (f.drawtype == NDT_SIGNLIKE ||
+ if (f.drawtype == NDT_TORCHLIKE ||
+ f.drawtype == NDT_SIGNLIKE ||
f.drawtype == NDT_NODEBOX ||
- f.drawtype == NDT_MESH)
+ f.drawtype == NDT_MESH) {
n.setParam2(4);
+ }
+ } else if (f.drawtype == NDT_SIGNLIKE || f.drawtype == NDT_TORCHLIKE) {
+ n.setParam2(1);
}
gen.renderSingle(n.getContent(), n.getParam2());
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index 20980b238..c885bfe1d 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -159,8 +159,11 @@ u8 MapNode::getWallMounted(const NodeDefManager *nodemgr) const
{
const ContentFeatures &f = nodemgr->get(*this);
if (f.param_type_2 == CPT2_WALLMOUNTED ||
- f.param_type_2 == CPT2_COLORED_WALLMOUNTED)
+ f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
return getParam2() & 0x07;
+ } else if (f.drawtype == NDT_SIGNLIKE || f.drawtype == NDT_TORCHLIKE) {
+ return 1;
+ }
return 0;
}