From f168f0acb2e687a1fd286d5cf76d4f7286f243e1 Mon Sep 17 00:00:00 2001
From: Vanessa Ezekowitz <vanessaezekowitz@gmail.com>
Date: Fri, 15 Nov 2013 20:38:52 -0500
Subject: [PATCH] Take time_speed into account when setting spawning and
 growing ABM intervals.

also, add some basic sanity checks to the interval value just in case
the math comes out wrong.  Rearranged a bit of code to accommodate these
changes.
---
 plants_lib/init.lua | 40 +++++++++++++++++++++++++++++++---------
 1 file changed, 31 insertions(+), 9 deletions(-)

diff --git a/plants_lib/init.lua b/plants_lib/init.lua
index 1197039..8b0824b 100644
--- a/plants_lib/init.lua
+++ b/plants_lib/init.lua
@@ -24,6 +24,13 @@ end
 
 local DEBUG = false --... except if you want to spam the console with debugging info :-)
 
+function plantslib:dbg(msg)
+	if DEBUG then
+		print("[Plantlife] "..msg)
+		minetest.log("verbose", "[Plantlife] "..msg)
+	end
+end
+
 plantslib.plantlife_seed_diff = 329	-- needs to be global so other mods can see it
 
 local perlin_octaves = 3
@@ -40,6 +47,16 @@ local humidity_octaves = 3
 local humidity_persistence = 0.5
 local humidity_scale = 250
 
+local time_scale = 1
+local time_speed = tonumber(minetest.setting_get("time_speed"))
+
+if time_speed and time_speed > 0 then
+	time_scale = 72 / time_speed
+end
+
+plantslib:dbg("time_speed = "..dump(time_speed))
+plantslib:dbg("time_scale = 72 / time_speed = "..dump(time_scale))
+
 --PerlinNoise(seed, octaves, persistence, scale)
 
 plantslib.perlin_temperature = PerlinNoise(temperature_seeddiff, temperature_octaves, temperature_persistence, temperature_scale)
@@ -68,13 +85,6 @@ function plantslib:clone_node(name)
 	return node2
 end
 
-function plantslib:dbg(msg)
-	if DEBUG then
-		print("[Plantlife] "..msg)
-		minetest.log("verbose", "[Plantlife] "..msg)
-	end
-end
-
 function plantslib:set_defaults(biome)
 	biome.seed_diff = biome.seed_diff or 0
 	biome.min_elevation = biome.min_elevation or -31000
@@ -232,6 +242,12 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
 		biome = sd
 	end
 
+	if biome.spawn_delay*time_scale >= 1 then
+		biome.interval = biome.spawn_delay*time_scale
+	else
+		biome.interval = 1
+	end
+
 	plantslib:set_defaults(biome)
 	biome.spawn_plants_count = table.getn(biome.spawn_plants)
 
@@ -241,7 +257,7 @@ function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
 
 	minetest.register_abm({
 		nodenames = biome.spawn_surfaces,
-		interval = biome.spawn_delay,
+		interval = biome.interval,
 		chance = biome.spawn_chance,
 		neighbors = biome.neighbors,
 		action = function(pos, node, active_object_count, active_object_count_wider)
@@ -333,9 +349,15 @@ function plantslib:grow_plants(opts)
 	plantslib:dbg("Registered growing ABM:")
 	plantslib:dbg(dump(options))
 
+	if options.grow_delay*time_scale >= 1 then
+		options.interval = options.grow_delay*time_scale
+	else
+		options.interval = 1
+	end
+
 	minetest.register_abm({
 		nodenames = { options.grow_plant },
-		interval = options.grow_delay,
+		interval = options.interval,
 		chance = options.grow_chance,
 		action = function(pos, node, active_object_count, active_object_count_wider)
 			local p_top = {x=pos.x, y=pos.y+1, z=pos.z}
-- 
GitLab