2020-04-14 05:45:59 +02:00
|
|
|
local name = "regional_weather:ambient"
|
2020-04-13 16:52:45 +02:00
|
|
|
|
2020-04-18 17:26:01 +02:00
|
|
|
local conditions = {}
|
2020-04-13 16:52:45 +02:00
|
|
|
|
2020-04-28 01:23:46 +02:00
|
|
|
-- see https://en.wikipedia.org/wiki/Cloud_base
|
|
|
|
local function calc_cloud_height(heat, humidity, dewpoint)
|
|
|
|
local base = regional_weather.settings.cloud_height
|
|
|
|
-- much lower scale like 20 instead of 1000 fitting for Minetest
|
|
|
|
local scale = regional_weather.settings.cloud_scale
|
|
|
|
local spread = heat - dewpoint
|
|
|
|
local variation = spread / 4.4 * scale * 0.3
|
|
|
|
return base + climate_api.utility.rangelim(variation, -scale, scale)
|
|
|
|
end
|
|
|
|
|
2020-04-13 16:52:45 +02:00
|
|
|
local function generate_effects(params)
|
|
|
|
local override = {}
|
2020-05-13 16:05:21 +02:00
|
|
|
|
|
|
|
local cloud_height = calc_cloud_height(params.heat, params.humidity, params.dewpoint)
|
|
|
|
local wind = climate_api.environment.get_wind({ x = 0, y = cloud_height, z = 0 })
|
2020-04-13 16:52:45 +02:00
|
|
|
|
2020-04-24 01:36:58 +02:00
|
|
|
local skybox = {priority = 10}
|
2020-04-18 17:26:01 +02:00
|
|
|
skybox.cloud_data = {
|
2020-04-28 01:23:46 +02:00
|
|
|
density = climate_api.utility.rangelim(params.humidity / 100, 0.15, 0.65),
|
2020-05-13 16:05:21 +02:00
|
|
|
speed = wind,
|
2020-04-28 01:23:46 +02:00
|
|
|
thickness = climate_api.utility.rangelim(params.base_humidity * 0.2, 1, 18),
|
2020-05-13 16:05:21 +02:00
|
|
|
height = cloud_height,
|
2020-04-28 01:23:46 +02:00
|
|
|
ambient = "#0f0f1050"
|
2020-04-18 08:03:02 +02:00
|
|
|
}
|
2020-04-13 16:52:45 +02:00
|
|
|
|
2020-04-28 01:23:46 +02:00
|
|
|
if params.height > -100 and params.humidity > 40 then
|
|
|
|
skybox.cloud_data.color = "#b2a4a4b0"
|
|
|
|
end
|
|
|
|
|
2020-04-18 17:26:01 +02:00
|
|
|
if params.height > -100 and params.humidity > 65 then
|
|
|
|
skybox.sky_data = {
|
|
|
|
type = "regular",
|
|
|
|
clouds = true,
|
|
|
|
sky_color = {
|
|
|
|
day_sky = "#6a828e",
|
|
|
|
day_horizon = "#5c7a8a",
|
|
|
|
dawn_sky = "#b2b5d7",
|
|
|
|
dawn_horizon = "#b7bce1",
|
|
|
|
night_sky = "#2373e1",
|
|
|
|
night_horizon = "#315d9b"
|
|
|
|
}
|
|
|
|
}
|
2020-04-28 01:23:46 +02:00
|
|
|
skybox.cloud_data.color = "#828e97b5"
|
|
|
|
skybox.cloud_data.ambient = "#20212250"
|
2020-04-18 17:26:01 +02:00
|
|
|
end
|
|
|
|
|
2020-04-24 01:36:58 +02:00
|
|
|
override["climate_api:skybox"] = skybox
|
2020-04-18 17:26:01 +02:00
|
|
|
|
2020-04-13 16:52:45 +02:00
|
|
|
local movement = params.player:get_player_velocity()
|
|
|
|
local movement_direction
|
|
|
|
if (vector.length(movement) < 0.1) then
|
|
|
|
movement_direction = vector.new(0, 0, 0)
|
|
|
|
else
|
|
|
|
movement_direction = vector.normalize(movement)
|
|
|
|
end
|
2020-04-18 08:03:02 +02:00
|
|
|
local vector_product = vector.dot(movement_direction, wind)
|
2020-04-13 16:52:45 +02:00
|
|
|
local movement_penalty = climate_api.utility.sigmoid(vector_product, 1.6, 0.2, 0.8) + 0.2
|
|
|
|
override["regional_weather:speed_buff"] = movement_penalty
|
|
|
|
return override
|
|
|
|
end
|
|
|
|
|
|
|
|
climate_api.register_weather(name, conditions, generate_effects)
|