mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Add wallmounted support for plantlike and plantlike_rooted nodes (#11379)
This commit is contained in:
parent
68143ed8ec
commit
f4d8cc0f0b
@ -157,7 +157,8 @@ core.register_entity(":__builtin:falling_node", {
|
|||||||
if euler then
|
if euler then
|
||||||
self.object:set_rotation(euler)
|
self.object:set_rotation(euler)
|
||||||
end
|
end
|
||||||
elseif (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted" or def.drawtype == "signlike") then
|
elseif (def.drawtype ~= "plantlike" and def.drawtype ~= "plantlike_rooted" and
|
||||||
|
(def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted" or def.drawtype == "signlike")) then
|
||||||
local rot = node.param2 % 8
|
local rot = node.param2 % 8
|
||||||
if (def.drawtype == "signlike" and def.paramtype2 ~= "wallmounted" and def.paramtype2 ~= "colorwallmounted") then
|
if (def.drawtype == "signlike" and def.paramtype2 ~= "wallmounted" and def.paramtype2 ~= "colorwallmounted") then
|
||||||
-- Change rotation to "floor" by default for non-wallmounted paramtype2
|
-- Change rotation to "floor" by default for non-wallmounted paramtype2
|
||||||
|
@ -1022,7 +1022,8 @@ The function of `param2` is determined by `paramtype2` in node definition.
|
|||||||
to access/manipulate the content of this field
|
to access/manipulate the content of this field
|
||||||
* Bit 3: If set, liquid is flowing downwards (no graphical effect)
|
* Bit 3: If set, liquid is flowing downwards (no graphical effect)
|
||||||
* `paramtype2 = "wallmounted"`
|
* `paramtype2 = "wallmounted"`
|
||||||
* Supported drawtypes: "torchlike", "signlike", "normal", "nodebox", "mesh"
|
* Supported drawtypes: "torchlike", "signlike", "plantlike",
|
||||||
|
"plantlike_rooted", "normal", "nodebox", "mesh"
|
||||||
* The rotation of the node is stored in `param2`
|
* The rotation of the node is stored in `param2`
|
||||||
* You can make this value by using `minetest.dir_to_wallmounted()`
|
* You can make this value by using `minetest.dir_to_wallmounted()`
|
||||||
* Values range 0 - 5
|
* Values range 0 - 5
|
||||||
@ -1198,7 +1199,12 @@ Look for examples in `games/devtest` or `games/minetest_game`.
|
|||||||
* `plantlike_rooted`
|
* `plantlike_rooted`
|
||||||
* Enables underwater `plantlike` without air bubbles around the nodes.
|
* Enables underwater `plantlike` without air bubbles around the nodes.
|
||||||
* Consists of a base cube at the co-ordinates of the node plus a
|
* Consists of a base cube at the co-ordinates of the node plus a
|
||||||
`plantlike` extension above with a height of `param2 / 16` nodes.
|
`plantlike` extension above
|
||||||
|
* If `paramtype2="leveled", the `plantlike` extension has a height
|
||||||
|
of `param2 / 16` nodes, otherwise it's the height of 1 node
|
||||||
|
* If `paramtype2="wallmounted"`, the `plantlike` extension
|
||||||
|
will be at one of the corresponding 6 sides of the base cube.
|
||||||
|
Also, the base cube rotates like a `normal` cube would
|
||||||
* The `plantlike` extension visually passes through any nodes above the
|
* The `plantlike` extension visually passes through any nodes above the
|
||||||
base cube without affecting them.
|
base cube without affecting them.
|
||||||
* The base cube texture tiles are defined as normal, the `plantlike`
|
* The base cube texture tiles are defined as normal, the `plantlike`
|
||||||
|
@ -208,6 +208,19 @@ minetest.register_node("testnodes:plantlike_waving", {
|
|||||||
groups = { dig_immediate = 3 },
|
groups = { dig_immediate = 3 },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_node("testnodes:plantlike_wallmounted", {
|
||||||
|
description = S("Wallmounted Plantlike Drawtype Test Node"),
|
||||||
|
drawtype = "plantlike",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "wallmounted",
|
||||||
|
tiles = { "testnodes_plantlike_wallmounted.png" },
|
||||||
|
leveled = 1,
|
||||||
|
|
||||||
|
|
||||||
|
walkable = false,
|
||||||
|
sunlight_propagates = true,
|
||||||
|
groups = { dig_immediate = 3 },
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
-- param2 will rotate
|
-- param2 will rotate
|
||||||
@ -320,6 +333,20 @@ minetest.register_node("testnodes:plantlike_rooted", {
|
|||||||
groups = { dig_immediate = 3 },
|
groups = { dig_immediate = 3 },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_node("testnodes:plantlike_rooted_wallmounted", {
|
||||||
|
description = S("Wallmounted Rooted Plantlike Drawtype Test Node"),
|
||||||
|
drawtype = "plantlike_rooted",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "wallmounted",
|
||||||
|
tiles = {
|
||||||
|
"testnodes_plantlike_rooted_base.png",
|
||||||
|
"testnodes_plantlike_rooted_base.png",
|
||||||
|
"testnodes_plantlike_rooted_base_side_wallmounted.png" },
|
||||||
|
special_tiles = { "testnodes_plantlike_rooted_wallmounted.png" },
|
||||||
|
|
||||||
|
groups = { dig_immediate = 3 },
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_node("testnodes:plantlike_rooted_waving", {
|
minetest.register_node("testnodes:plantlike_rooted_waving", {
|
||||||
description = S("Waving Rooted Plantlike Drawtype Test Node"),
|
description = S("Waving Rooted Plantlike Drawtype Test Node"),
|
||||||
drawtype = "plantlike_rooted",
|
drawtype = "plantlike_rooted",
|
||||||
@ -588,6 +615,9 @@ scale("allfaces_optional_waving",
|
|||||||
scale("plantlike",
|
scale("plantlike",
|
||||||
S("Double-sized Plantlike Drawtype Test Node"),
|
S("Double-sized Plantlike Drawtype Test Node"),
|
||||||
S("Half-sized Plantlike Drawtype Test Node"))
|
S("Half-sized Plantlike Drawtype Test Node"))
|
||||||
|
scale("plantlike_wallmounted",
|
||||||
|
S("Double-sized Wallmounted Plantlike Drawtype Test Node"),
|
||||||
|
S("Half-sized Wallmounted Plantlike Drawtype Test Node"))
|
||||||
scale("torchlike_wallmounted",
|
scale("torchlike_wallmounted",
|
||||||
S("Double-sized Wallmounted Torchlike Drawtype Test Node"),
|
S("Double-sized Wallmounted Torchlike Drawtype Test Node"),
|
||||||
S("Half-sized Wallmounted Torchlike Drawtype Test Node"))
|
S("Half-sized Wallmounted Torchlike Drawtype Test Node"))
|
||||||
|
BIN
games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_wallmounted.png
Normal file
BIN
games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_wallmounted.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 224 B |
Binary file not shown.
After Width: | Height: | Size: 268 B |
Binary file not shown.
After Width: | Height: | Size: 268 B |
@ -958,10 +958,38 @@ void MapblockMeshGenerator::drawPlantlikeQuad(float rotation, float quad_offset,
|
|||||||
vertex.rotateXZBy(rotation + rotate_degree);
|
vertex.rotateXZBy(rotation + rotate_degree);
|
||||||
vertex += offset;
|
vertex += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u8 wall = n.getWallMounted(nodedef);
|
||||||
|
if (wall != DWM_YN) {
|
||||||
|
for (v3f &vertex : vertices) {
|
||||||
|
switch (wall) {
|
||||||
|
case DWM_YP:
|
||||||
|
vertex.rotateYZBy(180);
|
||||||
|
vertex.rotateXZBy(180);
|
||||||
|
break;
|
||||||
|
case DWM_XP:
|
||||||
|
vertex.rotateXYBy(90);
|
||||||
|
break;
|
||||||
|
case DWM_XN:
|
||||||
|
vertex.rotateXYBy(-90);
|
||||||
|
vertex.rotateYZBy(180);
|
||||||
|
break;
|
||||||
|
case DWM_ZP:
|
||||||
|
vertex.rotateYZBy(-90);
|
||||||
|
vertex.rotateXYBy(90);
|
||||||
|
break;
|
||||||
|
case DWM_ZN:
|
||||||
|
vertex.rotateYZBy(90);
|
||||||
|
vertex.rotateXYBy(90);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
drawQuad(vertices, v3s16(0, 0, 0), plant_height);
|
drawQuad(vertices, v3s16(0, 0, 0), plant_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapblockMeshGenerator::drawPlantlike()
|
void MapblockMeshGenerator::drawPlantlike(bool is_rooted)
|
||||||
{
|
{
|
||||||
draw_style = PLANT_STYLE_CROSS;
|
draw_style = PLANT_STYLE_CROSS;
|
||||||
scale = BS / 2 * f->visual_scale;
|
scale = BS / 2 * f->visual_scale;
|
||||||
@ -998,6 +1026,22 @@ void MapblockMeshGenerator::drawPlantlike()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_rooted) {
|
||||||
|
u8 wall = n.getWallMounted(nodedef);
|
||||||
|
switch (wall) {
|
||||||
|
case DWM_YP:
|
||||||
|
offset.Y += BS*2;
|
||||||
|
break;
|
||||||
|
case DWM_XN:
|
||||||
|
case DWM_XP:
|
||||||
|
case DWM_ZN:
|
||||||
|
case DWM_ZP:
|
||||||
|
offset.X += -BS;
|
||||||
|
offset.Y += BS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (draw_style) {
|
switch (draw_style) {
|
||||||
case PLANT_STYLE_CROSS:
|
case PLANT_STYLE_CROSS:
|
||||||
drawPlantlikeQuad(46);
|
drawPlantlikeQuad(46);
|
||||||
@ -1048,7 +1092,7 @@ void MapblockMeshGenerator::drawPlantlikeRootedNode()
|
|||||||
MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + p);
|
MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + p);
|
||||||
light = LightPair(getInteriorLight(ntop, 1, nodedef));
|
light = LightPair(getInteriorLight(ntop, 1, nodedef));
|
||||||
}
|
}
|
||||||
drawPlantlike();
|
drawPlantlike(true);
|
||||||
p.Y--;
|
p.Y--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ public:
|
|||||||
|
|
||||||
void drawPlantlikeQuad(float rotation, float quad_offset = 0,
|
void drawPlantlikeQuad(float rotation, float quad_offset = 0,
|
||||||
bool offset_top_only = false);
|
bool offset_top_only = false);
|
||||||
void drawPlantlike();
|
void drawPlantlike(bool is_rooted = false);
|
||||||
|
|
||||||
// firelike-specific
|
// firelike-specific
|
||||||
void drawFirelikeQuad(float rotation, float opening_angle,
|
void drawFirelikeQuad(float rotation, float opening_angle,
|
||||||
|
@ -161,7 +161,9 @@ u8 MapNode::getWallMounted(const NodeDefManager *nodemgr) const
|
|||||||
if (f.param_type_2 == CPT2_WALLMOUNTED ||
|
if (f.param_type_2 == CPT2_WALLMOUNTED ||
|
||||||
f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
|
f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
|
||||||
return getParam2() & 0x07;
|
return getParam2() & 0x07;
|
||||||
} else if (f.drawtype == NDT_SIGNLIKE || f.drawtype == NDT_TORCHLIKE) {
|
} else if (f.drawtype == NDT_SIGNLIKE || f.drawtype == NDT_TORCHLIKE ||
|
||||||
|
f.drawtype == NDT_PLANTLIKE ||
|
||||||
|
f.drawtype == NDT_PLANTLIKE_ROOTED) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user