]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Put torch/signlike node on floor if no paramtype2 (#11074)
authorWuzzy <wuzzy2@mail.ru>
Tue, 20 Apr 2021 17:50:03 +0000 (17:50 +0000)
committerGitHub <noreply@github.com>
Tue, 20 Apr 2021 17:50:03 +0000 (19:50 +0200)
builtin/game/falling.lua
doc/lua_api.txt
games/devtest/mods/testnodes/drawtypes.lua
src/client/wieldmesh.cpp
src/mapnode.cpp

index 5450542ff1309b4e1498d2231efe105244ecd127..1f0a63993e5309f63ea752319c7d4f75e2ea5c47 100644 (file)
@@ -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
index 4c963465a30b7204f2fedc16e6941d6e1562edeb..5f72b8b2bacdc2cc117da7515bea44217b0e78e6 100644 (file)
@@ -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.
index f6d48b06f44ae660ebb69a0ca91d4e66cc310e9b..881ba75aa760e515a7dafa6fc051f7f0c850a2ef 100644 (file)
@@ -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",
index e76bbfa9ea7a43ef2d5f0b49b526e427661b96ab..d9d5e57cdc4843523f9ee67679b001b7f4c7652d 100644 (file)
@@ -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());
 
index 20980b2382ab52fe73c8b258e926b14d72bc9ffd..c885bfe1dbfcec10504863442b4e023967af0642 100644 (file)
@@ -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;
 }