Skip to content

Commit 42e1a12

Browse files
authoredMar 27, 2019
Require 'waving = 3' in a nodedef to apply the liquid waving shader (#8418)
Makes the liquid waving shader per-nodedef like waving leaves/plants, instead of being applied to all liquids. Like the waving leaves/plants shaders, the liquid waving shader can also be applied to meshes and nodeboxes. Derived from a PR by t0ny2.
1 parent 5e7662c commit 42e1a12

File tree

6 files changed

+36
-13
lines changed

6 files changed

+36
-13
lines changed
 

‎builtin/mainmenu/tab_settings.lua

+2-2
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ local function formspec(tabview, name, tabdata)
254254
.. dump(core.settings:get_bool("generate_normalmaps")) .. "]" ..
255255
"checkbox[8.25,2;cb_parallax;" .. fgettext("Parallax Occlusion") .. ";"
256256
.. dump(core.settings:get_bool("enable_parallax_occlusion")) .. "]" ..
257-
"checkbox[8.25,2.5;cb_waving_water;" .. fgettext("Waving Water") .. ";"
257+
"checkbox[8.25,2.5;cb_waving_water;" .. fgettext("Waving Liquids") .. ";"
258258
.. dump(core.settings:get_bool("enable_waving_water")) .. "]" ..
259259
"checkbox[8.25,3;cb_waving_leaves;" .. fgettext("Waving Leaves") .. ";"
260260
.. dump(core.settings:get_bool("enable_waving_leaves")) .. "]" ..
@@ -271,7 +271,7 @@ local function formspec(tabview, name, tabdata)
271271
"label[8.38,2.2;" .. core.colorize("#888888",
272272
fgettext("Parallax Occlusion")) .. "]" ..
273273
"label[8.38,2.7;" .. core.colorize("#888888",
274-
fgettext("Waving Water")) .. "]" ..
274+
fgettext("Waving Liquids")) .. "]" ..
275275
"label[8.38,3.2;" .. core.colorize("#888888",
276276
fgettext("Waving Leaves")) .. "]" ..
277277
"label[8.38,3.7;" .. core.colorize("#888888",

‎client/shaders/nodes_shader/opengl_vertex.glsl

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ float disp_z;
6868
#endif
6969

7070

71-
#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER
71+
#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_WAVING_LIQUID_OPAQUE || MATERIAL_TYPE == TILE_MATERIAL_WAVING_LIQUID_BASIC) && ENABLE_WAVING_WATER
7272
vec4 pos = gl_Vertex;
7373
pos.y -= 2.0;
7474
float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH);

‎doc/lua_api.txt

+8-5
Original file line numberDiff line numberDiff line change
@@ -6135,12 +6135,15 @@ Used by `minetest.register_node`.
61356135
legacy_wallmounted = false,
61366136

61376137
waving = 0,
6138-
-- Valid for mesh, nodebox, plantlike, allfaces_optional nodes.
6139-
-- 1 - wave node like plants (top of node moves, bottom is fixed)
6138+
-- Valid for drawtypes:
6139+
-- mesh, nodebox, plantlike, allfaces_optional, liquid, flowingliquid.
6140+
-- 1 - wave node like plants (node top moves side-to-side, bottom is fixed)
61406141
-- 2 - wave node like leaves (whole node moves side-to-side)
6141-
-- caveats: not all models will properly wave.
6142-
-- plantlike drawtype nodes can only wave like plants.
6143-
-- allfaces_optional drawtype nodes can only wave like leaves.
6142+
-- 3 - wave node like liquids (whole node moves up and down)
6143+
-- Not all models will properly wave.
6144+
-- plantlike drawtype can only wave like plants.
6145+
-- allfaces_optional drawtype can only wave like leaves.
6146+
-- liquid, flowingliquid drawtypes can only wave like liquids.
61446147

