mirror of
https://gitlab.com/rautars/weather_pack.git
synced 2025-07-10 11:10:21 +02:00
71
skycolor.lua
Normal file
71
skycolor.lua
Normal file
@ -0,0 +1,71 @@
|
||||
skycolor = {
|
||||
-- Should be activated before do any effect.
|
||||
active = false,
|
||||
|
||||
-- Update interval.
|
||||
update_interval = 15,
|
||||
|
||||
-- Main sky colors: starts from midnight to midnight.
|
||||
colors = {},
|
||||
|
||||
-- Update sky color. If players not specified update sky for all players.
|
||||
update_sky_color = function(players)
|
||||
local timeofday = minetest.get_timeofday()
|
||||
local rounded_time = math.floor(timeofday * 1000)
|
||||
local color = skycolor.utils.convert_to_rgb(0, 1000, rounded_time, skycolor.colors)
|
||||
|
||||
if players == nil or #players == 0 then
|
||||
players = minetest.get_connected_players()
|
||||
end
|
||||
for _, player in ipairs(players) do
|
||||
player:set_sky(color, "plain", nil)
|
||||
end
|
||||
|
||||
end,
|
||||
|
||||
-- Reset sky color to game default. If players not specified update sky for all players.
|
||||
set_default_sky = function(players)
|
||||
if players == nil or #players == 0 then
|
||||
players = minetest.get_connected_players()
|
||||
end
|
||||
for _, player in ipairs(players) do
|
||||
player:set_sky(nil, "regular", nil)
|
||||
end
|
||||
end,
|
||||
|
||||
utils = {
|
||||
convert_to_rgb = function(minval, maxval, current_val, colors)
|
||||
local max_index = #colors - 1
|
||||
local val = (current_val-minval) / (maxval-minval) * max_index + 1.0
|
||||
local index1 = math.floor(val)
|
||||
local index2 = math.min(math.floor(val)+1, max_index + 1)
|
||||
local f = val - index1
|
||||
local c1 = colors[index1]
|
||||
local c2 = colors[index2]
|
||||
return {r=math.floor(c1.r + f*(c2.r - c1.r)), g=math.floor(c1.g + f*(c2.g-c1.g)), b=math.floor(c1.b + f*(c2.b - c1.b))}
|
||||
end
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
local timer = -1
|
||||
minetest.register_globalstep(function(dtime)
|
||||
if skycolor.active ~= true then
|
||||
return
|
||||
end
|
||||
|
||||
-- exceptional first time update
|
||||
if timer <= 0 then
|
||||
skycolor.update_sky_color()
|
||||
timer = 0
|
||||
return
|
||||
end
|
||||
|
||||
-- regular updates based on iterval
|
||||
timer = timer + dtime;
|
||||
if timer >= skycolor.update_interval then
|
||||
skycolor.update_sky_color()
|
||||
timer = 0
|
||||
end
|
||||
|
||||
end)
|
Reference in New Issue
Block a user