mirror of
https://github.com/minetest/minetest.git
synced 2024-12-25 23:47:29 +01:00
nicer looking water
This commit is contained in:
parent
102c5e31fe
commit
6545ea12e9
@ -23,6 +23,7 @@
|
|||||||
#client_delete_unused_sectors_timeout = 1200
|
#client_delete_unused_sectors_timeout = 1200
|
||||||
|
|
||||||
#enable_fog = true
|
#enable_fog = true
|
||||||
|
#new_style_water = true
|
||||||
|
|
||||||
# Server side stuff
|
# Server side stuff
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ void set_default_settings()
|
|||||||
g_settings.setDefault("random_input", "false");
|
g_settings.setDefault("random_input", "false");
|
||||||
g_settings.setDefault("client_delete_unused_sectors_timeout", "1200");
|
g_settings.setDefault("client_delete_unused_sectors_timeout", "1200");
|
||||||
g_settings.setDefault("enable_fog", "true");
|
g_settings.setDefault("enable_fog", "true");
|
||||||
|
g_settings.setDefault("new_style_water", "true");
|
||||||
|
|
||||||
// Server stuff
|
// Server stuff
|
||||||
g_settings.setDefault("creative_mode", "false");
|
g_settings.setDefault("creative_mode", "false");
|
||||||
|
@ -2058,7 +2058,7 @@ void make_tree(VoxelManipulator &vmanip, v3s16 p0)
|
|||||||
MapNode treenode(CONTENT_TREE);
|
MapNode treenode(CONTENT_TREE);
|
||||||
MapNode leavesnode(CONTENT_LEAVES);
|
MapNode leavesnode(CONTENT_LEAVES);
|
||||||
|
|
||||||
s16 trunk_h = myrand_range(2, 6);
|
s16 trunk_h = myrand_range(3, 6);
|
||||||
v3s16 p1 = p0;
|
v3s16 p1 = p0;
|
||||||
for(s16 ii=0; ii<trunk_h; ii++)
|
for(s16 ii=0; ii<trunk_h; ii++)
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
|
|
||||||
#include "mapblock.h"
|
#include "mapblock.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
// For g_materials
|
// For g_settings and g_irrlicht
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "light.h"
|
#include "light.h"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -600,7 +600,6 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
|||||||
v3f posRelative_f(getPosRelative().X, getPosRelative().Y,
|
v3f posRelative_f(getPosRelative().X, getPosRelative().Y,
|
||||||
getPosRelative().Z); // floating point conversion
|
getPosRelative().Z); // floating point conversion
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Avoid interlocks by copying m_temp_mods
|
Avoid interlocks by copying m_temp_mods
|
||||||
*/
|
*/
|
||||||
@ -610,6 +609,11 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
|||||||
m_temp_mods.copy(temp_mods);
|
m_temp_mods.copy(temp_mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool new_style_water = g_settings.getBool("new_style_water");
|
||||||
|
float node_water_level = 1.0;
|
||||||
|
if(new_style_water)
|
||||||
|
node_water_level = 0.8;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We are including the faces of the trailing edges of the block.
|
We are including the faces of the trailing edges of the block.
|
||||||
This means that when something changes, the caller must
|
This means that when something changes, the caller must
|
||||||
@ -846,9 +850,10 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
|||||||
content = n2.d;
|
content = n2.d;
|
||||||
|
|
||||||
if(n2.d == CONTENT_WATERSOURCE)
|
if(n2.d == CONTENT_WATERSOURCE)
|
||||||
level = 0.5 * BS;
|
level = (-0.5+node_water_level) * BS;
|
||||||
else if(n2.d == CONTENT_WATER)
|
else if(n2.d == CONTENT_WATER)
|
||||||
level = (-0.5 + ((float)n2.param2 + 0.5) / 8.0) * BS;
|
level = (-0.5 + ((float)n2.param2 + 0.5) / 8.0
|
||||||
|
* node_water_level) * BS;
|
||||||
|
|
||||||
// Check node above neighbor.
|
// Check node above neighbor.
|
||||||
// NOTE: This doesn't get executed if neighbor
|
// NOTE: This doesn't get executed if neighbor
|
||||||
@ -889,7 +894,7 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
|||||||
// Special case for source nodes
|
// Special case for source nodes
|
||||||
if(content == CONTENT_WATERSOURCE)
|
if(content == CONTENT_WATERSOURCE)
|
||||||
{
|
{
|
||||||
cornerlevel = 0.5*BS;
|
cornerlevel = (-0.5+node_water_level)*BS;
|
||||||
valid_count = 1;
|
valid_count = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1045,6 +1050,47 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
|||||||
collector.append(material_w1, vertices, 4, indices, 6);
|
collector.append(material_w1, vertices, 4, indices, 6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
Add water sources to mesh
|
||||||
|
*/
|
||||||
|
else if(n.d == CONTENT_WATERSOURCE && new_style_water)
|
||||||
|
{
|
||||||
|
//bool top_is_water = false;
|
||||||
|
bool top_is_air = false;
|
||||||
|
try{
|
||||||
|
MapNode n = getNodeParent(v3s16(x,y+1,z));
|
||||||
|
/*if(n.d == CONTENT_WATER || n.d == CONTENT_WATERSOURCE)
|
||||||
|
top_is_water = true;*/
|
||||||
|
if(n.d == CONTENT_AIR)
|
||||||
|
top_is_air = true;
|
||||||
|
}catch(InvalidPositionException &e){}
|
||||||
|
|
||||||
|
/*if(top_is_water == true)
|
||||||
|
continue;*/
|
||||||
|
if(top_is_air == false)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
u8 l = decode_light(n.getLightBlend(daynight_ratio));
|
||||||
|
video::SColor c(WATER_ALPHA,l,l,l);
|
||||||
|
|
||||||
|
video::S3DVertex vertices[4] =
|
||||||
|
{
|
||||||
|
video::S3DVertex(-BS/2,0,-BS/2, 0,0,0, c, 0,1),
|
||||||
|
video::S3DVertex(BS/2,0,-BS/2, 0,0,0, c, 1,1),
|
||||||
|
video::S3DVertex(BS/2,0,BS/2, 0,0,0, c, 1,0),
|
||||||
|
video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,0),
|
||||||
|
};
|
||||||
|
|
||||||
|
for(s32 i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
vertices[i].Pos.Y += (-0.5+node_water_level)*BS;
|
||||||
|
vertices[i].Pos += intToFloat(p + getPosRelative());
|
||||||
|
}
|
||||||
|
|
||||||
|
u16 indices[] = {0,1,2,2,3,0};
|
||||||
|
// Add to mesh collector
|
||||||
|
collector.append(material_w1, vertices, 4, indices, 6);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -22,6 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "porting.h"
|
#include "porting.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "mineral.h"
|
#include "mineral.h"
|
||||||
|
// For g_settings
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
ContentFeatures::~ContentFeatures()
|
ContentFeatures::~ContentFeatures()
|
||||||
{
|
{
|
||||||
@ -139,10 +141,13 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
f->buildable_to = true;
|
f->buildable_to = true;
|
||||||
f->liquid_type = LIQUID_FLOWING;
|
f->liquid_type = LIQUID_FLOWING;
|
||||||
|
|
||||||
|
bool new_style_water = g_settings.getBool("new_style_water");
|
||||||
|
|
||||||
i = CONTENT_WATERSOURCE;
|
i = CONTENT_WATERSOURCE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->setTexture(0, irrlicht->getTextureId("water.png"), WATER_ALPHA);
|
//f->setTexture(0, irrlicht->getTextureId("water.png"), WATER_ALPHA);
|
||||||
f->setAllTextures(irrlicht->getTextureId("water.png"), WATER_ALPHA);
|
if(new_style_water == false)
|
||||||
|
f->setAllTextures(irrlicht->getTextureId("water.png"), WATER_ALPHA);
|
||||||
f->setInventoryTexture(irrlicht->getTextureId("water.png"));
|
f->setInventoryTexture(irrlicht->getTextureId("water.png"));
|
||||||
f->param_type = CPT_LIGHT;
|
f->param_type = CPT_LIGHT;
|
||||||
f->light_propagates = true;
|
f->light_propagates = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user