mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-01 17:38:41 +00:00
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.
This commit is contained in:
parent
5e7662ca16
commit
42e1a12714
6 changed files with 36 additions and 13 deletions
|
@ -527,15 +527,18 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
|
|||
switch (material_type) {
|
||||
case TILE_MATERIAL_OPAQUE:
|
||||
case TILE_MATERIAL_LIQUID_OPAQUE:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_OPAQUE:
|
||||
shaderinfo.base_material = video::EMT_SOLID;
|
||||
break;
|
||||
case TILE_MATERIAL_ALPHA:
|
||||
case TILE_MATERIAL_LIQUID_TRANSPARENT:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
|
||||
shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||
break;
|
||||
case TILE_MATERIAL_BASIC:
|
||||
case TILE_MATERIAL_WAVING_LEAVES:
|
||||
case TILE_MATERIAL_WAVING_PLANTS:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
|
||||
shaderinfo.base_material = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||
break;
|
||||
}
|
||||
|
@ -631,10 +634,13 @@ ShaderInfo generate_shader(const std::string &name, u8 material_type, u8 drawtyp
|
|||
"TILE_MATERIAL_LIQUID_OPAQUE",
|
||||
"TILE_MATERIAL_WAVING_LEAVES",
|
||||
"TILE_MATERIAL_WAVING_PLANTS",
|
||||
"TILE_MATERIAL_OPAQUE"
|
||||
"TILE_MATERIAL_OPAQUE",
|
||||
"TILE_MATERIAL_WAVING_LIQUID_BASIC",
|
||||
"TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT",
|
||||
"TILE_MATERIAL_WAVING_LIQUID_OPAQUE",
|
||||
};
|
||||
|
||||
for (int i = 0; i < 7; i++){
|
||||
for (int i = 0; i < 10; i++){
|
||||
shaders_header += "#define ";
|
||||
shaders_header += materialTypes[i];
|
||||
shaders_header += " ";
|
||||
|
|
|
@ -144,7 +144,10 @@ enum MaterialType{
|
|||
TILE_MATERIAL_LIQUID_OPAQUE,
|
||||
TILE_MATERIAL_WAVING_LEAVES,
|
||||
TILE_MATERIAL_WAVING_PLANTS,
|
||||
TILE_MATERIAL_OPAQUE
|
||||
TILE_MATERIAL_OPAQUE,
|
||||
TILE_MATERIAL_WAVING_LIQUID_BASIC,
|
||||
TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT,
|
||||
TILE_MATERIAL_WAVING_LIQUID_OPAQUE,
|
||||
};
|
||||
|
||||
// Material flags
|
||||
|
@ -208,16 +211,19 @@ struct TileLayer
|
|||
switch (material_type) {
|
||||
case TILE_MATERIAL_OPAQUE:
|
||||
case TILE_MATERIAL_LIQUID_OPAQUE:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_OPAQUE:
|
||||
material.MaterialType = video::EMT_SOLID;
|
||||
break;
|
||||
case TILE_MATERIAL_BASIC:
|
||||
case TILE_MATERIAL_WAVING_LEAVES:
|
||||
case TILE_MATERIAL_WAVING_PLANTS:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_BASIC:
|
||||
material.MaterialTypeParam = 0.5;
|
||||
material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||
break;
|
||||
case TILE_MATERIAL_ALPHA:
|
||||
case TILE_MATERIAL_LIQUID_TRANSPARENT:
|
||||
case TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT:
|
||||
material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -798,6 +798,8 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
|
|||
material_type = TILE_MATERIAL_WAVING_PLANTS;
|
||||
else if (waving == 2)
|
||||
material_type = TILE_MATERIAL_WAVING_LEAVES;
|
||||
else if (waving == 3)
|
||||
material_type = TILE_MATERIAL_WAVING_LIQUID_BASIC;
|
||||
break;
|
||||
case NDT_TORCHLIKE:
|
||||
case NDT_SIGNLIKE:
|
||||
|
@ -815,8 +817,14 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
|
|||
correctAlpha(tdef, 6);
|
||||
correctAlpha(tdef_overlay, 6);
|
||||
correctAlpha(tdef_spec, CF_SPECIAL_COUNT);
|
||||
material_type = (alpha == 255) ?
|
||||
TILE_MATERIAL_LIQUID_OPAQUE : TILE_MATERIAL_LIQUID_TRANSPARENT;
|
||||
|
||||
if (waving == 3) {
|
||||
material_type = (alpha == 255) ? TILE_MATERIAL_WAVING_LIQUID_OPAQUE :
|
||||
TILE_MATERIAL_WAVING_LIQUID_TRANSPARENT;
|
||||
} else {
|
||||
material_type = (alpha == 255) ? TILE_MATERIAL_LIQUID_OPAQUE :
|
||||
TILE_MATERIAL_LIQUID_TRANSPARENT;
|
||||
}
|
||||
}
|
||||
|
||||
u32 tile_shader = shdsrc->getShader("nodes_shader", material_type, drawtype);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue