diff options
Diffstat (limited to 'advtrains/misc_nodes.lua')
-rw-r--r-- | advtrains/misc_nodes.lua | 308 |
1 files changed, 203 insertions, 105 deletions
diff --git a/advtrains/misc_nodes.lua b/advtrains/misc_nodes.lua index bcf7329..6f4f452 100644 --- a/advtrains/misc_nodes.lua +++ b/advtrains/misc_nodes.lua @@ -1,6 +1,31 @@ --all nodes that do not fit in any other category -function advtrains.register_platform(modprefix, preset) +local diagonalbox = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.5, -0.25, 0.5, -0.8 }, + {-0.25, -0.5, 0.5 , 0, 0.5, -0.55}, + {0, -0.5, 0.5 , 0.25, 0.5, -0.3 }, + {0.25 , -0.5, 0.5, 0.5, 0.5, -0.05} + } +} + +local diagonalbox_low = { + type = "fixed", + fixed = { + {-0.5, -0.5, 0.5, -0.25, 0, -0.8 }, + {-0.25, -0.5, 0.5 , 0, 0, -0.55}, + {0, -0.5, 0.5 , 0.25, 0, -0.3 }, + {0.25 , -0.5, 0.5, 0.5, 0, -0.05} + } +} + +local nodename_override = { + ["darkage:marble"] = "darkage_marble", + ["technic:marble"] = "technic_marble", +} + +function advtrains.register_platform(modprefix, preset, use_full_nodename) local ndef=minetest.registered_nodes[preset] if not ndef then minetest.log("warning", " register_platform couldn't find preset node "..preset) @@ -9,115 +34,188 @@ function advtrains.register_platform(modprefix, preset) local btex=ndef.tiles if type(btex)=="table" then btex=btex[1] + if type(btex) == "table" then + btex = btex.name + if type(btex) ~= "string" then + error("Error in tiles when registering a platform for "..preset.."!") + end + end end local desc=ndef.description or "" - local nodename=string.match(preset, ":(.+)$") - minetest.register_node(modprefix .. ":platform_low_"..nodename, { - description = attrans("@1 Platform (low)", desc), - tiles = {btex.."^advtrains_platform.png", btex, btex, btex, btex, btex}, - groups = {cracky = 1, not_blocking_trains = 1, platform=1}, - sounds = ndef.sounds, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, -0.1, -0.1, 0.5, 0 , 0.5}, - {-0.5, -0.5, 0 , 0.5, -0.1, 0.5} + local nodename = nodename_override[preset] + + if nodename == nil then + nodename = string.match(preset, ":(.+)$") + end + -- minetest.log("action", "DEBUG: will register platforms for "..preset.." using nodename = ("..nodename..")") + + if ch_core.is_shape_allowed(preset, "advtrains", "platform_low") then + minetest.register_node(modprefix .. ":platform_low_"..nodename, { + description = attrans("@1 Platform (low)", desc), + tiles = {btex.."^advtrains_platform.png", btex, btex, btex, btex, btex}, + groups = {cracky = 1, not_blocking_trains = 1, platform=2}, + sounds = ndef.sounds, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, -0.1, -0.1, 0.5, 0 , 0.5}, + {-0.5, -0.5, 0 , 0.5, -0.1, 0.5} + }, }, - }, - paramtype2="facedir", - paramtype = "light", - sunlight_propagates = true, - }) - minetest.register_node(modprefix .. ":platform_high_"..nodename, { - description = attrans("@1 Platform (high)", desc), - tiles = {btex.."^advtrains_platform.png", btex, btex, btex, btex, btex}, - groups = {cracky = 1, not_blocking_trains = 1, platform=2}, - sounds = ndef.sounds, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = { - {-0.5, 0.3, 0, 0.5, 0.5, 0.5}, - {-0.5, -0.5, 0.1 , 0.5, 0.3, 0.5} + paramtype2="facedir", + paramtype = "light", + sunlight_propagates = true, + }) + minetest.register_craft({ + type="shapeless", + output = modprefix .. ":platform_low_"..nodename.." 4", + recipe = { + "dye:yellow", preset }, - }, - paramtype2="facedir", - paramtype = "light", - sunlight_propagates = true, - }) - local diagonalbox = { - type = "fixed", - fixed = { - {-0.5, -0.5, 0.5, -0.25, 0.5, -0.8 }, - {-0.25, -0.5, 0.5 , 0, 0.5, -0.55}, - {0, -0.5, 0.5 , 0.25, 0.5, -0.3 }, - {0.25 , -0.5, 0.5, 0.5, 0.5, -0.05} - } - } - minetest.register_node(modprefix..":platform_45_"..nodename, { - description = attrans("@1 Platform (45 degree)", desc), - groups = {cracky = 1, not_blocking_trains = 1, platform=2}, - sounds = ndef.sounds, - drawtype = "mesh", - mesh = "advtrains_platform_diag.b3d", - selection_box = diagonalbox, - collision_box = diagonalbox, - tiles = {btex, btex.."^advtrains_platform_diag.png"}, - paramtype2 = "facedir", - paramtype = "light", - sunlight_propagates = true, - }) - local diagonalbox_low = { - type = "fixed", - fixed = { - {-0.5, -0.5, 0.5, -0.25, 0, -0.8 }, - {-0.25, -0.5, 0.5 , 0, 0, -0.55}, - {0, -0.5, 0.5 , 0.25, 0, -0.3 }, - {0.25 , -0.5, 0.5, 0.5, 0, -0.05} + }) + end + + if ch_core.is_shape_allowed(preset, "advtrains", "platform_high") then + minetest.register_node(modprefix .. ":platform_high_"..nodename, { + description = attrans("@1 Platform (high)", desc), + tiles = {btex.."^advtrains_platform.png", btex, btex, btex, btex, btex}, + groups = {cracky = 1, not_blocking_trains = 1, platform=1}, + sounds = ndef.sounds, + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + {-0.5, 0.3, 0, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.1 , 0.5, 0.3, 0.5} + }, + }, + paramtype2="facedir", + paramtype = "light", + sunlight_propagates = true, + }) + minetest.register_craft({ + type="shapeless", + output = modprefix .. ":platform_high_"..nodename.." 4", + recipe = { + "dye:yellow", preset, preset + }, + }) + end + + if ch_core.is_shape_allowed(preset, "advtrains", "platform_45_high") then + minetest.register_node(modprefix..":platform_45_"..nodename, { + description = attrans("@1 Platform (45 degree)", desc), + groups = {cracky = 1, not_blocking_trains = 1, platform=3}, + sounds = ndef.sounds, + drawtype = "mesh", + mesh = "advtrains_platform_diag.b3d", + selection_box = diagonalbox, + collision_box = diagonalbox, + tiles = {btex, btex.."^advtrains_platform_diag.png"}, + paramtype2 = "facedir", + paramtype = "light", + sunlight_propagates = true, + }) + minetest.register_craft({ + type="shapeless", + output = modprefix .. ":platform_45_"..nodename.." 2", + recipe = { + "dye:yellow", preset, preset, preset } - } - minetest.register_node(modprefix..":platform_45_low_"..nodename, { - description = attrans("@1 Platform (low, 45 degree)", desc), - groups = {cracky = 1, not_blocking_trains = 1, platform=2}, - sounds = ndef.sounds, - drawtype = "mesh", - mesh = "advtrains_platform_diag_low.b3d", - selection_box = diagonalbox_low, - collision_box = diagonalbox_low, - tiles = {btex, btex.."^advtrains_platform_diag.png"}, - paramtype2 = "facedir", - paramtype = "light", - sunlight_propagates = true, - }) - minetest.register_craft({ - type="shapeless", - output = modprefix .. ":platform_high_"..nodename.." 4", - recipe = { - "dye:yellow", preset, preset - }, - }) - minetest.register_craft({ - type="shapeless", - output = modprefix .. ":platform_low_"..nodename.." 4", - recipe = { - "dye:yellow", preset - }, - }) - minetest.register_craft({ - type="shapeless", - output = modprefix .. ":platform_45_"..nodename.." 2", - recipe = { - "dye:yellow", preset, preset, preset - } - }) - minetest.register_craft({ - type="shapeless", - output = modprefix .. ":platform_45_low_"..nodename.." 2", - recipe = { modprefix .. ":platform_45_"..nodename }, - }) + }) + end + + if ch_core.is_shape_allowed(preset, "advtrains", "platform_45_low") then + minetest.register_node(modprefix..":platform_45_low_"..nodename, { + description = attrans("@1 Platform (low, 45 degree)", desc), + groups = {cracky = 1, not_blocking_trains = 1, platform=4}, + sounds = ndef.sounds, + drawtype = "mesh", + mesh = "advtrains_platform_diag_low.b3d", + selection_box = diagonalbox_low, + collision_box = diagonalbox_low, + tiles = {btex, btex.."^advtrains_platform_diag.png"}, + paramtype2 = "facedir", + paramtype = "light", + sunlight_propagates = true, + }) + minetest.register_craft({ + type="shapeless", + output = modprefix .. ":platform_45_low_"..nodename.." 2", + recipe = { modprefix .. ":platform_45_"..nodename }, + }) + end end +-- advtrains.register_platform("advtrains", "default:stonebrick") +-- advtrains.register_platform("advtrains", "default:sandstonebrick") + +--[[ +local platform_materials = { + "basic_materials:cement_block", + "basic_materials:concrete_block", + "building_blocks:Tar", + "darkage:basalt", + "darkage:basalt_brick", + -- "darkage:basalt_cobble", + --"darkage:gneiss", + "darkage:gneiss_brick", + --"darkage:gneiss_cobble", + {"darkage:marble"}, + -- "darkage:ors", + "darkage:ors_brick", + -- "darkage:ors_cobble", + "darkage:serpentine", + -- "darkage:slate", + "darkage:slate_brick", + -- "darkage:slate_cobble", + "darkage:stone_brick", + "default:acacia_wood", + "default:aspen_wood", + "default:desert_stone", + "default:desert_stone_block", + "default:junglewood", + "default:pine_wood", + "default:steelblock", + "default:stone", + "default:stonebrick", + "default:stone_block", + "default:wood", + "moretrees:cedar_planks", + "moretrees:cherrytree_planks", + "moretrees:chestnut_tree_planks", + "moretrees:date_palm_planks", + "moretrees:birch_planks", + -- "moretrees:beech_planks", + "moretrees:apple_tree_planks", + "moretrees:ebony_planks", + "moretrees:fir_planks", + "moretrees:oak_planks", + "moretrees:palm_planks", + "moretrees:plumtree_planks", + "moretrees:rubber_tree_planks", + "moretrees:sequoia_planks", + "moretrees:spruce_planks", + "moretrees:poplar_planks", + "moretrees:willow_planks", + "moreblocks:wood_tile_center", + "moreblocks:wood_tile_full", + {"technic:marble"}, +} +for _, name in ipairs(platform_materials) do + local nodename, use_full_nodename + if type(name) == "string" then + nodename = name + else + nodename = name[1] + use_full_nodename = true + end -advtrains.register_platform("advtrains", "default:stonebrick") -advtrains.register_platform("advtrains", "default:sandstonebrick") + if minetest.registered_nodes[nodename] then + advtrains.register_platform("advtrains", nodename, use_full_nodename) + else + minetest.log("warning", nodename.." not find as a node to build a platform") + end +end +]] |