From b7880529a8ef6e67bc599e302737c87d12497b96 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 12 Nov 2017 04:36:26 +0100 Subject: [PATCH] Make everything dark for player when in weather (WIP) --- mods/ENVIRONMENT/weather_pack/rain.lua | 3 +++ mods/ENVIRONMENT/weather_pack/skycolor.lua | 23 +++++++++++++++++++ mods/ENVIRONMENT/weather_pack/snow.lua | 1 + mods/ENVIRONMENT/weather_pack/thunder.lua | 5 ++++ .../ENVIRONMENT/weather_pack/weather_core.lua | 8 +++++++ 5 files changed, 40 insertions(+) diff --git a/mods/ENVIRONMENT/weather_pack/rain.lua b/mods/ENVIRONMENT/weather_pack/rain.lua index 418972c68d..099d8d38ad 100644 --- a/mods/ENVIRONMENT/weather_pack/rain.lua +++ b/mods/ENVIRONMENT/weather_pack/rain.lua @@ -39,6 +39,7 @@ rain.set_sky_box = function() skycolor.active = true for _, player in pairs(minetest.get_connected_players()) do player:set_clouds({color="#5D5D5FE8"}) + player:override_day_night_ratio(0.8) end end end @@ -145,6 +146,7 @@ rain.clear = function() for _, player in ipairs(minetest.get_connected_players()) do rain.remove_sound(player) rain.remove_player(player) + player:override_day_night_ratio(nil) end end @@ -178,6 +180,7 @@ end if weather.reg_weathers.rain == nil then weather.reg_weathers.rain = { chance = 15, + day_night_ratio = 0.8, clear = rain.clear } end diff --git a/mods/ENVIRONMENT/weather_pack/skycolor.lua b/mods/ENVIRONMENT/weather_pack/skycolor.lua index 0131c2383b..e5059e92a0 100644 --- a/mods/ENVIRONMENT/weather_pack/skycolor.lua +++ b/mods/ENVIRONMENT/weather_pack/skycolor.lua @@ -72,11 +72,34 @@ skycolor = { end players = skycolor.utils.get_players(players) + + -- Make everything darker for player for _, player in ipairs(players) do local pos = player:getpos() local _, dim = mcl_util.y_to_layer(pos.y) if dim == "overworld" then player:set_sky(color, "plain", nil, true) + + local dnn = weather.get_current_day_night_ratio() + if dnn then + local w = minetest.get_timeofday() + if w > 0.5 then + w = 2*(1 - w) + else + w = 1 - (1 - 2*w) + end + if w > dnn then + -- FIXME: This color will cause a sharp brightness change. + -- The correct ratio value needs to be calculated. + player:override_day_night_ratio(dnn) + else + player:override_day_night_ratio(nil) + end + else + player:override_day_night_ratio(nil) + end + else + player:override_day_night_ratio(nil) end end end, diff --git a/mods/ENVIRONMENT/weather_pack/snow.lua b/mods/ENVIRONMENT/weather_pack/snow.lua index 2ab2716d46..2bf55efb71 100644 --- a/mods/ENVIRONMENT/weather_pack/snow.lua +++ b/mods/ENVIRONMENT/weather_pack/snow.lua @@ -84,6 +84,7 @@ end) if weather.reg_weathers.snow == nil then weather.reg_weathers.snow = { chance = 10, + day_night_ratio = 0.8, clear = snow.clear } end diff --git a/mods/ENVIRONMENT/weather_pack/thunder.lua b/mods/ENVIRONMENT/weather_pack/thunder.lua index 91ce34df8d..70636e08f4 100644 --- a/mods/ENVIRONMENT/weather_pack/thunder.lua +++ b/mods/ENVIRONMENT/weather_pack/thunder.lua @@ -27,6 +27,7 @@ minetest.register_globalstep(function(dtime) skycolor.active = true for _, player in pairs(minetest.get_connected_players()) do player:set_clouds({color="#3D3D3FE8"}) + end thunder.init_done = true end @@ -43,6 +44,9 @@ thunder.clear = function() rain.clear() skycolor.remove_layer("weather-pack-thunder-sky") skycolor.remove_layer("lightning") + for _, player in pairs(minetest.get_connected_players()) do + player:override_day_night_ratio(nil) + end thunder.init_done = false end @@ -50,6 +54,7 @@ end if weather.reg_weathers.thunder == nil then weather.reg_weathers.thunder = { chance = 5, + day_night_ratio = 0.33333, clear = thunder.clear, min_duration = 120, max_duration = 600, diff --git a/mods/ENVIRONMENT/weather_pack/weather_core.lua b/mods/ENVIRONMENT/weather_pack/weather_core.lua index ed555b99a4..ed2874aeb5 100644 --- a/mods/ENVIRONMENT/weather_pack/weather_core.lua +++ b/mods/ENVIRONMENT/weather_pack/weather_core.lua @@ -38,6 +38,14 @@ weather.get_rand_end_time = function(min_duration, max_duration) end end +weather.get_current_day_night_ratio = function() + if weather.state == "none" then + return nil + else + return weather.reg_weathers[weather.state].day_night_ratio + end +end + -- Returns true if pos is outdoor. -- Outdoor is defined as any node in the Overworld under open sky. -- FIXME: Nodes below glass also count as “outdoor”, this should not be the case.