mirror of
https://github.com/luanti-org/luanti.git
synced 2025-11-23 09:45:19 +01:00
Option to make sky stars deterministic (#16529)
The star constellations are now based on a seed passed in StarParams.
This commit is contained in:
@@ -9039,6 +9039,7 @@ child will follow movement and rotation of that bone.
|
|||||||
alpha channel is used to set overall star brightness.
|
alpha channel is used to set overall star brightness.
|
||||||
(default: `#ebebff69`)
|
(default: `#ebebff69`)
|
||||||
* `scale`: Float controlling the overall size of the stars (default: `1`)
|
* `scale`: Float controlling the overall size of the stars (default: `1`)
|
||||||
|
* `star_seed`: Integer number which decides how to generate the sky stars. If set to zero, client picks a random number. (default: `0`)
|
||||||
* `get_stars()`: returns a table with the current stars parameters as in
|
* `get_stars()`: returns a table with the current stars parameters as in
|
||||||
`set_stars`.
|
`set_stars`.
|
||||||
* `set_clouds(cloud_parameters)`: set cloud parameters
|
* `set_clouds(cloud_parameters)`: set cloud parameters
|
||||||
|
|||||||
@@ -2488,7 +2488,7 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
|
|||||||
);
|
);
|
||||||
} else if (event->set_sky->type == "skybox" &&
|
} else if (event->set_sky->type == "skybox" &&
|
||||||
event->set_sky->textures.size() == 6) {
|
event->set_sky->textures.size() == 6) {
|
||||||
// Disable the dyanmic mesh skybox:
|
// Disable the dynamic mesh skybox:
|
||||||
sky->setVisible(false);
|
sky->setVisible(false);
|
||||||
// Set fog colors:
|
// Set fog colors:
|
||||||
sky->setFallbackBgColor(event->set_sky->bgcolor);
|
sky->setFallbackBgColor(event->set_sky->bgcolor);
|
||||||
@@ -2564,6 +2564,7 @@ void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam
|
|||||||
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);
|
sky->setStarDayOpacity(event->star_params->day_opacity);
|
||||||
|
sky->setStarSeed(event->star_params->star_seed);
|
||||||
delete event->star_params;
|
delete event->star_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -807,6 +807,15 @@ void Sky::setStarCount(u16 star_count)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sky::setStarSeed(u64 star_seed)
|
||||||
|
{
|
||||||
|
// Allow force updating star seed at game init.
|
||||||
|
if (m_star_params.star_seed != star_seed || m_first_update) {
|
||||||
|
m_star_params.star_seed = star_seed;
|
||||||
|
updateStars();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Sky::updateStars()
|
void Sky::updateStars()
|
||||||
{
|
{
|
||||||
m_stars.reset(new scene::SMeshBuffer());
|
m_stars.reset(new scene::SMeshBuffer());
|
||||||
@@ -823,7 +832,8 @@ void Sky::updateStars()
|
|||||||
vertices.reserve(4 * m_star_params.count);
|
vertices.reserve(4 * m_star_params.count);
|
||||||
indices.reserve(6 * m_star_params.count);
|
indices.reserve(6 * m_star_params.count);
|
||||||
|
|
||||||
PcgRandom rgen(m_seed);
|
u64 star_seed = m_star_params.star_seed == 0 ? m_seed : m_star_params.star_seed;
|
||||||
|
PcgRandom rgen(star_seed);
|
||||||
float d = (0.006 / 2) * m_star_params.scale;
|
float d = (0.006 / 2) * m_star_params.scale;
|
||||||
for (u16 i = 0; i < m_star_params.count; i++) {
|
for (u16 i = 0; i < m_star_params.count; i++) {
|
||||||
v3f r = v3f(
|
v3f r = v3f(
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public:
|
|||||||
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; }
|
void setStarDayOpacity(f32 day_opacity) { m_star_params.day_opacity = day_opacity; }
|
||||||
|
void setStarSeed(u64 star_seed);
|
||||||
|
|
||||||
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; }
|
||||||
|
|||||||
@@ -1445,6 +1445,7 @@ void Client::handleCommand_HudSetStars(NetworkPacket *pkt)
|
|||||||
>> stars.starcolor >> stars.scale;
|
>> stars.starcolor >> stars.scale;
|
||||||
try {
|
try {
|
||||||
*pkt >> stars.day_opacity;
|
*pkt >> stars.day_opacity;
|
||||||
|
*pkt >> stars.star_seed;
|
||||||
} catch (PacketError &e) {};
|
} catch (PacketError &e) {};
|
||||||
|
|
||||||
ClientEvent *event = new ClientEvent();
|
ClientEvent *event = new ClientEvent();
|
||||||
|
|||||||
@@ -2452,6 +2452,7 @@ int ObjectRef::l_set_stars(lua_State *L)
|
|||||||
"scale", star_params.scale);
|
"scale", star_params.scale);
|
||||||
star_params.day_opacity = getfloatfield_default(L, 2,
|
star_params.day_opacity = getfloatfield_default(L, 2,
|
||||||
"day_opacity", star_params.day_opacity);
|
"day_opacity", star_params.day_opacity);
|
||||||
|
star_params.star_seed = getintfield_default(L, 2, "star_seed", star_params.star_seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
getServer(L)->setStars(player, star_params);
|
getServer(L)->setStars(player, star_params);
|
||||||
@@ -2480,6 +2481,8 @@ int ObjectRef::l_get_stars(lua_State *L)
|
|||||||
lua_setfield(L, -2, "scale");
|
lua_setfield(L, -2, "scale");
|
||||||
lua_pushnumber(L, star_params.day_opacity);
|
lua_pushnumber(L, star_params.day_opacity);
|
||||||
lua_setfield(L, -2, "day_opacity");
|
lua_setfield(L, -2, "day_opacity");
|
||||||
|
lua_pushnumber(L, star_params.star_seed);
|
||||||
|
lua_setfield(L, -2, "star_seed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1959,7 +1959,7 @@ void Server::SendSetStars(session_t peer_id, const StarParams ¶ms)
|
|||||||
|
|
||||||
pkt << params.visible << params.count
|
pkt << params.visible << params.count
|
||||||
<< params.starcolor << params.scale
|
<< params.starcolor << params.scale
|
||||||
<< params.day_opacity;
|
<< params.day_opacity << params.star_seed;
|
||||||
|
|
||||||
Send(&pkt);
|
Send(&pkt);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ struct StarParams
|
|||||||
video::SColor starcolor;
|
video::SColor starcolor;
|
||||||
f32 scale;
|
f32 scale;
|
||||||
f32 day_opacity;
|
f32 day_opacity;
|
||||||
|
u64 star_seed;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CloudParams
|
struct CloudParams
|
||||||
@@ -142,6 +143,7 @@ public:
|
|||||||
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;
|
stars.day_opacity = 0;
|
||||||
|
stars.star_seed = 0;
|
||||||
return stars;
|
return stars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user