From f056d6d76e883da31195b4be04e5b03b5282fa8b Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Sat, 1 Dec 2018 10:51:18 -0500 Subject: [PATCH] add descriptive names to ABM calls can be specified by label= in the biome table else biome_lib will try to make up something useful fix #1 --- API.txt | 21 +++++++++++++-------- init.lua | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/API.txt b/API.txt index 6aab582..0dd15c3 100644 --- a/API.txt +++ b/API.txt @@ -72,6 +72,7 @@ biome = { ---- most likely want to use at least some of these to limit how and ---- where your objects are spawned. + label = string, -- set this to identify the ABM for Minetest's profiler avoid_nodes = {table}, -- same meaning as savoid, above avoid_radius = num, -- same as sradius seed_diff = num, -- The Perlin seed difference value passed to the @@ -238,7 +239,7 @@ biome = { ---- Everything else is optional, but you'll definitely want to use ---- some of these other fields to limit where and under what ---- conditions the objects are spawned. - + below_nodes = {table}, -- List of nodes that must be below the target -- node. Useful in snow biomes to keep objects from -- spawning in snow that's on the wrong surface for @@ -342,14 +343,18 @@ into something else over time. This function has no return value, and accepts a biome definition table as the only parameter. These are defined like so: options = { - grow_plant = "string", -- Name of the node to be grown into something - -- else. This value is passed to the ABM as the - -- "nodenames" parameter, so it is the plants - -- themselves that are the ABM trigger, rather than + label = string, -- set this to identify the ABM for Minetest's + -- profiler. If not set, biome_lib will set it to + -- "biome_lib grow_plants(): " appended with the node + -- in grow_plant (or the first item if it's a table) + grow_plant = "string" or {table}, -- Name(s) of the node(s) to be grown + -- into something else. This value is passed to the + -- ABM as the "nodenames" parameter, so the plants + -- themselves are the ABM trigger, rather than -- the ground they spawned on. A plant will only grow - -- if the node above it is air. Can also be a table, - -- but note that all nodes referenced therein will be - -- grown into the same object. + -- if the node above it is air. If you use a table, + -- note that all nodes referenced therein will be + -- grown into the same final object. grow_delay = num, -- Passed as the ABM "interval" parameter, as with -- spawning. grow_chance = num, -- Passed as the ABM "chance" parameter. diff --git a/init.lua b/init.lua index 818011f..f79c1d7 100644 --- a/init.lua +++ b/init.lua @@ -501,11 +501,20 @@ function biome_lib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa) biome_lib:set_defaults(biome) biome.spawn_plants_count = #(biome.spawn_plants) + local n + if type(biome.spawn_plants) == "table" then + n = "random: "..biome.spawn_plants[1]..", ..." + else + n = biome.spawn_plants + end + biome.label = biome.label or "biome_lib spawn_on_surfaces(): "..n + minetest.register_abm({ nodenames = biome.spawn_surfaces, interval = biome.interval, chance = biome.spawn_chance, neighbors = biome.neighbors, + label = biome.label, action = function(pos, node, active_object_count, active_object_count_wider) local p_top = { x = pos.x, y = pos.y + 1, z = pos.z } local n_top = minetest.get_node(p_top) @@ -583,6 +592,16 @@ function biome_lib:grow_plants(opts) options.grow_nodes = options.grow_nodes or { "default:dirt_with_grass" } options.seed_diff = options.seed_diff or 0 + local n + + if type(options.grow_plant) == "table" then + n = "multi: "..options.grow_plant[1]..", ..." + else + n = options.grow_plant + end + + options.label = options.label or "biome_lib grow_plants(): "..n + if options.grow_delay*time_scale >= 1 then options.interval = options.grow_delay*time_scale else @@ -593,6 +612,7 @@ function biome_lib:grow_plants(opts) nodenames = { options.grow_plant }, interval = options.interval, chance = options.grow_chance, + label = options.label, action = function(pos, node, active_object_count, active_object_count_wider) local p_top = {x=pos.x, y=pos.y+1, z=pos.z} local p_bot = {x=pos.x, y=pos.y-1, z=pos.z}