1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-02 16:38:41 +00:00

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.
This commit is contained in:
est31 2015-11-04 03:07:32 +01:00
parent f9b09368f0
commit 8f03995604
3 changed files with 78 additions and 49 deletions

View file

@ -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,25 +102,24 @@ 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;
/*
* Above: values managed by m_time_floats_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;
bool m_enable_day_night_ratio_override;
u32 m_day_night_ratio_override;
/*
* Above: values managed by m_time_lock
*/
/* 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
@ -137,7 +133,7 @@ protected:
bool m_cache_enable_shaders;
private:
Mutex m_time_floats_lock;
Mutex m_time_lock;
DISABLE_CLASS_COPY(Environment);
};