climate_api/lib/world.lua

87 lines
2.1 KiB
Lua
Raw Normal View History

2020-04-13 01:55:39 +02:00
local world = {}
2020-10-08 15:43:13 +02:00
local BASE_TIME = 0.2 * climate_mod.settings.time_spread
2020-04-13 01:55:39 +02:00
local WIND_SPREAD = 600
local WIND_SCALE = 2
local HEAT_SPREAD = 400
local HEAT_SCALE = 0.3
local HUMIDITY_SPREAD = 150
local HUMIDITY_SCALE = 1
local HUMIDITY_TIMESCALE = 1
2020-04-13 01:55:39 +02:00
local nobj_wind_x
local nobj_wind_z
local nobj_heat
local nobj_humidity
local nobj_humidity_base
2020-04-13 01:55:39 +02:00
local pn_wind_speed_x = {
offset = 0,
2020-10-08 15:43:13 +02:00
scale = WIND_SCALE,
2020-04-13 01:55:39 +02:00
spread = {x = WIND_SPREAD, y = WIND_SPREAD, z = WIND_SPREAD},
seed = 31441,
octaves = 2,
persist = 0.5,
lacunarity = 2
}
local pn_wind_speed_z = {
offset = 0,
2020-10-08 15:43:13 +02:00
scale = WIND_SCALE,
2020-04-13 01:55:39 +02:00
spread = {x = WIND_SPREAD, y = WIND_SPREAD, z = WIND_SPREAD},
seed = 938402,
octaves = 2,
persist = 0.5,
lacunarity = 2
}
local pn_heat = {
offset = 1,
2020-10-08 15:43:13 +02:00
scale = HEAT_SCALE,
2020-04-13 01:55:39 +02:00
spread = {x = HEAT_SPREAD, y = HEAT_SPREAD, z = HEAT_SPREAD},
2020-10-08 15:43:13 +02:00
seed = 235896,
2020-04-13 01:55:39 +02:00
octaves = 2,
persist = 0.5,
lacunarity = 2
}
local pn_humidity = {
offset = 1,
2020-10-08 15:43:13 +02:00
scale = HUMIDITY_SCALE,
2020-04-13 01:55:39 +02:00
spread = {x = HUMIDITY_SPREAD, y = HUMIDITY_SPREAD, z = HUMIDITY_SPREAD},
seed = 8374061,
2020-10-08 15:43:13 +02:00
octaves = 2,
2020-04-13 01:55:39 +02:00
persist = 0.5,
lacunarity = 2,
flags = "noeased"
}
2020-04-13 01:55:39 +02:00
local function update_wind(timer)
nobj_wind_x = nobj_wind_x or minetest.get_perlin(pn_wind_speed_x)
nobj_wind_z = nobj_wind_z or minetest.get_perlin(pn_wind_speed_z)
local n_wind_x = nobj_wind_x:get_2d({x = timer, y = 0})
local n_wind_z = nobj_wind_z:get_2d({x = timer, y = 0})
climate_mod.state:set_float("wind_x", n_wind_x)
climate_mod.state:set_float("wind_z", n_wind_z)
2020-04-13 01:55:39 +02:00
end
local function update_heat(timer)
nobj_heat = nobj_heat or minetest.get_perlin(pn_heat)
local n_heat = nobj_heat:get_2d({x = timer, y = 0})
climate_mod.state:set_float("heat_random", n_heat)
2020-04-13 01:55:39 +02:00
end
local function update_humidity(timer)
nobj_humidity = nobj_humidity or minetest.get_perlin(pn_humidity)
local n_humidity = nobj_humidity:get_2d({x = timer * HUMIDITY_TIMESCALE, y = 0})
climate_mod.state:set_float("humidity_random", n_humidity)
2020-04-13 01:55:39 +02:00
end
function world.update_status(timer)
2020-10-08 15:43:13 +02:00
timer = math.floor(timer * BASE_TIME)
2020-04-13 01:55:39 +02:00
update_wind(timer)
update_heat(timer)
update_humidity(timer)
end
return world