Compare commits

..

No commits in common. "master" and "v1.1.0" have entirely different histories.

13 changed files with 69 additions and 140 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
*.code-workspace

View File

@ -41,25 +41,11 @@ climate_mod.settings = {
particle_count = get_setting_number("particle_count", 1), particle_count = get_setting_number("particle_count", 1),
tick_speed = get_setting_number("tick_speed", 1), tick_speed = get_setting_number("tick_speed", 1),
volume = get_setting_number("volume", 1), volume = get_setting_number("volume", 1),
ceiling_checks = get_setting_number("ceiling_checks", 10) ceiling_checks = get_setting_number("ceiling_checks", 10),
} }
climate_mod.i18n = minetest.get_translator("climate_api") climate_mod.i18n = minetest.get_translator("climate_api")
-- attempt to disable MTG weather mod
if climate_mod.settings.skybox and minetest.get_modpath("weather") then
if weather ~= nil and weather.get ~= nil then
weather.get = function(player)
return {}
end
elseif minetest.settings:get_bool("enable_weather") then
-- old version with no API support
-- warn about clouds being overriden by MTG weather
minetest.log("warning", "[Regional Weather] " ..
climate_mod.i18n("Disable MTG weather for the best experience. Check the forum for more information."))
end
end
-- initialize empty registers -- initialize empty registers
climate_mod.weathers = {} climate_mod.weathers = {}
climate_mod.effects = {} climate_mod.effects = {}

View File

