Reuse seed when updating stars

The only currently relevant parameter is scale which can now be changed
without resetting stars position
This commit is contained in:
numzero 2020-11-22 16:41:36 +03:00 committed by lhofhansl
parent 3077afc0a2
commit 560627eef8
2 changed files with 6 additions and 3 deletions

@ -830,6 +830,7 @@ void Sky::setStarCount(u16 star_count, bool force_update)
// Allow force updating star count at game init. // Allow force updating star count at game init.
if (m_star_params.count != star_count || force_update) { if (m_star_params.count != star_count || force_update) {
m_star_params.count = star_count; m_star_params.count = star_count;
m_seed = (u64)myrand() << 32 | myrand();
updateStars(); updateStars();
} }
} }
@ -847,12 +848,13 @@ void Sky::updateStars() {
m_stars->Vertices.reallocate(4 * m_star_params.count); m_stars->Vertices.reallocate(4 * m_star_params.count);
m_stars->Indices.reallocate(6 * m_star_params.count); m_stars->Indices.reallocate(6 * m_star_params.count);
PcgRandom rgen(m_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(
myrand_range(-10000, 10000), rgen.range(-10000, 10000),
myrand_range(-10000, 10000), rgen.range(-10000, 10000),
myrand_range(-10000, 10000) rgen.range(-10000, 10000)
); );
core::CMatrix4<f32> a; core::CMatrix4<f32> a;
a.buildRotateFromTo(v3f(0, 1, 0), r); a.buildRotateFromTo(v3f(0, 1, 0), r);

@ -179,6 +179,7 @@ private:
bool m_default_tint = true; bool m_default_tint = true;
u64 m_seed = 0;
irr_ptr<scene::SMeshBuffer> m_stars; irr_ptr<scene::SMeshBuffer> m_stars;
video::ITexture *m_sun_texture; video::ITexture *m_sun_texture;