diff options
author | numzero <numzer0@yandex.ru> | 2020-11-22 16:41:36 +0300 |
---|---|---|
committer | lhofhansl <larsh@apache.org> | 2020-11-26 12:49:10 -0800 |
commit | 560627eef8c02f8201e639c75fcd5301d3a33077 (patch) | |
tree | 6e65bb2d3891ab2878017c00d0225c4a37750de1 | |
parent | 3077afc0a2039cd4c8d64d9df62ed9b2ba6463dc (diff) | |
download | minetest-560627eef8c02f8201e639c75fcd5301d3a33077.tar.gz minetest-560627eef8c02f8201e639c75fcd5301d3a33077.tar.bz2 minetest-560627eef8c02f8201e639c75fcd5301d3a33077.zip |
Reuse seed when updating stars
The only currently relevant parameter is scale which can now be changed
without resetting stars position
-rw-r--r-- | src/client/sky.cpp | 8 | ||||
-rw-r--r-- | src/client/sky.h | 1 |
2 files changed, 6 insertions, 3 deletions
diff --git a/src/client/sky.cpp b/src/client/sky.cpp index 29a0545ab..cc9fb7d36 100644 --- a/src/client/sky.cpp +++ b/src/client/sky.cpp @@ -830,6 +830,7 @@ void Sky::setStarCount(u16 star_count, bool force_update) // Allow force updating star count at game init. if (m_star_params.count != star_count || force_update) { m_star_params.count = star_count; + m_seed = (u64)myrand() << 32 | myrand(); updateStars(); } } @@ -847,12 +848,13 @@ void Sky::updateStars() { m_stars->Vertices.reallocate(4 * 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; for (u16 i = 0; i < m_star_params.count; i++) { v3f r = v3f( - myrand_range(-10000, 10000), - myrand_range(-10000, 10000), - myrand_range(-10000, 10000) + rgen.range(-10000, 10000), + rgen.range(-10000, 10000), + rgen.range(-10000, 10000) ); core::CMatrix4<f32> a; a.buildRotateFromTo(v3f(0, 1, 0), r); diff --git a/src/client/sky.h b/src/client/sky.h index 176545015..9f859f961 100644 --- a/src/client/sky.h +++ b/src/client/sky.h @@ -179,6 +179,7 @@ private: bool m_default_tint = true; + u64 m_seed = 0; irr_ptr<scene::SMeshBuffer> m_stars; video::ITexture *m_sun_texture; |