@ -57,7 +57,7 @@ minetest.register_chatcommand("weather", {
-- set base heat to increase or decrease global climate temperatures -- set base heat to increase or decrease global climate temperatures
minetest.register_chatcommand("set_base_heat", { minetest.register_chatcommand("set_base_heat", {
params = S("<heat>"), params = "<heat>",
description = S("Override the weather algorithm's base heat"), description = S("Override the weather algorithm's base heat"),
privs = { weather = true }, privs = { weather = true },
func = function(playername, param) func = function(playername, param)
@ -73,7 +73,7 @@ minetest.register_chatcommand("set_base_heat", {
-- override global heat levels with given value -- override global heat levels with given value
minetest.register_chatcommand("set_heat", { minetest.register_chatcommand("set_heat", {
params = S("<heat>"), params = "<heat>",
description = S("Override the weather algorithm's heat"), description = S("Override the weather algorithm's heat"),
privs = { weather = true }, privs = { weather = true },
func = function(playername, param) func = function(playername, param)
@ -93,7 +93,7 @@ minetest.register_chatcommand("set_heat", {
-- set base heat to increase or decrease global climate humidity -- set base heat to increase or decrease global climate humidity
minetest.register_chatcommand("set_base_humidity", { minetest.register_chatcommand("set_base_humidity", {
params = S("<humidity>"), params = "<humidity>",
description = S("Override the weather algorithm's base humidity"), description = S("Override the weather algorithm's base humidity"),
privs = { weather = true }, privs = { weather = true },
func = function(playername, param) func = function(playername, param)
@ -109,7 +109,7 @@ minetest.register_chatcommand("set_base_humidity", {
-- override global humidity with given value -- override global humidity with given value
minetest.register_chatcommand("set_humidity", { minetest.register_chatcommand("set_humidity", {
params = S("<humidity>"), params = "<humidity>",
description = S("Override the weather algorithm's humidity"), description = S("Override the weather algorithm's humidity"),
privs = { weather = true }, privs = { weather = true },
func = function(playername, param) func = function(playername, param)
@ -129,7 +129,7 @@ minetest.register_chatcommand("set_humidity", {
-- override wind direction and speed with given values -- override wind direction and speed with given values
minetest.register_chatcommand("set_wind", { minetest.register_chatcommand("set_wind", {
params = S("<wind>"), params = "<wind>",
description = S("Override the weather algorithm's windspeed"), description = S("Override the weather algorithm's windspeed"),
privs = { weather = true }, privs = { weather = true },
func = function(playername, param) func = function(playername, param)
@ -171,7 +171,7 @@ minetest.register_chatcommand("weather_settings", {
-- force a weather preset or disable it -- force a weather preset or disable it
minetest.register_chatcommand("set_weather", { minetest.register_chatcommand("set_weather", {
params = S("<weather> <status>"), params ="<weather> <status>",
description = S("Turn the specified weather preset on or off for all players or reset it to automatic"), description = S("Turn the specified weather preset on or off for all players or reset it to automatic"),
privs = { weather = true }, privs = { weather = true },
func = function(playername, param) func = function(playername, param)
@ -230,17 +230,3 @@ minetest.register_chatcommand("weather_influences", {
end end
end end
}) })
-- used to debug downfall
minetest.register_chatcommand("explain_humidity", {
description = S("Explains how the humidity value got calculated"),
func = function(playername)
local base = climate_mod.settings.humidity
local biome = minetest.get_humidity((minetest.get_player_by_name(playername)):get_pos())
local random = climate_mod.state:get_float("humidity_random");
local random_base = climate_mod.state:get_float("humidity_base");
minetest.chat_send_player(playername, dump2(base, "base"))
minetest.chat_send_player(playername, dump2(biome, "biome"))
minetest.chat_send_player(playername, dump2(random, "random"))
end
})

View File

@ -9,7 +9,7 @@ function environment.get_heat(pos)
local height = climate_api.utility.rangelim((-pos.y + 10) / 15, -10, 10) local height = climate_api.utility.rangelim((-pos.y + 10) / 15, -10, 10)
local time = climate_api.utility.normalized_cycle(minetest.get_timeofday()) * 0.6 + 0.7 local time = climate_api.utility.normalized_cycle(minetest.get_timeofday()) * 0.6 + 0.7
local random = climate_mod.state:get_float("heat_random"); local random = climate_mod.state:get_float("heat_random");
return base + ((biome + height) * time * random) return (base + biome + height) * time * random
end end
function environment.get_humidity(pos) function environment.get_humidity(pos)
@ -19,7 +19,8 @@ function environment.get_humidity(pos)
local base = climate_mod.settings.humidity local base = climate_mod.settings.humidity
local biome = minetest.get_humidity(pos) local biome = minetest.get_humidity(pos)
local random = climate_mod.state:get_float("humidity_random"); local random = climate_mod.state:get_float("humidity_random");
return base + ((biome * 0.7 + 40 * 0.3) * random) local random_base = climate_mod.state:get_float("humidity_base");
return (base + biome * 0.7 + random_base * 0.3) * random
end end
function environment.get_wind(pos) function environment.get_wind(pos)

View File

@ -10,7 +10,7 @@ climate_api.register_influence("humidity",
climate_api.environment.get_humidity climate_api.environment.get_humidity
) )
climate_api.register_influence("biome_humidity", climate_api.register_influence("base_humidity",
minetest.get_humidity minetest.get_humidity
) )

View File

@ -1,12 +1,9 @@
local GSCYCLE = 0.06 * climate_mod.settings.tick_speed -- only process event loop after this amount of time local GSCYCLE = 0.03 * climate_mod.settings.tick_speed -- only process event loop after this amount of time
local WORLD_CYCLE = 30.00 * climate_mod.settings.tick_speed -- only update global environment influences after this amount of time local WORLD_CYCLE = 30.00 * climate_mod.settings.tick_speed -- only update global environment influences after this amount of time
local gs_timer = 0 local gs_timer = 0
local world_timer = 0 local world_timer = 0
minetest.register_globalstep(function(dtime) minetest.register_globalstep(function(dtime)
local player_list = minetest.get_connected_players()
if #player_list == 0 then return end
gs_timer = gs_timer + dtime gs_timer = gs_timer + dtime
world_timer = world_timer + dtime world_timer = world_timer + dtime
@ -29,7 +26,7 @@ minetest.register_globalstep(function(dtime)
end end
end end
local current_effects = climate_mod.trigger.get_active_effects(player_list) local current_effects = climate_mod.trigger.get_active_effects()
for name, effect in pairs(climate_mod.effects) do for name, effect in pairs(climate_mod.effects) do
local cycle = climate_mod.cycles[name].timespan * climate_mod.settings.tick_speed local cycle = climate_mod.cycles[name].timespan * climate_mod.settings.tick_speed

View File

@ -1,5 +1,3 @@
local mod_lighting_monoid = minetest.get_modpath("lighting_monoid") ~= nil
local default_sky = { local default_sky = {
sky_data = { sky_data = {
base_color = nil, base_color = nil,
@ -76,11 +74,12 @@ local function set_skybox(playername, sky)
player:set_moon(sky.moon_data) player:set_moon(sky.moon_data)
player:set_sun(sky.sun_data) player:set_sun(sky.sun_data)
player:set_stars(sky.star_data) player:set_stars(sky.star_data)
local lighting = { if player.set_lighting then
player:set_lighting({
shadows = { intensity = sky.light_data.shadow_intensity }, shadows = { intensity = sky.light_data.shadow_intensity },
saturation = sky.light_data.saturation saturation = sky.light_data.saturation
} })
lighting_monoid:add_change(player, lighting, "climate_api:merged_lighting") end
end end
function skybox.update(playername) function skybox.update(playername)

View File

@ -9,7 +9,7 @@ function trigger.get_global_environment()
end end
function trigger.get_position_environment(pos) function trigger.get_position_environment(pos)
local env = trigger.get_global_environment() local env = table.copy(climate_mod.global_environment)
for influence, func in pairs(climate_mod.influences) do for influence, func in pairs(climate_mod.influences) do
env[influence] = func(pos) env[influence] = func(pos)
end end
@ -83,18 +83,20 @@ local function get_weather_effects(player, weather_config, env)
return effects return effects
end end
function trigger.get_active_effects(players) function trigger.get_active_effects()
local environments = {} local environments = {}
local effects = {} local effects = {}
climate_mod.current_weather = {} climate_mod.current_weather = {}
for _, player in ipairs(players) do for _, player in ipairs(minetest.get_connected_players()) do
local pname = player:get_player_name() local pname = player:get_player_name()
local hp = player:get_hp() local hp = player:get_hp()
-- skip weather presets for dead players -- skip weather presets for dead players
if hp ~= nil and hp > 0 then if hp ~= nil and hp > 0 then
local env = trigger.get_player_environment(player) environments[pname] = trigger.get_player_environment(player)
environments[pname] = env end
local env = environments[pname]
if env ~= nil then
for wname, wconfig in pairs(climate_mod.weathers) do for wname, wconfig in pairs(climate_mod.weathers) do
if is_weather_active(player, wname, env) then if is_weather_active(player, wname, env) then
if climate_mod.current_weather[pname] == nil then if climate_mod.current_weather[pname] == nil then

View File

@ -6,8 +6,9 @@ local WIND_SCALE = 2
local HEAT_SPREAD = 400 local HEAT_SPREAD = 400
local HEAT_SCALE = 0.3 local HEAT_SCALE = 0.3
local HUMIDITY_SPREAD = 150 local HUMIDITY_SPREAD = 150
local HUMIDITY_SCALE = 1 local HUMIDITY_SCALE = 0.5
local HUMIDITY_TIMESCALE = 1 local HUMIDITY_BASE_SPREAD = 800
local HUMIDITY_BASE_SCALE = 40
local nobj_wind_x local nobj_wind_x
local nobj_wind_z local nobj_wind_z
@ -46,14 +47,23 @@ local pn_heat = {
} }
local pn_humidity = { local pn_humidity = {
offset = 1, offset = 0,
scale = HUMIDITY_SCALE, scale = HUMIDITY_SCALE,
spread = {x = HUMIDITY_SPREAD, y = HUMIDITY_SPREAD, z = HUMIDITY_SPREAD}, spread = {x = HUMIDITY_SPREAD, y = HUMIDITY_SPREAD, z = HUMIDITY_SPREAD},
seed = 8374061, seed = 8374061,
octaves = 2, octaves = 2,
persist = 0.5, persist = 0.5,
lacunarity = 2, lacunarity = 2
flags = "noeased" }
local pn_humidity_base = {
offset = 50,
scale = HUMIDITY_BASE_SCALE,
spread = {x = HUMIDITY_BASE_SPREAD, y = HUMIDITY_BASE_SPREAD, z = HUMIDITY_BASE_SPREAD},
seed = 3803465,
octaves = 2,
persist = 0.5,
lacunarity = 2
} }
local function update_wind(timer) local function update_wind(timer)
@ -73,8 +83,11 @@ end
local function update_humidity(timer) local function update_humidity(timer)
nobj_humidity = nobj_humidity or minetest.get_perlin(pn_humidity) nobj_humidity = nobj_humidity or minetest.get_perlin(pn_humidity)
local n_humidity = nobj_humidity:get_2d({x = timer * HUMIDITY_TIMESCALE, y = 0}) local n_humidity = nobj_humidity:get_2d({x = timer, y = 0})
climate_mod.state:set_float("humidity_random", n_humidity) climate_mod.state:set_float("humidity_random", n_humidity)
nobj_humidity_base = nobj_humidity_base or minetest.get_perlin(pn_humidity_base)
local n_humidity_base = nobj_humidity_base:get_2d({x = timer, y = 0})
climate_mod.state:set_float("humidity_base", n_humidity_base)
end end
function world.update_status(timer) function world.update_status(timer)

View File

@ -1,4 +1,4 @@
# textdomain: climate_api # textdomain:climate_api
Make changes to the current weather=Ändere das aktuelle Wetter Make changes to the current weather=Ändere das aktuelle Wetter
Display weather information=Betrachte Informationen zum Wetter Display weather information=Betrachte Informationen zum Wetter
The following weather presets are active for you:=Die folgenden Wetterklassen sind gerade aktiv The following weather presets are active for you:=Die folgenden Wetterklassen sind gerade aktiv
@ -8,7 +8,6 @@ scorching=stechend heiße
pleasant=angenehme pleasant=angenehme
chilly=kühle chilly=kühle
It is a @1 @2 right now and humidity is at @3%.=Es sind gerade @1 @2 und die Luftfeuchtigkeit liegt bei @3%. It is a @1 @2 right now and humidity is at @3%.=Es sind gerade @1 @2 und die Luftfeuchtigkeit liegt bei @3%.
<heat>=
Override the weather algorithm's base heat=Überschreibe die Standard-Temperatur Override the weather algorithm's base heat=Überschreibe die Standard-Temperatur
Provide a number to modify the base heat=Gebe eine Zahl an, um die Standard-Temperatur anzupassen Provide a number to modify the base heat=Gebe eine Zahl an, um die Standard-Temperatur anzupassen
Base heat changed=Die Standard-Temperatur wurde geändert Base heat changed=Die Standard-Temperatur wurde geändert
@ -16,7 +15,6 @@ Override the weather algorithm's heat=Überschreibe die tatsächliche Temperatur
Provide a number to modify the heat=Gebe eine Zahl an, um die Temperatur anzupassen Provide a number to modify the heat=Gebe eine Zahl an, um die Temperatur anzupassen
Heat value reset=Die Temperatur wurde zurückgesetzt Heat value reset=Die Temperatur wurde zurückgesetzt
Heat value changed=Die Temperatur wurde geändert Heat value changed=Die Temperatur wurde geändert
<humidity>=
Override the weather algorithm's base humidity=Überschreibe die Standard-Luftfeuchtigkeit Override the weather algorithm's base humidity=Überschreibe die Standard-Luftfeuchtigkeit
Provide a number to modify the base humidity=Gebe eine Zahl an, um die Standard-Temperatur anzupassen Provide a number to modify the base humidity=Gebe eine Zahl an, um die Standard-Temperatur anzupassen
Base humidity changed=Die Standard-Luftfeuchtigkeit wurde geändert Base humidity changed=Die Standard-Luftfeuchtigkeit wurde geändert
@ -24,7 +22,6 @@ Override the weather algorithm's humidity=Überschreibe die tatsächliche Luftfe
Provide a number to modify the humidity=Gebe eine Zahl an, um die Luftfeuchtigkeit anzupassen Provide a number to modify the humidity=Gebe eine Zahl an, um die Luftfeuchtigkeit anzupassen
Humidity value reset=Die Luftfeuchtigkeit wurde zurückgesetzt Humidity value reset=Die Luftfeuchtigkeit wurde zurückgesetzt
Humidity value changed=Die Luftfeuchtigkeit wurde geändert Humidity value changed=Die Luftfeuchtigkeit wurde geändert
<wind>=
Override the weather algorithm's windspeed=Überschreibe die Windgeschwindigkeit Override the weather algorithm's windspeed=Überschreibe die Windgeschwindigkeit
Provide a vector of two numbers to modify the wind=Gebe einen Vektor aus zwei Zahlen an, um die Windgeschwindigkeit anzupassen Provide a vector of two numbers to modify the wind=Gebe einen Vektor aus zwei Zahlen an, um die Windgeschwindigkeit anzupassen
Wind reset=Der Wind wurde zurückgesetzt Wind reset=Der Wind wurde zurückgesetzt
@ -32,7 +29,6 @@ Invalid wind configuration=Fehlerhafte Windkonfiguration
Wind changed=Der Wind wurde geändert Wind changed=Der Wind wurde geändert
Print the active Climate API configuration=Betrachte die Einstellungen für Climate API Print the active Climate API configuration=Betrachte die Einstellungen für Climate API
Current Settings=Aktuelle Einstellungen Current Settings=Aktuelle Einstellungen
<weather> <status>=
Turn the specified weather preset on or off for all players or reset it to automatic=Schalte für alle Spieler die angegebene Wetterklasse an, aus oder schalte sie auf automatisch Turn the specified weather preset on or off for all players or reset it to automatic=Schalte für alle Spieler die angegebene Wetterklasse an, aus oder schalte sie auf automatisch
Unknown weather preset=Unbekannte Wetterklasse Unknown weather preset=Unbekannte Wetterklasse
Invalid weather status. Set the preset to either on, off or auto.=Unbekannter Status. Setze die Wetterklasse entweder auf on, off oder auto Invalid weather status. Set the preset to either on, off or auto.=Unbekannter Status. Setze die Wetterklasse entweder auf on, off oder auto
@ -41,4 +37,3 @@ Prints which weather presets are enforced or disabled=Betrachte, welche Wetterkl
Current activation rules:=Aktuelle Aktivierungsregeln Current activation rules:=Aktuelle Aktivierungsregeln
Prints which weather influences cause your current weather=Betrachte, welche Umwelteinflüsse das aktuelle Wetter hervorrufen Prints which weather influences cause your current weather=Betrachte, welche Umwelteinflüsse das aktuelle Wetter hervorrufen
Current influences rules:=Aktuelle Einflussfaktoren Current influences rules:=Aktuelle Einflussfaktoren
Explains how the humidity value got calculated=

View File

@ -1,44 +0,0 @@
# textdomain: climate_api
Make changes to the current weather=Ŝanĝi la nunan veteron
Display weather information=Montri veterajn informojn
The following weather presets are active for you:=La jenaj veteragordoj estas ŝaltitaj por vi:
Your sky is clear. No weather presets are currently active.=La suno brilas. Neniu veteragordo estas ŝaltita.
As a result, the following environment effects are applied:=Pro tio, la jenaj efikoj estas aktivaj:
scorching=Varmas
pleasant=Komfortas
chilly=Malvarmas
It is a @1 @2 right now and humidity is at @3%.=@1 je @2 ĝuste nun, kun aermalsekeco je @3 gradoj.
<heat>=<varm>
Override the weather algorithm's base heat=Anstataŭigi la bazan varmecon de la vetera algoritmo
Provide a number to modify the base heat=Doni nombron anstataŭiguntan la bazan varmecon
Base heat changed=Baza varmeco ŝanĝita
Override the weather algorithm's heat=Anstataŭigi la varmecon de la vetera algoritmo
Provide a number to modify the heat=Doni nombron anstataŭiguntan la varmecon
Heat value reset=Varmeco malagordita
Heat value changed=Varmeco ŝanĝita
<humidity>=<aermalsek>
Override the weather algorithm's base humidity=Anstataŭigi la bazan aermalsekecon de la vetera algoritmo
Provide a number to modify the base humidity=Doni nombron anstataŭiguntan la bazan aermalsekecon
Base humidity changed=Baza aermalsekeco ŝanĝita
Override the weather algorithm's humidity=Anstataŭigi la aermalsekecon de la vetera algoritmo
Provide a number to modify the humidity=Doni nombron anstataŭiguntan la aermalsekecon
Humidity value reset=Aermalsekeco malagordita
Humidity value changed=Aermalsekeca ŝanĝita
<wind>=<vent>
Override the weather algorithm's windspeed=Anstataŭigi la ventforton de la vetera algoritmo
Provide a vector of two numbers to modify the wind=Doni nombroparon anstataŭiguntan la ventoforton
Wind reset=Ventoforto malagordita
Invalid wind configuration=Nevalida ventagordo
Wind changed=Vento ŝanĝita
Print the active Climate API configuration=Presi la nunan agordon por Climate API
Current Settings=Nunaj Agordoj
<weather> <status>=<veter> <ŝaltec>
Turn the specified weather preset on or off for all players or reset it to automatic=Agordi veteragordon por ĉiuj ludantoj: «on» (ŝalti), «off» (malŝalti), «reset» (malfari)
Unknown weather preset=Nekonata veteragordo
Invalid weather status. Set the preset to either on, off or auto.=Nevalida veterostato. Agordu la veteragordon al «on» (ŝalti), «off» (malŝalti), aŭ «auto» (memagi).
Weather @1 successfully set to @2=Vetero @1 sukcese agordita al @2
Prints which weather presets are enforced or disabled=Listigas veterstatojn laŭ ŝaltiteco
Current activation rules:=Nunaj aktivigaj reguloj:
Prints which weather influences cause your current weather=Presas la influojn kiuj venigis la nunan veteron
Current influences rules:=Nunaj influaj reguloj:
Explains how the humidity value got calculated=Klarigas kiel la aermalseka valoro kalkuliĝis

View File

@ -1,4 +1,4 @@
# textdomain: climate_api # textdomain:climate_api
Make changes to the current weather= Make changes to the current weather=
Display weather information= Display weather information=
The following weather presets are active for you:= The following weather presets are active for you:=
@ -8,7 +8,6 @@ scorching=
pleasant= pleasant=
chilly= chilly=
It is a @1 @2 right now and humidity is at @3%.= It is a @1 @2 right now and humidity is at @3%.=
<heat>=
Override the weather algorithm's base heat= Override the weather algorithm's base heat=
Provide a number to modify the base heat= Provide a number to modify the base heat=
Base heat changed= Base heat changed=
@ -16,7 +15,6 @@ Override the weather algorithm's heat=
Provide a number to modify the heat= Provide a number to modify the heat=
Heat value reset= Heat value reset=
Heat value changed= Heat value changed=
<humidity>=
Override the weather algorithm's base humidity= Override the weather algorithm's base humidity=
Provide a number to modify the base humidity= Provide a number to modify the base humidity=
Base humidity changed= Base humidity changed=
@ -24,7 +22,6 @@ Override the weather algorithm's humidity=
Provide a number to modify the humidity= Provide a number to modify the humidity=
Humidity value reset= Humidity value reset=
Humidity value changed= Humidity value changed=
<wind>=
Override the weather algorithm's windspeed= Override the weather algorithm's windspeed=
Provide a vector of two numbers to modify the wind= Provide a vector of two numbers to modify the wind=
Wind reset= Wind reset=
@ -32,7 +29,6 @@ Invalid wind configuration=
Wind changed= Wind changed=
Print the active Climate API configuration= Print the active Climate API configuration=
Current Settings= Current Settings=
<weather> <status>=
Turn the specified weather preset on or off for all players or reset it to automatic= Turn the specified weather preset on or off for all players or reset it to automatic=
Unknown weather preset= Unknown weather preset=
Invalid weather status. Set the preset to either on, off or auto.= Invalid weather status. Set the preset to either on, off or auto.=
@ -41,4 +37,3 @@ Prints which weather presets are enforced or disabled=
Current activation rules:= Current activation rules:=
Prints which weather influences cause your current weather= Prints which weather influences cause your current weather=
Current influences rules:= Current influences rules:=
Explains how the humidity value got calculated=

View File

@ -1,8 +1,8 @@
name = climate_api name = climate_api
title = Climate API title = Climate API
author = TestificateMods author = TestificateMods
depends = lighting_monoid release = 10001
optional_depends = player_monoids, playerphysics, pova, weather optional_depends = player_monoids, playerphysics, pova
description = """ description = """
A powerful engine for weather presets and visual effects. A powerful engine for weather presets and visual effects.
Use the regional climate to set up different effects for different regions. Use the regional climate to set up different effects for different regions.