Skip to content

Commit

Permalink
Allow to set maximum star opacity at daytime
Browse files Browse the repository at this point in the history
  • Loading branch information
Wuzzy2 committed Sep 29, 2021
1 parent f504070 commit f350a86
Show file tree
Hide file tree
Showing 9 changed files with 24 additions and 4 deletions.
3 changes: 3 additions & 0 deletions doc/lua_api.txt
Expand Up @@ -6802,6 +6802,9 @@ object you are working with still exists.
* `star_parameters` is a table with the following optional fields:
* `visible`: Boolean for whether the stars are visible.
(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
the skybox. Only applies to `"skybox"` and `"regular"` sky types.
(default: `1000`)
Expand Down
1 change: 1 addition & 0 deletions src/client/game.cpp
Expand Up @@ -2891,6 +2891,7 @@ void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam
sky->setStarCount(event->star_params->count, false);
sky->setStarColor(event->star_params->starcolor);
sky->setStarScale(event->star_params->scale);
sky->setStarDayOpacity(event->star_params->day_opacity);
delete event->star_params;
}

Expand Down
7 changes: 5 additions & 2 deletions src/client/sky.cpp
Expand Up @@ -696,9 +696,12 @@ void Sky::draw_stars(video::IVideoDriver * driver, float wicked_time_of_day)
// to time 4000.

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.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
return;
m_materials[0].DiffuseColor = m_materials[0].EmissiveColor = m_star_color.toSColor();
Expand Down
1 change: 1 addition & 0 deletions src/client/sky.h
Expand Up @@ -80,6 +80,7 @@ class Sky : public scene::ISceneNode
void setStarCount(u16 star_count, bool force_update);
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 setStarDayOpacity(f32 day_opacity) { m_star_params.day_opacity = day_opacity; }

bool getCloudsVisible() const { return m_clouds_visible && m_clouds_enabled; }
const video::SColorf &getCloudColor() const { return m_cloudcolor_f; }
Expand Down
5 changes: 4 additions & 1 deletion src/network/clientpackethandler.cpp
Expand Up @@ -1337,10 +1337,13 @@ void Client::handleCommand_HudSetMoon(NetworkPacket *pkt)

void Client::handleCommand_HudSetStars(NetworkPacket *pkt)
{
StarParams stars;
StarParams stars = SkyboxDefaults().getStarDefaults();

*pkt >> stars.visible >> stars.count
>> stars.starcolor >> stars.scale;
try {
*pkt >> stars.day_opacity;
} catch (PacketError &e) {};

ClientEvent *event = new ClientEvent();
event->type = CE_SET_STARS;
Expand Down
1 change: 1 addition & 0 deletions src/network/networkprotocol.h
Expand Up @@ -736,6 +736,7 @@ enum ToClientCommand
u32 count
u8[4] starcolor (ARGB)
f32 scale
f32 day_opacity
*/

TOCLIENT_SRP_BYTES_S_B = 0x60,
Expand Down
5 changes: 5 additions & 0 deletions src/script/lua_api/l_object.cpp
Expand Up @@ -2059,6 +2059,9 @@ int ObjectRef::l_set_stars(lua_State *L)
star_params.scale = getfloatfield_default(L, 2,
"scale", star_params.scale);

star_params.day_opacity = getfloatfield_default(L, 2,
"day_opacity", star_params.day_opacity);

getServer(L)->setStars(player, star_params);
lua_pushboolean(L, true);
return 1;
Expand All @@ -2084,6 +2087,8 @@ int ObjectRef::l_get_stars(lua_State *L)
lua_setfield(L, -2, "star_color");
lua_pushnumber(L, star_params.scale);
lua_setfield(L, -2, "scale");
lua_pushnumber(L, star_params.day_opacity);
lua_setfield(L, -2, "day_opacity");
return 1;
}

Expand Down
3 changes: 2 additions & 1 deletion src/server.cpp
Expand Up @@ -1769,7 +1769,8 @@ void Server::SendSetStars(session_t peer_id, const StarParams &params)
NetworkPacket pkt(TOCLIENT_SET_STARS, 0, peer_id);

pkt << params.visible << params.count
<< params.starcolor << params.scale;
<< params.starcolor << params.scale
<< params.day_opacity;

Send(&pkt);
}
Expand Down
2 changes: 2 additions & 0 deletions src/skyparams.h
Expand Up @@ -66,6 +66,7 @@ struct StarParams
u32 count;
video::SColor starcolor;
f32 scale;
f32 day_opacity;
};

// Utility class for setting default sky, sun, moon, stars values:
Expand Down Expand Up @@ -116,6 +117,7 @@ class SkyboxDefaults
stars.count = 1000;
stars.starcolor = video::SColor(105, 235, 235, 255);
stars.scale = 1;
stars.day_opacity = 0;
return stars;
}
};

0 comments on commit f350a86

Please sign in to comment.