Fixed the ambient light for particles, some code improvements

This commit is contained in:
Andrey2470T 2024-05-24 23:33:46 +03:00
parent 56392c2d08
commit 385bb3c801
5 changed files with 16 additions and 14 deletions

@ -264,10 +264,9 @@ void ClientEnvironment::step(float dtime)
u16 light = getInteriorLight(node_at_lplayer, 0, m_client->ndef());
lplayer->light_color = encode_light(light, 0); // this transfers light.alpha
video::SColor ambient_light(255, 0, 0, 0);
video::SColor ambient_light = g_settings->getBool("enable_shaders") ?
lplayer->getLighting().ambient_light : video::SColor(255, 0, 0, 0);
if (g_settings->getBool("enable_shaders"))
ambient_light = lplayer->getLighting().ambient_light;
final_color_blend(&lplayer->light_color, light, day_night_ratio, ambient_light);
}

@ -475,7 +475,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
get_sunlight_color(&sunlight, daynight_ratio);
m_day_light.set(sunlight, services);
auto lighting = m_client->getEnv().getLocalPlayer()->getLighting();
Lighting &lighting = m_client->getEnv().getLocalPlayer()->getLighting();
video::SColorf ambient_light_f(lighting.ambient_light);
m_ambient_light.set(ambient_light_f, services);

@ -47,7 +47,8 @@ video::SColor encode_light(u16 light, u8 emissive_light)
return video::SColor(r, b, b, b);
}
void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio){
void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio)
{
f32 rg = daynight_ratio / 1000.0f - 0.04f;
f32 b = (0.98f * daynight_ratio) / 1000.0f + 0.078f;
sunlight->r = rg;
@ -56,7 +57,7 @@ void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio){
}
void final_color_blend(video::SColor *result,
u16 light, u32 daynight_ratio, video::SColor ambientLight)
u16 light, u32 daynight_ratio, const video::SColorf &ambientLight)
{
video::SColorf dayLight;
get_sunlight_color(&dayLight, daynight_ratio);
@ -66,7 +67,7 @@ void final_color_blend(video::SColor *result,
void final_color_blend(video::SColor *result,
const video::SColor &data, const video::SColorf &dayLight,
video::SColor ambientLight)
const video::SColorf &ambientLight)
{
static const video::SColorf artificialColor(1.04f, 1.04f, 1.04f);
@ -88,9 +89,9 @@ void final_color_blend(video::SColor *result,
0, 255) / 8] / 255.0f;
// Add ambient light
r += ambientLight.getRed() / 255.f;
g += ambientLight.getGreen() / 255.f;
b += ambientLight.getBlue() / 255.f;
r += ambientLight.r;
g += ambientLight.g;
b += ambientLight.b;
result->setRed(core::clamp((s32)(r * 255.f), 0, 255));
result->setGreen(core::clamp((s32)(g * 255.f), 0, 255));

@ -47,7 +47,7 @@ void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio);
* night light
*/
void final_color_blend(video::SColor *result,
u16 light, u32 daynight_ratio, video::SColor ambientLight=video::SColor(255,0,0,0));
u16 light, u32 daynight_ratio, const video::SColorf &ambientLight=video::SColorf(0.0f, 0.0f, 0.0f, 1.0f));
/*!
* Gives the final SColor shown on screen.
@ -58,4 +58,4 @@ void final_color_blend(video::SColor *result,
*/
void final_color_blend(video::SColor *result,
const video::SColor &data, const video::SColorf &dayLight,
video::SColor ambientLight=video::SColor(255,0,0,0));
const video::SColorf &ambientLight=video::SColorf(0.0f, 0.0f, 0.0f, 1.0f));

@ -189,10 +189,12 @@ video::SColor Particle::updateLight(ClientEnvironment *env)
light = decode_light(light + m_p.glow);
video::SColor light_color{0xFFFFFFFF};
video::SColor light_color(0xFFFFFFFF);
video::SColor ambient_light = g_settings->getBool("enable_shaders") ?
env->getLocalPlayer()->getLighting().ambient_light : video::SColor(255, 0, 0, 0);
final_color_blend(&light_color, static_cast<u16>(light) * 255, env->getDayNightRatio(),
env->getLocalPlayer()->getLighting().ambient_light);
ambient_light);
return video::SColor(255,
light_color.getRed() * m_base_color.getRed() / 255,
light_color.getGreen() * m_base_color.getGreen() / 255,