2020-05-12 16:00:24 +02:00
|
|
|
local GSCYCLE = 0.03 * climate_mod.settings.tick_speed -- only process event loop after this amount of time
|
2020-10-08 15:43:13 +02:00
|
|
|
local WORLD_CYCLE = 30.00 * climate_mod.settings.tick_speed -- only update global environment influences after this amount of time
|
2020-04-09 09:03:02 +02:00
|
|
|
|
2020-05-16 16:19:28 +02:00
|
|
|
local function is_connected(playername)
|
|
|
|
local connected = minetest.get_connected_players()
|
|
|
|
for _, player in ipairs(connected) do
|
|
|
|
local name = player:get_player_name()
|
|
|
|
if playername == name then return true end
|
|
|
|
end
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
2020-04-13 01:55:39 +02:00
|
|
|
local gs_timer = 0
|
|
|
|
local world_timer = 0
|
|
|
|
minetest.register_globalstep(function(dtime)
|
|
|
|
gs_timer = gs_timer + dtime
|
|
|
|
world_timer = world_timer + dtime
|
2020-04-09 09:03:02 +02:00
|
|
|
|
2020-04-13 01:55:39 +02:00
|
|
|
if gs_timer + dtime < GSCYCLE then return else gs_timer = 0 end
|
2020-04-09 09:03:02 +02:00
|
|
|
|
2020-04-13 01:55:39 +02:00
|
|
|
if world_timer >= WORLD_CYCLE then
|
|
|
|
world_timer = 0
|
2020-05-12 16:00:24 +02:00
|
|
|
climate_mod.world.update_status(minetest.get_gametime())
|
2020-04-25 15:49:53 +02:00
|
|
|
climate_mod.global_environment = climate_mod.trigger.get_global_environment()
|
2020-04-09 18:31:52 +02:00
|
|
|
end
|
2020-04-09 09:03:02 +02:00
|
|
|
|
2020-05-16 16:19:28 +02:00
|
|
|
|
2020-04-16 08:05:16 +02:00
|
|
|
local previous_effects = table.copy(climate_mod.current_effects)
|
2020-05-16 16:19:28 +02:00
|
|
|
-- skip weather changes for offline players
|
|
|
|
for effect, data in pairs(previous_effects) do
|
|
|
|
for playername, _ in pairs(data) do
|
|
|
|
if not is_connected(playername) then
|
|
|
|
previous_effects[effect][playername] = nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-04-16 08:05:16 +02:00
|
|
|
local current_effects = climate_mod.trigger.get_active_effects()
|
2020-04-09 09:03:02 +02:00
|
|
|
|
2020-04-13 01:55:39 +02:00
|
|
|
for name, effect in pairs(climate_mod.effects) do
|
2020-04-18 08:01:36 +02:00
|
|
|
local cycle = climate_mod.cycles[name].timespan * climate_mod.settings.tick_speed
|
|
|
|
if cycle < climate_mod.cycles[name].timer + dtime then
|
2020-04-13 01:55:39 +02:00
|
|
|
climate_mod.cycles[name].timer = 0
|
2020-04-16 08:05:16 +02:00
|
|
|
climate_mod.current_effects[name] = current_effects[name]
|
|
|
|
climate_mod.trigger.call_handlers(name, current_effects[name], previous_effects[name])
|
2020-04-14 05:44:46 +02:00
|
|
|
else
|
|
|
|
climate_mod.cycles[name].timer = climate_mod.cycles[name].timer + dtime
|
2020-04-09 18:31:52 +02:00
|
|
|
end
|
|
|
|
end
|
2020-04-09 09:03:02 +02:00
|
|
|
end)
|