From 9c4a492d71dc0ffc3aed4086b1fa81088c52e891 Mon Sep 17 00:00:00 2001 From: Tangent Date: Wed, 19 Aug 2026 22:30:28 -0600 Subject: [PATCH] temperature affected by latitude, non-linearly --- ReadMe.md | 3 +++ src/lib/running_average.lua | 27 +++++++++++++++++++++++++++ src/main.lua | 4 +++- src/map_nextgen.lua | 5 +++++ 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 src/lib/running_average.lua diff --git a/ReadMe.md b/ReadMe.md index aa988c4..839df05 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -23,4 +23,7 @@ Using the heightmap generator from here: https://github.com/TangentFoxy/heightma - [ ] Do all terrain generation within a radius check so unnecessary work isn't done and discarded. - [ ] Terrain generation steps should happen within a single loop wherever possible? +## Reference +- Out of 52 seeds randomly tested, the current code creates a temperature range between -80.64 and 33.78 C. + (Tasks/Issues are stored in the ReadMe instead of using a webUI issue tracker due to how using such a tracker negatively influences portability of the project.) diff --git a/src/lib/running_average.lua b/src/lib/running_average.lua new file mode 100644 index 0000000..3357793 --- /dev/null +++ b/src/lib/running_average.lua @@ -0,0 +1,27 @@ +local running_average = { + trackers = {} +} + +local trackers = running_average.trackers + +running_average.track = function(name, value) + if not trackers[name] then + trackers[name] = { running_total = 0, count = 0, } + end + local track = trackers[name] + + track.running_total = track.running_total + value + track.count = track.count + 1 + + return track.running_total / track.count +end + +running_average.average = function(name) + return trackers[name] and trackers[name].running_total / trackers[name].count +end + +running_average.count = function(name) + return trackers[name] and trackers[name].count +end + +return running_average diff --git a/src/main.lua b/src/main.lua index 08f84fa..b783856 100644 --- a/src/main.lua +++ b/src/main.lua @@ -3,6 +3,7 @@ math.randomseed(os.time()) local map_generator = require "map_nextgen" local lovebird = require "lib.lovebird" local lume = require "lib.lume" +local running_average = require "lib.running_average" local simplex_map = require "lib.simplex_map" local map @@ -11,7 +12,8 @@ love.load = function() map = map_generator.generate() map.temperature.min = simplex_map.min(map.temperature) map.temperature.max = simplex_map.max(map.temperature) - print("Temperature Range", map.temperature.min, map.temperature.max) + print("Min Temperature", map.temperature.min, "Average", running_average.track("minT", map.temperature.min)) + print("Max Temperature", map.temperature.max, "Average", running_average.track("maxT", map.temperature.max)) -- if true then return end diff --git a/src/map_nextgen.lua b/src/map_nextgen.lua index cbb2909..84782a4 100644 --- a/src/map_nextgen.lua +++ b/src/map_nextgen.lua @@ -102,6 +102,11 @@ local generate = function() else temperature = temperature + altitude / 1000 -- -1 C / km (deep water adjustment) end + -- modify temperature by latitude + local polar_distance = math.abs(y - (map.size / 2))^1.1 -- experimenting with slight non-linearity + local max_temperature_delta = 40 + temperature = temperature - (polar_distance / map.size * 2 * max_temperature_delta) + -- 'save' temperature changes map.temperature[x][y] = temperature -- choose biome