61456148
sounds = {
61466149
footstep = <SimpleSoundSpec>,

‎src/client/shader.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -527,15 +527,18 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
527527
switch (material_type) {
528528
case TILE_MATERIAL_OPAQUE:
529529
case TILE_MATERIAL_LIQUID_OPAQUE:
530+
case TILE_MATERIAL_WAVING_LIQUID_OPAQUE:
530531
shaderinfo.base_material = video::EMT_SOLID;
531532
break;
532533
case TILE_MATERIAL_ALPHA:
533534
case TILE_MATERIAL_LIQUID_TRANSPARENT:
535+
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
534536
shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
535537
break;
536538
case TILE_MATERIAL_BASIC:
537539
case TILE_MATERIAL_WAVING_LEAVES:
538540
case TILE_MATERIAL_WAVING_PLANTS:
541+
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
539542
shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
540543
break;
541544
}
@@ -631,10 +634,13 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
631634
"TILE_MATERIAL_LIQUID_OPAQUE",
632635
"TILE_MATERIAL_WAVING_LEAVES",
633636
"TILE_MATERIAL_WAVING_PLANTS",
634-
"TILE_MATERIAL_OPAQUE"
637+
"TILE_MATERIAL_OPAQUE",
638+
"TILE_MATERIAL_WAVING_LIQUID_BASIC",
639+
"TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT",
640+
"TILE_MATERIAL_WAVING_LIQUID_OPAQUE",
635641
};
636642

637-
for (int i = 0; i < 7; i++){
643+
for (int i = 0; i < 10; i++){
638644
shaders_header += "#define ";
639645
shaders_header += materialTypes[i];
640646
shaders_header += " ";

‎src/client/tile.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,10 @@ enum MaterialType{
144144
TILE_MATERIAL_LIQUID_OPAQUE,
145145
TILE_MATERIAL_WAVING_LEAVES,
146146
TILE_MATERIAL_WAVING_PLANTS,
147-
TILE_MATERIAL_OPAQUE
147+
TILE_MATERIAL_OPAQUE,
148+
TILE_MATERIAL_WAVING_LIQUID_BASIC,
149+
TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT,
150+
TILE_MATERIAL_WAVING_LIQUID_OPAQUE,
148151
};
149152

150153
// Material flags
@@ -208,16 +211,19 @@ struct TileLayer
208211
switch (material_type) {
209212
case TILE_MATERIAL_OPAQUE:
210213
case TILE_MATERIAL_LIQUID_OPAQUE:
214+
case TILE_MATERIAL_WAVING_LIQUID_OPAQUE:
211215
material.MaterialType = video::EMT_SOLID;
212216
break;
213217
case TILE_MATERIAL_BASIC:
214218
case TILE_MATERIAL_WAVING_LEAVES:
215219
case TILE_MATERIAL_WAVING_PLANTS:
220+
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
216221
material.MaterialTypeParam = 0.5;
217222
material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
218223
break;
219224
case TILE_MATERIAL_ALPHA:
220225
case TILE_MATERIAL_LIQUID_TRANSPARENT:
226+
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
221227
material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
222228
break;
223229
default:

‎src/nodedef.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,8 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
798798
material_type = TILE_MATERIAL_WAVING_PLANTS;
799799
else if (waving == 2)
800800
material_type = TILE_MATERIAL_WAVING_LEAVES;
801+
else if (waving == 3)
802+
material_type = TILE_MATERIAL_WAVING_LIQUID_BASIC;
801803
break;
802804
case NDT_TORCHLIKE:
803805
case NDT_SIGNLIKE:
@@ -815,8 +817,14 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
815817
correctAlpha(tdef, 6);
816818
correctAlpha(tdef_overlay, 6);
817819
correctAlpha(tdef_spec, CF_SPECIAL_COUNT);
818-
material_type = (alpha == 255) ?
819-
TILE_MATERIAL_LIQUID_OPAQUE : TILE_MATERIAL_LIQUID_TRANSPARENT;
820+
821+
if (waving == 3) {
822+
material_type = (alpha == 255) ? TILE_MATERIAL_WAVING_LIQUID_OPAQUE :
823+
TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT;
824+
} else {
825+
material_type = (alpha == 255) ? TILE_MATERIAL_LIQUID_OPAQUE :
826+
TILE_MATERIAL_LIQUID_TRANSPARENT;
827+
}
820828
}
821829

822830
u32 tile_shader = shdsrc->getShader("nodes_shader", material_type, drawtype);

0 commit comments

Comments
 (0)
Please sign in to comment.