summaryrefslogtreecommitdiff
path: root/src/environment.h
diff options
context:
space:
mode:
authorest31 <MTest31@outlook.com>2015-11-04 03:07:32 +0100
committerest31 <MTest31@outlook.com>2015-11-04 03:44:09 +0100
commit8f03995604164c891cacb41c83ff4d6e73a8535f (patch)
tree0e03e91c9ef2214122e73aab5411f529d1d0f699 /src/environment.h
parentf9b09368f063cdace93a042d5bdd45987c084d94 (diff)
downloadminetest-8f03995604164c891cacb41c83ff4d6e73a8535f.tar.gz
minetest-8f03995604164c891cacb41c83ff4d6e73a8535f.tar.bz2
minetest-8f03995604164c891cacb41c83ff4d6e73a8535f.zip
Time: use locks again
The Atomic implementation was only partially correct, and was very complex. Use locks for sake of simplicity, following KISS principle. Only remaining atomic operation use is time of day speed, because that really is only read + written. Also fixes a bug with m_time_conversion_skew only being decremented, never incremented (Regresion from previous commit). atomic.h changes: * Add GenericAtomic<T> class for non-integral types like floats. * Remove some last remainders from atomic.h of the volatile use.
Diffstat (limited to 'src/environment.h')
-rw-r--r--src/environment.h24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/environment.h b/src/environment.h
index 7100bc5d3..1aaa5091f 100644
--- a/src/environment.h
+++ b/src/environment.h
@@ -93,10 +93,7 @@ public:
void setTimeOfDaySpeed(float speed);
float getTimeOfDaySpeed();
- void setDayNightRatioOverride(bool enable, u32 value)
- {
- m_day_night_ratio_override_storage = value | ((u64)enable << 63);
- }
+ void setDayNightRatioOverride(bool enable, u32 value);
// counter used internally when triggering ABMs
u32 m_added_objects;
@@ -105,26 +102,25 @@ protected:
// peer_ids in here should be unique, except that there may be many 0s
std::vector<Player*> m_players;
- // Time of day in milli-hours (0-23999); determines day and night
- Atomic<u32> m_time_of_day;
+ GenericAtomic<float> m_time_of_day_speed;
/*
- * Below: values managed by m_time_floats_lock
+ * Below: values managed by m_time_lock
*/
+ // Time of day in milli-hours (0-23999); determines day and night
+ u32 m_time_of_day;
// Time of day in 0...1
float m_time_of_day_f;
- float m_time_of_day_speed;
// Stores the skew created by the float -> u32 conversion
// to be applied at next conversion, so that there is no real skew.
float m_time_conversion_skew;
+ // Overriding the day-night ratio is useful for custom sky visuals
+ bool m_enable_day_night_ratio_override;
+ u32 m_day_night_ratio_override;
/*
- * Above: values managed by m_time_floats_lock
+ * Above: values managed by m_time_lock
*/
- // Overriding the day-night ratio is useful for custom sky visuals
- // lowest 32 bits store the overriden ratio, highest bit stores whether its enabled
- Atomic<u64> m_day_night_ratio_override_storage;
-
/* TODO: Add a callback function so these can be updated when a setting
* changes. At this point in time it doesn't matter (e.g. /set
* is documented to change server settings only)
@@ -137,7 +133,7 @@ protected:
bool m_cache_enable_shaders;
private:
- Mutex m_time_floats_lock;
+ Mutex m_time_lock;
DISABLE_CLASS_COPY(Environment);
};