diff --git a/init.lua b/init.lua index baeab5a..e68e2b4 100644 --- a/init.lua +++ b/init.lua @@ -442,6 +442,17 @@ minetest.register_craft({ -- Mesecon support -- +get_rail_rules = function() + rules = {} + for y = -1, 1 do + table.insert(rules,{x = -1, y = y, z = 0}) + table.insert(rules,{x = 1, y = y, z = 0}) + table.insert(rules,{x = 0, y = y, z = -1}) + table.insert(rules,{x = 0, y = y, z = 1}) + end + return rules +end + minetest.register_node(":default:rail", { description = "Rail", drawtype = "raillike", @@ -456,7 +467,7 @@ minetest.register_node(":default:rail", { -- but how to specify the dimensions for curved and sideways rails? fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, - groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1}, + groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1,connect_to_raillike=1}, }) minetest.register_node("carts:powerrail", { @@ -473,25 +484,46 @@ minetest.register_node("carts:powerrail", { -- but how to specify the dimensions for curved and sideways rails? fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, - groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1}, - - after_place_node = function(pos, placer, itemstack) - if not mesecon then - minetest.env:get_meta(pos):set_string("cart_acceleration", "0.5") - end - end, + groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1,connect_to_raillike=1}, mesecons = { - effector = { - action_on = function(pos, node) - minetest.env:get_meta(pos):set_string("cart_acceleration", "0.5") - end, - - action_off = function(pos, node) - minetest.env:get_meta(pos):set_string("cart_acceleration", "0") - end, - }, + conductor = { + state = mesecon.state.off, + onstate = "carts:powerrail_on", + rules = get_rail_rules() + } + }, + on_construct = function(pos) + minetest.env:get_meta(pos):set_string("cart_acceleration", "0") + end +}) + +minetest.register_node("carts:powerrail_on", { + description = "Powered Rail (you hacker you!)", + drawtype = "raillike", + tiles = {"carts_rail_pwr_on.png", "carts_rail_curved_pwr_on.png", "carts_rail_t_junction_pwr_on.png", "carts_rail_crossing_pwr_on.png"}, + inventory_image = "carts_rail_pwr_on.png", + wield_image = "carts_rail_pwr_on.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + -- but how to specify the dimensions for curved and sideways rails? + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, + groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1,connect_to_raillike=1,not_in_creative_inventory=1}, + drop = "carts:powerrail", + mesecons = { + conductor = { + state = mesecon.state.on, + offstate = "carts:powerrail", + rules = get_rail_rules() + } + }, + on_construct = function(pos) + minetest.env:get_meta(pos):set_string("cart_acceleration", "0.5") + end }) minetest.register_node("carts:brakerail", { @@ -508,25 +540,46 @@ minetest.register_node("carts:brakerail", { -- but how to specify the dimensions for curved and sideways rails? fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, - groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1}, - - after_place_node = function(pos, placer, itemstack) - if not mesecon then - minetest.env:get_meta(pos):set_string("cart_acceleration", "-0.2") - end - end, - + groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1,connect_to_raillike=1}, + mesecons = { - effector = { - action_on = function(pos, node) - minetest.env:get_meta(pos):set_string("cart_acceleration", "-0.2") - end, - - action_off = function(pos, node) - minetest.env:get_meta(pos):set_string("cart_acceleration", "0") - end, - }, + conductor = { + state = mesecon.state.off, + onstate = "carts:brakerail_on", + rules = get_rail_rules() + } + }, + on_construct = function(pos) + minetest.env:get_meta(pos):set_string("cart_acceleration", "0") + end +}) + +minetest.register_node("carts:brakerail_on", { + description = "Brake Rail (you hacker you!)", + drawtype = "raillike", + tiles = {"carts_rail_brk_on.png", "carts_rail_curved_brk_on.png", "carts_rail_t_junction_brk_on.png", "carts_rail_crossing_brk_on.png"}, + inventory_image = "carts_rail_brk_on.png", + wield_image = "carts_rail_brk_on.png", + paramtype = "light", + is_ground_content = true, + walkable = false, + selection_box = { + type = "fixed", + -- but how to specify the dimensions for curved and sideways rails? + fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, }, + groups = {bendy=2,snappy=1,dig_immediate=2,attached_node=1,rail=1,connect_to_raillike=1,not_in_creative_inventory=1}, + drop = "carts:brakerail", + mesecons = { + conductor = { + state = mesecon.state.on, + offstate = "carts:brakerail", + rules = get_rail_rules() + } + }, + on_construct = function(pos) + minetest.env:get_meta(pos):set_string("cart_acceleration", "-0.2") + end }) minetest.register_craft({ diff --git a/textures/carts_rail_brk.png b/textures/carts_rail_brk.png index f3e0ff9..c10ab6d 100644 Binary files a/textures/carts_rail_brk.png and b/textures/carts_rail_brk.png differ diff --git a/textures/carts_rail_brk_on.png b/textures/carts_rail_brk_on.png new file mode 100644 index 0000000..f3e0ff9 Binary files /dev/null and b/textures/carts_rail_brk_on.png differ diff --git a/textures/carts_rail_crossing_brk.png b/textures/carts_rail_crossing_brk.png index 3ace508..372a8fc 100644 Binary files a/textures/carts_rail_crossing_brk.png and b/textures/carts_rail_crossing_brk.png differ diff --git a/textures/carts_rail_crossing_brk_on.png b/textures/carts_rail_crossing_brk_on.png new file mode 100644 index 0000000..3ace508 Binary files /dev/null and b/textures/carts_rail_crossing_brk_on.png differ diff --git a/textures/carts_rail_crossing_pwr.png b/textures/carts_rail_crossing_pwr.png index d63f133..dc33371 100644 Binary files a/textures/carts_rail_crossing_pwr.png and b/textures/carts_rail_crossing_pwr.png differ diff --git a/textures/carts_rail_crossing_pwr_on.png b/textures/carts_rail_crossing_pwr_on.png new file mode 100644 index 0000000..d63f133 Binary files /dev/null and b/textures/carts_rail_crossing_pwr_on.png differ diff --git a/textures/carts_rail_curved_brk.png b/textures/carts_rail_curved_brk.png index 5a84918..0291946 100644 Binary files a/textures/carts_rail_curved_brk.png and b/textures/carts_rail_curved_brk.png differ diff --git a/textures/carts_rail_curved_brk_on.png b/textures/carts_rail_curved_brk_on.png new file mode 100644 index 0000000..5a84918 Binary files /dev/null and b/textures/carts_rail_curved_brk_on.png differ diff --git a/textures/carts_rail_curved_pwr.png b/textures/carts_rail_curved_pwr.png index e2ac67a..e085861 100644 Binary files a/textures/carts_rail_curved_pwr.png and b/textures/carts_rail_curved_pwr.png differ diff --git a/textures/carts_rail_curved_pwr_on.png b/textures/carts_rail_curved_pwr_on.png new file mode 100644 index 0000000..e2ac67a Binary files /dev/null and b/textures/carts_rail_curved_pwr_on.png differ diff --git a/textures/carts_rail_pwr.png b/textures/carts_rail_pwr.png index 95f33f6..d553427 100644 Binary files a/textures/carts_rail_pwr.png and b/textures/carts_rail_pwr.png differ diff --git a/textures/carts_rail_pwr_on.png b/textures/carts_rail_pwr_on.png new file mode 100644 index 0000000..95f33f6 Binary files /dev/null and b/textures/carts_rail_pwr_on.png differ diff --git a/textures/carts_rail_t_junction_brk.png b/textures/carts_rail_t_junction_brk.png index c4fdbf4..76b9da7 100644 Binary files a/textures/carts_rail_t_junction_brk.png and b/textures/carts_rail_t_junction_brk.png differ diff --git a/textures/carts_rail_t_junction_brk_on.png b/textures/carts_rail_t_junction_brk_on.png new file mode 100644 index 0000000..6278766 Binary files /dev/null and b/textures/carts_rail_t_junction_brk_on.png differ diff --git a/textures/carts_rail_t_junction_pwr.png b/textures/carts_rail_t_junction_pwr.png index 93b2a94..dcb20f7 100644 Binary files a/textures/carts_rail_t_junction_pwr.png and b/textures/carts_rail_t_junction_pwr.png differ diff --git a/textures/carts_rail_t_junction_pwr_on.png b/textures/carts_rail_t_junction_pwr_on.png new file mode 100644 index 0000000..5592214 Binary files /dev/null and b/textures/carts_rail_t_junction_pwr_on.png differ