diff options
170 files changed, 4604 insertions, 0 deletions
diff --git a/infrastructure/README b/infrastructure/README new file mode 100644 index 0000000..feb88a1 --- /dev/null +++ b/infrastructure/README @@ -0,0 +1,14 @@ +This is my fork of the infrastructure mod. It's essentially aimed at servers running webdesigner97's streetsmod that want stuff from infrastructure too (dreambuilder_game in particular), and is intended to add on to streetsmod instead of replacing it. + +Originally based on Streets by webdesigner97 +Modified by Ragnarok/Vibender +Modified again by cheapie + +Depends: default, moreblocks, mesecons, technic, streetsmod + +Licenses: + Code: WTFPL + Line textures: WTFPL + Other Textures: CC BY-SA 3.0 Unported, http://creativecommons.org/licenses/by-sa/3.0/ + Sounds: CC BY-SA 3.0 Unported, http://creativecommons.org/licenses/by-sa/3.0/ + diff --git a/infrastructure/advanced_aircraft_warning_light.lua b/infrastructure/advanced_aircraft_warning_light.lua new file mode 100644 index 0000000..c46edd4 --- /dev/null +++ b/infrastructure/advanced_aircraft_warning_light.lua @@ -0,0 +1,119 @@ +-- Aircraft warning light + minetest.register_abm( { + nodenames = {"infrastructure:aircraft_warning_light_bright", "infrastructure:aircraft_warning_light_dark"}, + interval = 2, + chance = 1, + action = function(pos, node) + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:aircraft_warning_light_bright" then + minetest.swap_node(pos, {name = "infrastructure:aircraft_warning_light_dark", param2 = node.param2}) + elseif node.name == "infrastructure:aircraft_warning_light_dark" then + minetest.swap_node(pos, {name = "infrastructure:aircraft_warning_light_bright", param2 = node.param2}) + end + end + }) + + minetest.register_node("infrastructure:aircraft_warning_light_bright", { + description = "Aircraft warning light", + tiles = { + "infrastructure_aircraft_warning_light_top_bright.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_aircraft_warning_light_side_bright.png", + "infrastructure_aircraft_warning_light_side_bright.png", + "infrastructure_aircraft_warning_light_side_bright.png", + "infrastructure_aircraft_warning_light_side_bright.png" + }, + drawtype = "nodebox", + paramtype = "light", + groups = {cracky = 1}, + light_source = AIRCRAFT_WARNING_LIGHT_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-1/128, 1/4, -1/128, 1/128, 3/8, 1/128}, + + {-1/4, -1/8, 0, 1/4, 1/4, 0}, + {0, -1/8, -1/4, 0, 1/4, 1/4}, + + {-1/16, -1/8, -1/16, 1/16, 1/16, 1/16}, + + {-1/4, -1/4, -1/8, 1/4, -1/8, 1/8}, + {-1/8, -1/4, -1/4, 1/8, -1/8, 1/4}, + + {-1/8, -3/8, -1/8, 1/8, -1/4, 1/8}, + + {-3/16, -1/2, -3/16, 3/16, -3/8, 3/16} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/128, 1/4, -1/128, 1/128, 3/8, 1/128}, + + {-1/4, -1/8, 0, 1/4, 1/4, 0}, + {0, -1/8, -1/4, 0, 1/4, 1/4}, + + {-1/16, -1/8, -1/16, 1/16, 1/16, 1/16}, + + {-1/4, -1/4, -1/8, 1/4, -1/8, 1/8}, + {-1/8, -1/4, -1/4, 1/8, -1/8, 1/4}, + + {-1/8, -3/8, -1/8, 1/8, -1/4, 1/8}, + + {-3/16, -1/2, -3/16, 3/16, -3/8, 3/16} + } + } + }) + + minetest.register_node("infrastructure:aircraft_warning_light_dark", { + tiles = { + "infrastructure_aircraft_warning_light_top_dark.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_aircraft_warning_light_side_dark.png", + "infrastructure_aircraft_warning_light_side_dark.png", + "infrastructure_aircraft_warning_light_side_dark.png", + "infrastructure_aircraft_warning_light_side_dark.png" + }, + drawtype = "nodebox", + paramtype = "light", + groups = {cracky = 1, not_in_creative_inventory = 1}, + drop = "infrastructure:aircraft_warning_light_bright", + node_box = { + type = "fixed", + fixed = { + {-1/128, 1/4, -1/128, 1/128, 3/8, 1/128}, + + {-1/4, -1/8, 0, 1/4, 1/4, 0}, + {0, -1/8, -1/4, 0, 1/4, 1/4}, + + {-1/16, -1/8, -1/16, 1/16, 1/16, 1/16}, + + {-1/4, -1/4, -1/8, 1/4, -1/8, 1/8}, + {-1/8, -1/4, -1/4, 1/8, -1/8, 1/4}, + + {-1/8, -3/8, -1/8, 1/8, -1/4, 1/8}, + + {-3/16, -1/2, -3/16, 3/16, -3/8, 3/16} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/128, 1/4, -1/128, 1/128, 3/8, 1/128}, + + {-1/4, -1/8, 0, 1/4, 1/4, 0}, + {0, -1/8, -1/4, 0, 1/4, 1/4}, + + {-1/16, -1/8, -1/16, 1/16, 1/16, 1/16}, + + {-1/4, -1/4, -1/8, 1/4, -1/8, 1/8}, + {-1/8, -1/4, -1/4, 1/8, -1/8, 1/4}, + + {-1/8, -3/8, -1/8, 1/8, -1/4, 1/8}, + + {-3/16, -1/2, -3/16, 3/16, -3/8, 3/16} + } + } + }) + + minetest.register_alias("infrastructure:aircraft_warning_light", "infrastructure:aircraft_warning_light_bright") diff --git a/infrastructure/advanced_automatic_warning_device.lua b/infrastructure/advanced_automatic_warning_device.lua new file mode 100644 index 0000000..3e2f7a2 --- /dev/null +++ b/infrastructure/advanced_automatic_warning_device.lua @@ -0,0 +1,410 @@ +-- Automatic warning device +local sound_handles = {} +local function play_bell(pos) + local pos_hash = minetest.hash_node_position(pos) + sound_handles[pos_hash] = minetest.sound_play("infrastructure_ebell", + {pos = pos, gain = AUTOMATIC_WARNING_DEVICE_VOLUME, loop = true, max_hear_distance = 30,}) + +end + +local function stop_bell(pos, node) + local pos_hash = minetest.hash_node_position(pos) + local sound_handle = sound_handles[pos_hash] + if sound_handle then + minetest.sound_stop(sound_handle) + sound_handles[pos_hash] = nil + end +end + function left_light_direction(pos, param2) + if param2 == 0 then + pos.x = pos.x - 1 + elseif param2 == 1 then + pos.z = pos.z + 1 + elseif param2 == 2 then + pos.x = pos.x + 1 + elseif param2 == 3 then + pos.z = pos.z - 1 + end + end + + function right_light_direction(pos, param2) + if param2 == 0 then + pos.x = pos.x + 2 + elseif param2 == 1 then + pos.z = pos.z - 2 + elseif param2 == 2 then + pos.x = pos.x - 2 + elseif param2 == 3 then + pos.z = pos.z + 2 + end + end + + function lights_enabled(pos, node) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + if (node.name == "infrastructure:automatic_warning_device_middle_center_3") then + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_center_2", param2 = node.param2}) + left_light_direction(pos, param2) + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_left_2", param2 = node.param2}) + right_light_direction(pos, param2) + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_right_1", param2 = node.param2}) + elseif node.name == "infrastructure:automatic_warning_device_middle_center_2" then + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_center_3", param2 = node.param2}) + left_light_direction(pos, param2) + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_left_1", param2 = node.param2}) + right_light_direction(pos, param2) + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_right_2", param2 = node.param2}) + end + end + + function lights_disabled(pos, node) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_center_1", param2 = node.param2}) + left_light_direction(pos, param2) + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_left_1", param2 = node.param2}) + right_light_direction(pos, param2) + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_right_1", param2 = node.param2}) + end + + function activate_lights(pos, node) + pos.y = pos.y + 2 + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:automatic_warning_device_middle_center_1" then + play_bell(pos) + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_center_2", param2 = node.param2}) + elseif (node.name == "infrastructure:automatic_warning_device_middle_center_2" or node.name == "infrastructure:automatic_warning_device_middle_center_3") then + stop_bell(pos,node) + lights_disabled(pos, node) + end + end + + minetest.register_abm( { + nodenames = {"infrastructure:automatic_warning_device_middle_center_2", "infrastructure:automatic_warning_device_middle_center_3"}, + interval = 1, + chance = 1, + action = function(pos, node) + lights_enabled(pos,node) + end + }) + + minetest.register_node("infrastructure:automatic_warning_device_top", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_automatic_warning_device_top_side.png", + "infrastructure_automatic_warning_device_top_side.png", + "infrastructure_automatic_warning_device_top_side.png", + "infrastructure_automatic_warning_device_top.png" + }, + on_destruct = stop_bell, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + node_box = { + type = "fixed", + fixed = { + {-1/16, -1/2, -1/16, 1/16, 0, 1/16}, + {-1/8, 0, -1/8, 1/8, 3/8, 1/8}, + {-1/4, 1/8, -1/4, 1/4, 1/4, 1/4}, + {-1/2, -1/2, -1/16, 1/2, 0, -1/16}, + {-1/8, -1/2, -1/16, 1/8, -1/4, 1/8} + } + }, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + } + }) + + for i = 1, 2 do + local groups = {} + groups = {cracky = 3, not_in_creative_inventory = 1} + + if (i == 1) then + LIGHT_SOURCE = 0 + else + LIGHT_SOURCE = AUTOMATIC_WARNING_DEVICE_LIGHT_RANGE + end + + minetest.register_node("infrastructure:automatic_warning_device_middle_right_"..tostring(i), { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_automatic_warning_device_middle_right_side.png", + "infrastructure_automatic_warning_device_middle_right_"..tostring(i)..".png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + light_source = LIGHT_SOURCE, + node_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, -1/16, -1/4, 1/2, -1/16}, + {-1/2, -5/16, -1/16, -7/16, 1/16, 3/16}, + {-1/2, 1/32, -5/16, -15/32, 3/32, -1/16}, + {-15/32, -1/8, -3/16, -13/32, 1/32, -1/16} + } + }, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + } + }) + + minetest.register_node("infrastructure:automatic_warning_device_middle_left_"..tostring(i), { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_automatic_warning_device_middle_left_side.png", + "infrastructure_automatic_warning_device_middle_left_"..tostring(i)..".png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + light_source = LIGHT_SOURCE, + node_box = { + type = "fixed", + fixed = { + {1/4, -1/2, -1/16, 1/2, 1/2, -1/16}, + {7/16, -5/16, -1/16, 1/2, 1/16, 3/16}, + {15/32, 1/32, -5/16, 1/2, 3/32, -1/16}, + {13/32, -1/8, -3/16, 15/32, 1/32, -1/16} + } + }, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + } + }) + end + + for i = 1, 3 do + local groups = {} + groups = {cracky = 3, not_in_creative_inventory = 1} + + if (i == 1) then + LIGHT_SOURCE = 0 + else + LIGHT_SOURCE = AUTOMATIC_WARNING_DEVICE_LIGHT_RANGE + end + + minetest.register_node("infrastructure:automatic_warning_device_middle_center_"..tostring(i), { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_automatic_warning_device_middle_center_side.png", + "infrastructure_automatic_warning_device_middle_center_side.png", + "infrastructure_automatic_warning_device_middle_center_side.png", + "infrastructure_automatic_warning_device_middle_center_"..tostring(i)..".png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + light_source = LIGHT_SOURCE, + node_box = { + type = "fixed", + fixed = { + {-1/16, -1/2, -1/16, 1/16, 1/2, 1/16}, + {-1/2, -1/2, -1/16, 1/2, 1/2, -1/16}, + {-1/2, -5/16, -1/16, -3/16, 1/16, 3/16}, + {3/16, -5/16, -1/16, 1/2, 1/16, 3/16}, + {-3/16, -3/16, -1/16, 3/16, -1/16, 1/8}, + {-1/2, 1/32, -5/16, -7/32, 3/32, -1/16}, + {-7/32, -1/8, -3/16, -5/32, 1/32, -1/16}, + {7/32, 1/32, -5/16, 1/2, 3/32, -1/16}, + {5/32, -1/8, -3/16, 7/32, 1/32, -1/16} + } + }, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + } + }) + end + + minetest.register_node("infrastructure:automatic_warning_device_middle", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_automatic_warning_device_middle_side.png", + "infrastructure_automatic_warning_device_middle_side.png", + "infrastructure_automatic_warning_device_middle_side.png", + "infrastructure_automatic_warning_device_middle.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + node_box = { + type = "fixed", + fixed = { + {-1/16, -1/2, -1/16, 1/16, 1/2, 1/16}, + {-3/8, -3/8, -1/8, 3/8, 3/8, -1/16}, + {-1/8, -1/8, -1/16, 1/8, 1/8, 1/8} + } + }, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + } + }) + + minetest.register_node("infrastructure:automatic_warning_device_bottom", { + description = "Automatic warning device", + inventory_image = "infrastructure_automatic_warning_device.png", + wield_image = "infrastructure_automatic_warning_device.png", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_automatic_warning_device_bottom.png", + "infrastructure_automatic_warning_device_bottom.png", + "infrastructure_automatic_warning_device_bottom.png", + "infrastructure_automatic_warning_device_bottom.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3}, + node_box = { + type = "fixed", + fixed = { + {-1/16, 0, -1/16, 1/16, 1/2, 1/16}, + {-1/2, -1/2, -1/4, 1/2, -3/8, 1/4}, + {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2}, + {-1/8, -3/8, -1/8, 1/8, 0, 1/8} + } + }, + selection_box = { + type = "fixed", + fixed = { + -- top + {-1/8, 0 + 3, -1/8, 1/8, 3/8 + 3, 1/8}, + {-1/4, 1/8 + 3, -1/4, 1/4, 1/4 + 3, 1/4}, + {-1/8, -1/2 + 3, -1/16 + 0.01, 1/8, -1/4 + 3, 1/8}, + -- middle center, left and right + {-9/16, -5/16 + 2, -1/16, -3/16, 1/16 + 2, 3/16}, + {3/16, -5/16 + 2, -1/16, 9/16, 1/16 + 2, 3/16}, + + {-3/16, -3/16 + 2, -1/16 + 0.01, 3/16, -1/16 + 2, 1/8}, + + {-1/2, 1/32 + 2, -5/16, -7/32, 3/32 + 2, -1/16 - 0.01}, + {-7/32, -1/8 + 2, -3/16, -5/32, 1/32 + 2, -1/16 - 0.01}, + {13/32 - 1, -1/8 + 2, -3/16, 15/32 - 1, 1/32 + 2, -1/16 - 0.01}, + + {7/32, 1/32 + 2, -5/16, 1/2, 3/32 + 2, -1/16 - 0.01}, + {5/32, -1/8 + 2, -3/16, 7/32, 1/32 + 2, -1/16 - 0.01}, + {-15/32 + 1, -1/8 + 2, -3/16, -13/32 + 1, 1/32 + 2, -1/16 - 0.01}, + -- middle + {-3/8, -3/8 + 1, -1/8, 3/8, 3/8 + 1, -1/16}, + {-1/8, -1/8 + 1, -1/16, 1/8, 1/8 + 1, 1/8}, + -- bottom + {-1/2, -1/2, -1/4, 1/2, -3/8, 1/4}, + {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2}, + {-1/8, -3/8, -1/8, 1/8, 0, 1/8}, + -- post + {-1/16, 0, -1/16, 1/16, 3, 1/16} + } + }, + + on_construct = function(pos) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + + pos.y = pos.y + 1 + node.name = "infrastructure:automatic_warning_device_middle" + minetest.env:add_node(pos, node) + + pos.y = pos.y + 2 + node.name = "infrastructure:automatic_warning_device_top" + minetest.env:add_node(pos, node) + + pos.y = pos.y - 1 + node.name = "infrastructure:automatic_warning_device_middle_center_1" + minetest.env:add_node(pos, node) + + left_light_direction(pos, param2) + node.name = "infrastructure:automatic_warning_device_middle_left_1" + minetest.env:add_node(pos, node) + + right_light_direction(pos, param2) + node.name = "infrastructure:automatic_warning_device_middle_right_1" + minetest.env:add_node(pos, node) + end, + + on_destruct = function(pos) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + pos.y=pos.y+2 + stop_bell(pos, node) + pos.y=pos.y-2 + + for i = 1, 3 do + pos.y = pos.y + 1 + minetest.env:remove_node(pos) + end + + pos.y = pos.y - 1 + + left_light_direction(pos, param2) + minetest.env:remove_node(pos) + + right_light_direction(pos, param2) + minetest.env:remove_node(pos) + end, + + on_punch = function(pos, node) + activate_lights(pos, node) + end, + + on_receive_fields = function(pos, formname, fields, sender) + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, + + digiline = { + receptor = {}, + effector = { + action = function(pos, node, channel, msg) + local setchan = minetest.get_meta(pos):get_string("channel") + if setchan ~= channel then + return + end + if (msg=="bell_on") then + play_bell(pos) + elseif (msg=="bell_off") then + stop_bell(pos,node) + elseif (msg=="lights_on") then + pos.y = pos.y + 2 + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:automatic_warning_device_middle_center_1" then + minetest.swap_node(pos, {name = "infrastructure:automatic_warning_device_middle_center_2", param2 = node.param2}) + end + elseif (msg=="lights_off") then + pos.y = pos.y + 2 + local node = minetest.env:get_node(pos) + if (node.name == "infrastructure:automatic_warning_device_middle_center_2" or node.name == "infrastructure:automatic_warning_device_middle_center_3") then + lights_disabled(pos, node) + end + end + end + } + } + }) + + + + + minetest.register_alias("infrastructure:automatic_warning_device", "infrastructure:automatic_warning_device_bottom") + minetest.register_alias("awd", "infrastructure:automatic_warning_device_bottom") diff --git a/infrastructure/advanced_boom_barrier.lua b/infrastructure/advanced_boom_barrier.lua new file mode 100644 index 0000000..7a1d685 --- /dev/null +++ b/infrastructure/advanced_boom_barrier.lua @@ -0,0 +1,470 @@ +-- Boom barrier + function move_arm(pos, node) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + + if param2 == 0 then + dir = "z-" + elseif param2 == 1 then + dir = "x-" + elseif param2 == 2 then + dir = "z+" + elseif param2 == 3 then + dir = "x+" + end + + minetest.sound_play("infrastructure_boom_barrier", { + pos = pos, + gain = BOOM_BARRIER_VOLUME, + max_hear_distance = 50 + }) + + if node.name == "infrastructure:boom_barrier_top_h" then + minetest.swap_node(pos, {name = "infrastructure:boom_barrier_top_v", param2 = node.param2}) + + if dir == "x+" then + for i = 1, 10 do + pos.x = pos.x + 1 + if (string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_bright") + or string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_dark")) == nil then + break + end + minetest.env:remove_node(pos) + node.name = "infrastructure:boom_barrier_arm_v" + minetest.env:add_node({x=pos.x-i, y=pos.y+i, z=pos.z}, node) + end + elseif dir == "x-" then + for i = 1, 10 do + pos.x = pos.x - 1 + if (string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_bright") + or string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_dark")) == nil then + break + end + minetest.env:remove_node(pos) + node.name = "infrastructure:boom_barrier_arm_v" + minetest.env:add_node({x=pos.x+i, y=pos.y+i, z=pos.z}, node) + end + elseif dir == "z+" then + for i = 1, 10 do + pos.z = pos.z + 1 + if (string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_bright") + or string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_dark")) == nil then + break + end + minetest.env:remove_node(pos) + node.name = "infrastructure:boom_barrier_arm_v" + minetest.env:add_node({x=pos.x, y=pos.y+i, z=pos.z-i}, node) + end + elseif dir == "z-" then + for i = 1, 10 do + pos.z = pos.z - 1 + if (string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_bright") + or string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_h_dark")) == nil then + break + end + minetest.env:remove_node(pos) + node.name = "infrastructure:boom_barrier_arm_v" + minetest.env:add_node({x=pos.x, y=pos.y+i, z=pos.z+i}, node) + end + end + + elseif node.name == "infrastructure:boom_barrier_top_v" then + minetest.swap_node(pos, {name = "infrastructure:boom_barrier_top_h", param2 = node.param2}) + if dir == "x+" then + for i = 1, 10 do + pos.y = pos.y + 1 + if string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_v") == nil then + break + end + minetest.env:remove_node(pos) + if i % 2 == 1 then + node.name = "infrastructure:boom_barrier_arm_h_bright" + else + node.name = "infrastructure:boom_barrier_arm_h_dark" + end + minetest.env:add_node({x=pos.x+i, y=pos.y-i, z=pos.z}, node) + end + elseif dir == "x-" then + for i = 1, 10 do + pos.y = pos.y + 1 + if string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_v") == nil then + break + end + minetest.env:remove_node(pos) + if i % 2 == 1 then + node.name = "infrastructure:boom_barrier_arm_h_bright" + else + node.name = "infrastructure:boom_barrier_arm_h_dark" + end + minetest.env:add_node({x=pos.x-i, y=pos.y-i, z=pos.z}, node) + end + elseif dir == "z+" then + for i = 1, 10 do + pos.y = pos.y + 1 + if string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_v") == nil then + break + end + minetest.env:remove_node(pos) + if i % 2 == 1 then + node.name = "infrastructure:boom_barrier_arm_h_bright" + else + node.name = "infrastructure:boom_barrier_arm_h_dark" + end + minetest.env:add_node({x=pos.x, y=pos.y-i, z=pos.z+i}, node) + end + elseif dir == "z-" then + for i = 1, 10 do + pos.y = pos.y + 1 + if string.match(minetest.env:get_node(pos).name, "infrastructure:boom_barrier_arm_v") == nil then + break + end + minetest.env:remove_node(pos) + if i % 2 == 1 then + node.name = "infrastructure:boom_barrier_arm_h_bright" + else + node.name = "infrastructure:boom_barrier_arm_h_dark" + end + minetest.env:add_node({x=pos.x, y=pos.y-i, z=pos.z-i}, node) + end + end + end + end + + minetest.register_abm( { + nodenames = {"infrastructure:boom_barrier_arm_h_bright", "infrastructure:boom_barrier_arm_h_dark"}, + interval = 1, + chance = 1, + action = function(pos, node) + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:boom_barrier_arm_h_bright" then + minetest.swap_node(pos, {name = "infrastructure:boom_barrier_arm_h_dark", param2 = node.param2}) + elseif node.name == "infrastructure:boom_barrier_arm_h_dark" then + minetest.swap_node(pos, {name = "infrastructure:boom_barrier_arm_h_bright", param2 = node.param2}) + end + end + }) + + minetest.register_node("infrastructure:boom_barrier_top_h", { + description = "Boom barrier mechanism", + tiles = { + "infrastructure_boom_barrier_h_top.png", + "infrastructure_boom_barrier_h_bottom.png", + "infrastructure_boom_barrier_h_right.png", + "infrastructure_boom_barrier_h_left.png", + "infrastructure_boom_barrier_h_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + node_box = { + type = "fixed", + fixed = { + {-1/4, -1/4, -1/4, 1/4, 1/4, 1/4}, + {-1/8, -1/2, -1/8, 1/8, -1/4, 1/8}, + + {-3/8, -1/2, -1/2, -1/4, -1/4, 1/8}, + {-3/8, -1/2, -1/8, -1/4, 1/8, 1/8}, + {-3/8, -1/8, -1/8, -1/4, 1/8, 1/2}, + {-1/2, -3/16, 1/4, -3/8, 3/16, 1/2}, + {-1/2, -1/8, 3/16, -3/8, 1/8, 1/2}, + {-1/2, -1/16, 1/8, -3/8, 1/16, 1/2}, + + {1/4, -1/2, -1/2, 3/8, -1/4, 1/8}, + {1/4, -1/2, -1/8, 3/8, 1/8, 1/8}, + {1/4, -1/8, -1/8, 3/8, 1/8, 1/2}, + {3/8, -3/16, 1/4, 1/2, 3/16, 1/2}, + {3/8, -1/8, 3/16, 1/2, 1/8, 1/2}, + {3/8, -1/16, 1/8, 1/2, 1/16, 1/2}, + + {-3/8, -1/2, -1/2, 3/8, -1/4, -3/8}, + + {-7/16, -1/16, -1/16, 7/16, 1/16, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/4, -1/4, -1/4, 1/4, 1/4, 1/4}, + {-1/8, -1/2, -1/8, 1/8, -1/4, 1/8}, + + {-3/8, -1/2, -1/2, -1/4, -1/4, 1/8}, + {-3/8, -1/2, -1/8, -1/4, 1/8, 1/8}, + {-3/8, -1/8, -1/8, -1/4, 1/8, 1/2}, + {-1/2, -3/16, 1/4, -3/8, 3/16, 1/2}, + {-1/2, -1/8, 3/16, -3/8, 1/8, 1/2}, + {-1/2, -1/16, 1/8, -3/8, 1/16, 1/2}, + + {1/4, -1/2, -1/2, 3/8, -1/4, 1/8}, + {1/4, -1/2, -1/8, 3/8, 1/8, 1/8}, + {1/4, -1/8, -1/8, 3/8, 1/8, 1/2}, + {3/8, -3/16, 1/4, 1/2, 3/16, 1/2}, + {3/8, -1/8, 3/16, 1/2, 1/8, 1/2}, + {3/8, -1/16, 1/8, 1/2, 1/16, 1/2}, + + {-3/8, -1/2, -1/2, 3/8, -1/4, -3/8}, + + {-7/16, -1/16, -1/16, 7/16, 1/16, 1/16} + } + }, + + after_place_node = function(pos) + local node = minetest.env:get_node(pos) + node.name = "infrastructure:boom_barrier_bottom" + minetest.env:add_node(pos, node) + pos.y = pos.y + 1 + node.name = "infrastructure:boom_barrier_top_h" + minetest.env:add_node(pos, node) + end, + + after_dig_node = function(pos) + pos.y = pos.y - 1 + minetest.env:remove_node(pos) + end, + + on_punch = function(pos, node) + move_arm(pos, node) + end + }) + + minetest.register_node("infrastructure:boom_barrier_top_v", { + tiles = { + "infrastructure_boom_barrier_h_front_back.png", + "infrastructure_boom_barrier_v_bottom.png", + "infrastructure_boom_barrier_v_right.png", + "infrastructure_boom_barrier_v_left.png", + "infrastructure_boom_barrier_v_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + drop = "infrastructure:boom_barrier_top_h", + node_box = { + type = "fixed", + fixed = { + {-1/4, -1/4, -1/4, 1/4, 1/4, 1/4}, + {-1/8, -1/2, -1/8, 1/8, -1/4, 1/8}, + + {-3/8, -1/8, -1/2, -1/4, 1/2, -1/4}, + {-3/8, -1/8, -1/2, -1/4, 1/8, 1/8}, + {-3/8, -1/2, -1/8, -1/4, 1/8, 1/8}, + {-1/2, -1/2, -3/16, -3/8, -1/4, 3/16}, + {-1/2, -1/2, -1/8, -3/8, -3/16, 1/8}, + {-1/2, -1/2, -1/16, -3/8, -1/8, 1/16}, + + {1/4, -1/8, -1/2, 3/8, 1/2, -1/4}, + {1/4, -1/8, -1/2, 3/8, 1/8, 1/8}, + {1/4, -1/2, -1/8, 3/8, 1/8, 1/8}, + {3/8, -1/2, -3/16, 1/2, -1/4, 3/16}, + {3/8, -1/2, -1/8, 1/2, -3/16, 1/8}, + {3/8, -1/2, -1/16, 1/2, -1/8, 1/16}, + + {-3/8, 3/8, -1/2, 3/8, 1/2, -1/4}, + + {-7/16, -1/16, -1/16, 7/16, 1/16, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/4, -1/4, -1/4, 1/4, 1/4, 1/4}, + {-1/8, -1/2, -1/8, 1/8, -1/4, 1/8}, + + {-3/8, -1/8, -1/2, -1/4, 1/2, -1/4}, + {-3/8, -1/8, -1/2, -1/4, 1/8, 1/8}, + {-3/8, -1/2, -1/8, -1/4, 1/8, 1/8}, + {-1/2, -1/2, -3/16, -3/8, -1/4, 3/16}, + {-1/2, -1/2, -1/8, -3/8, -3/16, 1/8}, + {-1/2, -1/2, -1/16, -3/8, -1/8, 1/16}, + + {1/4, -1/8, -1/2, 3/8, 1/2, -1/4}, + {1/4, -1/8, -1/2, 3/8, 1/8, 1/8}, + {1/4, -1/2, -1/8, 3/8, 1/8, 1/8}, + {3/8, -1/2, -3/16, 1/2, -1/4, 3/16}, + {3/8, -1/2, -1/8, 1/2, -3/16, 1/8}, + {3/8, -1/2, -1/16, 1/2, -1/8, 1/16}, + + {-3/8, 3/8, -1/2, 3/8, 1/2, -1/4}, + + {-7/16, -1/16, -1/16, 7/16, 1/16, 1/16} + } + }, + + after_dig_node = function(pos) + pos.y = pos.y - 1 + minetest.env:remove_node(pos) + end, + + on_punch = function(pos, node) + move_arm(pos, node) + end + }) + + minetest.register_node("infrastructure:boom_barrier_bottom", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_automatic_warning_device_bottom.png", + "infrastructure_automatic_warning_device_bottom.png", + "infrastructure_automatic_warning_device_bottom.png", + "infrastructure_automatic_warning_device_bottom.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + drop = "infrastructure:boom_barrier_top_h", + node_box = { + type = "fixed", + fixed = { + {-1/16, -1/2, -1/16, 1/16, 1/2, 1/16}, + {-1/2, -1/2, -1/4, 1/2, -3/8, 1/4}, + {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2}, + {-1/8, -1/2, -1/8, 1/8, 0, 1/8} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/16, -1/2, -1/16, 1/16, 1/2, 1/16}, + {-1/2, -1/2, -1/4, 1/2, -3/8, 1/4}, + {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2}, + {-1/8, -1/2, -1/8, 1/8, 0, 1/8} + } + }, + + after_dig_node = function(pos) + pos.y = pos.y + 1 + minetest.env:remove_node(pos) + end, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", "field[channel;Channel;${channel}]") + end, + + on_receive_fields = function(pos, formname, fields, sender) + if (fields.channel) then + minetest.get_meta(pos):set_string("channel", fields.channel) + minetest.get_meta(pos):set_string("state", "Off") + end + end, + + digiline = { + receptor = {}, + effector = { + action = function(pos, node, channel, msg) + local setchan = minetest.get_meta(pos):get_string("channel") + if setchan ~= channel then + return + end + pos.y = pos.y + 1 + local mechnode = minetest.env:get_node(pos) + if ((msg == "up" and mechnode.name=="infrastructure:boom_barrier_top_h") or (msg == "down" and mechnode.name=="infrastructure:boom_barrier_top_v")) then + move_arm(pos, mechnode) + end + end + } + }, + }) + + minetest.register_node("infrastructure:boom_barrier_arm_h_bright", { + description = "Boom barrier arm", + tiles = { + "infrastructure_boom_barrier_arm_h_top.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png", + "infrastructure_boom_barrier_arm_h_left_right_bright.png", + "infrastructure_boom_barrier_arm_h_left_right_bright.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + light_source = BOOM_BARRIER_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-1/8, -1/2, -1/2, 1/8, -7/16, 1/2}, + {-1/8, -5/16, -1/2, 1/8, -1/4, 1/2}, + {-1/8, -1/2, -1/2, -1/16, -1/4, 1/2}, + {1/16, -1/2, -1/2, 1/8, -1/4, 1/2}, + {0, -1/4, -1/8, 0, 0, 1/8} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/8, -1/2, -1/2, 1/8, -1/4, 1/2} + } + } + }) + + minetest.register_node("infrastructure:boom_barrier_arm_h_dark", { + tiles = { + "infrastructure_boom_barrier_arm_h_top.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png", + "infrastructure_boom_barrier_arm_h_left_right_dark.png", + "infrastructure_boom_barrier_arm_h_left_right_dark.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + drop = "infrastructure:boom_barrier_arm_h_bright", + node_box = { + type = "fixed", + fixed = { + {-1/8, -1/2, -1/2, 1/8, -7/16, 1/2}, + {-1/8, -5/16, -1/2, 1/8, -1/4, 1/2}, + {-1/8, -1/2, -1/2, -1/16, -1/4, 1/2}, + {1/16, -1/2, -1/2, 1/8, -1/4, 1/2}, + {0, -1/4, -1/8, 0, 0, 1/8} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/8, -1/2, -1/2, 1/8, -1/4, 1/2} + } + } + }) + + minetest.register_node("infrastructure:boom_barrier_arm_v", { + tiles = { + "infrastructure_boom_barrier_arm_h_bottom_front_back.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png", + "infrastructure_boom_barrier_arm_v_left.png", + "infrastructure_boom_barrier_arm_v_right.png", + "infrastructure_boom_barrier_arm_h_top.png", + "infrastructure_boom_barrier_arm_h_bottom_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + drop = "infrastructure:boom_barrier_arm_h_bright", + node_box = { + type = "fixed", + fixed = { + {-1/8, -1/2, -1/2, 1/8, 1/2, -7/16}, + {-1/8, -1/2, -5/16, 1/8, 1/2, -1/4}, + {-1/8, -1/2, -1/2, -1/16, 1/2, -1/4}, + {1/16, -1/2, -1/2, 1/8, 1/2, -1/4}, + {0, -1/8, -1/4, 0, 1/8, 0} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/8, -1/2, -1/2, 1/8, 1/2, -1/4} + } + } + }) + + minetest.register_alias("infrastructure:boom_barrier_mechanism", "infrastructure:boom_barrier_top_h") + minetest.register_alias("infrastructure:boom_barrier_arm", "infrastructure:boom_barrier_arm_h_bright") diff --git a/infrastructure/advanced_crosswalk_lighting.lua b/infrastructure/advanced_crosswalk_lighting.lua new file mode 100644 index 0000000..4e669c1 --- /dev/null +++ b/infrastructure/advanced_crosswalk_lighting.lua @@ -0,0 +1,85 @@ +-- Crosswalk lighting + minetest.register_node("infrastructure:crosswalk_lighting_dark", { + description = "Crosswalk lighting", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_lighting_bottom.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_lighting_back.png", + "infrastructure_crosswalk_lighting_front.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3}, + node_box = { + type = "fixed", + fixed = { + {-3/8, -1/2, -1/4, 3/8, 1/2, -3/16}, + {-3/8, -1/2, 3/16, 3/8, 1/2, 1/4}, + {-1/4, 1/4, -3/16, -1/8, 3/8, 3/16}, + {1/8, 1/4, -3/16, 1/4, 3/8, 3/16}, + {-1/8, -1/2, -3/16, 1/8, -1/4, 3/16}, + {-1/2, -1/2, -1/8, 1/2, -3/8, 1/8}, + } + }, + selection_box = { + type = "fixed", + fixed = {-3/8, -1/2, -1/4, 3/8, 1/2, 1/4} + }, + + on_punch = function(pos, node) + minetest.swap_node(pos, {name = "infrastructure:crosswalk_lighting_bright", param2 = node.param2}) + end, + + mesecons = {effector = { + action_on = function (pos, node) + minetest.swap_node(pos, {name = "infrastructure:crosswalk_lighting_bright", param2 = node.param2}) + end, + }} + }) + + minetest.register_node("infrastructure:crosswalk_lighting_bright", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_lighting_bottom.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_lighting_back.png", + "infrastructure_crosswalk_lighting_front.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + light_source = CROSSWALK_LIGHTING_LIGHT_RANGE, + drop = "infrastructure:crosswalk_lighting_dark", + node_box = { + type = "fixed", + fixed = { + {-3/8, -1/2, -1/4, 3/8, 1/2, -3/16}, + {-3/8, -1/2, 3/16, 3/8, 1/2, 1/4}, + {-1/4, 1/4, -3/16, -1/8, 3/8, 3/16}, + {1/8, 1/4, -3/16, 1/4, 3/8, 3/16}, + {-1/8, -1/2, -3/16, 1/8, -1/4, 3/16}, + {-1/2, -1/2, -1/8, 1/2, -3/8, 1/8}, + } + }, + selection_box = { + type = "fixed", + fixed = {-3/8, -1/2, -1/4, 3/8, 1/2, 1/4} + }, + + on_punch = function(pos, node) + minetest.swap_node(pos, {name = "infrastructure:crosswalk_lighting_dark", param2 = node.param2}) + end, + + mesecons = {effector = { + action_off = function (pos, node) + minetest.swap_node(pos, {name = "infrastructure:crosswalk_lighting_dark", param2 = node.param2}) + end, + }} + }) + + minetest.register_alias("infrastructure:crosswalk_lighting", "infrastructure:crosswalk_lighting_dark") diff --git a/infrastructure/advanced_crosswalk_safety_sign.lua b/infrastructure/advanced_crosswalk_safety_sign.lua new file mode 100644 index 0000000..6183322 --- /dev/null +++ b/infrastructure/advanced_crosswalk_safety_sign.lua @@ -0,0 +1,85 @@ +-- Crosswalk safety sign + minetest.register_node("infrastructure:crosswalk_safety_sign_top", { + tiles = { + "infrastructure_crosswalk_safety_sign_top.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_safety_sign_top_side.png", + "infrastructure_crosswalk_safety_sign_top_side.png", + "infrastructure_crosswalk_safety_sign_top_front_back.png", + "infrastructure_crosswalk_safety_sign_top_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, not_in_creative_inventory = 1}, + light_source = CROSSWALK_SAFETY_SIGN_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-1/4, -1/2, -1/16, 1/4, 0, -1/16}, + {-1/4, -1/2, 1/16, 1/4, 0, 1/16}, + {-1/16, -1/2, -1/16, 1/16, -1/4, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + } + }) + + minetest.register_node("infrastructure:crosswalk_safety_sign_bottom", { + description = "Crosswalk safety sign", + inventory_image = "infrastructure_crosswalk_safety_sign.png", + wield_image = "infrastructure_crosswalk_safety_sign.png", + tiles = { + "infrastructure_crosswalk_safety_sign_top.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_safety_sign_bottom_side.png", + "infrastructure_crosswalk_safety_sign_bottom_side.png", + "infrastructure_crosswalk_safety_sign_bottom_front_back.png", + "infrastructure_crosswalk_safety_sign_bottom_front_back.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + light_source = CROSSWALK_SAFETY_SIGN_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-1/4, -7/32, -1/16, 1/4, 1/2, -1/16}, + {-1/4, -7/32, 1/16, 1/4, 1/2, 1/16}, + {-1/16, -5/16, -1/16, 1/16, 1/2, 1/16}, + {-1/8, -3/8, -1/8, 1/8, -5/16, 1/8}, + {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/4, -7/32, -1/16, 1/4, 1, -1/16}, + {-1/4, -7/32, 1/16, 1/4, 1, 1/16}, + + {-1/16, -5/16, -1/16 + 0.01, 1/16, 3/4, 1/16 - 0.01}, + + {-1/8, -3/8, -1/8, 1/8, -5/16, 1/8}, + {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2} + } + }, + + after_place_node = function(pos) + local node = minetest.env:get_node(pos) + node.name = "infrastructure:crosswalk_safety_sign_bottom" + minetest.env:add_node(pos, node) + pos.y = pos.y + 1 + node.name = "infrastructure:crosswalk_safety_sign_top" + minetest.env:add_node(pos, node) + end, + + after_dig_node = function(pos) + pos.y = pos.y + 1 + minetest.env:remove_node(pos) + end, + }) + + minetest.register_alias("infrastructure:crosswalk_safety_sign", "infrastructure:crosswalk_safety_sign_bottom") diff --git a/infrastructure/advanced_crosswalk_warning_light.lua b/infrastructure/advanced_crosswalk_warning_light.lua new file mode 100644 index 0000000..d8497e1 --- /dev/null +++ b/infrastructure/advanced_crosswalk_warning_light.lua @@ -0,0 +1,193 @@ +-- Crosswalk warning light + minetest.register_abm( { + nodenames = {"infrastructure:crosswalk_warning_light_bright", "infrastructure:crosswalk_warning_light_dark"}, + interval = 1, + chance = 1, + action = function(pos, node) + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:crosswalk_warning_light_bright" then + minetest.swap_node(pos, {name = "infrastructure:crosswalk_warning_light_dark", param2 = node.param2}) + elseif node.name == "infrastructure:crosswalk_warning_light_dark" then + minetest.swap_node(pos, {name = "infrastructure:crosswalk_warning_light_bright", param2 = node.param2}) + end + end + }) + + function on_off_light(pos, node) + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:crosswalk_warning_light_off" then + minetest.swap_node(pos, {name = "infrastructure:crosswalk_warning_light_bright", param2 = node.param2}) + elseif (node.name == "infrastructure:crosswalk_warning_light_dark" or node.name == "infrastructure:crosswalk_warning_light_bright") then + minetest.swap_node(pos, {name = "infrastructure:crosswalk_warning_light_off", param2 = node.param2}) + end + end + + minetest.register_node("infrastructure:crosswalk_warning_light_off", { + description = "Crosswalk warning light", + inventory_image = "infrastructure_crosswalk_warning_light_front_bright.png", + wield_image = "infrastructure_crosswalk_warning_light_front_bright.png", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_warning_light_back.png", + "infrastructure_crosswalk_warning_light_front_dark.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 0}, + node_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 3/8, 1/8}, + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 3/8, 1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.01} + } + }, + + on_punch = function(pos, node) + on_off_light(pos, node) + end, + + mesecons = {effector = { + action_on = function(pos, node) + on_off_light(pos, node) + end, + }} + }) + + minetest.register_node("infrastructure:crosswalk_warning_light_dark", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_warning_light_back.png", + "infrastructure_crosswalk_warning_light_front_dark.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + drop = "infrastructure:crosswalk_warning_light_off", + node_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 3/8, 1/8}, + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 3/8, 1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.01} + } + }, + + on_punch = function(pos, node) + on_off_light(pos, node) + end, + + mesecons = {effector = { + action_on = function(pos, node) + on_off_light(pos, node) + end, + }} + }) + + minetest.register_node("infrastructure:crosswalk_warning_light_bright", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_crosswalk_warning_light_back.png", + "infrastructure_crosswalk_warning_light_front_bright.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + light_source = TRAFFIC_LIGHTS_LIGHT_RANGE, + drop = "infrastructure:crosswalk_warning_light_off", + node_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 3/8, 1/8}, + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 3/8, 1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.01} + } + }, + + on_punch = function(pos, node) + on_off_light(pos, node) + end, + + mesecons = {effector = { + action_on = function(pos, node) + on_off_light(pos, node) + end, + }} + }) + + minetest.register_alias("infrastructure:crosswalk_warning_light", "infrastructure:crosswalk_warning_light_off") diff --git a/infrastructure/advanced_curve_chevron.lua b/infrastructure/advanced_curve_chevron.lua new file mode 100644 index 0000000..7d3b65d --- /dev/null +++ b/infrastructure/advanced_curve_chevron.lua @@ -0,0 +1,85 @@ +-- Curve chevron + minetest.register_node("infrastructure:curve_chevron_dark", { + description = "Flashing curve chevron", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_curve_chevron_left_dark.png", + "infrastructure_curve_chevron_right_dark.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3}, + node_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/16}, + {-1/2, -1/2, 1/16, 1/2, 1/2, 1/8}, + {-3/8, 1/4, -1/16, -1/4, 3/8, 1/16}, + {1/4, 1/4, -1/16, 3/8, 3/8, 1/16}, + {-3/8, -3/8, -1/16, -1/4, -1/4, 1/16}, + {1/4, -3/8, -1/16, 3/8, -1/4, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/8, 1/2, 1/2, 1/8} + }, + + on_punch = function(pos, node) + minetest.swap_node(pos, {name = "infrastructure:curve_chevron_bright", param2 = node.param2}) + end, + + mesecons = {effector = { + action_on = function (pos, node) + minetest.swap_node(pos, {name = "infrastructure:curve_chevron_bright", param2 = node.param2}) + end, + }} + }) + + minetest.register_node("infrastructure:curve_chevron_bright", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_curve_chevron_left_bright.png", + "infrastructure_curve_chevron_right_bright.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + light_source = CURVE_CHEVRON_LIGHT_RANGE, + drop = "infrastructure:curve_chevron_dark", + node_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/16}, + {-1/2, -1/2, 1/16, 1/2, 1/2, 1/8}, + {-3/8, 1/4, -1/16, -1/4, 3/8, 1/16}, + {1/4, 1/4, -1/16, 3/8, 3/8, 1/16}, + {-3/8, -3/8, -1/16, -1/4, -1/4, 1/16}, + {1/4, -3/8, -1/16, 3/8, -1/4, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = {-1/2, -1/2, -1/8, 1/2, 1/2, 1/8} + }, + + on_punch = function(pos, node) + minetest.swap_node(pos, {name = "infrastructure:curve_chevron_dark", param2 = node.param2}) + end, + + mesecons = {effector = { + action_off = function (pos, node) + minetest.swap_node(pos, {name = "infrastructure:curve_chevron_dark", param2 = node.param2}) + end + }} + }) + + minetest.register_alias("infrastructure:curve_chevron", "infrastructure:curve_chevron_dark") diff --git a/infrastructure/advanced_emergency_phone.lua b/infrastructure/advanced_emergency_phone.lua new file mode 100644 index 0000000..c511db1 --- /dev/null +++ b/infrastructure/advanced_emergency_phone.lua @@ -0,0 +1,107 @@ +-- Emergency phone (only if enabled) + if ENABLE_EMERGENCY_PHONE then + minetest.register_node("infrastructure:emergency_phone_top", { + description = "Emergency phone", + tiles = { + "infrastructure_emergency_phone_top.png", + "infrastructure_emergency_phone_bottom.png", + "infrastructure_emergency_phone_side.png", + "infrastructure_emergency_phone_side.png", + "infrastructure_emergency_phone_side.png", + "infrastructure_emergency_phone_front.png" + }, + drawtype = "nodebox", + drop = "streets:emergencyphone", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1,not_in_creative_inventory=1}, + light_source = EMERGENCY_PHONE_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.25, 0.25, 0.5, 0.25}, + {-0.25, -0.5, -0.3125, -0.1875, 0.5, -0.25}, + {0.1875, -0.5, -0.3125, 0.25, 0.5, -0.25}, + {-0.1875, 0.4375, -0.3125, 0.1875, 0.5, -0.25} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.25, -0.5, -0.25, 0.25, 0.5, 0.25}, + {-0.25, -0.5, -0.3125, -0.1875, 0.5, -0.25}, + {0.1875, -0.5, -0.3125, 0.25, 0.5, -0.25}, + {-0.1875, 0.4375, -0.3125, 0.1875, 0.5, -0.25}, + } + }, + + after_dig_node = function(pos) + pos.y = pos.y - 1 + if minetest.get_node(pos).name == "infrastructure:emergency_phone_bottom" then + minetest.remove_node(pos) + end + end, + + on_punch = function(pos, node, puncher) + if dial_handler ~= nil then + minetest.sound_stop(dial_handler) + dial_handler = nil + end + dial_handler = minetest.sound_play("infrastructure_emergency_phone", { + pos = pos, + gain = EMERGENCY_PHONE_VOLUME, + max_hear_distance = 50 + }) + if (puncher:is_player() and puncher:get_hp() < HEALTH_TO_RESTORING and puncher:get_hp() <= HEALTH_TO_TRIGGER) then + puncher:set_hp(HEALTH_TO_RESTORING) + minetest.chat_send_player(puncher:get_player_name(), "You got healed!") + minetest.chat_send_all("Server: -!- "..puncher:get_player_name().." used an emergency phone at "..pos.x..","..pos.y..","..pos.z); + end + end + }) + + minetest.register_node("infrastructure:emergency_phone_bottom", { + tiles = {"infrastructure_emergency_phone_bottom.png"}, + drawtype = "nodebox", + drop = "streets:emergencyphone", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=1,not_in_creative_inventory=1}, + node_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.5, 0.25} + }, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.5, 0.25} + }, + + after_dig_node = function(pos) + pos.y = pos.y+1 + if minetest.get_node(pos).name == "infrastructure:emergency_phone_top" then + minetest.remove_node(pos) + end + end, + }) + + minetest.register_alias("infrastructure:emergency_phone", "infrastructure:emergency_phone_top") + + minetest.register_abm({ + nodenames = {"streets:emergencyphone"}, + interval = 1, + chance = 1, + action = function(pos, node) + local node = minetest.get_node(pos) + local node_above = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) + if node_above.name == "air" then + node.name = "infrastructure:emergency_phone_bottom" + minetest.set_node(pos, node) + pos.y = pos.y+1 + end + node.name = "infrastructure:emergency_phone_top" + minetest.set_node(pos, node) + end, + }) + else + print("Infrastructure mod: -!- Emergency-Phone is disabled!") + end diff --git a/infrastructure/advanced_lane_control_lights.lua b/infrastructure/advanced_lane_control_lights.lua new file mode 100644 index 0000000..f8a2c9f --- /dev/null +++ b/infrastructure/advanced_lane_control_lights.lua @@ -0,0 +1,79 @@ +-- Lane control lights + function lane_control_change(pos, node) + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:lane_control_lights_1" then + minetest.swap_node(pos, {name = "infrastructure:lane_control_lights_2", param2 = node.param2}) + elseif node.name == "infrastructure:lane_control_lights_2" then + minetest.swap_node(pos, {name = "infrastructure:lane_control_lights_3", param2 = node.param2}) + elseif node.name == "infrastructure:lane_control_lights_3" then + minetest.swap_node(pos, {name = "infrastructure:lane_control_lights_4", param2 = node.param2}) + elseif node.name == "infrastructure:lane_control_lights_4" then + minetest.swap_node(pos, {name = "infrastructure:lane_control_lights_5", param2 = node.param2}) + elseif node.name == "infrastructure:lane_control_lights_5" then + minetest.swap_node(pos, {name = "infrastructure:lane_control_lights_1", param2 = node.param2}) + end + end + + for i = 1, 5 do + local groups = {} + if i == 1 then + groups = {cracky = 3} + else + groups = {cracky = 3, not_in_creative_inventory = 1} + end + + minetest.register_node("infrastructure:lane_control_lights_"..tostring(i), { + description = "Lane control lights", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_lane_control_lights_"..tostring(i)..".png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + light_source = TRAFFIC_LIGHTS_LIGHT_RANGE, + drop = "infrastructure:lane_control_lights_1", + node_box = { + type = "fixed", + fixed = { + {-7/16, -7/16, -1/8, 7/16, 7/16, 1/8}, + {-7/16, 0, -1/4, -3/8, 7/16, -1/8}, + {3/8, 0, -1/4, 7/16, 7/16, -1/8}, + {-7/16, 3/8, -5/16, 7/16, 7/16, -1/8}, + {-1/16, -1/4, 0, 1/16, 1/4, 1/2 - 0.001}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.001}, + {-1/4, -1/16, 0, 1/4, 1/16, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-7/16, -7/16, -1/8, 7/16, 7/16, 1/8}, + {-7/16, 0, -1/4, -3/8, 7/16, -1/8}, + {3/8, 0, -1/4, 7/16, 7/16, -1/8}, + {-7/16, 3/8, -5/16, 7/16, 7/16, -1/8}, + {-1/16, -1/4, 0, 1/16, 1/4, 1/2 - 0.001}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.001}, + {-1/4, -1/16, 0, 1/4, 1/16, 1/2 - 0.001} + } + + }, + + on_punch = function(pos, node) + lane_control_change(pos, node) + end, + + mesecons = {effector = { + action_on = function (pos, node) + lane_control_change(pos, node) + end, + }} + }) + end + + minetest.register_alias("infrastructure:lane_control_lights", "infrastructure:lane_control_lights_1") diff --git a/infrastructure/advanced_road_signs.lua b/infrastructure/advanced_road_signs.lua new file mode 100644 index 0000000..b732bfd --- /dev/null +++ b/infrastructure/advanced_road_signs.lua @@ -0,0 +1,237 @@ +-- Road signs + local signs = {"stop", "yield", "right_of_way"} + + for i, sign_name in ipairs(signs) do + minetest.register_node("infrastructure:road_sign_"..sign_name, { + description = "Road sign "..sign_name, + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_road_sign_"..sign_name.."_back.png", + "infrastructure_road_sign_"..sign_name.."_front.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2}, + node_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16, 1/2, 1/2, 7/16}, + {-3/16, -1/8, 7/16, 3/16, 1/8, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16, 1/2, 1/2, 7/16}, + {-3/16, -1/8, 7/16 + 0.01, 3/16, 1/8, 1/2 - 0.01} + } + }, + + after_place_node = function(pos, node) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + local sign_pos = {x=pos.x, y=pos.y, z=pos.z} + + if param2 == 0 then + pos.z = pos.z + 1 + elseif param2 == 1 then + pos.x = pos.x + 1 + elseif param2 == 2 then + pos.z = pos.z - 1 + elseif param2 == 3 then + pos.x = pos.x - 1 + end + + local node = minetest.env:get_node(pos) + + if minetest.registered_nodes[node.name].drawtype == "fencelike" then + minetest.set_node(sign_pos, {name="infrastructure:road_sign_"..sign_name.."_on_post", param2=param2}) + end + end + }) + + minetest.register_node("infrastructure:road_sign_"..sign_name.."_on_post", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_road_sign_"..sign_name.."_back.png", + "infrastructure_road_sign_"..sign_name.."_front.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2, not_in_creative_inventory = 1}, + drop = "infrastructure:road_sign_"..sign_name, + node_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16 + 3/8, 1/2, 1/2, 7/16 + 3/8}, + {-3/16, 1/16, 7/16 + 3/8, 3/16, 1/8, 13/16 + 3/8 - 0.001}, + {-3/16, -1/8, 7/16 + 3/8, 3/16, -1/16, 13/16 + 3/8 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16 + 3/8, 1/2, 1/2, 7/16 + 3/8}, + {-3/16, 1/16, 7/16 + 3/8 + 0.01, 3/16, 1/8, 13/16 + 3/8 - 0.01}, + {-3/16, -1/8, 7/16 + 3/8 + 0.01, 3/16, -1/16, 13/16 + 3/8 - 0.01} + } + } + }) + end + +-- Road sign crosswalk + minetest.register_node("infrastructure:road_sign_crosswalk", { + description = "Road sign crosswalk", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_road_sign_crosswalk_back.png", + "infrastructure_road_sign_crosswalk_front.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2}, + node_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16, 1/2, 1/2, 7/16}, + {-3/16, -1/8, 7/16, 3/16, 1/8, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16, 1/2, 1/2, 7/16}, + {-3/16, -1/8, 7/16, 3/16, 1/8, 1/2 - 0.001} + } + }, + + after_place_node = function(pos, node) + local node = minetest.env:get_node(pos) + local param2 = node.param2 + local sign_pos = {x=pos.x, y=pos.y, z=pos.z} + + if param2 == 0 then + pos.z = pos.z + 1 + elseif param2 == 1 then + pos.x = pos.x + 1 + elseif param2 == 2 then + pos.z = pos.z - 1 + elseif param2 == 3 then + pos.x = pos.x - 1 + end + + local node = minetest.env:get_node(pos) + + if param2 == 0 then + pos.z = pos.z - 2 + elseif param2 == 1 then + pos.x = pos.x - 2 + elseif param2 == 2 then + pos.z = pos.z + 2 + elseif param2 == 3 then + pos.x = pos.x + 2 + end + + if minetest.registered_nodes[node.name].drawtype == "fencelike" then + minetest.set_node(sign_pos, {name="infrastructure:road_sign_crosswalk_on_post", param2=param2}) + minetest.env:add_node(pos, {name="infrastructure:road_sign_retroreflective_surface_on_post", param2=param2}) + else + minetest.env:add_node(pos, {name="infrastructure:road_sign_retroreflective_surface", param2=param2}) + end + end + }) + + minetest.register_node("infrastructure:road_sign_crosswalk_on_post", { + description = "Road sign crosswalk", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_road_sign_crosswalk_back.png", + "infrastructure_road_sign_crosswalk_front.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2, not_in_creative_inventory = 1}, + drop = "infrastructure:road_sign_crosswalk", + node_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16 + 3/8, 1/2, 1/2, 7/16 + 3/8}, + {-3/16, 1/16, 7/16 + 3/8, 3/16, 1/8, 13/16 + 3/8 - 0.001}, + {-3/16, -1/8, 7/16 + 3/8, 3/16, -1/16, 13/16 + 3/8 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-1/2, -1/2, 7/16 + 3/8, 1/2, 1/2, 7/16 + 3/8}, + {-3/16, 1/16, 7/16 + 3/8 + 0.01, 3/16, 1/8, 13/16 + 3/8 - 0.01}, + {-3/16, -1/8, 7/16 + 3/8 + 0.01, 3/16, -1/16, 13/16 + 3/8 - 0.01} + } + } + }) + + minetest.register_node("infrastructure:road_sign_retroreflective_surface", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_road_sign_retroreflective_surface.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2, not_in_creative_inventory = 1}, + light_source = RETROREFLECTIVE_SURFACE_LIGHT_RANGE, + drop = "", + node_box = { + type = "fixed", + fixed = {-3/4, -3/4, 7/16 + 1 + 0.01, 3/4, 3/4, 7/16 + 1 + 0.01} + }, + selection_box = { + type = "fixed", + fixed = {-3/4, -3/4, 7/16 + 1 + 0.01, 3/4, 3/4, 7/16 + 1 + 0.01} + } + }) + + minetest.register_node("infrastructure:road_sign_retroreflective_surface_on_post", { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_road_sign_retroreflective_surface.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 2, not_in_creative_inventory = 1}, + light_source = RETROREFLECTIVE_SURFACE_LIGHT_RANGE, + drop = "", + node_box = { + type = "fixed", + fixed = {-3/4, -3/4, 7/16 + 3/8 + 1 + 0.01, 3/4, 3/4, 7/16 + 3/8 + 1 + 0.01} + }, + selection_box = { + type = "fixed", + fixed = {-3/4, -3/4, 7/16 + 3/8 + 1 + 0.01, 3/4, 3/4, 7/16 + 3/8 + 1 + 0.01} + } + }) diff --git a/infrastructure/advanced_traffic_lights_pedestrians.lua b/infrastructure/advanced_traffic_lights_pedestrians.lua new file mode 100644 index 0000000..02da804 --- /dev/null +++ b/infrastructure/advanced_traffic_lights_pedestrians.lua @@ -0,0 +1,252 @@ +-- Traffic lights for pedestrians + beep_handler = {} + + function semaphores_pedestrians(pos, node) + local p = minetest.hash_node_position(pos) + if node.name == "infrastructure:traffic_lights_pedestrians_bottom_1" then + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_bottom_2", param2 = node.param2}) + pos.y = pos.y + 1 + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_top_2", param2 = node.param2}) + elseif node.name == "infrastructure:traffic_lights_pedestrians_bottom_2" then + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_bottom_3", param2 = node.param2}) + pos.y = pos.y + 1 + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_top_3", param2 = node.param2}) + beep_handler[p] = minetest.sound_play("infrastructure_traffic_lights_1", { + loop = true, + pos = pos, + gain = TRAFFIC_LIGHTS_VOLUME, + max_hear_distance = 50 + }) + elseif node.name == "infrastructure:traffic_lights_pedestrians_bottom_3" then + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_bottom_4", param2 = node.param2}) + if beep_handler[p] ~= nil then + minetest.sound_stop(beep_handler[p]) + beep_handler[p] = nil + end + pos.y = pos.y + 1 + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_top_4", param2 = node.param2}) + beep_handler[p] = minetest.sound_play("infrastructure_traffic_lights_2", { + loop = true, + pos = pos, + gain = TRAFFIC_LIGHTS_VOLUME, + max_hear_distance = 50 + }) + elseif node.name == "infrastructure:traffic_lights_pedestrians_bottom_4" then + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_bottom_1", param2 = node.param2}) + pos.y = pos.y + 1 + minetest.swap_node(pos, {name = "infrastructure:traffic_lights_pedestrians_top_1", param2 = node.param2}) + if beep_handler[p] ~= nil then + minetest.sound_stop(beep_handler[p]) + beep_handler[p] = nil + end + end + end + + function quiet(pos) + local p = minetest.hash_node_position(pos) + if beep_handler[p] ~= nil then + minetest.sound_stop(beep_handler[p]) + beep_handler[p] = nil + end + end + + for i = 1, 4 do + minetest.register_node("infrastructure:traffic_lights_pedestrians_top_"..tostring(i), { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_pedestrians_top_back.png", + "infrastructure_traffic_lights_pedestrians_top_front_"..tostring(i)..".png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky=3, not_in_creative_inventory = 1}, + light_source = TRAFFIC_LIGHTS_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-5/16, -1/2, -1/8, 5/16, 0, 1/8}, + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/8}, + + {-5/16, -1/8, -5/16, 5/16, -1/16, -1/8}, + {-5/16, -3/8, -1/4, -1/4, -1/8, -1/8}, + {1/4, -3/8, -1/4, 5/16, -1/8, -1/8}, + + {-1/8, 1/16, -1/8, 1/8, 5/16, 0}, + {-1/16, 1/8, 0, 1/16, 1/4, 1/8}, + {-1/16, 0, -1/16, 1/16, 1/8, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = {0, 0, 0, 0, 0, 0} + } + }) + + minetest.register_node("infrastructure:traffic_lights_pedestrians_bottom_"..tostring(i), { + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_pedestrians_bottom_back.png", + "infrastructure_traffic_lights_pedestrians_bottom_front_"..tostring(i)..".png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 1}, + light_source = TRAFFIC_LIGHTS_LIGHT_RANGE, + drop = "infrastructure:traffic_lights_pedestrians_bottom_1", + node_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 1/2, 1/8}, + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + -- box + {-5/16, -5/16, -1/8, 5/16, 1, 1/8}, + -- top + {-5/16, -1/8 + 1, -5/16, 5/16, -1/16 + 1, -1/8}, + {-5/16, -3/8 + 1, -1/4, -1/4, -1/8 + 1, -1/8}, + {1/4, -3/8 + 1, -1/4, 5/16, -1/8 + 1, -1/8}, + + {-1/8, 1/16 + 1, -1/8, 1/8, 5/16 + 1, 0}, + {-1/16, 1/8 + 1, 0, 1/16, 1/4 + 1, 1/8}, + {-1/16, 0 + 1, -1/16, 1/16, 1/4 + 1, 1/16}, + -- bottom + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.01} + } + }, + + after_place_node = function(pos) + local node = minetest.env:get_node(pos) + pos.y = pos.y + 1 + node.name = "infrastructure:traffic_lights_pedestrians_top_"..tostring(i) + minetest.env:add_node(pos, node) + end, + + after_dig_node = function(pos) + local node = minetest.env:get_node(pos) + quiet(pos) + pos.y = pos.y + 1 + node.name = "infrastructure:traffic_lights_pedestrians_top_"..tostring(i) + minetest.env:remove_node(pos) + end, + + on_punch = function(pos, node) + semaphores_pedestrians(pos, node) + end, + + mesecons = {effector = { + action_on = function(pos, node) + semaphores_pedestrians(pos, node) + end + }} + }) + end + + minetest.register_node("infrastructure:traffic_lights_pedestrians_bottom_1", { + description = "Traffic lights for pedestrians", + inventory_image = "infrastructure_traffic_lights_pedestrians.png", + wield_image = "infrastructure_traffic_lights_pedestrians.png", + tiles = { + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_side.png", + "infrastructure_traffic_lights_pedestrians_bottom_back.png", + "infrastructure_traffic_lights_pedestrians_bottom_front_1.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 3, not_in_creative_inventory = 0}, + light_source = TRAFFIC_LIGHTS_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-5/16, -5/16, -1/8, 5/16, 1/2, 1/8}, + {-1/2, -1/2, -1/8, 1/2, 1/2, -1/8}, + + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.001} + } + }, + selection_box = { + type = "fixed", + fixed = { + -- box + {-5/16, -5/16, -1/8, 5/16, 1, 1/8}, + -- top + {-5/16, -1/8 + 1, -5/16, 5/16, -1/16 + 1, -1/8}, + {-5/16, -3/8 + 1, -1/4, -1/4, -1/8 + 1, -1/8}, + {1/4, -3/8 + 1, -1/4, 5/16, -1/8 + 1, -1/8}, + + {-1/8, 1/16 + 1, -1/8, 1/8, 5/16 + 1, 0}, + {-1/16, 1/8 + 1, 0, 1/16, 1/4 + 1, 1/8}, + {-1/16, 0 + 1, -1/16, 1/16, 1/8 + 1, 1/16}, + -- bottom + {-5/16, 1/4, -5/16, 5/16, 5/16, -1/8}, + {-5/16, 0, -1/4, -1/4, 1/4, -1/8}, + {1/4, 0, -1/4, 5/16, 1/4, -1/8}, + + {-1/16, -1/4, 1/8, 1/16, 1/4, 3/8}, + {-1/4, -1/16, 1/8, 1/4, 1/16, 3/8}, + {-1/4, -1/4, 3/8, 1/4, 1/4, 1/2 - 0.01} + } + }, + + after_place_node = function(pos) + local node = minetest.env:get_node(pos) + pos.y = pos.y + 1 + node.name = "infrastructure:traffic_lights_pedestrians_top_1" + minetest.env:add_node(pos, node) + end, + + after_dig_node = function(pos) + local node = minetest.env:get_node(pos) + quiet(pos) + pos.y = pos.y + 1 + node.name = "infrastructure:traffic_lights_pedestrians_top_1" + minetest.env:remove_node(pos) + end, + + on_punch = function(pos, node) + semaphores_pedestrians(pos, node) + end, + + mesecons = {effector = { + action_on = function(pos, node) + semaphores_pedestrians(pos, node) + end + }} + }) + + minetest.register_alias("infrastructure:traffic_lights_pedestrians", "infrastructure:traffic_lights_pedestrians_bottom_1") diff --git a/infrastructure/advanced_warning_light.lua b/infrastructure/advanced_warning_light.lua new file mode 100644 index 0000000..67ced44 --- /dev/null +++ b/infrastructure/advanced_warning_light.lua @@ -0,0 +1,97 @@ +-- Warning light + minetest.register_abm( { + nodenames = {"infrastructure:warning_light_bright", "infrastructure:warning_light_dark"}, + interval = 2, + chance = 1, + action = function(pos, node) + local node = minetest.env:get_node(pos) + if node.name == "infrastructure:warning_light_bright" then + minetest.swap_node(pos, {name = "infrastructure:warning_light_dark", param2 = node.param2}) + elseif node.name == "infrastructure:warning_light_dark" then + minetest.swap_node(pos, {name = "infrastructure:warning_light_bright", param2 = node.param2}) + end + end + }) + + minetest.register_node("infrastructure:warning_light_bright", { + description = "Warning light", + tiles = { + "infrastructure_warning_light_top.png", + "infrastructure_warning_light_bottom.png", + "infrastructure_warning_light_right.png", + "infrastructure_warning_light_left.png", + "infrastructure_warning_light_back.png", + "infrastructure_warning_light_front_bright.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1}, + light_source = WARNING_LIGHT_LIGHT_RANGE, + node_box = { + type = "fixed", + fixed = { + {-5/16, -3/8, 0, 5/16, 0, 0}, + + {-1/4, -5/16, 0, 0, -1/16, 1/8}, + + {1/16, -1/2, -1/8, 5/16, -1/4, 1/8}, + + {-1/16, -1/2, -1/16, 1/16, -3/8, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-5/16, -3/8, 0, 5/16, 0, 0}, + + {-1/4, -5/16, 0 + 0.01, 0, -1/16, 1/8}, + + {1/16, -1/2, -1/8, 5/16, -1/4, 1/8}, + + {-1/16, -1/2, -1/16, 1/16, -3/8, 1/16} + } + } + }) + + minetest.register_node("infrastructure:warning_light_dark", { + tiles = { + "infrastructure_warning_light_top.png", + "infrastructure_warning_light_bottom.png", + "infrastructure_warning_light_right.png", + "infrastructure_warning_light_left.png", + "infrastructure_warning_light_back.png", + "infrastructure_warning_light_front_dark.png" + }, + drawtype = "nodebox", + paramtype = "light", + paramtype2 = "facedir", + groups = {cracky = 1, not_in_creative_inventory = 1}, + drop = "infrastructure:warning_light_bright", + node_box = { + type = "fixed", + fixed = { + {-5/16, -3/8, 0, 5/16, 0, 0}, + + {-1/4, -5/16, 0, 0, -1/16, 1/8}, + + {1/16, -1/2, -1/8, 5/16, -1/4, 1/8}, + + {-1/16, -1/2, -1/16, 1/16, -3/8, 1/16} + } + }, + selection_box = { + type = "fixed", + fixed = { + {-5/16, -3/8, 0, 5/16, 0, 0}, + + {-1/4, -5/16, 0 + 0.01, 0, -1/16, 1/8}, + + {1/16, -1/2, -1/8, 5/16, -1/4, 1/8}, + + {-1/16, -1/2, -1/16, 1/16, -3/8, 1/16} + } + } + }) + + minetest.register_alias("infrastructure:warning_light", "infrastructure:warning_light_bright") diff --git a/infrastructure/crafts.lua b/infrastructure/crafts.lua new file mode 100644 index 0000000..4a324fe --- /dev/null +++ b/infrastructure/crafts.lua @@ -0,0 +1,549 @@ +-- **************************************************************************************************** MATERIALS
+
+-- Galvanized steel
+ if minetest.get_modpath("technic") then
+ technic.register_alloy_recipe({input = {"default:steel_ingot 6", "technic:zinc_ingot 1"}, output = "infrastructure:galvanized_steel 6", time = 4})
+ else
+ minetest.register_craft({
+ output = '"infrastructure:galvanized_steel" 6',
+ recipe = {
+ {'', 'default:copper_ingot', ''},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}
+ }
+ })
+ end
+
+-- Galvanized steel fence
+ minetest.register_craft({
+ output = '"infrastructure:fence_galvanized_steel" 6',
+ recipe = {
+ {'infrastructure:galvanized_steel', 'infrastructure:galvanized_steel', 'infrastructure:galvanized_steel'},
+ {'infrastructure:galvanized_steel', 'infrastructure:galvanized_steel', 'infrastructure:galvanized_steel'}
+ }
+ })
+
+-- **************************************************************************************************** CENTER LINES
+
+-- Asphalt block with center dashed line
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_center_dashed" 9',
+ recipe = {
+ {'infrastructure:asphalt', 'wool:yellow', 'infrastructure:asphalt'},
+ {'infrastructure:asphalt', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'infrastructure:asphalt', 'wool:yellow', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Asphalt block with center solid line
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_center_solid_line" 9',
+ recipe = {
+ {'infrastructure:asphalt', 'wool:yellow', 'infrastructure:asphalt'},
+ {'infrastructure:asphalt', 'wool:yellow', 'infrastructure:asphalt'},
+ {'infrastructure:asphalt', 'wool:yellow', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Asphalt block with center solid line on one side
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_center_solid_one_side" 9',
+ recipe = {
+ {'wool:yellow', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:yellow', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:yellow', 'infrastructure:asphalt', 'infrastructure:asphalt'}
+ }
+ })
+
+
+-- Asphalt block with center solid double line
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_center_solid_double" 9',
+ recipe = {
+ {'wool:yellow', 'infrastructure:asphalt', 'wool:yellow'},
+ {'wool:yellow', 'infrastructure:asphalt', 'wool:yellow'},
+ {'wool:yellow', 'infrastructure:asphalt', 'wool:yellow'}
+ }
+ })
+
+-- Asphalt block with center corner single line
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_center_corner_single" 9',
+ recipe = {
+ {'infrastructure:asphalt', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'infrastructure:asphalt', 'wool:yellow', 'wool:yellow'},
+ {'infrastructure:asphalt', 'wool:yellow', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Asphalt block with center corner double line
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_center_corner_double" 9',
+ recipe = {
+ {'wool:yellow', 'wool:yellow', 'wool:yellow'},
+ {'wool:yellow', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:yellow', 'infrastructure:asphalt', 'wool:yellow'}
+ }
+ })
+
+-- **************************************************************************************************** BORDER LINES
+
+-- Asphalt block with side dashed line
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_side_dashed" 9',
+ recipe = {
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'infrastructure:asphalt', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Asphalt block with side solid line
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_side_solid" 9',
+ recipe = {
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Asphalt block with lines for inner edge
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_inner_edge" 9',
+ recipe = {
+ {'wool:white', 'wool:white', 'wool:white'},
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Asphalt block with lines for outer edge
+ minetest.register_craft({
+ output = '"infrastructure:asphalt_outer_edge" 9',
+ recipe = {
+ {'infrastructure:asphalt', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'infrastructure:asphalt', 'infrastructure:asphalt', 'infrastructure:asphalt'},
+ {'wool:white', 'infrastructure:asphalt', 'infrastructure:asphalt'}
+ }
+ })
+
+
+-- **************************************************************************************************** PRECAST CONCRETE
+
+-- Concrete seperating wall
+ minetest.register_craft({
+ output = '"infrastructure:precast_concrete_seperating_wall" 5',
+ recipe = {
+ {'', 'infrastructure:concrete', ''},
+ {'', 'infrastructure:concrete', ''},
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'}
+ }
+ })
+
+-- Concrete cylinder
+ minetest.register_craft({
+ output = '"infrastructure:precast_concrete_cylinder" 8',
+ recipe = {
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'},
+ {'infrastructure:concrete', '', 'infrastructure:concrete'},
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'}
+ }
+ })
+
+-- Concrete grid paver
+ minetest.register_craft({
+ output = '"infrastructure:precast_concrete_grid_paver" 5',
+ recipe = {
+ {'infrastructure:concrete', '', 'infrastructure:concrete'},
+ {'', 'infrastructure:concrete', ''},
+ {'infrastructure:concrete', '', 'infrastructure:concrete'}
+ }
+ })
+
+-- **************************************************************************************************** STEEL STRUCTURES
+
+-- Truss
+ minetest.register_craft({
+ output = '"infrastructure:truss" 5',
+ recipe = {
+ {'infrastructure:galvanized_steel', '', 'infrastructure:galvanized_steel'},
+ {'', 'infrastructure:galvanized_steel', ''},
+ {'infrastructure:galvanized_steel', '', 'infrastructure:galvanized_steel'}
+ }
+ })
+
+-- Wire netting
+ minetest.register_craft({
+ output = '"infrastructure:wire_netting" 10',
+ recipe = {
+ {'', 'infrastructure:galvanized_steel', ''},
+ {'infrastructure:galvanized_steel', '', 'infrastructure:galvanized_steel'},
+ {'', 'infrastructure:galvanized_steel', ''}
+ }
+ })
+
+-- Razor wire
+ minetest.register_craft({
+ output = '"infrastructure:razor_wire" 5',
+ recipe = {
+ {'infrastructure:galvanized_steel'},
+ {'default:cactus'},
+ {'infrastructure:galvanized_steel'}
+ }
+ })
+
+-- Drainage channel grating
+ minetest.register_craft({
+ output = '"infrastructure:drainage_channel_grating" 2',
+ recipe = {
+ {'infrastructure:galvanized_steel', '', 'infrastructure:galvanized_steel'}
+ }
+ })
+
+-- Louver
+ minetest.register_craft({
+ output = '"infrastructure:drainage_channel_grating" 2',
+ recipe = {
+ {'infrastructure:galvanized_steel'},
+ {''},
+ {'infrastructure:galvanized_steel'}
+ }
+ })
+
+-- Riffled sheet
+ minetest.register_craft({
+ output = '"infrastructure:riffled_sheet" 4',
+ recipe = {
+ {'infrastructure:galvanized_steel', 'infrastructure:fence_galvanized_steel'},
+ {'infrastructure:fence_galvanized_steel', 'infrastructure:galvanized_steel'}
+ }
+ })
+
+-- Corrugated sheet
+ minetest.register_craft({
+ output = '"infrastructure:corrugated_sheet" 4',
+ recipe = {
+ {"","infrastructure:galvanized_steel",""},
+ {"infrastructure:galvanized_steel","","infrastructure:galvanized_steel"}
+ }
+ })
+
+-- Louvers
+ minetest.register_craft({
+ output = "infrastructure:louver_opened",
+ recipe = {
+ {"infrastructure:fence_galvanized_steel","infrastructure:galvanized_steel","infrastructure:fence_galvanized_steel"},
+ {"","",""},
+ {"infrastructure:fence_galvanized_steel","infrastructure:galvanized_steel","infrastructure:fence_galvanized_steel"}
+ }
+ })
+
+-- **************************************************************************************************** ADVANCED ITEMS
+
+-- Raised pavement marker yellow/yellow
+ minetest.register_craft({
+ output = '"infrastructure:marker_yellow_yellow" 1',
+ recipe = {
+ {'wool:yellow', 'infrastructure:asphalt', 'wool:yellow'},
+ {'infrastructure:asphalt', 'infrastructure:asphalt', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Raised pavement marker red/yellow
+ minetest.register_craft({
+ output = '"infrastructure:marker_red_yellow" 1',
+ recipe = {
+ {'wool:yellow', 'infrastructure:asphalt', 'wool:red'},
+ {'infrastructure:asphalt', 'infrastructure:asphalt', 'infrastructure:asphalt'}
+ }
+ })
+
+-- Retroreflective delineators
+ minetest.register_craft({
+ output = '"infrastructure:delineator" 1',
+ recipe = {
+ {'wool:yellow', 'infrastructure:concrete', 'wool:red'},
+ {'', 'infrastructure:concrete', ''},
+ {'', 'infrastructure:concrete', ''}
+ }
+ })
+
+ minetest.register_craft({
+ output = '"infrastructure:delineator_guardrail" 1',
+ recipe = {
+ {'wool:yellow', 'infrastructure:concrete', 'wool:red'},
+ {'', 'infrastructure:concrete', ''}
+ }
+ })
+
+-- Wire rope safety barrier
+ minetest.register_craft({
+ output = '"infrastructure:wire_rope_safety_barrier" 1',
+ recipe = {
+ {'default:steel_ingot', '', 'default:steel_ingot'},
+ {'', 'default:steel_ingot', ''},
+ {'', 'default:steel_ingot', ''}
+ }
+ })
+
+-- Cable barrier terminal
+ minetest.register_craft({
+ output = '"infrastructure:cable_barrier_terminal" 1',
+ recipe = {
+ {'default:steel_ingot', '', ''},
+ {'', 'default:steel_ingot', ''},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}
+ }
+ })
+
+-- Corrugated guide rail
+ minetest.register_craft({
+ output = '"infrastructure:corrugated_guide_rail" 1',
+ recipe = {
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ {'', 'default:steel_ingot', ''},
+ {'', 'default:steel_ingot', ''}
+ }
+ })
+
+-- Energy absorbing terminal
+ minetest.register_craft({
+ output = '"infrastructure:energy_absorbing_terminal" 1',
+ recipe = {
+ {'', 'default:steel_ingot', ''},
+ {'default:steel_ingot', 'default:steel_ingot', ''},
+ {'', 'default:steel_ingot', ''}
+ }
+ })
+
+ minetest.register_craft({
+ output = '"infrastructure:energy_absorbing_terminal" 1',
+ recipe = {
+ {'infrastructure:energy_absorbing_terminal_inversed'}
+ }
+ })
+
+ minetest.register_craft({
+ output = '"infrastructure:energy_absorbing_terminal_inversed" 1',
+ recipe = {
+ {'infrastructure:energy_absorbing_terminal'}
+ }
+ })
+
+-- Fitch barrel
+ minetest.register_craft({
+ output = '"infrastructure:fitch_barrel" 1',
+ recipe = {
+ {'wool:black', 'wool:black', 'wool:black'},
+ {'wool:yellow', 'default:sand', 'wool:yellow'},
+ {'wool:yellow', 'wool:yellow', 'wool:yellow'}
+ }
+ })
+
+-- Crowd control barricade
+ minetest.register_craft({
+ output = '"infrastructure:crowd_control_barricade" 1',
+ recipe = {
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+ {'default:steel_ingot', '', 'default:steel_ingot'}
+ }
+ })
+
+if ENABLE_EMERGENCY_PHONE then
+-- Emergency phone
+ minetest.register_craft({
+ output = '"infrastructure:emergency_phone" 1',
+ recipe = {
+ {'default:mese_crystal', 'default:mese_crystal', 'default:mese_crystal'},
+ {'default:mese_crystal', 'default:apple', 'default:mese_crystal'},
+ {'default:mese_crystal', 'default:stick', 'default:mese_crystal'}
+ }
+ })
+ minetest.register_craft({
+ output = '"infrastructure:emergency_phone" 1',
+ recipe = {
+ {'default:mese', 'default:mese', 'default:mese'},
+ {'default:mese', 'default:apple', 'default:mese'},
+ {'default:mese', 'default:stick', 'default:mese'}
+ }
+ })
+end
+
+-- Manhole cover
+ minetest.register_craft({
+ output = '"infrastructure:manhole_cover_closed" 1',
+ recipe = {
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'},
+ {'infrastructure:concrete', 'default:steel_ingot', 'infrastructure:concrete'},
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'}
+ }
+ })
+
+-- Traffic lights for pedestrians
+ minetest.register_craft({
+ output = '"infrastructure:traffic_lights_pedestrians" 1',
+ recipe = {
+ {'', 'default:steel_ingot', ''},
+ {'default:steel_ingot', 'wool:red', 'default:steel_ingot'},
+ {'default:steel_ingot', 'wool:green', 'default:steel_ingot'}
+ }
+ })
+
+-- Crosswalk warning light
+ minetest.register_craft({
+ output = '"infrastructure:crosswalk_warning_light" 1',
+ recipe = {
+ {'', 'default:steel_ingot', ''},
+ {'default:steel_ingot', 'wool:yellow', 'default:steel_ingot'},
+ {'', 'wool:green', ''}
+ }
+ })
+
+-- Curve chevron
+ minetest.register_craft({
+ output = '"infrastructure:curve_chevron" 1',
+ recipe = {
+ {'wool:yellow', 'wool:black', 'wool:yellow'},
+ {'wool:black', 'wool:yellow', 'wool:yellow'},
+ {'wool:yellow', 'wool:black', 'wool:yellow'}
+ }
+ })
+
+-- Crosswalk lighting
+ minetest.register_craft({
+ output = '"infrastructure:crosswalk_lighting" 1',
+ recipe = {
+ {'wool:white', 'wool:white', 'wool:white'},
+ {'', 'mesecons_torch:mesecon_torch_on', ''},
+ {'wool:white', 'wool:white', 'wool:white'}
+ }
+ })
+
+-- Crosswalk safety sign
+ minetest.register_craft({
+ output = '"infrastructure:crosswalk_safety_sign" 1',
+ recipe = {
+ {'', 'wool:green', ''},
+ {'', 'wool:green', ''},
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'}
+ }
+ })
+
+-- Road sign crosswalk
+ minetest.register_craft({
+ output = '"infrastructure:road_sign_crosswalk" 1',
+ recipe = {
+ {'wool:green', 'wool:green', 'wool:green'},
+ {'wool:green', 'wool:blue', 'wool:green'},
+ {'wool:green', 'wool:green', 'wool:green'}
+ }
+ })
+
+-- Road sign right_of_way
+ minetest.register_craft({
+ output = '"infrastructure:road_sign_right_of_way" 1',
+ recipe = {
+ {"", 'wool:white', ""},
+ {'wool:white', 'wool:yellow', 'wool:white'},
+ {"", 'wool:white', ""}
+ }
+ })
+
+-- Road sign stop
+ minetest.register_craft({
+ output = '"infrastructure:road_sign_stop" 1',
+ recipe = {
+ {'wool:red', 'wool:red', 'wool:red'},
+ {'wool:red', 'wool:white', 'wool:red'},
+ {'wool:red', 'wool:red', 'wool:red'}
+ }
+ })
+
+-- Road sign yield
+ minetest.register_craft({
+ output = '"infrastructure:road_sign_yield" 1',
+ recipe = {
+ {'wool:orange', 'wool:orange', 'wool:orange'},
+ {'wool:red', 'wool:orange', 'wool:red'},
+ {'', 'wool:red', ''}
+ }
+ })
+
+-- Automatic warning device
+ minetest.register_craft({
+ output = '"infrastructure:automatic_warning_device" 1',
+ recipe = {
+ {'wool:red', 'default:steel_ingot', 'wool:red'},
+ {'', 'default:steel_ingot', ''},
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'}
+ }
+ })
+
+-- Boom barrier
+ minetest.register_craft({
+ output = '"infrastructure:boom_barrier_mechanism" 1',
+ recipe = {
+ {'default:steel_ingot', 'default:steel_ingot', ''},
+ {'', 'default:steel_ingot', ''},
+ {'infrastructure:concrete', 'infrastructure:concrete', 'infrastructure:concrete'}
+ }
+ })
+
+ minetest.register_craft({
+ output = '"infrastructure:boom_barrier_arm" 1',
+ recipe = {
+ {'', 'wool:red', ''},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}
+ }
+ })
+
+-- Aircraft warning light
+ minetest.register_craft({
+ output = '"infrastructure:aircraft_warning_light" 1',
+ recipe = {
+ {'', 'wool:red', ''},
+ {'wool:red', 'default:torch', 'wool:red'},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}
+ }
+ })
+
+-- Warning light
+ minetest.register_craft({
+ output = '"infrastructure:warning_light" 1',
+ recipe = {
+ {'wool:yellow', 'wool:yellow', ''},
+ {'wool:yellow', 'default:torch', ''},
+ {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}
+ }
+ })
+
+-- Anti-dazzling panel
+ minetest.register_craft({
+ output = '"infrastructure:anti_dazzling_panel" 1',
+ recipe = {
+ {'wool:grey', 'wool:grey'},
+ {'wool:grey', 'wool:yellow'},
+ {'wool:grey', 'wool:grey'}
+ }
+ })
+
+-- Traffic cone
+ minetest.register_craft({
+ output = '"infrastructure:traffic_cone" 1',
+ recipe = {
+ {'', 'wool:orange', ''},
+ {'wool:orange', '', 'wool:orange'},
+ }
+ })
+
+-- Noise barrier
+ minetest.register_craft({
+ output = '"infrastructure:noise_barrier" 1',
+ recipe = {
+ {'default:steel_ingot', 'wool:green', 'default:steel_ingot'},
+ {'wool:green', 'default:steel_ingot', 'wool:green'},
+ {'default:steel_ingot', 'wool:green', 'default:steel_ingot'}
+ }
+ })
diff --git a/infrastructure/depends.txt b/infrastructure/depends.txt new file mode 100644 index 0000000..af1119b --- /dev/null +++ b/infrastructure/depends.txt @@ -0,0 +1,8 @@ +default +moreblocks +mesecons +wool +streetsmod +prefab +digilines +technic? diff --git a/infrastructure/init.lua b/infrastructure/init.lua new file mode 100644 index 0000000..8b79b00 --- /dev/null +++ b/infrastructure/init.lua @@ -0,0 +1,24 @@ +-- Load settings
+dofile(minetest.get_modpath("infrastructure").."/settings.lua")
+
+-- Register nodes
+dofile(minetest.get_modpath("infrastructure").."/nodes.lua")
+-- Register special nodes
+dofile(minetest.get_modpath("infrastructure").."/nodes_extension.lua")
+-- Register advanced devices
+dofile(minetest.get_modpath("infrastructure").."/advanced_road_signs.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_emergency_phone.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_traffic_lights_pedestrians.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_crosswalk_warning_light.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_lane_control_lights.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_curve_chevron.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_crosswalk_lighting.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_crosswalk_safety_sign.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_automatic_warning_device.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_boom_barrier.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_aircraft_warning_light.lua")
+dofile(minetest.get_modpath("infrastructure").."/advanced_warning_light.lua")
+-- Register crafting recipes
+dofile(minetest.get_modpath("infrastructure").."/crafts.lua")
+
+print("Infrastructure mod loaded succesfully!")
diff --git a/infrastructure/nodes.lua b/infrastructure/nodes.lua new file mode 100644 index 0000000..33845c1 --- /dev/null +++ b/infrastructure/nodes.lua @@ -0,0 +1,1579 @@ +-- **************************************************************************************************** MATERIALS
+
+-- Asphalt block
+ minetest.register_alias("infrastructure:asphalt", "streets:asphalt")
+
+-- Concrete block
+ minetest.register_alias("infrastructure:concrete", "technic:concrete")
+
+-- Concrete fence
+ minetest.register_alias("infrastructure:fence_concrete", "prefab:concrete_fence")
+
+-- Galvanized steel block
+ minetest.register_node("infrastructure:galvanized_steel", {
+ description = "Galvanized steel",
+ tiles = {"infrastructure_galvanized_steel.png"},
+ drawtype = "normal",
+ paramtype = "light",
+ groups = {cracky = 2},
+ })
+ minetest.register_alias("galvanized_steel", "infrastructure:galvanized_steel")
+
+-- Galvanized steel fence
+ minetest.register_node("infrastructure:fence_galvanized_steel", {
+ description = "Galvanized steel fence",
+ drawtype = "fencelike",
+ tiles = {"infrastructure_galvanized_steel.png"},
+ paramtype = "light",
+ is_ground_content = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
+ },
+ groups = {cracky = 2},
+ })
+
+-- **************************************************************************************************** CENTER LINES
+
+-- Asphalt block with center solid line
+ minetest.register_node("infrastructure:asphalt_center_solid_line", {
+ description = "Asphalt with center solid line",
+ tiles = {
+ "streets_asphalt.png^infrastructure_single_yellow_line.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ },
+ drawtype = "normal",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1},
+ })
+
+-- Asphalt block with center solid line on one side (for making dashed lines)
+ minetest.register_node("infrastructure:asphalt_center_solid_one_side", {
+ description = "Asphalt with center solid line on one side",
+ tiles = {
+ "streets_asphalt.png^infrastructure_solid_yellow_line_one_side.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ },
+ drawtype = "normal",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1},
+ })
+
+-- Asphalt block with center solid double line
+ minetest.register_node("infrastructure:asphalt_center_solid_double", {
+ description = "Asphalt with center solid double line",
+ tiles = {
+ "streets_asphalt.png^infrastructure_double_yellow_line.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ },
+ drawtype = "normal",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1},
+ })
+
+-- Asphalt block with center corner single line
+ minetest.register_node("infrastructure:asphalt_center_corner_single", {
+ description = "Asphalt with center corner single line",
+ tiles = {
+ "streets_asphalt.png^infrastructure_single_yellow_line_corner.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ },
+ drawtype = "normal",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1},
+ })
+
+-- Asphalt block with center corner double line
+ minetest.register_node("infrastructure:asphalt_center_corner_double", {
+ description = "Asphalt with center corner double line",
+ tiles = {
+ "streets_asphalt.png^infrastructure_solid_double_yellow_line_corner.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ "streets_asphalt.png",
+ },
+ drawtype = "normal",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 1},
+ })
+
+-- **************************************************************************************************** TRAFFIC MARKS
+
+-- Asphalt block with arrow straight
+ minetest.register_alias("infrastructure:asphalt_arrow_straight", "streets:asphalt_arrow_straight")
+
+-- Asphalt block with arrow straight + left
+ minetest.register_alias("infrastructure:asphalt_arrow_straight_left", "streets:asphalt_arrow_straight_left")
+
+-- Asphalt block with arrow straight + right
+ minetest.register_alias("infrastructure:asphalt_arrow_straight_right", "streets:asphalt_arrow_straight_left")
+
+-- Asphalt block with arrow left
+ minetest.register_alias("infrastructure:asphalt_arrow_left", "streets:asphalt_arrow_left")
+
+-- Asphalt block with arrow right
+ minetest.register_alias("infrastructure:asphalt_arrow_right", "streets:asphalt_arrow_right")
+
+-- Asphalt block with "P"-sign
+ minetest.register_alias("infrastructure:asphalt_parking", "streets:asphalt_parking")
+
+-- **************************************************************************************************** PRECAST CONCRETE
+
+-- Concrete seperating wall
+ minetest.register_node("infrastructure:precast_concrete_seperating_wall", {
+ description = "Precast concrete seperating wall",
+ tiles = {"infrastructure_concrete.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-5/16, -1/2, -7/16, 5/16, -1/4, 7/16},
+ {-1/16, -1/4, -7/16, 1/16, 1/2, 7/16},
+ {-3/16, -1/2, -5/16, 3/16, 0, -1/4},
+ {-3/16, -1/2, 1/4, 3/16, 0, 5/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-5/16, -1/2, -7/16, 5/16, -1/4, 7/16},
+ {-1/16, -1/4, -7/16, 1/16, 1/2, 7/16},
+ {-3/16, -1/2, -5/16, 3/16, 0, -1/4},
+ {-3/16, -1/2, 1/4, 3/16, 0, 5/16}
+ }
+ }
+ })
+
+-- Concrete cylinder
+ minetest.register_node("infrastructure:precast_concrete_cylinder", {
+ description = "Precast concrete cylinder",
+ tiles = {"infrastructure_concrete.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ walkable = false,
+ climbable = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {3/8, -1/2, -1/2, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, -3/8, 1/2, 1/2},
+ {-1/2, -1/2, 3/8, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 1/2, -3/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {3/8, -1/2, -1/2, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, -3/8, 1/2, 1/2},
+ {-1/2, -1/2, 3/8, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 1/2, -3/8}
+ }
+ }
+ })
+
+-- Concrete grid paver
+ minetest.register_node("infrastructure:precast_concrete_grid_paver", {
+ description = "Precast concrete grid paver",
+ tiles = {
+ "infrastructure_grid_paver_top.png",
+ "infrastructure_grid_paver_bottom.png",
+ "infrastructure_concrete.png",
+ "infrastructure_concrete.png",
+ "infrastructure_concrete.png",
+ "infrastructure_concrete.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/2, -1/2, 1/2, -1/2, 1/2},
+ {-1/2, -1/2 + 1/128, -1/2, 1/2, -1/2 + 1/128, 1/2},
+ {-1/2, -1/2 + 2/128, -1/2, 1/2, -1/2 + 2/128, 1/2},
+ {-1/2, -1/2 + 3/128, -1/2, 1/2, -1/2 + 3/128, 1/2},
+ {-1/2, -1/2 + 4/128, -1/2, 1/2, -1/2 + 4/128, 1/2},
+ {-1/2, -1/2 + 5/128, -1/2, 1/2, -1/2 + 5/128, 1/2},
+ {-1/2, -1/2 + 6/128, -1/2, 1/2, -1/2 + 6/128, 1/2},
+ {-1/2, -1/2 + 7/128, -1/2, 1/2, -1/2 + 7/128, 1/2},
+ {-1/2, -1/2 + 8/128, -1/2, 1/2, -1/2 + 8/128, 1/2},
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, -1/2 + 8/128, 1/2}
+ },
+
+ after_place_node = function(pos)
+ pos.y = pos.y - 1
+ local node = minetest.get_node(pos)
+ if (node.name == "default:dirt_with_grass") then
+ pos.y = pos.y + 1
+ local node = minetest.get_node(pos)
+ node.name = "infrastructure:precast_concrete_grid_paver_with_grass"
+ minetest.swap_node(pos, node)
+ end
+ end
+ })
+
+ minetest.register_node("infrastructure:precast_concrete_grid_paver_with_grass", {
+ description = "Precast concrete grid paver with grass",
+ tiles = {
+ "infrastructure_grid_paver_top.png",
+ "infrastructure_grid_paver_bottom.png",
+ "infrastructure_grid_paver_grass.png",
+ "infrastructure_grid_paver_grass.png",
+ "infrastructure_grid_paver_grass.png",
+ "infrastructure_grid_paver_grass.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2,not_in_creative_inventory = 1},
+ drop = "infrastructure:precast_concrete_grid_paver",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/2, -1/2, 1/2, -1/2, 1/2},
+ {-1/2, -1/2 + 1/128, -1/2, 1/2, -1/2 + 1/128, 1/2},
+ {-1/2, -1/2 + 2/128, -1/2, 1/2, -1/2 + 2/128, 1/2},
+ {-1/2, -1/2 + 3/128, -1/2, 1/2, -1/2 + 3/128, 1/2},
+ {-1/2, -1/2 + 4/128, -1/2, 1/2, -1/2 + 4/128, 1/2},
+ {-1/2, -1/2 + 5/128, -1/2, 1/2, -1/2 + 5/128, 1/2},
+ {-1/2, -1/2 + 6/128, -1/2, 1/2, -1/2 + 6/128, 1/2},
+ {-1/2, -1/2 + 7/128, -1/2, 1/2, -1/2 + 7/128, 1/2},
+ {-1/2, -1/2 + 8/128, -1/2, 1/2, -1/2 + 8/128, 1/2},
+
+ {-3/8, -1/2, 1/4, -1/8, 0, 1/4},
+ {1/8, -1/2, 1/4, 3/8, 0, 1/4},
+
+ {-1/8, -1/2, 0, 1/8, 0, 0},
+
+ {-3/8, -1/2, -1/4, -1/8, 0, -1/4},
+ {1/8, -1/2, -1/4, 3/8, 0, -1/4},
+
+ {1/4, -1/2, -3/8, 1/4, 0, -1/8},
+ {1/4, -1/2, 1/8, 1/4, 0, 3/8},
+
+ {0, -1/2, -1/8, 0, 0, 1/8},
+
+ {-1/4, -1/2, -3/8, -1/4, 0, -1/8},
+ {-1/4, -1/2, 1/8, -1/4, 0, 3/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, -1/2 + 8/128, 1/2}
+ },
+
+ on_punch = function(pos, node)
+ local node = minetest.get_node(pos)
+ node.name = "infrastructure:precast_concrete_grid_paver"
+ minetest.swap_node(pos, node)
+ end
+ })
+
+-- **************************************************************************************************** STEEL STRUCTURES
+
+-- Truss
+ minetest.register_node("infrastructure:truss", {
+ description = "Truss",
+ tiles = {"infrastructure_truss.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ groups = {cracky = 2},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {1/2, -1/2, -1/2, 1/2, 1/2, 1/2},
+ {-1/2, 1/2, -1/2, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, 1/2, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, -1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, -1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 1/2, -1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2}
+ }
+ })
+
+-- Wire netting
+ minetest.register_node("infrastructure:wire_netting", {
+ description = "Wire netting",
+ tiles = {"infrastructure_wire_netting.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ node_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, 0, 1/2, 1/2, 0}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/8, 1/2, 1/2, 1/8}
+ }
+ })
+
+-- Razor wire
+ minetest.register_node("infrastructure:razor_wire", {
+ description = "Razor wire",
+ tiles = {"infrastructure_razor_wire.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 1/2, -1/2, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, -1/2, 1/2},
+ {-1/2, -1/2, 1/2, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, -1/2, 1/2, 1/2, -1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, 1/2, 1/2}
+ },
+
+ walkable = false,
+ damage_per_second = 8
+ })
+
+-- Drainage channel grating
+ minetest.register_node("infrastructure:drainage_channel_grating", {
+ description = "Truss",
+ tiles = {
+ "infrastructure_drainage_channel_grating.png",
+ "infrastructure_drainage_channel_grating.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ node_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 0, -3/8, 1/2}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 0, -3/8, 1/2}
+ }
+ })
+
+-- Louver
+ minetest.register_node("infrastructure:louver_opened", {
+ description = "Louver",
+ tiles = {"infrastructure_galvanized_steel.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 7/16, 0, 1/2, 1/2, 1/2},
+ {-1/2, -1/16, 0, 1/2, 0, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 7/16, 0, 1/2, 1/2, 1/2},
+ {-1/2, -1/16, 0, 1/2, 0, 1/2}
+ }
+ },
+
+ on_punch = function(pos, node)
+ minetest.swap_node(pos, {name = "infrastructure:louver_closed", param2 = node.param2})
+ end
+ })
+
+ minetest.register_node("infrastructure:louver_closed", {
+ tiles = {"infrastructure_galvanized_steel.png"},
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ drop = "infrastructure:louver_opened",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 1/16, 7/16, 1/2, 1/2, 1/2},
+ {-1/2, -7/16, 7/16, 1/2, 0, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, 1/16, 7/16, 1/2, 1/2, 1/2},
+ {-1/2, -7/16, 7/16, 1/2, 0, 1/2}
+ }
+ },
+
+ on_punch = function(pos, node)
+ minetest.swap_node(pos, {name = "infrastructure:louver_opened", param2 = node.param2})
+ end
+ })
+
+ minetest.register_alias("infrastructure:louver", "infrastructure:louver_opened")
+
+-- Riffled sheet
+ minetest.register_node("infrastructure:riffled_sheet", {
+ description = "Riffled sheet",
+ tiles = {"infrastructure_riffled_sheet.png"},
+ inventory_image = "infrastructure_riffled_sheet.png",
+ wield_image = "infrastructure_riffled_sheet.png",
+ drawtype = "nodebox",
+ paramtype = "light",
+ groups = {cracky = 2, oddly_breakable_by_hand = 1},
+ node_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/2, -1/2, 1/2, -1/2 + 0.001, 1/2}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/2, -1/4, -1/2, 1/2, -1/2 + 0.01, 1/2}
+ }
+ })
+
+-- Corrugated sheet
+ minetest.register_node("infrastructure:corrugated_sheet", {
+ description = "corrugated sheet",
+ tiles = {"infrastructure_corrugated_sheet.png"},
+ inventory_image = "infrastructure_corrugated_sheet.png",
+ wield_image = "infrastructure_corrugated_sheet.png",
+ drawtype = "raillike",
+ paramtype = "light",
+ groups = {cracky = 2, oddly_breakable_by_hand = 1},
+ })
+
+-- **************************************************************************************************** ADVANCED ITEMS
+
+-- Displacement
+ function displacement(pos, placer)
+ local displaced_node = minetest.get_node(pos)
+ local fdir = minetest.dir_to_facedir(placer:get_look_dir())
+ pos.y = pos.y - 1
+ local node = minetest.get_node(pos)
+
+ if ((string.find(node.name, "_three_quarter") ~= nil) or (string.find(node.name, "_displacement_1") ~= nil)) then
+ pos.y = pos.y + 1
+ minetest.set_node(pos, {name = displaced_node.name.."_displacement_1", param2 = fdir})
+ elseif (((string.find(node.name, "slab_") ~= nil) and (string.find(node.name, "_quarter") == nil)) or (string.find(node.name, "_displacement_2") ~= nil)) then
+ pos.y = pos.y + 1
+ minetest.set_node(pos, {name = displaced_node.name.."_displacement_2", param2 = fdir})
+ elseif (((string.find(node.name, "_quarter") ~= nil) and (string.find(node.name, "_three_quarter") == nil)) or (string.find(node.name, "_displacement_3") ~= nil)) then
+ pos.y = pos.y + 1
+ minetest.set_node(pos, {name = displaced_node.name.."_displacement_3", param2 = fdir})
+ end
+ end
+
+-- Raised pavement marker yellow/yellow
+ minetest.register_node("infrastructure:marker_yellow_yellow", {
+ description = "Raised pavement marker with yellow & yellow retroreflectors",
+ tiles = {
+ "infrastructure_marker_top_yellow_yellow.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_side_yellow.png",
+ "infrastructure_marker_side_yellow.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3},
+ walkable = false,
+ light_source = MARKER_LIGHT_RANGE,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, -1/16, -3/8, 1/8},
+ {-1/16, -1/2, -1/8, 1/16, -7/16, 1/8},
+ {1/16, -1/2, -1/8, 1/8, -3/8, 1/8},
+ {-1/16, -7/16, -1/16, 1/16, -3/8, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, -1/16, -3/8, 1/8},
+ {-1/16, -1/2, -1/8, 1/16, -7/16, 1/8},
+ {1/16, -1/2, -1/8, 1/8, -3/8, 1/8},
+ {-1/16, -7/16, -1/16, 1/16, -3/8, 1/16}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:marker_yellow_yellow_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_marker_top_yellow_yellow.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_side_yellow.png",
+ "infrastructure_marker_side_yellow.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3, not_in_creative_inventory = 1},
+ walkable = false,
+ light_source = MARKER_LIGHT_RANGE,
+ sunlight_propagates = true,
+ drop = "infrastructure:marker_yellow_yellow",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, -1/16, -3/8 - i/4, 1/8},
+ {-1/16, -1/2 - i/4, -1/8, 1/16, -7/16 - i/4, 1/8},
+ {1/16, -1/2 - i/4, -1/8, 1/8, -3/8 - i/4, 1/8},
+ {-1/16, -7/16 - i/4, -1/16, 1/16, -3/8 - i/4, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, -1/16, -3/8 - i/4, 1/8},
+ {-1/16, -1/2 - i/4, -1/8, 1/16, -7/16 - i/4, 1/8},
+ {1/16, -1/2 - i/4, -1/8, 1/8, -3/8 - i/4, 1/8},
+ {-1/16, -7/16 - i/4, -1/16, 1/16, -3/8 - i/4, 1/16}
+ }
+ }
+ })
+ end
+
+-- Raised pavement marker red/yellow
+ minetest.register_node("infrastructure:marker_red_yellow", {
+ description = "Raised pavement marker with red & yellow retroreflectors",
+ tiles = {
+ "infrastructure_marker_top_red_yellow.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_side_yellow.png",
+ "infrastructure_marker_side_red.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3},
+ walkable = false,
+ light_source = MARKER_LIGHT_RANGE,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, -1/16, -3/8, 1/8},
+ {-1/16, -1/2, -1/8, 1/16, -7/16, 1/8},
+ {1/16, -1/2, -1/8, 1/8, -3/8, 1/8},
+ {-1/16, -7/16, -1/16, 1/16, -3/8, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, -1/16, -3/8, 1/8},
+ {-1/16, -1/2, -1/8, 1/16, -7/16, 1/8},
+ {1/16, -1/2, -1/8, 1/8, -3/8, 1/8},
+ {-1/16, -7/16, -1/16, 1/16, -3/8, 1/16}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:marker_red_yellow_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_marker_top_red_yellow.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_bottom_side.png",
+ "infrastructure_marker_side_yellow.png",
+ "infrastructure_marker_side_red.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3, not_in_creative_inventory = 1},
+ walkable = false,
+ light_source = MARKER_LIGHT_RANGE,
+ sunlight_propagates = true,
+ drop = "infrastructure:marker_red_yellow",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, -1/16, -3/8 - i/4, 1/8},
+ {-1/16, -1/2 - i/4, -1/8, 1/16, -7/16 - i/4, 1/8},
+ {1/16, -1/2 - i/4, -1/8, 1/8, -3/8 - i/4, 1/8},
+ {-1/16, -7/16 - i/4, -1/16, 1/16, -3/8 - i/4, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, -1/16, -3/8 - i/4, 1/8},
+ {-1/16, -1/2 - i/4, -1/8, 1/16, -7/16 - i/4, 1/8},
+ {1/16, -1/2 - i/4, -1/8, 1/8, -3/8 - i/4, 1/8},
+ {-1/16, -7/16 - i/4, -1/16, 1/16, -3/8 - i/4, 1/16}
+ }
+ }
+ })
+ end
+
+-- Retroreflective delineators
+ minetest.register_node("infrastructure:delineator", {
+ description = "Retroreflective delineator",
+ tiles = {
+ "infrastructure_concrete.png",
+ "infrastructure_concrete.png",
+ "infrastructure_delineator_wrapper_right.png",
+ "infrastructure_delineator_wrapper_left.png",
+ "infrastructure_delineator_retroreflector_yellow.png",
+ "infrastructure_delineator_retroreflector_red.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3},
+ light_source = DELINEATOR_LIGHT_RANGE,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, 1/8, 1/2, -1/16},
+ {-1/16, -1/2, -1/16, 1/16, 1/2, 1/16},
+ {-1/8, -1/2, 1/16, 1/8, 1/2, 1/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, 1/8, 1/2, -1/16},
+ {-1/16, -1/2, -1/16, 1/16, 1/2, 1/16},
+ {-1/8, -1/2, 1/16, 1/8, 1/2, 1/8}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ minetest.register_node("infrastructure:delineator_guardrail", {
+ description = "Retroreflective delineator for guardrail",
+ tiles = {
+ "infrastructure_concrete.png",
+ "infrastructure_concrete.png",
+ "infrastructure_delineator_wrapper_right.png",
+ "infrastructure_delineator_wrapper_left.png",
+ "[combine:32x32:0,12=infrastructure_delineator_retroreflector_yellow.png:0,-20=infrastructure_delineator_retroreflector_yellow.png",
+ "[combine:32x32:0,12=infrastructure_delineator_retroreflector_red.png:0,-20=infrastructure_delineator_retroreflector_red.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3},
+ light_source = DELINEATOR_LIGHT_RANGE,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -3/8, -1/32, 1/8, 1/8, 1/32},
+ {1/8, -5/8, -1/16, 3/16, -1/4, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -3/8, -1/32, 1/8, 1/8, 1/32},
+ {1/8, -5/8, -1/16, 3/16, -1/4, 1/16}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:delineator_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_concrete.png",
+ "infrastructure_concrete.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_delineator_wrapper_right.png:0,"..tostring(i * 8 - 32).."=infrastructure_delineator_wrapper_right.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_delineator_wrapper_left.png:0,"..tostring(i * 8 - 32).."=infrastructure_delineator_wrapper_left.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_delineator_retroreflector_yellow.png:0,"..tostring(i * 8 - 32).."=infrastructure_delineator_retroreflector_yellow.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_delineator_retroreflector_red.png:0,"..tostring(i * 8 - 32).."=infrastructure_delineator_retroreflector_red.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3, not_in_creative_inventory = 1},
+ light_source = DELINEATOR_LIGHT_RANGE,
+ sunlight_propagates = true,
+ drop = "infrastructure:delineator",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, 1/8, 1/2 - i/4, -1/16},
+ {-1/16, -1/2 - i/4, -1/16, 1/16, 1/2 - i/4, 1/16},
+ {-1/8, -1/2 - i/4, 1/16, 1/8, 1/2 - i/4, 1/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, 1/8, 1/2 - i/4, -1/16},
+ {-1/16, -1/2 - i/4, -1/16, 1/16, 1/2 - i/4, 1/16},
+ {-1/8, -1/2 - i/4, 1/16, 1/8, 1/2 - i/4, 1/8}
+ }
+ }
+ })
+
+ minetest.register_node("infrastructure:delineator_guardrail_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_concrete.png",
+ "infrastructure_concrete.png",
+ "[combine:32x32:0,"..tostring(12 + i * 8).."=infrastructure_delineator_wrapper_right.png:0,"..tostring(i * 8 - 20).."=infrastructure_delineator_wrapper_right.png",
+ "[combine:32x32:0,"..tostring(12 + i * 8).."=infrastructure_delineator_wrapper_left.png:0,"..tostring(i * 8 - 20).."=infrastructure_delineator_wrapper_left.png",
+ "[combine:32x32:0,"..tostring(12 + i * 8).."=infrastructure_delineator_retroreflector_yellow.png:0,"..tostring(i * 8 - 20).."=infrastructure_delineator_retroreflector_yellow.png",
+ "[combine:32x32:0,"..tostring(12 + i * 8).."=infrastructure_delineator_retroreflector_red.png:0,"..tostring(i * 8 - 20).."=infrastructure_delineator_retroreflector_red.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 3, not_in_creative_inventory = 1},
+ light_source = DELINEATOR_LIGHT_RANGE,
+ sunlight_propagates = true,
+ drop = "infrastructure:delineator_guardrail",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -3/8 - i/4, -1/32, 1/8, 1/8 - i/4, 1/32},
+ {1/8, -5/8 - i/4, -1/16, 3/16, -1/4 - i/4, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -3/8 - i/4, -1/32, 1/8, 1/8 - i/4, 1/32},
+ {1/8, -5/8 - i/4, -1/16, 3/16, -1/4 - i/4, 1/16}
+ }
+ }
+ })
+ end
+
+-- Wire rope safety barrier
+ minetest.register_node("infrastructure:wire_rope_safety_barrier", {
+ description = "Wire rope safety barrier",
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_wire_rope_safety_barrier_back.png",
+ "infrastructure_wire_rope_safety_barrier_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = 1,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/16, 1/8, -1/4, 1/16},
+ {-1/8, -1/2, -1/16, -1/16, -3/16, 1/16},
+ {1/16, -1/2, -1/16, 1/8, 1/16, 1/16},
+ {-1/8, -1/8, -1/16, 1/8, 0, 1/16},
+ {-1/8, -1/8, -1/16, -1/16, 1/2, 1/16},
+ {-1/8, 1/8, -1/16, 1/8, 1/4, 1/16},
+ {1/16, 1/8, -1/16, 1/8, 1/2, 1/16},
+
+ {-1/32, 1/4, -1/2, 1/32, 5/16, 1/2},
+ {-1/32, 0, -1/2, 1/32, 1/16, 1/2},
+ {-1/32, -1/4, -1/2, 1/32, -3/16, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/16, 1/8, 1/2, 1/16},
+
+ {-1/32, 1/4, -1/2, 1/32, 5/16, 1/2},
+ {-1/32, 0, -1/2, 1/32, 1/16, 1/2},
+ {-1/32, -1/4, -1/2, 1/32, -3/16, 1/2}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:wire_rope_safety_barrier_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_wire_rope_safety_barrier_back.png:0,"..tostring(i * 8 - 32).."=infrastructure_wire_rope_safety_barrier_back.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_wire_rope_safety_barrier_front.png:0,"..tostring(i * 8 - 32).."=infrastructure_wire_rope_safety_barrier_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = 1,
+ drop = "infrastructure:wire_rope_safety_barrier",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/16, 1/8, -1/4 - i/4, 1/16},
+ {-1/8, -1/2 - i/4, -1/16, -1/16, -3/16 - i/4, 1/16},
+ {1/16, -1/2 - i/4, -1/16, 1/8, 1/16 - i/4, 1/16},
+ {-1/8, -1/8 - i/4, -1/16, 1/8, 0 - i/4, 1/16},
+ {-1/8, -1/8 - i/4, -1/16, -1/16, 1/2 - i/4, 1/16},
+ {-1/8, 1/8 - i/4, -1/16, 1/8, 1/4 - i/4, 1/16},
+ {1/16, 1/8 - i/4, -1/16, 1/8, 1/2 - i/4, 1/16},
+
+ {-1/32, 1/4 - i/4, -1/2, 1/32, 5/16 - i/4, 1/2},
+ {-1/32, 0 - i/4, -1/2, 1/32, 1/16 - i/4, 1/2},
+ {-1/32, -1/4 - i/4, -1/2, 1/32, -3/16 - i/4, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/16, 1/8, 1/2 - i/4, 1/16},
+
+ {-1/32, 1/4 - i/4, -1/2, 1/32, 5/16 - i/4, 1/2},
+ {-1/32, 0 - i/4, -1/2, 1/32, 1/16 - i/4, 1/2},
+ {-1/32, -1/4 - i/4, -1/2, 1/32, -3/16 - i/4, 1/2}
+ }
+ }
+ })
+ end
+
+-- Cable barrier terminal
+ minetest.register_node("infrastructure:cable_barrier_terminal", {
+ description = "Cable barrier terminal",
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_cable_barrier_terminal_back.png",
+ "infrastructure_cable_barrier_terminal_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = 1,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2},
+ {-1/4, -3/8, -1/4, 1/4, 1/2, -1/8},
+ {-1/4, -3/8, -1/8, -3/16, 0, 1/8},
+ {3/16, -3/8, -1/8, 1/4, 0, 1/8},
+
+ {-1/16, 7/32, -3/8, 1/16, 11/32, 1/4},
+ {-1/16, -1/32, -3/8, 1/16, 3/32, 1/4},
+ {-1/16, -9/32, -3/8, 1/16, -5/32, 1/4},
+
+ {-1/32, 1/4, 0, 1/32, 5/16, 1/2},
+ {-1/32, 0, 0, 1/32, 1/16, 1/2},
+ {-1/32, -1/4, 0, 1/32, -3/16, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2, -1/2, 1/4, -3/8, 1/2},
+ {-1/4, -3/8, -1/4, 1/4, 1/2, -1/8},
+ {-1/4, -3/8, -1/8, -3/16, 0, 1/8},
+ {3/16, -3/8, -1/8, 1/4, 0, 1/8},
+
+ {-1/16, 7/32, -3/8, 1/16, 11/32, 1/4},
+ {-1/16, -1/32, -3/8, 1/16, 3/32, 1/4},
+ {-1/16, -9/32, -3/8, 1/16, -5/32, 1/4},
+
+ {-1/32, 1/4, 0, 1/32, 5/16, 1/2},
+ {-1/32, 0, 0, 1/32, 1/16, 1/2},
+ {-1/32, -1/4, 0, 1/32, -3/16, 1/2}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:cable_barrier_terminal_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_cable_barrier_terminal_back.png:0,"..tostring(i * 8 - 32).."=infrastructure_cable_barrier_terminal_back.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_cable_barrier_terminal_front.png:0,"..tostring(i * 8 - 32).."=infrastructure_cable_barrier_terminal_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = 1,
+ drop = "infrastructure:cable_barrier_terminal",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2 - i/4, -1/2, 1/4, -3/8 - i/4, 1/2},
+ {-1/4, -3/8 - i/4, -1/4, 1/4, 1/2 - i/4, -1/8},
+ {-1/4, -3/8 - i/4, -1/8, -3/16, 0 - i/4, 1/8},
+ {3/16, -3/8 - i/4, -1/8, 1/4, 0 - i/4, 1/8},
+
+ {-1/16, 7/32 - i/4, -3/8, 1/16, 11/32 - i/4, 1/4},
+ {-1/16, -1/32 - i/4, -3/8, 1/16, 3/32 - i/4, 1/4},
+ {-1/16, -9/32 - i/4, -3/8, 1/16, -5/32 - i/4, 1/4},
+
+ {-1/32, 1/4 - i/4, 0, 1/32, 5/16 - i/4, 1/2},
+ {-1/32, 0 - i/4, 0, 1/32, 1/16 - i/4, 1/2},
+ {-1/32, -1/4 - i/4, 0, 1/32, -3/16 - i/4, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2 - i/4, -1/2, 1/4, -3/8 - i/4, 1/2},
+ {-1/4, -3/8 - i/4, -1/4, 1/4, 1/2 - i/4, -1/8},
+ {-1/4, -3/8 - i/4, -1/8, -3/16, 0 - i/4, 1/8},
+ {3/16, -3/8 - i/4, -1/8, 1/4, 0 - i/4, 1/8},
+
+ {-1/16, 7/32 - i/4, -3/8, 1/16, 11/32 - i/4, 1/4},
+ {-1/16, -1/32 - i/4, -3/8, 1/16, 3/32 - i/4, 1/4},
+ {-1/16, -9/32 - i/4, -3/8, 1/16, -5/32 - i/4, 1/4},
+
+ {-1/32, 1/4 - i/4, 0, 1/32, 5/16 - i/4, 1/2},
+ {-1/32, 0 - i/4, 0, 1/32, 1/16 - i/4, 1/2},
+ {-1/32, -1/4 - i/4, 0, 1/32, -3/16 - i/4, 1/2}
+ }
+ }
+ })
+ end
+
+-- Corrugated guide rail
+ minetest.register_node("infrastructure:corrugated_guide_rail", {
+ description = "Corrugated guide rail",
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_corrugated_guide_rail_side.png",
+ "infrastructure_corrugated_guide_rail_side.png",
+ "infrastructure_corrugated_guide_rail_back.png",
+ "infrastructure_corrugated_guide_rail_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = 1,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, 1/8, 1/2, -1/16},
+ {-1/16, -1/2, -1/16, 1/16, 1/2, 1/16},
+ {-1/8, -1/2, 1/16, 1/8, 1/2, 1/8},
+
+ {-1/2, 1/4, -1/4, 1/2, 3/8, -1/8},
+ {-1/2, 1/8, -3/8, 1/2, 1/4, -1/4},
+ {-1/2, 0, -1/4, 1/2, 1/8, -1/8},
+ {-1/2, -1/8, -3/8, 1/2, 0, -1/4},
+ {-1/2, -1/4, -1/4, 1/2, -1/8, -1/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
+
+ {-1/2, 1/4, -1/4, 1/2, 3/8, -1/8},
+ {-1/2, 1/8, -3/8, 1/2, 1/4, -1/4},
+ {-1/2, 0, -1/4, 1/2, 1/8, -1/8},
+ {-1/2, -1/8, -3/8, 1/2, 0, -1/4},
+ {-1/2, -1/4, -1/4, 1/2, -1/8, -1/8}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:corrugated_guide_rail_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_corrugated_guide_rail_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_corrugated_guide_rail_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_corrugated_guide_rail_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_corrugated_guide_rail_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_corrugated_guide_rail_back.png:0,"..tostring(i * 8 - 32).."=infrastructure_corrugated_guide_rail_back.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_corrugated_guide_rail_front.png:0,"..tostring(i * 8 - 32).."=infrastructure_corrugated_guide_rail_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = 1,
+ drop = "infrastructure:corrugated_guide_rail",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, 1/8, 1/2 - i/4, -1/16},
+ {-1/16, -1/2 - i/4, -1/16, 1/16, 1/2 - i/4, 1/16},
+ {-1/8, -1/2 - i/4, 1/16, 1/8, 1/2 - i/4, 1/8},
+
+ {-1/2, 1/4 - i/4, -1/4, 1/2, 3/8 - i/4, -1/8},
+ {-1/2, 1/8 - i/4, -3/8, 1/2, 1/4 - i/4, -1/4},
+ {-1/2, 0 - i/4, -1/4, 1/2, 1/8 - i/4, -1/8},
+ {-1/2, -1/8 - i/4, -3/8, 1/2, 0 - i/4, -1/4},
+ {-1/2, -1/4 - i/4, -1/4, 1/2, -1/8 - i/4, -1/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/8, -1/2 - i/4, -1/8, 1/8, 1/2 - i/4, 1/8},
+
+ {-1/2, 1/4 - i/4, -1/4, 1/2, 3/8 - i/4, -1/8},
+ {-1/2, 1/8 - i/4, -3/8, 1/2, 1/4 - i/4, -1/4},
+ {-1/2, 0 - i/4, -1/4, 1/2, 1/8 - i/4, -1/8},
+ {-1/2, -1/8 - i/4, -3/8, 1/2, 0 - i/4, -1/4},
+ {-1/2, -1/4 - i/4, -1/4, 1/2, -1/8 - i/4, -1/8}
+ }
+ }
+ })
+ end
+
+-- Energy absorbing terminal
+ minetest.register_node("infrastructure:energy_absorbing_terminal", {
+ description = "Energy absorbing terminal",
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_energy_absorbing_terminal_back.png",
+ "infrastructure_energy_absorbing_terminal_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4, 1/8, 0, 1/2, 1/4},
+ {-3/8, -1/4, 1/4, -1/8, 3/8, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4, 1/8, 0, 1/2, 1/4},
+ {-3/8, -1/4, 1/4, -1/8, 3/8, 1/2}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ minetest.register_node("infrastructure:energy_absorbing_terminal_inversed", {
+ description = "Energy absorbing terminal inversed",
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_energy_absorbing_terminal_back.png",
+ "infrastructure_energy_absorbing_terminal_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0, -1/4, 1/8, 1/2, 1/2, 1/4},
+ {1/8, -1/4, 1/4, 3/8, 3/8, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {0, -1/4, 1/8, 1/2, 1/2, 1/4},
+ {1/8, -1/4, 1/4, 3/8, 3/8, 1/2}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:energy_absorbing_terminal_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_energy_absorbing_terminal_back.png:0,"..tostring(i * 8 - 32).."=infrastructure_energy_absorbing_terminal_back.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_energy_absorbing_terminal_front.png:0,"..tostring(i * 8 - 32).."=infrastructure_energy_absorbing_terminal_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ drop = "infrastructure:energy_absorbing_terminal",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4 - i/4, 1/8, 0, 1/2 - i/4, 1/4},
+ {-3/8, -1/4 - i/4, 1/4, -1/8, 3/8 - i/4, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4 - i/4, 1/8, 0, 1/2 - i/4, 1/4},
+ {-3/8, -1/4 - i/4, 1/4, -1/8, 3/8 - i/4, 1/2}
+ }
+ }
+ })
+
+ minetest.register_node("infrastructure:energy_absorbing_terminal_inversed_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_galvanized_steel.png:0,"..tostring(i * 8 - 32).."=infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_energy_absorbing_terminal_back.png:0,"..tostring(i * 8 - 32).."=infrastructure_energy_absorbing_terminal_back.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_energy_absorbing_terminal_front.png:0,"..tostring(i * 8 - 32).."=infrastructure_energy_absorbing_terminal_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ drop = "infrastructure:energy_absorbing_terminal_inversed",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0, -1/4 - i/4, 1/8, 1/2, 1/2 - i/4, 1/4},
+ {1/8, -1/4 - i/4, 1/4, 3/8, 3/8 - i/4, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {0, -1/4 - i/4, 1/8, 1/2, 1/2 - i/4, 1/4},
+ {1/8, -1/4 - i/4, 1/4, 3/8, 3/8 - i/4, 1/2}
+ }
+ }
+ })
+ end
+
+-- Fitch barrel
+ minetest.register_node("infrastructure:fitch_barrel", {
+ description = "Fitch barrel",
+ tiles = {
+ "infrastructure_fitch_barrel_top.png",
+ "infrastructure_fitch_barrel_bottom.png",
+ "infrastructure_fitch_barrel_side.png",
+ "infrastructure_fitch_barrel_side.png",
+ "infrastructure_fitch_barrel_side.png",
+ "infrastructure_fitch_barrel_side.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ groups = {cracky = 2},
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ node_box = {
+ type = "fixed",
+ fixed = {-3/8, -1/2, -3/8, 3/8, 1/2, 3/8}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-3/8, -1/2, -3/8, 3/8, 1/2, 3/8}
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:fitch_barrel_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_fitch_barrel_top.png",
+ "infrastructure_fitch_barrel_bottom.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_fitch_barrel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_fitch_barrel_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_fitch_barrel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_fitch_barrel_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_fitch_barrel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_fitch_barrel_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_fitch_barrel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_fitch_barrel_side.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ drop = "infrastructure:fitch_barrel",
+ node_box = {
+ type = "fixed",
+ fixed = {-3/8, -1/2 - i/4, -3/8, 3/8, 1/2 - i/4, 3/8}
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {-3/8, -1/2 - i/4, -3/8, 3/8, 1/2 - i/4, 3/8}
+ }
+ })
+ end
+
+-- Crowd control barricade
+ minetest.register_node("infrastructure:crowd_control_barricade", {
+ description = "Crowd control barricade",
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_crowd_control_barricade_back.png",
+ "infrastructure_crowd_control_barricade_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = 1,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4, 0, 1/2, 1/2, 0},
+
+ {-7/16, -1/2, -1/32, -3/8, 1/8, 1/32},
+ {3/8, -1/2, -1/32, 7/16, 1/8, 1/32},
+
+ {-7/16, -1/2, -1/4, -3/8, -7/16, 1/4},
+ {3/8, -1/2, -1/4, 7/16, -7/16, 1/4}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4, 0, 1/2, 1/2, 0},
+
+ {-7/16, -1/2, -1/32, -3/8, 1/8, 1/32},
+ {3/8, -1/2, -1/32, 7/16, 1/8, 1/32},
+
+ {-7/16, -1/2, -1/4, -3/8, -7/16, 1/4},
+ {3/8, -1/2, -1/4, 7/16, -7/16, 1/4}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:crowd_control_barricade_"..tostring(i), {
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_crowd_control_barricade_back.png:0,"..tostring(i * 8 - 32).."=infrastructure_crowd_control_barricade_back.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_crowd_control_barricade_front.png:0,"..tostring(i * 8 - 32).."=infrastructure_crowd_control_barricade_front.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = 1,
+ drop = "infrastructure:crowd_control_barricade",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4 - i/4, 0, 1/2, 1/2 - i/4, 0},
+
+ {-7/16, -1/2 - i/4, -1/32, -3/8, 1/8 - i/4, 1/32},
+ {3/8, -1/2 - i/4, -1/32, 7/16, 1/8 - i/4, 1/32},
+
+ {-7/16, -1/2 - i/4, -1/4, -3/8, -7/16 - i/4, 1/4},
+ {3/8, -1/2 - i/4, -1/4, 7/16, -7/16 - i/4, 1/4}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/4 - i/4, 0, 1/2, 1/2 - i/4, 0},
+
+ {-7/16, -1/2 - i/4, -1/32, -3/8, 1/8 - i/4, 1/32},
+ {3/8, -1/2 - i/4, -1/32, 7/16, 1/8 - i/4, 1/32},
+
+ {-7/16, -1/2 - i/4, -1/4, -3/8, -7/16 - i/4, 1/4},
+ {3/8, -1/2 - i/4, -1/4, 7/16, -7/16 - i/4, 1/4}
+ }
+ }
+ })
+ end
+
+-- Anti-dazzling panel
+ minetest.register_node("infrastructure:anti_dazzling_panel", {
+ description = "Anti-dazzling panel",
+ tiles = {
+ "infrastructure_anti_dazzling_panel_top_bottom.png",
+ "infrastructure_anti_dazzling_panel_top_bottom.png",
+ "infrastructure_anti_dazzling_panel_side.png",
+ "infrastructure_anti_dazzling_panel_side.png",
+ "infrastructure_anti_dazzling_panel_side.png",
+ "infrastructure_anti_dazzling_panel_side.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = 1,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2, 0, 1/4, 1/2, 0},
+ {-1/8, -1/2, -1/16, 1/8, -3/8, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2, 0, 1/4, 1/2, 0},
+ {-1/8, -1/2, -1/16, 1/8, -3/8, 1/16}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:anti_dazzling_panel_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_anti_dazzling_panel_top_bottom.png",
+ "infrastructure_anti_dazzling_panel_top_bottom.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_anti_dazzling_panel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_anti_dazzling_panel_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_anti_dazzling_panel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_anti_dazzling_panel_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_anti_dazzling_panel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_anti_dazzling_panel_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_anti_dazzling_panel_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_anti_dazzling_panel_side.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ light_source = 1,
+ drop = "infrastructure:anti_dazzling_panel",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2 - i/4, 0, 1/4, 1/2 - i/4, 0},
+ {-1/8, -1/2 - i/4, -1/16, 1/8, -3/8 - i/4, 1/16}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2 - i/4, 0, 1/4, 1/2 - i/4, 0},
+ {-1/8, -1/2 - i/4, -1/16, 1/8, -3/8 - i/4, 1/16}
+ }
+ }
+ })
+ end
+
+-- Traffic cone
+ minetest.register_node("infrastructure:traffic_cone", {
+ description = "Traffic cone",
+ tiles = {
+ "infrastructure_traffic_cone_top.png",
+ "infrastructure_traffic_cone_bottom.png",
+ "infrastructure_traffic_cone_side.png",
+ "infrastructure_traffic_cone_side.png",
+ "infrastructure_traffic_cone_side.png",
+ "infrastructure_traffic_cone_side.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ groups = {cracky = 2},
+ walkable = false,
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2, 0, 1/4, 1/4, 0},
+ {0, -1/2, -1/4, 0, 1/4, 1/4},
+
+ {-3/8, -1/2, -1/8, 3/8, -3/8, 1/8},
+ {-1/8, -1/2, -3/8, 1/8, -3/8, 3/8},
+
+ {-3/8, -1/2 + 0.001, -3/8, 3/8, -1/2 + 0.001, 3/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2, 0, 1/4, 1/4, 0},
+ {0, -1/2, -1/4, 0, 1/4, 1/4},
+
+ {-3/8, -1/2, -1/8, 3/8, -3/8, 1/8},
+ {-1/8, -1/2, -3/8, 1/8, -3/8, 3/8},
+
+ {-3/8, -1/2 + 0.001, -3/8, 3/8, -1/2 + 0.001, 3/8}
+ }
+ },
+
+ after_place_node = function(pos, placer)
+ displacement(pos, placer)
+ end
+ })
+
+ for i = 1, 3 do
+ minetest.register_node("infrastructure:traffic_cone_displacement_"..tostring(i), {
+ tiles = {
+ "infrastructure_traffic_cone_top.png",
+ "infrastructure_traffic_cone_bottom.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_traffic_cone_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_traffic_cone_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_traffic_cone_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_traffic_cone_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_traffic_cone_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_traffic_cone_side.png",
+ "[combine:32x32:0,"..tostring(i * 8).."=infrastructure_traffic_cone_side.png:0,"..tostring(i * 8 - 32).."=infrastructure_traffic_cone_side.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ groups = {cracky = 2, not_in_creative_inventory = 1},
+ walkable = false,
+ light_source = ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE,
+ drop = "infrastructure:traffic_cone",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2 - i/4, 0, 1/4, 1/4 - i/4, 0},
+ {0, -1/2 - i/4, -1/4, 0, 1/4 - i/4, 1/4},
+
+ {-3/8, -1/2 - i/4, -1/8, 3/8, -3/8 - i/4, 1/8},
+ {-1/8, -1/2 - i/4, -3/8, 1/8, -3/8 - i/4, 3/8},
+
+ {-3/8, -1/2 + 0.001 - i/4, -3/8, 3/8, -1/2 + 0.001 - i/4, 3/8}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/4, -1/2 - i/4, 0, 1/4, 1/4 - i/4, 0},
+ {0, -1/2 - i/4, -1/4, 0, 1/4 - i/4, 1/4},
+
+ {-3/8, -1/2 - i/4, -1/8, 3/8, -3/8 - i/4, 1/8},
+ {-1/8, -1/2 - i/4, -3/8, 1/8, -3/8 - i/4, 3/8},
+
+ {-3/8, -1/2 + 0.001 - i/4, -3/8, 3/8, -1/2 + 0.001 - i/4, 3/8}
+ }
+ }
+ })
+ end
+
+-- Noise barrier
+ minetest.register_node("infrastructure:noise_barrier", {
+ description = "Noise barrier",
+ tiles = {
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_galvanized_steel.png",
+ "infrastructure_noise_barrier.png",
+ "infrastructure_noise_barrier.png"
+ },
+ drawtype = "nodebox",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ groups = {cracky = 2},
+ light_source = 1,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/2, 5/16, 1/2, 1/2, 7/16},
+
+ {-1/2, -1/2, 1/4, 1/2, -7/16, 1/2},
+ {-1/2, 7/16, 1/4, 1/2, 1/2, 1/2},
+ {-1/2, -1/2, 1/4, -7/16, 1/2, 1/2},
+ {7/16, -1/2, 1/4, 1/2, 1/2, 1/2}
+ }
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = {
+ {-1/2, -1/2, 1/4, 1/2, 1/2, 1/2},
+ }
+ }
+ })
diff --git a/infrastructure/nodes_extension.lua b/infrastructure/nodes_extension.lua new file mode 100644 index 0000000..8eebdba --- /dev/null +++ b/infrastructure/nodes_extension.lua @@ -0,0 +1,162 @@ +-- **************************************************************************************************** MATERIALS + +-- Galvanized steel stair, slab, panel and microblock + register_stair_slab_panel_micro("infrastructure", "galvanized_steel", "infrastructure:galvanized_steel", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=2}, + {"infrastructure_galvanized_steel.png"}, + "Galvanized steel", + "galvanized_steel", + 0) + +-- **************************************************************************************************** CENTER LINES + +-- Asphalt stair, slab, panel and microblock with center solid line + register_stair_slab_panel_micro("infrastructure", "asphalt_center_solid_line", "infrastructure:asphalt_center_solid_line", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + { + "streets_asphalt.png^infrastructure_single_yellow_line.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png" + }, + "Asphalt with center solid line", + "asphalt_center_solid_line", + 0) + +-- Asphalt stair, slab, panel and microblock with center solid line on one side + register_stair_slab_panel_micro("infrastructure", "asphalt_center_solid_one_side", "infrastructure:asphalt_center_solid_one_side", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + { + "streets_asphalt.png^infrastructure_solid_yellow_line_one_side.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png" + }, + "Asphalt with center solid line on one side", + "asphalt_center_solid_one_side", + 0) + +-- Asphalt stair, slab, panel and microblock with center solid double line + register_stair_slab_panel_micro("infrastructure", "asphalt_center_solid_double", "infrastructure:asphalt_center_solid_double", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + { + "streets_asphalt.png^infrastructure_double_yellow_line.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png" + }, + "Asphalt with center solid double line", + "asphalt_center_solid_double", + 0) + +-- Asphalt block with center corner single line + register_stair_slab_panel_micro("infrastructure", "asphalt_center_corner_single", "infrastructure:asphalt_center_corner_single", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + { + "streets_asphalt.png^infrastructure_single_yellow_line_corner.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png" + }, + "Asphalt with center corner single line", + "asphalt_center_corner_single", + 0) + +-- Asphalt block with center corner double line + register_stair_slab_panel_micro("infrastructure", "asphalt_center_corner_double", "infrastructure:asphalt_center_corner_double", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + { + "streets_asphalt.png^infrastructure_solid_double_yellow_line_corner.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png", + "streets_asphalt.png" + }, + "Asphalt with center corner double line", + "asphalt_center_corner_double", + 0) + +-- **************************************************************************************************** TRAFFIC MARKS + +-- Asphalt stair, slab, panel and microblock with arrow straight + register_stair_slab_panel_micro("infrastructure", "asphalt_arrow_straight", "infrastructure:asphalt_arrow_straight", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + {"streets_arrow_straight.png", "infrastructure_asphalt.png"}, + "Asphalt with arrow straight", + "asphalt_arrow_straight", + 0) + +-- Asphalt stair, slab, panel and microblock with arrow straight + left + register_stair_slab_panel_micro("infrastructure", "asphalt_arrow_straight_left", "infrastructure:asphalt_arrow_straight_left", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + {"streets_asphalt.png^streets_arrow_straight_left.png", "infrastructure_asphalt.png"}, + "Asphalt with arrow straight + left", + "asphalt_arrow_straight_left", + 0) + +-- Asphalt stair, slab, panel and microblock with arrow straight + right + register_stair_slab_panel_micro("infrastructure", "asphalt_arrow_straight_right", "infrastructure:asphalt_arrow_straight_right", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + {"streets_asphalt.png^streets_arrow_straight_right.png", "infrastructure_asphalt.png"}, + "Asphalt with arrow straight + right", + "asphalt_arrow_straight_right", + 0) + +-- Asphalt stair, slab, panel and microblock with arrow left + register_stair_slab_panel_micro("infrastructure", "asphalt_arrow_left", "infrastructure:asphalt_arrow_left", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + {"streets_asphalt.png^streets_arrow_left.png", "infrastructure_asphalt.png"}, + "Asphalt with arrow left", + "asphalt_arrow_left", + 0) + +-- Asphalt stair, slab, panel and microblock with arrow right + register_stair_slab_panel_micro("infrastructure", "asphalt_arrow_right", "infrastructure:asphalt_arrow_right", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + {"streets_asphalt.png^streets_arrow_right.png", "infrastructure_asphalt.png"}, + "Asphalt with arrow right", + "asphalt_arrow_right", + 0) + +-- Asphalt stair, slab, panel and microblock with "P"-sign + register_stair_slab_panel_micro("infrastructure", "asphalt_parking", "infrastructure:asphalt_parking", + {not_in_creative_inventory=NOT_IN_CREATIVE_INVENTORY, cracky=1}, + {"streets_asphalt.png^streets_parking.png", "infrastructure_asphalt.png"}, + "Asphalt with a parking sign", + "asphalt_parking", + 0) + +-- Register known infrastructure nodes in circular saw if avaiable + if circular_saw then + for i,v in ipairs({ +-- Materials + "asphalt", + "concrete", + "galvanized_steel", +-- Center lines + "asphalt_center_dashed", + "asphalt_center_solid", + "asphalt_center_solid_one_side", + "asphalt_center_solid_double", + "asphalt_center_corner_single", + "asphalt_center_corner_double", +-- Traffic marks + "asphalt_arrow_straight", + "asphalt_arrow_straight_left", + "asphalt_arrow_straight_right", + "asphalt_arrow_left", + "asphalt_arrow_right", + "asphalt_parking" + }) do + table.insert(circular_saw.known_stairs, "infrastructure:"..v); + end + end diff --git a/infrastructure/settings.lua b/infrastructure/settings.lua new file mode 100644 index 0000000..1433e22 --- /dev/null +++ b/infrastructure/settings.lua @@ -0,0 +1,49 @@ +-- This file stores all settings for the "Infrastructure mod"
+
+-- Stairs, slabs, panels and microblocks
+ NOT_IN_CREATIVE_INVENTORY = 1 -- an integer 0 or 1 -> default = 1 | Do you want it to be hide in your creative inventory?
+
+-- Raised pavement marker
+ MARKER_LIGHT_RANGE = 4 -- an integer -> default = 4 | How much light do you want it to give?
+
+-- Retroreflective delineator
+ DELINEATOR_LIGHT_RANGE = 8 -- an integer -> default = 8 | How much light do you want it to give?
+
+-- Energy absorbing terminal
+ ENERGY_ABSORBING_TERMINAL_LIGHT_RANGE = 8 -- an integer -> default = 8 | How much light do you want it to give?
+
+-- Emergency phone
+ ENABLE_EMERGENCY_PHONE = true -- true or false -> default = true | Do you want it to be enabled in your game?
+ HEALTH_TO_TRIGGER = 5 -- an integer -> default = 5 | When will the player be healed? How low must his health be?
+ HEALTH_TO_RESTORING = 10 -- an integer -> default = 10 | To what will the health be set?
+ EMERGENCY_PHONE_LIGHT_RANGE = 12 -- an integer -> default = 12 | How much light do you want it to give?
+ EMERGENCY_PHONE_VOLUME = 0.1 -- a float -> default = 0.1 | How noisy should be the dialing sound?
+
+-- Traffic lights
+ TRAFFIC_LIGHTS_LIGHT_RANGE = 12 -- an integer -> default = 12 | How much light do you want it to give?
+ TRAFFIC_LIGHTS_VOLUME = 0 -- a float -> default = 0.1 | How noisy should be the beep sound?
+
+-- Automatic warning device
+ AUTOMATIC_WARNING_DEVICE_LIGHT_RANGE = 12 -- an integer -> default = 12 | How much light do you want it to give?
+ AUTOMATIC_WARNING_DEVICE_VOLUME = 0.5 -- a float -> default = 0.5 | How noisy should be the bell sound?
+
+-- Boom barrier
+ BOOM_BARRIER_LIGHT_RANGE = 6 -- an integer -> default = 6 | How much light do you want it to give?
+ BOOM_BARRIER_VOLUME = 0.4 -- a float -> default = 0.1 | How noisy should be the mechanism sound?
+
+-- Curve chevron
+ CURVE_CHEVRON_LIGHT_RANGE = 12 -- an integer -> default = 12 | How much light do you want it to give?
+
+-- Crosswalk lighting
+ CROSSWALK_LIGHTING_LIGHT_RANGE = 15 -- an integer -> default = 15 | How much light do you want it to give?
+
+-- Crosswalk safety sign
+ CROSSWALK_SAFETY_SIGN_LIGHT_RANGE = 8 -- an integer -> default = 8 | How much light do you want it to give?
+
+-- Crosswalk safety sign
+ RETROREFLECTIVE_SURFACE_LIGHT_RANGE = 8 -- an integer -> default = 8 | How much light do you want it to give?
+
+-- Aircraft warning light
+ AIRCRAFT_WARNING_LIGHT_LIGHT_RANGE = 15 -- an integer -> default = 15 | How much light do you want it to give?
+-- Warning light
+ WARNING_LIGHT_LIGHT_RANGE = 15 -- an integer -> default = 15 | How much light do you want it to give?
diff --git a/infrastructure/sounds/infrastructure_automatic_warning_device.ogg b/infrastructure/sounds/infrastructure_automatic_warning_device.ogg Binary files differnew file mode 100644 index 0000000..71d1679 --- /dev/null +++ b/infrastructure/sounds/infrastructure_automatic_warning_device.ogg diff --git a/infrastructure/sounds/infrastructure_boom_barrier.ogg b/infrastructure/sounds/infrastructure_boom_barrier.ogg Binary files differnew file mode 100644 index 0000000..4106df2 --- /dev/null +++ b/infrastructure/sounds/infrastructure_boom_barrier.ogg diff --git a/infrastructure/sounds/infrastructure_ebell.ogg b/infrastructure/sounds/infrastructure_ebell.ogg Binary files differnew file mode 100644 index 0000000..d59d1b9 --- /dev/null +++ b/infrastructure/sounds/infrastructure_ebell.ogg diff --git a/infrastructure/sounds/infrastructure_emergency_phone.ogg b/infrastructure/sounds/infrastructure_emergency_phone.ogg Binary files differnew file mode 100644 index 0000000..7e84eb2 --- /dev/null +++ b/infrastructure/sounds/infrastructure_emergency_phone.ogg diff --git a/infrastructure/sounds/infrastructure_traffic_lights_1.ogg b/infrastructure/sounds/infrastructure_traffic_lights_1.ogg Binary files differnew file mode 100644 index 0000000..d790e9a --- /dev/null +++ b/infrastructure/sounds/infrastructure_traffic_lights_1.ogg diff --git a/infrastructure/sounds/infrastructure_traffic_lights_2.ogg b/infrastructure/sounds/infrastructure_traffic_lights_2.ogg Binary files differnew file mode 100644 index 0000000..8fa7753 --- /dev/null +++ b/infrastructure/sounds/infrastructure_traffic_lights_2.ogg diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_side_bright.png b/infrastructure/textures/infrastructure_aircraft_warning_light_side_bright.png Binary files differnew file mode 100644 index 0000000..3105665 --- /dev/null +++ b/infrastructure/textures/infrastructure_aircraft_warning_light_side_bright.png diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_side_dark.png b/infrastructure/textures/infrastructure_aircraft_warning_light_side_dark.png Binary files differnew file mode 100644 index 0000000..a696f31 --- /dev/null +++ b/infrastructure/textures/infrastructure_aircraft_warning_light_side_dark.png diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_top_bright.png b/infrastructure/textures/infrastructure_aircraft_warning_light_top_bright.png Binary files differnew file mode 100644 index 0000000..a71f59b --- /dev/null +++ b/infrastructure/textures/infrastructure_aircraft_warning_light_top_bright.png diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_top_dark.png b/infrastructure/textures/infrastructure_aircraft_warning_light_top_dark.png Binary files differnew file mode 100644 index 0000000..b3d91a6 --- /dev/null +++ b/infrastructure/textures/infrastructure_aircraft_warning_light_top_dark.png diff --git a/infrastructure/textures/infrastructure_anti_dazzling_panel_side.png b/infrastructure/textures/infrastructure_anti_dazzling_panel_side.png Binary files differnew file mode 100644 index 0000000..5965006 --- /dev/null +++ b/infrastructure/textures/infrastructure_anti_dazzling_panel_side.png diff --git a/infrastructure/textures/infrastructure_anti_dazzling_panel_top_bottom.png b/infrastructure/textures/infrastructure_anti_dazzling_panel_top_bottom.png Binary files differnew file mode 100644 index 0000000..0f257bd --- /dev/null +++ b/infrastructure/textures/infrastructure_anti_dazzling_panel_top_bottom.png diff --git a/infrastructure/textures/infrastructure_asphalt.png b/infrastructure/textures/infrastructure_asphalt.png Binary files differnew file mode 100644 index 0000000..2906a0d --- /dev/null +++ b/infrastructure/textures/infrastructure_asphalt.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device.png b/infrastructure/textures/infrastructure_automatic_warning_device.png Binary files differnew file mode 100644 index 0000000..d5f6c62 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_bottom.png b/infrastructure/textures/infrastructure_automatic_warning_device_bottom.png Binary files differnew file mode 100644 index 0000000..87ddf0c --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_bottom.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle.png Binary files differnew file mode 100644 index 0000000..5185a29 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_1.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_1.png Binary files differnew file mode 100644 index 0000000..ac85b26 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_1.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_2.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_2.png Binary files differnew file mode 100644 index 0000000..9e38834 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_2.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_3.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_3.png Binary files differnew file mode 100644 index 0000000..f741647 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_3.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_side.png Binary files differnew file mode 100644 index 0000000..7c50472 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_side.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_1.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_1.png Binary files differnew file mode 100644 index 0000000..3acc761 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_1.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_2.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_2.png Binary files differnew file mode 100644 index 0000000..dbb2428 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_2.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_side.png Binary files differnew file mode 100644 index 0000000..8d73676 --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_side.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_1.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_1.png Binary files differnew file mode 100644 index 0000000..d3e378a --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_1.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_2.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_2.png Binary files differnew file mode 100644 index 0000000..d1b150e --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_2.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_side.png Binary files differnew file mode 100644 index 0000000..cb6a9bc --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_side.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_side.png Binary files differnew file mode 100644 index 0000000..469addf --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_middle_side.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_top.png b/infrastructure/textures/infrastructure_automatic_warning_device_top.png Binary files differnew file mode 100644 index 0000000..a9fb96f --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_top.png diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_top_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_top_side.png Binary files differnew file mode 100644 index 0000000..49412ec --- /dev/null +++ b/infrastructure/textures/infrastructure_automatic_warning_device_top_side.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_h_bottom_front_back.png b/infrastructure/textures/infrastructure_boom_barrier_arm_h_bottom_front_back.png Binary files differnew file mode 100644 index 0000000..e283612 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_arm_h_bottom_front_back.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_bright.png b/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_bright.png Binary files differnew file mode 100644 index 0000000..0e6e50c --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_bright.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_dark.png b/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_dark.png Binary files differnew file mode 100644 index 0000000..e88de7d --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_dark.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_h_top.png b/infrastructure/textures/infrastructure_boom_barrier_arm_h_top.png Binary files differnew file mode 100644 index 0000000..5f997a4 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_arm_h_top.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_v_left.png b/infrastructure/textures/infrastructure_boom_barrier_arm_v_left.png Binary files differnew file mode 100644 index 0000000..87b3bbb --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_arm_v_left.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_v_right.png b/infrastructure/textures/infrastructure_boom_barrier_arm_v_right.png Binary files differnew file mode 100644 index 0000000..c777597 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_arm_v_right.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_bottom.png b/infrastructure/textures/infrastructure_boom_barrier_h_bottom.png Binary files differnew file mode 100644 index 0000000..c7fbfea --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_h_bottom.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_front_back.png b/infrastructure/textures/infrastructure_boom_barrier_h_front_back.png Binary files differnew file mode 100644 index 0000000..5d019fc --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_h_front_back.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_left.png b/infrastructure/textures/infrastructure_boom_barrier_h_left.png Binary files differnew file mode 100644 index 0000000..08348fb --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_h_left.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_right.png b/infrastructure/textures/infrastructure_boom_barrier_h_right.png Binary files differnew file mode 100644 index 0000000..5399be8 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_h_right.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_top.png b/infrastructure/textures/infrastructure_boom_barrier_h_top.png Binary files differnew file mode 100644 index 0000000..7796232 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_h_top.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_bottom.png b/infrastructure/textures/infrastructure_boom_barrier_v_bottom.png Binary files differnew file mode 100644 index 0000000..9ae9ed3 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_v_bottom.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_front_back.png b/infrastructure/textures/infrastructure_boom_barrier_v_front_back.png Binary files differnew file mode 100644 index 0000000..d7b7a3b --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_v_front_back.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_left.png b/infrastructure/textures/infrastructure_boom_barrier_v_left.png Binary files differnew file mode 100644 index 0000000..4ddd606 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_v_left.png diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_right.png b/infrastructure/textures/infrastructure_boom_barrier_v_right.png Binary files differnew file mode 100644 index 0000000..91c5600 --- /dev/null +++ b/infrastructure/textures/infrastructure_boom_barrier_v_right.png diff --git a/infrastructure/textures/infrastructure_cable_barrier_terminal_back.png b/infrastructure/textures/infrastructure_cable_barrier_terminal_back.png Binary files differnew file mode 100644 index 0000000..5f90cf2 --- /dev/null +++ b/infrastructure/textures/infrastructure_cable_barrier_terminal_back.png diff --git a/infrastructure/textures/infrastructure_cable_barrier_terminal_front.png b/infrastructure/textures/infrastructure_cable_barrier_terminal_front.png Binary files differnew file mode 100644 index 0000000..607f6d9 --- /dev/null +++ b/infrastructure/textures/infrastructure_cable_barrier_terminal_front.png diff --git a/infrastructure/textures/infrastructure_concrete.png b/infrastructure/textures/infrastructure_concrete.png Binary files differnew file mode 100644 index 0000000..3be0c52 --- /dev/null +++ b/infrastructure/textures/infrastructure_concrete.png diff --git a/infrastructure/textures/infrastructure_corrugated_guide_rail_back.png b/infrastructure/textures/infrastructure_corrugated_guide_rail_back.png Binary files differnew file mode 100644 index 0000000..d7aaf99 --- /dev/null +++ b/infrastructure/textures/infrastructure_corrugated_guide_rail_back.png diff --git a/infrastructure/textures/infrastructure_corrugated_guide_rail_front.png b/infrastructure/textures/infrastructure_corrugated_guide_rail_front.png Binary files differnew file mode 100644 index 0000000..c3a7b37 --- /dev/null +++ b/infrastructure/textures/infrastructure_corrugated_guide_rail_front.png diff --git a/infrastructure/textures/infrastructure_corrugated_guide_rail_side.png b/infrastructure/textures/infrastructure_corrugated_guide_rail_side.png Binary files differnew file mode 100644 index 0000000..739e6de --- /dev/null +++ b/infrastructure/textures/infrastructure_corrugated_guide_rail_side.png diff --git a/infrastructure/textures/infrastructure_corrugated_sheet.png b/infrastructure/textures/infrastructure_corrugated_sheet.png Binary files differnew file mode 100644 index 0000000..9b6bef4 --- /dev/null +++ b/infrastructure/textures/infrastructure_corrugated_sheet.png diff --git a/infrastructure/textures/infrastructure_crosswalk_lighting_back.png b/infrastructure/textures/infrastructure_crosswalk_lighting_back.png Binary files differnew file mode 100644 index 0000000..fd73443 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_lighting_back.png diff --git a/infrastructure/textures/infrastructure_crosswalk_lighting_bottom.png b/infrastructure/textures/infrastructure_crosswalk_lighting_bottom.png Binary files differnew file mode 100644 index 0000000..f6f5db9 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_lighting_bottom.png diff --git a/infrastructure/textures/infrastructure_crosswalk_lighting_front.png b/infrastructure/textures/infrastructure_crosswalk_lighting_front.png Binary files differnew file mode 100644 index 0000000..bf6bf01 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_lighting_front.png diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign.png Binary files differnew file mode 100644 index 0000000..b20ca91 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_safety_sign.png diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_front_back.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_front_back.png Binary files differnew file mode 100644 index 0000000..2ff6832 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_front_back.png diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_side.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_side.png Binary files differnew file mode 100644 index 0000000..9e7c58c --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_side.png diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_top.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top.png Binary files differnew file mode 100644 index 0000000..6ba1c7b --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top.png diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_front_back.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_front_back.png Binary files differnew file mode 100644 index 0000000..f115876 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_front_back.png diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_side.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_side.png Binary files differnew file mode 100644 index 0000000..9db3518 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_side.png diff --git a/infrastructure/textures/infrastructure_crosswalk_warning_light_back.png b/infrastructure/textures/infrastructure_crosswalk_warning_light_back.png Binary files differnew file mode 100644 index 0000000..51d024b --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_warning_light_back.png diff --git a/infrastructure/textures/infrastructure_crosswalk_warning_light_front_bright.png b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_bright.png Binary files differnew file mode 100644 index 0000000..3525a3c --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_bright.png diff --git a/infrastructure/textures/infrastructure_crosswalk_warning_light_front_dark.png b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_dark.png Binary files differnew file mode 100644 index 0000000..357bda3 --- /dev/null +++ b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_dark.png diff --git a/infrastructure/textures/infrastructure_crowd_control_barricade_back.png b/infrastructure/textures/infrastructure_crowd_control_barricade_back.png Binary files differnew file mode 100644 index 0000000..0f5c6ea --- /dev/null +++ b/infrastructure/textures/infrastructure_crowd_control_barricade_back.png diff --git a/infrastructure/textures/infrastructure_crowd_control_barricade_front.png b/infrastructure/textures/infrastructure_crowd_control_barricade_front.png Binary files differnew file mode 100644 index 0000000..a16c363 --- /dev/null +++ b/infrastructure/textures/infrastructure_crowd_control_barricade_front.png diff --git a/infrastructure/textures/infrastructure_curve_chevron_left_bright.png b/infrastructure/textures/infrastructure_curve_chevron_left_bright.png Binary files differnew file mode 100644 index 0000000..199751f --- /dev/null +++ b/infrastructure/textures/infrastructure_curve_chevron_left_bright.png diff --git a/infrastructure/textures/infrastructure_curve_chevron_left_dark.png b/infrastructure/textures/infrastructure_curve_chevron_left_dark.png Binary files differnew file mode 100644 index 0000000..f7d68f5 --- /dev/null +++ b/infrastructure/textures/infrastructure_curve_chevron_left_dark.png diff --git a/infrastructure/textures/infrastructure_curve_chevron_right_bright.png b/infrastructure/textures/infrastructure_curve_chevron_right_bright.png Binary files differnew file mode 100644 index 0000000..d1bae78 --- /dev/null +++ b/infrastructure/textures/infrastructure_curve_chevron_right_bright.png diff --git a/infrastructure/textures/infrastructure_curve_chevron_right_dark.png b/infrastructure/textures/infrastructure_curve_chevron_right_dark.png Binary files differnew file mode 100644 index 0000000..b8f442f --- /dev/null +++ b/infrastructure/textures/infrastructure_curve_chevron_right_dark.png diff --git a/infrastructure/textures/infrastructure_delineator_retroreflector_red.png b/infrastructure/textures/infrastructure_delineator_retroreflector_red.png Binary files differnew file mode 100644 index 0000000..b2d4336 --- /dev/null +++ b/infrastructure/textures/infrastructure_delineator_retroreflector_red.png diff --git a/infrastructure/textures/infrastructure_delineator_retroreflector_yellow.png b/infrastructure/textures/infrastructure_delineator_retroreflector_yellow.png Binary files differnew file mode 100644 index 0000000..b6fe651 --- /dev/null +++ b/infrastructure/textures/infrastructure_delineator_retroreflector_yellow.png diff --git a/infrastructure/textures/infrastructure_delineator_wrapper_left.png b/infrastructure/textures/infrastructure_delineator_wrapper_left.png Binary files differnew file mode 100644 index 0000000..a4d0edd --- /dev/null +++ b/infrastructure/textures/infrastructure_delineator_wrapper_left.png diff --git a/infrastructure/textures/infrastructure_delineator_wrapper_right.png b/infrastructure/textures/infrastructure_delineator_wrapper_right.png Binary files differnew file mode 100644 index 0000000..2743183 --- /dev/null +++ b/infrastructure/textures/infrastructure_delineator_wrapper_right.png diff --git a/infrastructure/textures/infrastructure_double_yellow_line.png b/infrastructure/textures/infrastructure_double_yellow_line.png Binary files differnew file mode 100644 index 0000000..3f21c45 --- /dev/null +++ b/infrastructure/textures/infrastructure_double_yellow_line.png diff --git a/infrastructure/textures/infrastructure_drainage_channel_grating.png b/infrastructure/textures/infrastructure_drainage_channel_grating.png Binary files differnew file mode 100644 index 0000000..dc720cd --- /dev/null +++ b/infrastructure/textures/infrastructure_drainage_channel_grating.png diff --git a/infrastructure/textures/infrastructure_emergency_phone_bottom.png b/infrastructure/textures/infrastructure_emergency_phone_bottom.png Binary files differnew file mode 100644 index 0000000..8106816 --- /dev/null +++ b/infrastructure/textures/infrastructure_emergency_phone_bottom.png diff --git a/infrastructure/textures/infrastructure_emergency_phone_front.png b/infrastructure/textures/infrastructure_emergency_phone_front.png Binary files differnew file mode 100644 index 0000000..1153717 --- /dev/null +++ b/infrastructure/textures/infrastructure_emergency_phone_front.png diff --git a/infrastructure/textures/infrastructure_emergency_phone_side.png b/infrastructure/textures/infrastructure_emergency_phone_side.png Binary files differnew file mode 100644 index 0000000..930437c --- /dev/null +++ b/infrastructure/textures/infrastructure_emergency_phone_side.png diff --git a/infrastructure/textures/infrastructure_emergency_phone_top.png b/infrastructure/textures/infrastructure_emergency_phone_top.png Binary files differnew file mode 100644 index 0000000..2ff4038 --- /dev/null +++ b/infrastructure/textures/infrastructure_emergency_phone_top.png diff --git a/infrastructure/textures/infrastructure_energy_absorbing_terminal_back.png b/infrastructure/textures/infrastructure_energy_absorbing_terminal_back.png Binary files differnew file mode 100644 index 0000000..6264bd5 --- /dev/null +++ b/infrastructure/textures/infrastructure_energy_absorbing_terminal_back.png diff --git a/infrastructure/textures/infrastructure_energy_absorbing_terminal_front.png b/infrastructure/textures/infrastructure_energy_absorbing_terminal_front.png Binary files differnew file mode 100644 index 0000000..cd20a40 --- /dev/null +++ b/infrastructure/textures/infrastructure_energy_absorbing_terminal_front.png diff --git a/infrastructure/textures/infrastructure_fitch_barrel_bottom.png b/infrastructure/textures/infrastructure_fitch_barrel_bottom.png Binary files differnew file mode 100644 index 0000000..7664b97 --- /dev/null +++ b/infrastructure/textures/infrastructure_fitch_barrel_bottom.png diff --git a/infrastructure/textures/infrastructure_fitch_barrel_side.png b/infrastructure/textures/infrastructure_fitch_barrel_side.png Binary files differnew file mode 100644 index 0000000..7471830 --- /dev/null +++ b/infrastructure/textures/infrastructure_fitch_barrel_side.png diff --git a/infrastructure/textures/infrastructure_fitch_barrel_top.png b/infrastructure/textures/infrastructure_fitch_barrel_top.png Binary files differnew file mode 100644 index 0000000..223e119 --- /dev/null +++ b/infrastructure/textures/infrastructure_fitch_barrel_top.png diff --git a/infrastructure/textures/infrastructure_galvanized_steel.png b/infrastructure/textures/infrastructure_galvanized_steel.png Binary files differnew file mode 100644 index 0000000..841e68b --- /dev/null +++ b/infrastructure/textures/infrastructure_galvanized_steel.png diff --git a/infrastructure/textures/infrastructure_grid_paver_bottom.png b/infrastructure/textures/infrastructure_grid_paver_bottom.png Binary files differnew file mode 100644 index 0000000..de051cf --- /dev/null +++ b/infrastructure/textures/infrastructure_grid_paver_bottom.png diff --git a/infrastructure/textures/infrastructure_grid_paver_grass.png b/infrastructure/textures/infrastructure_grid_paver_grass.png Binary files differnew file mode 100644 index 0000000..87bae79 --- /dev/null +++ b/infrastructure/textures/infrastructure_grid_paver_grass.png diff --git a/infrastructure/textures/infrastructure_grid_paver_top.png b/infrastructure/textures/infrastructure_grid_paver_top.png Binary files differnew file mode 100644 index 0000000..ea079c3 --- /dev/null +++ b/infrastructure/textures/infrastructure_grid_paver_top.png diff --git a/infrastructure/textures/infrastructure_lane_control_lights_1.png b/infrastructure/textures/infrastructure_lane_control_lights_1.png Binary files differnew file mode 100644 index 0000000..e2c5d16 --- /dev/null +++ b/infrastructure/textures/infrastructure_lane_control_lights_1.png diff --git a/infrastructure/textures/infrastructure_lane_control_lights_2.png b/infrastructure/textures/infrastructure_lane_control_lights_2.png Binary files differnew file mode 100644 index 0000000..913572a --- /dev/null +++ b/infrastructure/textures/infrastructure_lane_control_lights_2.png diff --git a/infrastructure/textures/infrastructure_lane_control_lights_3.png b/infrastructure/textures/infrastructure_lane_control_lights_3.png Binary files differnew file mode 100644 index 0000000..ffe4e01 --- /dev/null +++ b/infrastructure/textures/infrastructure_lane_control_lights_3.png diff --git a/infrastructure/textures/infrastructure_lane_control_lights_4.png b/infrastructure/textures/infrastructure_lane_control_lights_4.png Binary files differnew file mode 100644 index 0000000..6b24780 --- /dev/null +++ b/infrastructure/textures/infrastructure_lane_control_lights_4.png diff --git a/infrastructure/textures/infrastructure_lane_control_lights_5.png b/infrastructure/textures/infrastructure_lane_control_lights_5.png Binary files differnew file mode 100644 index 0000000..1a8afcb --- /dev/null +++ b/infrastructure/textures/infrastructure_lane_control_lights_5.png diff --git a/infrastructure/textures/infrastructure_manhole_cover_side.png b/infrastructure/textures/infrastructure_manhole_cover_side.png Binary files differnew file mode 100644 index 0000000..11bf08e --- /dev/null +++ b/infrastructure/textures/infrastructure_manhole_cover_side.png diff --git a/infrastructure/textures/infrastructure_manhole_cover_top_bottom.png b/infrastructure/textures/infrastructure_manhole_cover_top_bottom.png Binary files differnew file mode 100644 index 0000000..4338a82 --- /dev/null +++ b/infrastructure/textures/infrastructure_manhole_cover_top_bottom.png diff --git a/infrastructure/textures/infrastructure_marker_bottom_side.png b/infrastructure/textures/infrastructure_marker_bottom_side.png Binary files differnew file mode 100644 index 0000000..6cf3e60 --- /dev/null +++ b/infrastructure/textures/infrastructure_marker_bottom_side.png diff --git a/infrastructure/textures/infrastructure_marker_side_red.png b/infrastructure/textures/infrastructure_marker_side_red.png Binary files differnew file mode 100644 index 0000000..5a5ae22 --- /dev/null +++ b/infrastructure/textures/infrastructure_marker_side_red.png diff --git a/infrastructure/textures/infrastructure_marker_side_yellow.png b/infrastructure/textures/infrastructure_marker_side_yellow.png Binary files differnew file mode 100644 index 0000000..a3a439d --- /dev/null +++ b/infrastructure/textures/infrastructure_marker_side_yellow.png diff --git a/infrastructure/textures/infrastructure_marker_top_red_yellow.png b/infrastructure/textures/infrastructure_marker_top_red_yellow.png Binary files differnew file mode 100644 index 0000000..afebd88 --- /dev/null +++ b/infrastructure/textures/infrastructure_marker_top_red_yellow.png diff --git a/infrastructure/textures/infrastructure_marker_top_yellow_yellow.png b/infrastructure/textures/infrastructure_marker_top_yellow_yellow.png Binary files differnew file mode 100644 index 0000000..de9d4d6 --- /dev/null +++ b/infrastructure/textures/infrastructure_marker_top_yellow_yellow.png diff --git a/infrastructure/textures/infrastructure_noise_barrier.png b/infrastructure/textures/infrastructure_noise_barrier.png Binary files differnew file mode 100644 index 0000000..a52a243 --- /dev/null +++ b/infrastructure/textures/infrastructure_noise_barrier.png diff --git a/infrastructure/textures/infrastructure_razor_wire.png b/infrastructure/textures/infrastructure_razor_wire.png Binary files differnew file mode 100644 index 0000000..150a98f --- /dev/null +++ b/infrastructure/textures/infrastructure_razor_wire.png diff --git a/infrastructure/textures/infrastructure_riffled_sheet.png b/infrastructure/textures/infrastructure_riffled_sheet.png Binary files differnew file mode 100644 index 0000000..0f83bce --- /dev/null +++ b/infrastructure/textures/infrastructure_riffled_sheet.png diff --git a/infrastructure/textures/infrastructure_road_sign_crosswalk_back.png b/infrastructure/textures/infrastructure_road_sign_crosswalk_back.png Binary files differnew file mode 100644 index 0000000..590e65d --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_crosswalk_back.png diff --git a/infrastructure/textures/infrastructure_road_sign_crosswalk_front.png b/infrastructure/textures/infrastructure_road_sign_crosswalk_front.png Binary files differnew file mode 100644 index 0000000..78b5dce --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_crosswalk_front.png diff --git a/infrastructure/textures/infrastructure_road_sign_retroreflective_surface.png b/infrastructure/textures/infrastructure_road_sign_retroreflective_surface.png Binary files differnew file mode 100644 index 0000000..f9c95c1 --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_retroreflective_surface.png diff --git a/infrastructure/textures/infrastructure_road_sign_right_of_way_back.png b/infrastructure/textures/infrastructure_road_sign_right_of_way_back.png Binary files differnew file mode 100644 index 0000000..a98467f --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_right_of_way_back.png diff --git a/infrastructure/textures/infrastructure_road_sign_right_of_way_front.png b/infrastructure/textures/infrastructure_road_sign_right_of_way_front.png Binary files differnew file mode 100644 index 0000000..0f52f69 --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_right_of_way_front.png diff --git a/infrastructure/textures/infrastructure_road_sign_stop_back.png b/infrastructure/textures/infrastructure_road_sign_stop_back.png Binary files differnew file mode 100644 index 0000000..d87b178 --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_stop_back.png diff --git a/infrastructure/textures/infrastructure_road_sign_stop_front.png b/infrastructure/textures/infrastructure_road_sign_stop_front.png Binary files differnew file mode 100644 index 0000000..42a099f --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_stop_front.png diff --git a/infrastructure/textures/infrastructure_road_sign_yield_back.png b/infrastructure/textures/infrastructure_road_sign_yield_back.png Binary files differnew file mode 100644 index 0000000..d934905 --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_yield_back.png diff --git a/infrastructure/textures/infrastructure_road_sign_yield_front.png b/infrastructure/textures/infrastructure_road_sign_yield_front.png Binary files differnew file mode 100644 index 0000000..caad0cc --- /dev/null +++ b/infrastructure/textures/infrastructure_road_sign_yield_front.png diff --git a/infrastructure/textures/infrastructure_single_yellow_line.png b/infrastructure/textures/infrastructure_single_yellow_line.png Binary files differnew file mode 100644 index 0000000..a9ca74b --- /dev/null +++ b/infrastructure/textures/infrastructure_single_yellow_line.png diff --git a/infrastructure/textures/infrastructure_single_yellow_line_corner.png b/infrastructure/textures/infrastructure_single_yellow_line_corner.png Binary files differnew file mode 100644 index 0000000..a41d06a --- /dev/null +++ b/infrastructure/textures/infrastructure_single_yellow_line_corner.png diff --git a/infrastructure/textures/infrastructure_solid_double_yellow_line_corner.png b/infrastructure/textures/infrastructure_solid_double_yellow_line_corner.png Binary files differnew file mode 100644 index 0000000..09a3719 --- /dev/null +++ b/infrastructure/textures/infrastructure_solid_double_yellow_line_corner.png diff --git a/infrastructure/textures/infrastructure_solid_yellow_line_one_side.png b/infrastructure/textures/infrastructure_solid_yellow_line_one_side.png Binary files differnew file mode 100644 index 0000000..0cff2e9 --- /dev/null +++ b/infrastructure/textures/infrastructure_solid_yellow_line_one_side.png diff --git a/infrastructure/textures/infrastructure_traffic_cone_bottom.png b/infrastructure/textures/infrastructure_traffic_cone_bottom.png Binary files differnew file mode 100644 index 0000000..c9a5137 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_cone_bottom.png diff --git a/infrastructure/textures/infrastructure_traffic_cone_side.png b/infrastructure/textures/infrastructure_traffic_cone_side.png Binary files differnew file mode 100644 index 0000000..134837f --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_cone_side.png diff --git a/infrastructure/textures/infrastructure_traffic_cone_top.png b/infrastructure/textures/infrastructure_traffic_cone_top.png Binary files differnew file mode 100644 index 0000000..2dca4ae --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_cone_top.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians.png Binary files differnew file mode 100644 index 0000000..9cd1470 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_back.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_back.png Binary files differnew file mode 100644 index 0000000..357011d --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_back.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_1.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_1.png Binary files differnew file mode 100644 index 0000000..a689dc4 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_1.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_2.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_2.png Binary files differnew file mode 100644 index 0000000..a689dc4 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_2.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_3.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_3.png Binary files differnew file mode 100644 index 0000000..7729d96 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_3.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_4.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_4.png Binary files differnew file mode 100644 index 0000000..7729d96 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_4.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_back.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_back.png Binary files differnew file mode 100644 index 0000000..708d59b --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_back.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_1.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_1.png Binary files differnew file mode 100644 index 0000000..737c426 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_1.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_2.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_2.png Binary files differnew file mode 100644 index 0000000..737c426 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_2.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_3.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_3.png Binary files differnew file mode 100644 index 0000000..8d22856 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_3.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_4.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_4.png Binary files differnew file mode 100644 index 0000000..8d22856 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_4.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_side.png b/infrastructure/textures/infrastructure_traffic_lights_side.png Binary files differnew file mode 100644 index 0000000..01076e3 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_side.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles.png Binary files differnew file mode 100644 index 0000000..393422a --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_1.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_1.png Binary files differnew file mode 100644 index 0000000..4cbb75b --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_1.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_2.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_2.png Binary files differnew file mode 100644 index 0000000..c81f500 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_2.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_3.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_3.png Binary files differnew file mode 100644 index 0000000..f55108c --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_3.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_4.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_4.png Binary files differnew file mode 100644 index 0000000..c81f500 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_4.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_1.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_1.png Binary files differnew file mode 100644 index 0000000..116ae46 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_1.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_2.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_2.png Binary files differnew file mode 100644 index 0000000..4a57e89 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_2.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_3.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_3.png Binary files differnew file mode 100644 index 0000000..9dab2ea --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_3.png diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_4.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_4.png Binary files differnew file mode 100644 index 0000000..ddc2364 --- /dev/null +++ b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_4.png diff --git a/infrastructure/textures/infrastructure_truss.png b/infrastructure/textures/infrastructure_truss.png Binary files differnew file mode 100644 index 0000000..ba628f1 --- /dev/null +++ b/infrastructure/textures/infrastructure_truss.png diff --git a/infrastructure/textures/infrastructure_warning_light_back.png b/infrastructure/textures/infrastructure_warning_light_back.png Binary files differnew file mode 100644 index 0000000..0301aee --- /dev/null +++ b/infrastructure/textures/infrastructure_warning_light_back.png diff --git a/infrastructure/textures/infrastructure_warning_light_bottom.png b/infrastructure/textures/infrastructure_warning_light_bottom.png Binary files differnew file mode 100644 index 0000000..e7090a0 --- /dev/null +++ b/infrastructure/textures/infrastructure_warning_light_bottom.png diff --git a/infrastructure/textures/infrastructure_warning_light_front_bright.png b/infrastructure/textures/infrastructure_warning_light_front_bright.png Binary files differnew file mode 100644 index 0000000..8d9c937 --- /dev/null +++ b/infrastructure/textures/infrastructure_warning_light_front_bright.png diff --git a/infrastructure/textures/infrastructure_warning_light_front_dark.png b/infrastructure/textures/infrastructure_warning_light_front_dark.png Binary files differnew file mode 100644 index 0000000..3496420 --- /dev/null +++ b/infrastructure/textures/infrastructure_warning_light_front_dark.png diff --git a/infrastructure/textures/infrastructure_warning_light_left.png b/infrastructure/textures/infrastructure_warning_light_left.png Binary files differnew file mode 100644 index 0000000..e519af4 --- /dev/null +++ b/infrastructure/textures/infrastructure_warning_light_left.png diff --git a/infrastructure/textures/infrastructure_warning_light_right.png b/infrastructure/textures/infrastructure_warning_light_right.png Binary files differnew file mode 100644 index 0000000..4bd42dc --- /dev/null +++ b/infrastructure/textures/infrastructure_warning_light_right.png diff --git a/infrastructure/textures/infrastructure_warning_light_top.png b/infrastructure/textures/infrastructure_warning_light_top.png Binary files differnew file mode 100644 index 0000000..898ed0f --- /dev/null +++ b/infrastructure/textures/infrastructure_warning_light_top.png diff --git a/infrastructure/textures/infrastructure_wire_netting.png b/infrastructure/textures/infrastructure_wire_netting.png Binary files differnew file mode 100644 index 0000000..a685e97 --- /dev/null +++ b/infrastructure/textures/infrastructure_wire_netting.png diff --git a/infrastructure/textures/infrastructure_wire_rope_safety_barrier_back.png b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_back.png Binary files differnew file mode 100644 index 0000000..31418f3 --- /dev/null +++ b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_back.png diff --git a/infrastructure/textures/infrastructure_wire_rope_safety_barrier_front.png b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_front.png Binary files differnew file mode 100644 index 0000000..3e46bd1 --- /dev/null +++ b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_front.png |