Use new set_sky API

This commit is contained in:
Wuzzy 2020-04-07 00:39:19 +02:00
parent ace1c6dfec
commit b2c75acd68
2 changed files with 65 additions and 80 deletions

@ -96,7 +96,6 @@ end
mcl_weather.rain.remove_player = function(player)
local player_meta = mcl_weather.players[player:get_player_name()]
if player_meta ~= nil and player_meta.origin_sky ~= nil then
player:set_sky(player_meta.origin_sky[1], player_meta.origin_sky[2], player_meta.origin_sky[3], true)
player:set_clouds({color="#FFF0F0E5"})
mcl_weather.players[player:get_player_name()] = nil
end

@ -18,21 +18,6 @@ mcl_weather.skycolor = {
-- number of colors while constructing gradient of user given colors
max_val = 1000,
-- Enables smooth transition between existing sky color and target.
smooth_transitions = true,
-- Transition between current sky color and new user given.
transition_in_progress = false,
-- Transition colors are generated automaticly during initialization.
transition_colors = {},
-- Time where transition between current color and user given will be done
transition_time = 15,
-- Tracks how much time passed during transition
transition_timer = 0,
-- Table for tracking layer order
layer_names = {},
@ -40,9 +25,6 @@ mcl_weather.skycolor = {
add_layer = function(layer_name, layer_color, instant_update)
mcl_weather.skycolor.colors[layer_name] = layer_color
table.insert(mcl_weather.skycolor.layer_names, layer_name)
if (instant_update ~= true) then
mcl_weather.skycolor.init_transition()
end
mcl_weather.skycolor.force_update = true
end,
@ -71,18 +53,47 @@ mcl_weather.skycolor = {
update_sky_color = function(players)
-- Override day/night ratio as well
players = mcl_weather.skycolor.utils.get_players(players)
local color = mcl_weather.skycolor.current_sky_layer_color()
for _, player in ipairs(players) do
local pos = player:get_pos()
local dim = mcl_worlds.pos_to_dimension(pos)
if dim == "overworld" then
if (color == nil) then
-- No sky layers
player:set_sky(nil, "regular")
if (mcl_weather.state == "none") then
-- Clear weather
player:set_sky({
type = "regular",
sky_colors = {
day_sky = "#92B9FF",
day_horizon = "#B4D0FF",
dawn_sky = "#B4BAFA",
dawn_horizon = "BAC1F0",
night_sky = "#006AFF",
night_horizon = "#4090FF",
},
clouds = true,
})
player:set_sun({visible = true, sunrise_visible = true})
player:set_moon({visible = true})
player:set_stars({visible = true})
player:override_day_night_ratio(nil)
else
-- Weather skies
player:set_sky(color, "plain", nil, true)
local day_color = mcl_weather.skycolor.get_sky_layer_color(0.5)
local dawn_color = mcl_weather.skycolor.get_sky_layer_color(0.75)
local night_color = mcl_weather.skycolor.get_sky_layer_color(0)
player:set_sky({ type = "regular",
sky_color = {
day_sky = day_color,
day_horizon = day_color,
dawn_sky = dawn_color,
dawn_horizon = dawn_color,
night_sky = night_color,
night_horizon = night_color,
},
clouds = true,
})
player:set_sun({visible = false, sunrise_visible = false})
player:set_moon({visible = false})
player:set_stars({visible = false})
local lf = mcl_weather.get_current_light_factor()
if mcl_weather.skycolor.current_layer_name() == "lightning" then
@ -93,9 +104,7 @@ mcl_weather.skycolor = {
if light > 1 then
light = 1 - (light - 1)
end
light = (light * lf) + 0.15
player:override_day_night_ratio(light)
else
player:override_day_night_ratio(nil)
@ -103,73 +112,56 @@ mcl_weather.skycolor = {
end
elseif dim == "end" then
local t = "mcl_playerplus_end_sky.png"
player:set_sky("#000000", "skybox", {t,t,t,t,t,t}, false)
player:set_sky({ type = "skybox",
base_color = "#000000",
textures = {t,t,t,t,t,t},
clouds = false,
})
player:set_sun({visible = false , sunrise_visible = false})
player:set_moon({visible = false})
player:set_stars({visible = false})
player:override_day_night_ratio(0.5)
elseif dim == "nether" then
player:set_sky("#300808", "plain", nil, false)
player:set_sky({ type = "plain",
base_color = "#300808",
clouds = false,
})
player:set_sun({visible = false , sunrise_visible = false})
player:set_moon({visible = false})
player:set_stars({visible = false})
player:override_day_night_ratio(nil)
elseif dim == "void" then
player:set_sky("#000000", "plain", nil, false)
player:set_sky({ type = "regular",
sky_color = {
day_sky = "#000000",
day_horizon = "#000000",
dawn_sky = "#000000",
dawn_horizon = "#000000",
night_sky = "#000000",
night_horizon = "#000000",
indoors = "#000000",
},
clouds = false,
})
player:set_sun({visible = false, sunrise_visible = false})
player:set_moon({visible = false})
player:set_stars({visible = false})
end
end
end,
-- Returns current layer color in {r, g, b} format
current_sky_layer_color = function()
get_sky_layer_color = function(timeofday)
if #mcl_weather.skycolor.layer_names == 0 then
return nil
end
-- min timeofday value 0; max timeofday value 1. So sky color gradient range will be between 0 and 1 * mcl_weather.skycolor.max_val.
local timeofday = minetest.get_timeofday()
local rounded_time = math.floor(timeofday * mcl_weather.skycolor.max_val)
local color = mcl_weather.skycolor.utils.convert_to_rgb(mcl_weather.skycolor.min_val, mcl_weather.skycolor.max_val, rounded_time, mcl_weather.skycolor.retrieve_layer())
return color
end,
-- Initialy used only on
update_transition_sky_color = function()
local multiplier = 100
local rounded_time = math.floor(mcl_weather.skycolor.transition_timer * multiplier)
if rounded_time >= mcl_weather.skycolor.transition_time * multiplier then
mcl_weather.skycolor.stop_transition()
return
end
local color = mcl_weather.skycolor.utils.convert_to_rgb(0, mcl_weather.skycolor.transition_time * multiplier, rounded_time, mcl_weather.skycolor.transition_colors)
local players = mcl_weather.skycolor.utils.get_players(nil)
for _, player in ipairs(players) do
local pos = player:get_pos()
local dim = mcl_worlds.pos_to_dimension(pos)
if dim == "overworld" then
player:set_sky(color, "plain", nil, true)
end
end
end,
init_transition = function()
-- sadly default sky returns unpredictible colors so transition mode becomes usable only for user defined color layers
-- Here '2' means that one color layer existed before new added and transition is posible.
if #mcl_weather.skycolor.layer_names < 2 then
return
end
local transition_start_color = mcl_weather.skycolor.utils.get_current_bg_color()
if (transition_start_color == nil) then
return
end
local transition_end_color = mcl_weather.skycolor.current_sky_layer_color()
mcl_weather.skycolor.transition_colors = {transition_start_color, transition_end_color}
mcl_weather.skycolor.transition_in_progress = true
end,
stop_transition = function()
mcl_weather.skycolor.transition_in_progress = false
mcl_weather.skycolor.transition_colors = {}
mcl_weather.skycolor.transition_timer = 0
end,
utils = {
convert_to_rgb = function(minval, maxval, current_val, colors)
local max_index = #colors - 1
@ -208,12 +200,6 @@ minetest.register_globalstep(function(dtime)
return
end
if mcl_weather.skycolor.smooth_transitions and mcl_weather.skycolor.transition_in_progress then
mcl_weather.skycolor.transition_timer = mcl_weather.skycolor.transition_timer + dtime
mcl_weather.skycolor.update_transition_sky_color()
return
end
if mcl_weather.skycolor.force_update then
mcl_weather.skycolor.update_sky_color()
mcl_weather.skycolor.force_update = false