Improve calculation performance, write helpful README

This commit is contained in:
Till Affeldt
2020-04-25 15:49:53 +02:00
parent 1057342ac6
commit bff54bfb74
8 changed files with 133 additions and 48 deletions

View File

@ -33,6 +33,10 @@ function api.set_effect_cycle(name, cycle)
climate_mod.cycles[name].timespan = cycle
end
function api.register_global_influence(name, func)
climate_mod.global_influences[name] = func
end
function api.register_influence(name, func)
climate_mod.influences[name] = func
end

View File

@ -20,12 +20,12 @@ climate_api.register_influence("biome", function(pos)
return biome
end)
climate_api.register_influence("windspeed", function(_)
climate_api.register_global_influence("windspeed", function()
local wind = climate_api.environment.get_wind()
return vector.length(wind)
end)
climate_api.register_influence("wind_yaw", function(_)
climate_api.register_global_influence("wind_yaw", function()
local wind = climate_api.environment.get_wind()
if vector.length(wind) == 0 then return 0 end
return minetest.dir_to_yaw(wind)
@ -45,10 +45,6 @@ climate_api.register_influence("daylight", function(pos)
return minetest.env:get_node_light(pos, 0.5)
end)
climate_api.register_influence("time", function(_)
climate_api.register_global_influence("time", function()
return minetest.get_timeofday()
end)
climate_api.register_influence("day_count", function(_)
return minetest.get_day_count()
end)

View File

@ -14,6 +14,7 @@ minetest.register_globalstep(function(dtime)
world_timer = 0
climate_mod.state:set_float("noise_timer", noise_timer)
climate_mod.world.update_status(noise_timer)
climate_mod.global_environment = climate_mod.trigger.get_global_environment()
end
local previous_effects = table.copy(climate_mod.current_effects)

View File

@ -1,20 +1,15 @@
local trigger = {}
function trigger.get_position_environment(pos)
local wind_x = climate_mod.state:get_float("wind_x")
local wind_z = climate_mod.state:get_float("wind_z")
--[[local env = {}
env.pos = pos
env.height = pos.y
env.wind = vector.new(wind_x, 0, wind_z)
env.windspeed = vector.length(env.wind)
env.heat = climate_api.environment.get_heat(pos)
env.humidity = climate_api.environment.get_humidity(pos)
env.time = minetest.get_timeofday()
env.date = minetest.get_day_count()
env.light = minetest.get_node_light(vector.add(pos, vector.new({x=0,y=1,z=0})), 0.5)]]
function trigger.get_global_environment()
local env = {}
for influence, func in pairs(climate_mod.global_influences) do
env[influence] = func()
end
return env
end
function trigger.get_position_environment(pos)
local env = table.copy(climate_mod.global_environment)
for influence, func in pairs(climate_mod.influences) do
env[influence] = func(pos)
end