diff --git a/.luacheckrc b/.luacheckrc index 3664db6..b183edb 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -5,6 +5,7 @@ globals = { "minetest", "ebiometrees", "eaction" + "ebiome" } read_globals = { diff --git a/mods/ebiome/api.lua b/mods/ebiome/api.lua new file mode 100644 index 0000000..f934cb8 --- /dev/null +++ b/mods/ebiome/api.lua @@ -0,0 +1,6 @@ +function ebiome.register_biome(name, data) + if not data.type or data.type == "simple" + then + minetest.register_biome(name, data) + end +end diff --git a/mods/ebiome/config.lua b/mods/ebiome/config.lua deleted file mode 100644 index 691b5ab..0000000 --- a/mods/ebiome/config.lua +++ /dev/null @@ -1,5 +0,0 @@ -ebiome = { - blocktypes = { - stone = "eterrain:rock" - } -} diff --git a/mods/ebiome/init.lua b/mods/ebiome/init.lua index 3fc05ac..b01e32b 100644 --- a/mods/ebiome/init.lua +++ b/mods/ebiome/init.lua @@ -1,2 +1,3 @@ -dofile(minetest.get_modpath("ebiome") .. "/biomes/grasslands.lua") +ebiome = {} +dofile(minetest.get_modpath("ebiome") .. "/api.lua") diff --git a/mods/ebiome/mod.conf b/mods/ebiome/mod.conf index 1cbd7da..1a49e0b 100644 --- a/mods/ebiome/mod.conf +++ b/mods/ebiome/mod.conf @@ -1,3 +1,2 @@ -depends = ebiometrees description = biome mod name = ebiome diff --git a/mods/ebiometrees/api.lua b/mods/ebiometrees/api.lua new file mode 100644 index 0000000..529e25b --- /dev/null +++ b/mods/ebiometrees/api.lua @@ -0,0 +1,16 @@ +ebiometrees.registered_trees = {} + +function ebiometrees.register_tree(name, data) + ebiometrees.registered_trees[name] = data + ebiometrees.register_subnodes(name) +end + +function ebiometrees.register_subnodes(tree_name) + local modname = tree_name:match("([^:]*):") + local basename = tree_name:match(":([^:]+)") + local data = ebiometrees.registered_trees[tree_name] + ebiometrees.register_tree_sapling(modname, basename, data) + ebiometrees.register_tree_sprout(modname, basename, data) + ebiometrees.register_tree_leaves(modname, basename, data) + ebiometrees.register_tree_trunks(modname, basename, data) +end diff --git a/mods/ebiometrees/init.lua b/mods/ebiometrees/init.lua index c3df1cb..4e09e8a 100644 --- a/mods/ebiometrees/init.lua +++ b/mods/ebiometrees/init.lua @@ -1,2 +1,12 @@ +ebiometrees = {} +ebiometrees.directions = { + up = vector.new( 0, 1, 0), + down = vector.new( 0, -1, 0), + north = vector.new( 0, 0, 1), + east = vector.new( 1, 0, 0), + south = vector.new( 0, 0, -1), + west = vector.new(-1, 0, 0) +} dofile(minetest.get_modpath("ebiometrees").."/sapling.lua") dofile(minetest.get_modpath("ebiometrees").."/tree.lua") +dofile(minetest.get_modpath("ebiometrees").."/api.lua") diff --git a/mods/ebiometrees/sapling.lua b/mods/ebiometrees/sapling.lua index 34ca57b..07374d6 100644 --- a/mods/ebiometrees/sapling.lua +++ b/mods/ebiometrees/sapling.lua @@ -1,14 +1,3 @@ -ebiometrees = {} -ebiometrees.directions = { - up = vector.new( 0, 1, 0), - down = vector.new( 0, -1, 0), - north = vector.new( 0, 0, 1), - east = vector.new( 1, 0, 0), - south = vector.new( 0, 0, -1), - west = vector.new(-1, 0, 0) -} - - function ebiometrees.grow_closure(nextstage) local function growtree(pos) minetest.set_node(pos, {name=nextstage}) @@ -16,6 +5,7 @@ function ebiometrees.grow_closure(nextstage) return growtree end + function ebiometrees.where_to_grow_trunk_closure(grow_preferences, leaves_name) local function where_to_grow_trunk(pos) for _, directions in ipairs(grow_preferences) @@ -24,7 +14,14 @@ function ebiometrees.where_to_grow_trunk_closure(grow_preferences, leaves_name) local candidate_dir = directions[1] local candidate = vector.copy(pos):add(candidate_dir) local node = minetest.get_node_or_nil(candidate) - if node and node.name == leaves_name + corner1 = pos:add({x=-1, y=-1, z=-1}):add(candidate_dir:multiply(2)) + corner2 = pos:add({x= 1, y= 1, z= 1}):add(candidate_dir:multiply(2)) + local spacious, _ = minetest.find_nodes_in_area( + corner1, corner2, "group:treetrunk" + ) + minetest.chat_send_all(dump2(spacious)) + minetest.chat_send_all(#spacious) + if node and node.name == leaves_name and #spacious == 0 then return candidate end @@ -33,20 +30,27 @@ function ebiometrees.where_to_grow_trunk_closure(grow_preferences, leaves_name) return where_to_grow_trunk end -function ebiometrees.grow_trunk_closure(trunk_terminal_name, grow_preferences, leaves_name) + +function ebiometrees.grow_trunk_closure(trunk_terminal_name, grow_preferences, leaves_name, grow_limit) local function grow_trunk(pos) - local where = ebiometrees.where_to_grow_trunk_closure( - grow_preferences, leaves_name - ) + local meta = minetest.get_meta(pos) + if meta:get_int("ebiometrees:distance") > grow_limit + then + return + end + local where = ebiometrees.where_to_grow_trunk_closure(grow_preferences, leaves_name) local there = where(pos) if there then minetest.set_node(there, {name=trunk_terminal_name}) + local newmeta = minetest.get_meta(there) + newmeta:set_int("ebiometrees:distance", meta:get_int("ebiometrees:distance")+1) end end return grow_trunk end + function ebiometrees.grow_leaves_closure(leaves_name) local function grow_leaves(pos) local free_node = minetest.find_node_near(pos, 1, "air") @@ -60,8 +64,8 @@ function ebiometrees.grow_leaves_closure(leaves_name) end -function ebiometrees.tree_grower(leaves_name, grow_preferences, terminal_name, nextstage, age_max) - local grow_trunk = ebiometrees.grow_trunk_closure(terminal_name, grow_preferences, leaves_name) +function ebiometrees.tree_grower(leaves_name, grow_preferences, terminal_name, nextstage, age_max, grow_limit) + local grow_trunk = ebiometrees.grow_trunk_closure(terminal_name, grow_preferences, leaves_name, grow_limit) local grow_leaves = ebiometrees.grow_leaves_closure(leaves_name) local function grow_tree(pos) local meta = minetest.get_meta(pos) @@ -80,8 +84,3 @@ function ebiometrees.tree_grower(leaves_name, grow_preferences, terminal_name, n return grow_tree end -function ebiometrees.root_sapling(pos) - minetest.set_node(pos, {name="ebiome:oak_sprout"}) - return false -end - diff --git a/mods/ebiometrees/tests/ebiometrees_api_spec.lua b/mods/ebiometrees/tests/ebiometrees_api_spec.lua new file mode 100644 index 0000000..d98268f --- /dev/null +++ b/mods/ebiometrees/tests/ebiometrees_api_spec.lua @@ -0,0 +1,40 @@ +package.path = "../?.lua;" .. package.path + +_G.ebiometrees = {} +require("api") +require("tree") +require("sapling") + +registries={} + + +function _G.ebiometrees.register_tree_trunks(m, n, d) + registries.trunks = m..":"..n +end +function _G.ebiometrees.register_tree_sprout(m, n, d) + registries.sprout = m..":"..n +end +function _G.ebiometrees.register_tree_leaves(m, n, d) + registries.leaves = m..":"..n +end +function _G.ebiometrees.register_tree_sapling(m, n, d) + registries.sapling = m..":"..n +end + +testtree = { + groups = { foo = 1} +} + +describe("Trees", function() + + it("can register tree", function() + assert.is_nil(ebiometrees.registered_trees["test:tree"]) + ebiometrees.register_tree("test:tree", testtree) + assert.is_not_nil(ebiometrees.registered_trees["test:tree"]) + end) + + it("attempts to register sapling", function() + assert.is_equal("test:tree", registries.sapling) + end) + +end) diff --git a/mods/ebiometrees/textures/ebiometrees_indicator.png b/mods/ebiometrees/textures/ebiometrees_indicator.png new file mode 100644 index 0000000..107283e Binary files /dev/null and b/mods/ebiometrees/textures/ebiometrees_indicator.png differ diff --git a/mods/ebiometrees/textures/ebiometrees_indicator2.png b/mods/ebiometrees/textures/ebiometrees_indicator2.png new file mode 100644 index 0000000..637871e Binary files /dev/null and b/mods/ebiometrees/textures/ebiometrees_indicator2.png differ diff --git a/mods/ebiometrees/textures/ebiometrees_indicator3.png b/mods/ebiometrees/textures/ebiometrees_indicator3.png new file mode 100644 index 0000000..6488584 Binary files /dev/null and b/mods/ebiometrees/textures/ebiometrees_indicator3.png differ diff --git a/mods/ebiometrees/tree.lua b/mods/ebiometrees/tree.lua index be0b012..4b3375f 100644 --- a/mods/ebiometrees/tree.lua +++ b/mods/ebiometrees/tree.lua @@ -1,52 +1,13 @@ + local function growth_timer(pos) minetest.get_node_timer(pos):start(3) local meta = minetest.get_meta(pos) - meta:set_int("ebiometrees:age", 0) meta:mark_as_private("ebiometrees:age") + meta:set_int("ebiometrees:age", 0) end - -local S = minetest.get_translator("ebiometrees") -function ebiometrees.register_tree(modname, basename, data) - -- register saplings - local sapling_name = modname..":"..basename.."_sapling" - local sprout_name = modname..":"..basename.."_sprout" - - local sapling_groups = table.copy(data.groups) - local sprout_groups = table.copy(data.groups) - sapling_groups.sapling = 1 - sapling_groups.snappy = 2 - sapling_groups.dig_immediate = 3 - sprout_groups.sapling = 1 - sprout_groups.snappy = 2 - minetest.register_node(sapling_name, { - description = S(data.description.." sapling"), - drawtype = "plantlike", - tiles = { modname.."_"..basename.."_sapling.png"}, - paramtype = "light", - on_timer = ebiometrees.grow_closure( - modname..":"..basename.."_sprout" - ), - sunlight_propagates = true, - walkable = false, - groups = sapling_groups, - on_construct = growth_timer - }) - minetest.register_node(sprout_name, { - description = S(data.description.." sprout"), - drawtype = "plantlike", - visual_scale = 1.4, - tiles = { modname.."_"..basename.."_sprout.png" }, - paramtype = "light", - sunlight_propagates = true, - walkable = false, - on_timer = ebiometrees.grow_closure( - modname..":"..basename.."_trunk_growing_terminal" - ), - groups = sprout_groups, - on_construct = growth_timer - }) - -- register tree leaves +function ebiometrees.register_tree_leaves(modname, basename, data) + local S = minetest.get_translator(modname) local leaves_groups = table.copy(data.groups) leaves_groups.leaves = 1 leaves_groups.leafdecay = 3 @@ -61,6 +22,54 @@ function ebiometrees.register_tree(modname, basename, data) is_ground_content = false, groups = leaves_groups }) +end + +function ebiometrees.register_tree_sapling(modname, basename, data) + -- register saplings + local S = minetest.get_translator(modname) + local sapling_groups = table.copy(data.groups) + sapling_groups.sapling = 1 + sapling_groups.snappy = 2 + sapling_groups.dig_immediate = 3 + minetest.register_node(modname..":"..basename.."_sapling", { + description = S(data.description.." sapling"), + drawtype = "plantlike", + tiles = { modname.."_"..basename.."_sapling.png"}, + paramtype = "light", + on_timer = ebiometrees.grow_closure( + modname..":"..basename.."_sprout" + ), + sunlight_propagates = true, + walkable = false, + groups = sapling_groups, + on_construct = growth_timer + }) +end + +function ebiometrees.register_tree_sprout(modname, basename, data) + -- register tree leaves + local S = minetest.get_translator(modname) + local sprout_groups = table.copy(data.groups) + sprout_groups.sapling = 1 + sprout_groups.snappy = 2 + minetest.register_node(modname..":"..basename.."_sprout", { + description = S(data.description.." sprout"), + drawtype = "plantlike", + visual_scale = 1.4, + tiles = { modname.."_"..basename.."_sprout.png" }, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + on_timer = ebiometrees.grow_closure( + modname..":"..basename.."_trunk_growing_terminal" + ), + groups = sprout_groups, + on_construct = growth_timer + }) +end + +function ebiometrees.register_tree_trunks(modname, basename, data) + local S = minetest.get_translator(modname) -- registers corresponding trunk nodes local trunk_groups = table.copy(data.groups) trunk_groups.choppy = 2 -- TODO: customizations @@ -154,7 +163,8 @@ function ebiometrees.register_tree(modname, basename, data) }, modname..":"..basename.."_trunk_growing_terminal", modname..":"..basename.."_trunk_normal_"..trunk_subtype, - 20 + 20, + 10 ) end minetest.register_node( diff --git a/mods/ebiome/biomes/grasslands.lua b/mods/electric_biomes/biomes/grasslands.lua similarity index 68% rename from mods/ebiome/biomes/grasslands.lua rename to mods/electric_biomes/biomes/grasslands.lua index b3b9f59..c28de5d 100644 --- a/mods/ebiome/biomes/grasslands.lua +++ b/mods/electric_biomes/biomes/grasslands.lua @@ -1,4 +1,4 @@ -local S = minetest.get_translator("ebiome") +local S = minetest.get_translator("electric_biomes") minetest.register_biome({ name = "grasslands", node_top = "mapgen_topsoil", @@ -10,13 +10,13 @@ minetest.register_biome({ heat_point = 50, humidity_point = 50, }) -ebiometrees.register_tree("ebiome", "oak",{ +ebiometrees.register_tree("electric_biomes:oak",{ description = "Oak", groups = {flammable = 2} }) -minetest.register_node("ebiome:grass", { +minetest.register_node("electric_biomes:grass", { description = S("Grass"), - tiles = {"ebiome_grass.png"}, + tiles = {"electric_biomes_grass.png"}, drawtype = "plantlike", visual_scale = 1.4, waving = 1, @@ -29,8 +29,8 @@ minetest.register_node("ebiome:grass", { fuel = 1 }, }) -minetest.register_alias("grass", "ebiome:grass") -minetest.register_alias("grassplant", "ebiome:grass") +minetest.register_alias("grass", "electric_biomes:grass") +minetest.register_alias("grassplant", "electric_biomes:grass") minetest.register_decoration({ deco_type = "simple", @@ -40,7 +40,7 @@ minetest.register_decoration({ biomes = {"grasslands"}, y_max = 200, y_min = 1, - decoration = "ebiome:grass", + decoration = "electric_biomes:grass", }) diff --git a/mods/electric_biomes/init.lua b/mods/electric_biomes/init.lua new file mode 100644 index 0000000..10262d3 --- /dev/null +++ b/mods/electric_biomes/init.lua @@ -0,0 +1,2 @@ +dofile(minetest.get_modpath("electric_biomes") .. "/biomes/grasslands.lua") + diff --git a/mods/electric_biomes/mod.conf b/mods/electric_biomes/mod.conf new file mode 100644 index 0000000..60d975d --- /dev/null +++ b/mods/electric_biomes/mod.conf @@ -0,0 +1,3 @@ +depends = ebiome, ebiometrees +description = electric game biomes +name = electric_biomes diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_xjunction.png.kra b/mods/electric_biomes/textures/ebiome_oak_trunk_normal_xjunction.png.kra similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_xjunction.png.kra rename to mods/electric_biomes/textures/ebiome_oak_trunk_normal_xjunction.png.kra diff --git a/mods/ebiome/textures/ebiome_grass.png b/mods/electric_biomes/textures/electric_biomes_grass.png similarity index 100% rename from mods/ebiome/textures/ebiome_grass.png rename to mods/electric_biomes/textures/electric_biomes_grass.png diff --git a/mods/ebiome/textures/ebiome_oak_leaves.png b/mods/electric_biomes/textures/electric_biomes_oak_leaves.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_leaves.png rename to mods/electric_biomes/textures/electric_biomes_oak_leaves.png diff --git a/mods/ebiome/textures/ebiome_oak_leaves_simple.png b/mods/electric_biomes/textures/electric_biomes_oak_leaves_simple.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_leaves_simple.png rename to mods/electric_biomes/textures/electric_biomes_oak_leaves_simple.png diff --git a/mods/ebiome/textures/ebiome_oak_sapling.png b/mods/electric_biomes/textures/electric_biomes_oak_sapling.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_sapling.png rename to mods/electric_biomes/textures/electric_biomes_oak_sapling.png diff --git a/mods/ebiome/textures/ebiome_oak_sprout.png b/mods/electric_biomes/textures/electric_biomes_oak_sprout.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_sprout.png rename to mods/electric_biomes/textures/electric_biomes_oak_sprout.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_growing_corner.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_corner.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_growing_corner.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_corner.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_growing_normal.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_normal.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_growing_normal.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_normal.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_growing_slice.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_slice.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_growing_slice.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_slice.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_growing_terminal.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_terminal.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_growing_terminal.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_terminal.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_growing_tjunction.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_tjunction.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_growing_tjunction.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_tjunction.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_growing_top.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_top.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_growing_top.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_top.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_growing_xjunction.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_xjunction.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_growing_xjunction.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_growing_xjunction.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_corner.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_corner.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_corner.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_corner.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_normal.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_normal.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_normal.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_normal.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_slice.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_slice.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_slice.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_slice.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_terminal.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_terminal.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_terminal.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_terminal.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_tjunction.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_tjunction.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_tjunction.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_tjunction.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_top.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_top.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_top.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_top.png diff --git a/mods/ebiome/textures/ebiome_oak_trunk_normal_xjunction.png b/mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_xjunction.png similarity index 100% rename from mods/ebiome/textures/ebiome_oak_trunk_normal_xjunction.png rename to mods/electric_biomes/textures/electric_biomes_oak_trunk_normal_xjunction.png