forked from Mirrorlandia_minetest/minetest
Made dark places tint slightly in blue
This commit is contained in:
parent
8993d9dd83
commit
d67cef0eb7
@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "content_mapnode.h"
|
#include "content_mapnode.h"
|
||||||
#include "main.h" // For g_settings and g_texturesource
|
#include "main.h" // For g_settings and g_texturesource
|
||||||
#include "mineral.h"
|
#include "mineral.h"
|
||||||
|
#include "mapblock_mesh.h" // For MapBlock_LightColor()
|
||||||
|
|
||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
// Create a cuboid.
|
// Create a cuboid.
|
||||||
@ -286,7 +287,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
else if(n.d == CONTENT_SIGN_WALL)
|
else if(n.d == CONTENT_SIGN_WALL)
|
||||||
{
|
{
|
||||||
u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
float d = (float)BS/16;
|
float d = (float)BS/16;
|
||||||
// Wall at X+ of node
|
// Wall at X+ of node
|
||||||
@ -352,7 +353,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
// Otherwise use the light of this node (the water)
|
// Otherwise use the light of this node (the water)
|
||||||
else
|
else
|
||||||
l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
||||||
video::SColor c(WATER_ALPHA,l,l,l);
|
video::SColor c = MapBlock_LightColor(WATER_ALPHA, l);
|
||||||
|
|
||||||
// Neighbor water levels (key = relative position)
|
// Neighbor water levels (key = relative position)
|
||||||
// Includes current node
|
// Includes current node
|
||||||
@ -618,7 +619,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
||||||
video::SColor c(WATER_ALPHA,l,l,l);
|
video::SColor c = MapBlock_LightColor(WATER_ALPHA, l);
|
||||||
|
|
||||||
video::S3DVertex vertices[4] =
|
video::S3DVertex vertices[4] =
|
||||||
{
|
{
|
||||||
@ -653,7 +654,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
{
|
{
|
||||||
/*u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));*/
|
/*u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));*/
|
||||||
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
for(u32 j=0; j<6; j++)
|
for(u32 j=0; j<6; j++)
|
||||||
{
|
{
|
||||||
@ -720,7 +721,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
else if(n.d == CONTENT_GLASS)
|
else if(n.d == CONTENT_GLASS)
|
||||||
{
|
{
|
||||||
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
for(u32 j=0; j<6; j++)
|
for(u32 j=0; j<6; j++)
|
||||||
{
|
{
|
||||||
@ -783,7 +784,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
else if(n.d == CONTENT_FENCE)
|
else if(n.d == CONTENT_FENCE)
|
||||||
{
|
{
|
||||||
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
const f32 post_rad=(f32)BS/10;
|
const f32 post_rad=(f32)BS/10;
|
||||||
const f32 bar_rad=(f32)BS/20;
|
const f32 bar_rad=(f32)BS/20;
|
||||||
@ -872,7 +873,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
else
|
else
|
||||||
l = 255;*/
|
l = 255;*/
|
||||||
u8 l = 255;
|
u8 l = 255;
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
// Get the right texture
|
// Get the right texture
|
||||||
TileSpec ts = n.getTile(dir);
|
TileSpec ts = n.getTile(dir);
|
||||||
@ -930,7 +931,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
else if(n.d == CONTENT_PAPYRUS)
|
else if(n.d == CONTENT_PAPYRUS)
|
||||||
{
|
{
|
||||||
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
for(u32 j=0; j<4; j++)
|
for(u32 j=0; j<4; j++)
|
||||||
{
|
{
|
||||||
@ -980,7 +981,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
else if(n.d == CONTENT_JUNGLEGRASS)
|
else if(n.d == CONTENT_JUNGLEGRASS)
|
||||||
{
|
{
|
||||||
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
u8 l = decode_light(undiminish_light(n.getLightBlend(data->m_daynight_ratio)));
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
for(u32 j=0; j<4; j++)
|
for(u32 j=0; j<4; j++)
|
||||||
{
|
{
|
||||||
@ -1031,7 +1032,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
|
|||||||
else if(n.d == CONTENT_RAIL)
|
else if(n.d == CONTENT_RAIL)
|
||||||
{
|
{
|
||||||
u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
u8 l = decode_light(n.getLightBlend(data->m_daynight_ratio));
|
||||||
video::SColor c(255,l,l,l);
|
video::SColor c = MapBlock_LightColor(255, l);
|
||||||
|
|
||||||
bool is_rail_x [] = { false, false }; /* x-1, x+1 */
|
bool is_rail_x [] = { false, false }; /* x-1, x+1 */
|
||||||
bool is_rail_z [] = { false, false }; /* z-1, z+1 */
|
bool is_rail_z [] = { false, false }; /* z-1, z+1 */
|
||||||
|
@ -140,9 +140,24 @@ void getNodeVertexDirs(v3s16 dir, v3s16 *vertex_dirs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline video::SColor lightColor(u8 alpha, u8 light)
|
video::SColor MapBlock_LightColor(u8 alpha, u8 light)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
return video::SColor(alpha,light,light,light);
|
return video::SColor(alpha,light,light,light);
|
||||||
|
#endif
|
||||||
|
//return video::SColor(alpha,light,light,MYMAX(0, (s16)light-25)+25);
|
||||||
|
/*return video::SColor(alpha,light,light,MYMAX(0,
|
||||||
|
pow((float)light/255.0, 0.8)*255.0));*/
|
||||||
|
#if 1
|
||||||
|
// Emphase blue a bit in darker places
|
||||||
|
float lim = 80;
|
||||||
|
float power = 0.7;
|
||||||
|
if(light > lim)
|
||||||
|
return video::SColor(alpha,light,light,light);
|
||||||
|
else
|
||||||
|
return video::SColor(alpha,light,light,MYMAX(0,
|
||||||
|
pow((float)light/lim, power)*lim));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FastFace
|
struct FastFace
|
||||||
@ -198,7 +213,7 @@ void makeFastFace(TileSpec tile, u8 li0, u8 li1, u8 li2, u8 li3, v3f p,
|
|||||||
float w = tile.texture.size.X;
|
float w = tile.texture.size.X;
|
||||||
float h = tile.texture.size.Y;
|
float h = tile.texture.size.Y;
|
||||||
|
|
||||||
/*video::SColor c = lightColor(alpha, li);
|
/*video::SColor c = MapBlock_LightColor(alpha, li);
|
||||||
|
|
||||||
face.vertices[0] = video::S3DVertex(vertex_pos[0], v3f(0,1,0), c,
|
face.vertices[0] = video::S3DVertex(vertex_pos[0], v3f(0,1,0), c,
|
||||||
core::vector2d<f32>(x0+w*abs_scale, y0+h));
|
core::vector2d<f32>(x0+w*abs_scale, y0+h));
|
||||||
@ -210,16 +225,16 @@ void makeFastFace(TileSpec tile, u8 li0, u8 li1, u8 li2, u8 li3, v3f p,
|
|||||||
core::vector2d<f32>(x0+w*abs_scale, y0));*/
|
core::vector2d<f32>(x0+w*abs_scale, y0));*/
|
||||||
|
|
||||||
face.vertices[0] = video::S3DVertex(vertex_pos[0], v3f(0,1,0),
|
face.vertices[0] = video::S3DVertex(vertex_pos[0], v3f(0,1,0),
|
||||||
lightColor(alpha, li0),
|
MapBlock_LightColor(alpha, li0),
|
||||||
core::vector2d<f32>(x0+w*abs_scale, y0+h));
|
core::vector2d<f32>(x0+w*abs_scale, y0+h));
|
||||||
face.vertices[1] = video::S3DVertex(vertex_pos[1], v3f(0,1,0),
|
face.vertices[1] = video::S3DVertex(vertex_pos[1], v3f(0,1,0),
|
||||||
lightColor(alpha, li1),
|
MapBlock_LightColor(alpha, li1),
|
||||||
core::vector2d<f32>(x0, y0+h));
|
core::vector2d<f32>(x0, y0+h));
|
||||||
face.vertices[2] = video::S3DVertex(vertex_pos[2], v3f(0,1,0),
|
face.vertices[2] = video::S3DVertex(vertex_pos[2], v3f(0,1,0),
|
||||||
lightColor(alpha, li2),
|
MapBlock_LightColor(alpha, li2),
|
||||||
core::vector2d<f32>(x0, y0));
|
core::vector2d<f32>(x0, y0));
|
||||||
face.vertices[3] = video::S3DVertex(vertex_pos[3], v3f(0,1,0),
|
face.vertices[3] = video::S3DVertex(vertex_pos[3], v3f(0,1,0),
|
||||||
lightColor(alpha, li3),
|
MapBlock_LightColor(alpha, li3),
|
||||||
core::vector2d<f32>(x0+w*abs_scale, y0));
|
core::vector2d<f32>(x0+w*abs_scale, y0));
|
||||||
|
|
||||||
face.tile = tile;
|
face.tile = tile;
|
||||||
|
@ -121,6 +121,9 @@ private:
|
|||||||
core::array<PreMeshBuffer> m_prebuffers;
|
core::array<PreMeshBuffer> m_prebuffers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Helper functions
|
||||||
|
video::SColor MapBlock_LightColor(u8 alpha, u8 light);
|
||||||
|
|
||||||
class MapBlock;
|
class MapBlock;
|
||||||
|
|
||||||
struct MeshMakeData
|
struct MeshMakeData
|
||||||
@ -137,6 +140,7 @@ struct MeshMakeData
|
|||||||
void fill(u32 daynight_ratio, MapBlock *block);
|
void fill(u32 daynight_ratio, MapBlock *block);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// This is the highest-level function in here
|
||||||
scene::SMesh* makeMapBlockMesh(MeshMakeData *data);
|
scene::SMesh* makeMapBlockMesh(MeshMakeData *data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user