aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornumzero <numzer0@yandex.ru>2020-11-22 16:41:36 +0300
committerlhofhansl <larsh@apache.org>2020-11-26 12:49:10 -0800
commit560627eef8c02f8201e639c75fcd5301d3a33077 (patch)
tree6e65bb2d3891ab2878017c00d0225c4a37750de1
parent3077afc0a2039cd4c8d64d9df62ed9b2ba6463dc (diff)
downloadminetest-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.cpp8
-rw-r--r--src/client/sky.h1
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;