Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to set maximum star opacity at daytime #11663

Merged
merged 1 commit into from Jul 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions doc/lua_api.txt
Expand Up @@ -6907,6 +6907,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 @@ -2877,6 +2877,7 @@ void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam
sky->setStarCount(event->star_params->count);
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 @@ -660,9 +660,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);
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 @@ -1331,10 +1331,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 @@ -735,6 +735,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 @@ -2069,6 +2069,9 @@ int ObjectRef::l_set_stars(lua_State *L)
"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 @@ -2094,6 +2097,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 @@ -1771,7 +1771,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;
};

struct CloudParams
Expand Down Expand Up @@ -141,6 +142,7 @@ class SkyboxDefaults
stars.count = 1000;
stars.starcolor = video::SColor(105, 235, 235, 255);
stars.scale = 1;
stars.day_opacity = 0;
return stars;
}

Expand Down