summaryrefslogtreecommitdiff
path: root/struct_register.lua
diff options
context:
space:
mode:
Diffstat (limited to 'struct_register.lua')
-rw-r--r--struct_register.lua67
1 files changed, 67 insertions, 0 deletions
diff --git a/struct_register.lua b/struct_register.lua
new file mode 100644
index 0000000..1143753
--- /dev/null
+++ b/struct_register.lua
@@ -0,0 +1,67 @@
+-- struct_register.lua - registration callbacks for structures.
+
+--[[
+The cellworld table contains the following structure-related entries:
+cellworld = {
+ structures = {
+ [st_name] = {...} -- all registered structures.
+ }
+ structure_set = {
+ -- the active structure set config, which determines grid size, mapgen base node a.s.o as passed to config_structure_set()
+ name = "foo" -- name of the active structure set (which is actually the first parameter), not specified in table.
+ grid_size = 7 -- how many nodes form a cell.
+ mapgen_base_node = "air" -- which node to place by default in map, passed to singlenode mg. TODO not implemented yet.
+ }
+ -- the most important settings from structure set are copied for easier access
+ grid_size = structure_set.grid_size,
+
+ -- of all registered structures, the maximum extents in x, y and z direction.
+ maximum_structure_size = vector.new(1,1,1)
+}
+]]--
+
+cellworld.structures = {}
+
+function cellworld.config_structure_set(name, definition)
+ if cellworld.structure_set then
+ error("Cellworld: Trying to register structure set '"..name.."', but '"..cellworld.structure_set.name..
+ "' has already been registered. There can only be one active structure set at a time.")
+ end
+ cellworld.structure_set = {
+ name = name,
+ grid_size = 9,
+ seed_structure = definition.seed_structure,
+ }
+ if definition.grid_size then
+ cellworld.structure_set.grid_size = definition.grid_size
+ end
+
+ cellworld.grid_size = cellworld.structure_set.grid_size
+
+ cellworld.maximum_structure_size = vector.new(1,1,1)
+end
+
+function cellworld.register_structure(name, def)
+ -- make definition checks
+ if not cellworld.structure_set then
+ error("Cellworld: can not register structures when config_structure_set() hasn't been called!")
+ elseif def.structure_set and def.structure_set ~= cellworld.structure_set.name then
+ error("Cellworld: Structure '"..name.."' can not be registered because the structure set it was defined for ('"..name..
+ "') doesn't match the active structure set ('"..cellworld.structure_set.name.."')!")
+ end
+
+ if not def.chance then
+ def.chance = 50
+ end
+
+ -- TODO validate structure of cells
+
+ cellworld.structures[name] = def
+
+ -- update maxstructsize
+ local mss = cellworld.maximum_structure_size
+ mss.x = math.max(def.size.x, mss.x)
+ mss.y = math.max(def.size.y, mss.y)
+ mss.z = math.max(def.size.z, mss.z)
+
+end