diff options
Diffstat (limited to 'railtrack/init.lua')
-rw-r--r-- | railtrack/init.lua | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/railtrack/init.lua b/railtrack/init.lua new file mode 100644 index 0000000..373fcaa --- /dev/null +++ b/railtrack/init.lua @@ -0,0 +1,197 @@ +local modpath = minetest.get_modpath(minetest.get_current_modname()) + +dofile(modpath.."/railtrack.lua") + +railtrack:register_rail(":default:rail", { + description = "Rail", + tiles = {"default_rail.png", "default_rail_curved.png", + "default_rail_t_junction.png", "default_rail_crossing.png"}, + railtype = "rail", +}) + +railtrack:register_rail("railtrack:superrail", { + description = "Superconducting Rail", + tiles = {"carts_rail_sup.png", "carts_rail_curved_sup.png", + "carts_rail_t_junction_sup.png", "carts_rail_crossing_sup.png"}, + railtype = "superrail", + acceleration = 0, +}) + +railtrack:register_rail("railtrack:powerrail", { + description = "Powered Rail", + tiles = {"carts_rail_pwr.png", "carts_rail_curved_pwr.png", + "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"}, + railtype = "powerrail", + acceleration = 4, + mesecons = { + effector = { + action_on = function(pos, node) + railtrack:set_acceleration(pos, 4) + end, + action_off = function(pos, node) + railtrack:set_acceleration(pos, RAILTRACK_FRICTION_FLAT) + end, + }, + }, +}) + +railtrack:register_rail("railtrack:brakerail", { + description = "Braking Rail", + tiles = {"carts_rail_brk.png", "carts_rail_curved_brk.png", + "carts_rail_t_junction_brk.png", "carts_rail_crossing_brk.png"}, + railtype = "brakerail", + acceleration = -4, + mesecons = { + effector = { + action_on = function(pos, node) + railtrack:set_acceleration(pos, -4) + end, + action_off = function(pos, node) + railtrack:set_acceleration(pos, RAILTRACK_FRICTION_FLAT) + end, + }, + }, +}) + +railtrack:register_rail("railtrack:switchrail", { + description = "Switching Rail", + tiles = {"carts_rail_swt.png", "carts_rail_curved_swt.png", + "carts_rail_t_junction_swt.png", "carts_rail_crossing_swt.png"}, + railtype = "switchrail", + acceleration = 0, + mesecons = { + effector = { + action_on = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("rotations", "RFLB") + end, + action_off = function(pos, node) + local meta = minetest.get_meta(pos) + meta:set_string("rotations", nil) + end, + }, + }, +}) + +minetest.register_privilege("rails", "Player can dig and place rails.") + +minetest.register_tool("railtrack:fixer", { + description = "Rail Fixer", + inventory_image = "railtrack_fixer.png", + wield_image = "railtrack_fixer.png", + on_use = function(itemstack, user, pointed_thing) + local pos = minetest.get_pointed_thing_position(pointed_thing, false) + local name = user:get_player_name() + if not pos or not name or pointed_thing.type ~= "node" then + return + end + if not railtrack:is_railnode(pos) then + minetest.chat_send_player(name, "Not a rail node!") + return + end + if not minetest.is_singleplayer() then + if not minetest.check_player_privs(name, {rails=true}) then + minetest.chat_send_player(name, "Requires rails privilege") + return + end + end + local node = minetest.get_node(pos) + minetest.remove_node(pos) + set_node(pos, node) + local def = minetest.registered_items[node.name] or {} + if type(def.after_place_node) == "function" then + def.after_place_node(pos, user, node) + end + end, +}) + +minetest.register_tool("railtrack:inspector", { + description = "Rail Inspector", + inventory_image = "railtrack_inspector.png", + wield_image = "railtrack_inspector.png", + on_use = function(itemstack, user, pointed_thing) + local name = user:get_player_name() + local pos = minetest.get_pointed_thing_position(pointed_thing, false) + if not name or not pos then + return + end + local node = minetest.get_node(pos) or {} + if not railtrack:is_railnode(pos) or not node.name then + minetest.chat_send_player(name, "Not a rail node!") + return + end + local ref = minetest.registered_items[node.name] or {} + local meta = minetest.get_meta(pos) + local form = "" + local size = 2.5 + form = form.."label[0.5,0.5;POS: "..minetest.pos_to_string(pos).."]" + local railtype = ref.railtype or "NIL" + form = form.."label[0.5,1.0;RAILTYPE: "..railtype.."]" + local contype = meta:get_string("contype") or "NIL" + form = form.."label[0.5,1.5;CONTYPE: "..contype.."]" + local accel = meta:get_string("acceleration") or "NIL" + form = form.."label[0.5,2.0;ACCEL: "..accel.."]" + local s_junc = meta:get_string("junctions") + if s_junc then + local junctions = minetest.deserialize(s_junc) + if junctions then + form = form.."label[0.5,2.5;JUNCTIONS:]" + for i, p in ipairs(junctions) do + size = size + 0.5 + form = form.."label[0.5,"..size..";#"..i.." " + ..minetest.pos_to_string(p).."]" + end + end + end + local s_cons = meta:get_string("connections") + if s_cons then + local cons = minetest.deserialize(s_cons) + if cons then + size = size + 0.5 + form = form.."label[0.5,"..size..";CONNECTIONS:]" + for i, p in pairs(cons) do + size = size + 0.5 + form = form.."label[0.5,"..size..";#"..i.." " + ..minetest.pos_to_string(p).."]" + end + end + end + local s_rots = meta:get_string("rotations") + if s_rots then + size = size + 0.5 + form = form.."label[0.5,"..size..";ROTATIONS: "..s_rots.."]" + end + form = form.."button_exit[3.0,"..(size + 1)..";2,0.5;;Ok]" + form = "size[8,"..(size + 2).."]"..form + minetest.show_formspec(name, "info", form) + end, +}) + +minetest.register_craft({ + output = "railtrack:powerrail 2", + recipe = { + {"default:rail", "default:mese_crystal_fragment", "default:rail"}, + } +}) + +minetest.register_craft({ + output = "railtrack:brakerail 2", + recipe = { + {"default:rail", "default:coal_lump", "default:rail"}, + } +}) + +minetest.register_craft({ + output = "railtrack:switchrail 2", + recipe = { + {"default:rail", "default:mese", "default:rail"}, + } +}) + +minetest.register_craft({ + output = "railtrack:superrail 2", + recipe = { + {"default:rail", "default:diamond", "default:rail"}, + } +}) + |