forked from Mirrorlandia_minetest/minetest
Allow to set maximum star opacity at daytime (#11663)
This commit is contained in:
parent
b095dc4f2b
commit
142928e944
@ -7200,6 +7200,9 @@ object you are working with still exists.
|
|||||||
* `star_parameters` is a table with the following optional fields:
|
* `star_parameters` is a table with the following optional fields:
|
||||||
* `visible`: Boolean for whether the stars are visible.
|
* `visible`: Boolean for whether the stars are visible.
|
||||||
(default: `true`)
|
(default: `true`)
|
||||||
|
* `day_opacity`: Float for maximum opacity of stars at day.
|
||||||
|
No effect if `visible` is false.
|
||||||
|
(default: 0.0; maximum: 1.0; minimum: 0.0)
|
||||||
* `count`: Integer number to set the number of stars in
|
* `count`: Integer number to set the number of stars in
|
||||||
the skybox. Only applies to `"skybox"` and `"regular"` sky types.
|
the skybox. Only applies to `"skybox"` and `"regular"` sky types.
|
||||||
(default: `1000`)
|
(default: `1000`)
|
||||||
|
@ -2876,6 +2876,7 @@ void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam
|
|||||||
sky->setStarCount(event->star_params->count);
|
sky->setStarCount(event->star_params->count);
|
||||||
sky->setStarColor(event->star_params->starcolor);
|
sky->setStarColor(event->star_params->starcolor);
|
||||||
sky->setStarScale(event->star_params->scale);
|
sky->setStarScale(event->star_params->scale);
|
||||||
|
sky->setStarDayOpacity(event->star_params->day_opacity);
|
||||||
delete event->star_params;
|
delete event->star_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -660,9 +660,12 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day)
|
|||||||
// to time 4000.
|
// to time 4000.
|
||||||
|
|
||||||
float tod = wicked_time_of_day < 0.5f ? wicked_time_of_day : (1.0f - wicked_time_of_day);
|
float tod = wicked_time_of_day < 0.5f ? wicked_time_of_day : (1.0f - wicked_time_of_day);
|
||||||
float starbrightness = (0.25f - fabsf(tod)) * 20.0f;
|
float day_opacity = clamp(m_star_params.day_opacity, 0.0f, 1.0f);
|
||||||
|
float starbrightness = (0.25f - fabs(tod)) * 20.0f;
|
||||||
|
float alpha = clamp(starbrightness, day_opacity, 1.0f);
|
||||||
|
|
||||||
m_star_color = m_star_params.starcolor;
|
m_star_color = m_star_params.starcolor;
|
||||||
m_star_color.a *= clamp(starbrightness, 0.0f, 1.0f);
|
m_star_color.a *= alpha;
|
||||||
if (m_star_color.a <= 0.0f) // Stars are only drawn when not fully transparent
|
if (m_star_color.a <= 0.0f) // Stars are only drawn when not fully transparent
|
||||||
return;
|
return;
|
||||||
m_materials[0].DiffuseColor = m_materials[0].EmissiveColor = m_star_color.toSColor();
|
m_materials[0].DiffuseColor = m_materials[0].EmissiveColor = m_star_color.toSColor();
|
||||||
|
@ -82,6 +82,7 @@ public:
|
|||||||
void setStarCount(u16 star_count);
|
void setStarCount(u16 star_count);
|
||||||
void setStarColor(video::SColor star_color) { m_star_params.starcolor = star_color; }
|
void setStarColor(video::SColor star_color) { m_star_params.starcolor = star_color; }
|
||||||
void setStarScale(f32 star_scale) { m_star_params.scale = star_scale; updateStars(); }
|
void setStarScale(f32 star_scale) { m_star_params.scale = star_scale; updateStars(); }
|
||||||
|
void setStarDayOpacity(f32 day_opacity) { m_star_params.day_opacity = day_opacity; }
|
||||||
|
|
||||||
bool getCloudsVisible() const { return m_clouds_visible && m_clouds_enabled; }
|
bool getCloudsVisible() const { return m_clouds_visible && m_clouds_enabled; }
|
||||||
const video::SColorf &getCloudColor() const { return m_cloudcolor_f; }
|
const video::SColorf &getCloudColor() const { return m_cloudcolor_f; }
|
||||||
|
@ -1340,10 +1340,13 @@ void Client::handleCommand_HudSetMoon(NetworkPacket *pkt)
|
|||||||
|
|
||||||
void Client::handleCommand_HudSetStars(NetworkPacket *pkt)
|
void Client::handleCommand_HudSetStars(NetworkPacket *pkt)
|
||||||
{
|
{
|
||||||
StarParams stars;
|
StarParams stars = SkyboxDefaults::getStarDefaults();
|
||||||
|
|
||||||
*pkt >> stars.visible >> stars.count
|
*pkt >> stars.visible >> stars.count
|
||||||
>> stars.starcolor >> stars.scale;
|
>> stars.starcolor >> stars.scale;
|
||||||
|
try {
|
||||||
|
*pkt >> stars.day_opacity;
|
||||||
|
} catch (PacketError &e) {};
|
||||||
|
|
||||||
ClientEvent *event = new ClientEvent();
|
ClientEvent *event = new ClientEvent();
|
||||||
event->type = CE_SET_STARS;
|
event->type = CE_SET_STARS;
|
||||||
|
@ -735,6 +735,7 @@ enum ToClientCommand
|
|||||||
u32 count
|
u32 count
|
||||||
u8[4] starcolor (ARGB)
|
u8[4] starcolor (ARGB)
|
||||||
f32 scale
|
f32 scale
|
||||||
|
f32 day_opacity
|
||||||
*/
|
*/
|
||||||
|
|
||||||
TOCLIENT_SRP_BYTES_S_B = 0x60,
|
TOCLIENT_SRP_BYTES_S_B = 0x60,
|
||||||
|
@ -2084,6 +2084,9 @@ int ObjectRef::l_set_stars(lua_State *L)
|
|||||||
"scale", star_params.scale);
|
"scale", star_params.scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
star_params.day_opacity = getfloatfield_default(L, 2,
|
||||||
|
"day_opacity", star_params.day_opacity);
|
||||||
|
|
||||||
getServer(L)->setStars(player, star_params);
|
getServer(L)->setStars(player, star_params);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2108,6 +2111,8 @@ int ObjectRef::l_get_stars(lua_State *L)
|
|||||||
lua_setfield(L, -2, "star_color");
|
lua_setfield(L, -2, "star_color");
|
||||||
lua_pushnumber(L, star_params.scale);
|
lua_pushnumber(L, star_params.scale);
|
||||||
lua_setfield(L, -2, "scale");
|
lua_setfield(L, -2, "scale");
|
||||||
|
lua_pushnumber(L, star_params.day_opacity);
|
||||||
|
lua_setfield(L, -2, "day_opacity");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1775,7 +1775,8 @@ void Server::SendSetStars(session_t peer_id, const StarParams ¶ms)
|
|||||||
NetworkPacket pkt(TOCLIENT_SET_STARS, 0, peer_id);
|
NetworkPacket pkt(TOCLIENT_SET_STARS, 0, peer_id);
|
||||||
|
|
||||||
pkt << params.visible << params.count
|
pkt << params.visible << params.count
|
||||||
<< params.starcolor << params.scale;
|
<< params.starcolor << params.scale
|
||||||
|
<< params.day_opacity;
|
||||||
|
|
||||||
Send(&pkt);
|
Send(&pkt);
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,7 @@ struct StarParams
|
|||||||
u32 count;
|
u32 count;
|
||||||
video::SColor starcolor;
|
video::SColor starcolor;
|
||||||
f32 scale;
|
f32 scale;
|
||||||
|
f32 day_opacity;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CloudParams
|
struct CloudParams
|
||||||
@ -141,6 +142,7 @@ public:
|
|||||||
stars.count = 1000;
|
stars.count = 1000;
|
||||||
stars.starcolor = video::SColor(105, 235, 235, 255);
|
stars.starcolor = video::SColor(105, 235, 235, 255);
|
||||||
stars.scale = 1;
|
stars.scale = 1;
|
||||||
|
stars.day_opacity = 0;
|
||||||
return stars;
|
return stars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user