From 8b614bf8365a491299d4fdc33e4c45ab741ecfa0 Mon Sep 17 00:00:00 2001 From: cheapie Date: Sun, 10 Jan 2016 02:14:35 -0600 Subject: Add infrastructure as normal content It will be developed as part of this mod now. --- infrastructure/README | 14 + infrastructure/advanced_aircraft_warning_light.lua | 119 ++ .../advanced_automatic_warning_device.lua | 410 +++++ infrastructure/advanced_boom_barrier.lua | 470 ++++++ infrastructure/advanced_crosswalk_lighting.lua | 85 ++ infrastructure/advanced_crosswalk_safety_sign.lua | 85 ++ .../advanced_crosswalk_warning_light.lua | 193 +++ infrastructure/advanced_curve_chevron.lua | 85 ++ infrastructure/advanced_emergency_phone.lua | 107 ++ infrastructure/advanced_lane_control_lights.lua | 79 + infrastructure/advanced_road_signs.lua | 237 +++ .../advanced_traffic_lights_pedestrians.lua | 252 ++++ infrastructure/advanced_warning_light.lua | 97 ++ infrastructure/crafts.lua | 549 +++++++ infrastructure/depends.txt | 8 + infrastructure/init.lua | 24 + infrastructure/nodes.lua | 1579 ++++++++++++++++++++ infrastructure/nodes_extension.lua | 162 ++ infrastructure/settings.lua | 49 + .../infrastructure_automatic_warning_device.ogg | Bin 0 -> 90708 bytes .../sounds/infrastructure_boom_barrier.ogg | Bin 0 -> 35717 bytes infrastructure/sounds/infrastructure_ebell.ogg | Bin 0 -> 26398 bytes .../sounds/infrastructure_emergency_phone.ogg | Bin 0 -> 18073 bytes .../sounds/infrastructure_traffic_lights_1.ogg | Bin 0 -> 13500 bytes .../sounds/infrastructure_traffic_lights_2.ogg | Bin 0 -> 15454 bytes ...tructure_aircraft_warning_light_side_bright.png | Bin 0 -> 399 bytes ...astructure_aircraft_warning_light_side_dark.png | Bin 0 -> 411 bytes ...structure_aircraft_warning_light_top_bright.png | Bin 0 -> 597 bytes ...rastructure_aircraft_warning_light_top_dark.png | Bin 0 -> 601 bytes .../infrastructure_anti_dazzling_panel_side.png | Bin 0 -> 960 bytes ...frastructure_anti_dazzling_panel_top_bottom.png | Bin 0 -> 652 bytes infrastructure/textures/infrastructure_asphalt.png | Bin 0 -> 731 bytes .../infrastructure_automatic_warning_device.png | Bin 0 -> 8347 bytes ...rastructure_automatic_warning_device_bottom.png | Bin 0 -> 450 bytes ...rastructure_automatic_warning_device_middle.png | Bin 0 -> 1268 bytes ...re_automatic_warning_device_middle_center_1.png | Bin 0 -> 2259 bytes ...re_automatic_warning_device_middle_center_2.png | Bin 0 -> 2670 bytes ...re_automatic_warning_device_middle_center_3.png | Bin 0 -> 2635 bytes ...automatic_warning_device_middle_center_side.png | Bin 0 -> 1048 bytes ...ture_automatic_warning_device_middle_left_1.png | Bin 0 -> 373 bytes ...ture_automatic_warning_device_middle_left_2.png | Bin 0 -> 501 bytes ...e_automatic_warning_device_middle_left_side.png | Bin 0 -> 389 bytes ...ure_automatic_warning_device_middle_right_1.png | Bin 0 -> 413 bytes ...ure_automatic_warning_device_middle_right_2.png | Bin 0 -> 567 bytes ..._automatic_warning_device_middle_right_side.png | Bin 0 -> 362 bytes ...ucture_automatic_warning_device_middle_side.png | Bin 0 -> 603 bytes ...infrastructure_automatic_warning_device_top.png | Bin 0 -> 2818 bytes ...structure_automatic_warning_device_top_side.png | Bin 0 -> 878 bytes ...ucture_boom_barrier_arm_h_bottom_front_back.png | Bin 0 -> 315 bytes ...ucture_boom_barrier_arm_h_left_right_bright.png | Bin 0 -> 600 bytes ...tructure_boom_barrier_arm_h_left_right_dark.png | Bin 0 -> 481 bytes .../infrastructure_boom_barrier_arm_h_top.png | Bin 0 -> 359 bytes .../infrastructure_boom_barrier_arm_v_left.png | Bin 0 -> 550 bytes .../infrastructure_boom_barrier_arm_v_right.png | Bin 0 -> 527 bytes .../infrastructure_boom_barrier_h_bottom.png | Bin 0 -> 558 bytes .../infrastructure_boom_barrier_h_front_back.png | Bin 0 -> 504 bytes .../infrastructure_boom_barrier_h_left.png | Bin 0 -> 566 bytes .../infrastructure_boom_barrier_h_right.png | Bin 0 -> 562 bytes .../textures/infrastructure_boom_barrier_h_top.png | Bin 0 -> 549 bytes .../infrastructure_boom_barrier_v_bottom.png | Bin 0 -> 509 bytes .../infrastructure_boom_barrier_v_front_back.png | Bin 0 -> 573 bytes .../infrastructure_boom_barrier_v_left.png | Bin 0 -> 532 bytes .../infrastructure_boom_barrier_v_right.png | Bin 0 -> 540 bytes .../infrastructure_cable_barrier_terminal_back.png | Bin 0 -> 1217 bytes ...infrastructure_cable_barrier_terminal_front.png | Bin 0 -> 1224 bytes .../textures/infrastructure_concrete.png | Bin 0 -> 732 bytes .../infrastructure_corrugated_guide_rail_back.png | Bin 0 -> 1142 bytes .../infrastructure_corrugated_guide_rail_front.png | Bin 0 -> 1135 bytes .../infrastructure_corrugated_guide_rail_side.png | Bin 0 -> 1108 bytes .../textures/infrastructure_corrugated_sheet.png | Bin 0 -> 1166 bytes .../infrastructure_crosswalk_lighting_back.png | Bin 0 -> 1019 bytes .../infrastructure_crosswalk_lighting_bottom.png | Bin 0 -> 749 bytes .../infrastructure_crosswalk_lighting_front.png | Bin 0 -> 1025 bytes .../infrastructure_crosswalk_safety_sign.png | Bin 0 -> 703 bytes ...ure_crosswalk_safety_sign_bottom_front_back.png | Bin 0 -> 498 bytes ...structure_crosswalk_safety_sign_bottom_side.png | Bin 0 -> 348 bytes .../infrastructure_crosswalk_safety_sign_top.png | Bin 0 -> 479 bytes ...ucture_crosswalk_safety_sign_top_front_back.png | Bin 0 -> 343 bytes ...frastructure_crosswalk_safety_sign_top_side.png | Bin 0 -> 199 bytes ...infrastructure_crosswalk_warning_light_back.png | Bin 0 -> 460 bytes ...ucture_crosswalk_warning_light_front_bright.png | Bin 0 -> 1021 bytes ...tructure_crosswalk_warning_light_front_dark.png | Bin 0 -> 606 bytes ...infrastructure_crowd_control_barricade_back.png | Bin 0 -> 1050 bytes ...nfrastructure_crowd_control_barricade_front.png | Bin 0 -> 1078 bytes .../infrastructure_curve_chevron_left_bright.png | Bin 0 -> 960 bytes .../infrastructure_curve_chevron_left_dark.png | Bin 0 -> 382 bytes .../infrastructure_curve_chevron_right_bright.png | Bin 0 -> 988 bytes .../infrastructure_curve_chevron_right_dark.png | Bin 0 -> 387 bytes ...nfrastructure_delineator_retroreflector_red.png | Bin 0 -> 736 bytes ...astructure_delineator_retroreflector_yellow.png | Bin 0 -> 792 bytes .../infrastructure_delineator_wrapper_left.png | Bin 0 -> 707 bytes .../infrastructure_delineator_wrapper_right.png | Bin 0 -> 713 bytes .../textures/infrastructure_double_yellow_line.png | Bin 0 -> 270 bytes .../infrastructure_drainage_channel_grating.png | Bin 0 -> 1628 bytes .../infrastructure_emergency_phone_bottom.png | Bin 0 -> 544 bytes .../infrastructure_emergency_phone_front.png | Bin 0 -> 802 bytes .../infrastructure_emergency_phone_side.png | Bin 0 -> 768 bytes .../infrastructure_emergency_phone_top.png | Bin 0 -> 689 bytes ...frastructure_energy_absorbing_terminal_back.png | Bin 0 -> 1160 bytes ...rastructure_energy_absorbing_terminal_front.png | Bin 0 -> 865 bytes .../infrastructure_fitch_barrel_bottom.png | Bin 0 -> 713 bytes .../textures/infrastructure_fitch_barrel_side.png | Bin 0 -> 979 bytes .../textures/infrastructure_fitch_barrel_top.png | Bin 0 -> 625 bytes .../textures/infrastructure_galvanized_steel.png | Bin 0 -> 1067 bytes .../textures/infrastructure_grid_paver_bottom.png | Bin 0 -> 1093 bytes .../textures/infrastructure_grid_paver_grass.png | Bin 0 -> 443 bytes .../textures/infrastructure_grid_paver_top.png | Bin 0 -> 1597 bytes .../infrastructure_lane_control_lights_1.png | Bin 0 -> 1905 bytes .../infrastructure_lane_control_lights_2.png | Bin 0 -> 4010 bytes .../infrastructure_lane_control_lights_3.png | Bin 0 -> 4148 bytes .../infrastructure_lane_control_lights_4.png | Bin 0 -> 4159 bytes .../infrastructure_lane_control_lights_5.png | Bin 0 -> 4119 bytes .../textures/infrastructure_manhole_cover_side.png | Bin 0 -> 700 bytes .../infrastructure_manhole_cover_top_bottom.png | Bin 0 -> 670 bytes .../textures/infrastructure_marker_bottom_side.png | Bin 0 -> 153 bytes .../textures/infrastructure_marker_side_red.png | Bin 0 -> 180 bytes .../textures/infrastructure_marker_side_yellow.png | Bin 0 -> 183 bytes .../infrastructure_marker_top_red_yellow.png | Bin 0 -> 198 bytes .../infrastructure_marker_top_yellow_yellow.png | Bin 0 -> 182 bytes .../textures/infrastructure_noise_barrier.png | Bin 0 -> 1524 bytes .../textures/infrastructure_razor_wire.png | Bin 0 -> 926 bytes .../textures/infrastructure_riffled_sheet.png | Bin 0 -> 2145 bytes .../infrastructure_road_sign_crosswalk_back.png | Bin 0 -> 604 bytes .../infrastructure_road_sign_crosswalk_front.png | Bin 0 -> 1158 bytes ...structure_road_sign_retroreflective_surface.png | Bin 0 -> 175 bytes .../infrastructure_road_sign_right_of_way_back.png | Bin 0 -> 664 bytes ...infrastructure_road_sign_right_of_way_front.png | Bin 0 -> 820 bytes .../infrastructure_road_sign_stop_back.png | Bin 0 -> 693 bytes .../infrastructure_road_sign_stop_front.png | Bin 0 -> 1208 bytes .../infrastructure_road_sign_yield_back.png | Bin 0 -> 575 bytes .../infrastructure_road_sign_yield_front.png | Bin 0 -> 742 bytes .../textures/infrastructure_single_yellow_line.png | Bin 0 -> 231 bytes .../infrastructure_single_yellow_line_corner.png | Bin 0 -> 250 bytes ...rastructure_solid_double_yellow_line_corner.png | Bin 0 -> 239 bytes .../infrastructure_solid_yellow_line_one_side.png | Bin 0 -> 272 bytes .../infrastructure_traffic_cone_bottom.png | Bin 0 -> 752 bytes .../textures/infrastructure_traffic_cone_side.png | Bin 0 -> 371 bytes .../textures/infrastructure_traffic_cone_top.png | Bin 0 -> 609 bytes .../infrastructure_traffic_lights_pedestrians.png | Bin 0 -> 1899 bytes ...ture_traffic_lights_pedestrians_bottom_back.png | Bin 0 -> 495 bytes ...e_traffic_lights_pedestrians_bottom_front_1.png | Bin 0 -> 798 bytes ...e_traffic_lights_pedestrians_bottom_front_2.png | Bin 0 -> 798 bytes ...e_traffic_lights_pedestrians_bottom_front_3.png | Bin 0 -> 999 bytes ...e_traffic_lights_pedestrians_bottom_front_4.png | Bin 0 -> 999 bytes ...ructure_traffic_lights_pedestrians_top_back.png | Bin 0 -> 459 bytes ...ture_traffic_lights_pedestrians_top_front_1.png | Bin 0 -> 938 bytes ...ture_traffic_lights_pedestrians_top_front_2.png | Bin 0 -> 938 bytes ...ture_traffic_lights_pedestrians_top_front_3.png | Bin 0 -> 693 bytes ...ture_traffic_lights_pedestrians_top_front_4.png | Bin 0 -> 693 bytes .../infrastructure_traffic_lights_side.png | Bin 0 -> 568 bytes .../infrastructure_traffic_lights_vehicles.png | Bin 0 -> 3062 bytes ...astructure_traffic_lights_vehicles_bottom_1.png | Bin 0 -> 851 bytes ...astructure_traffic_lights_vehicles_bottom_2.png | Bin 0 -> 1264 bytes ...astructure_traffic_lights_vehicles_bottom_3.png | Bin 0 -> 1518 bytes ...astructure_traffic_lights_vehicles_bottom_4.png | Bin 0 -> 1264 bytes ...nfrastructure_traffic_lights_vehicles_top_1.png | Bin 0 -> 1382 bytes ...nfrastructure_traffic_lights_vehicles_top_2.png | Bin 0 -> 1612 bytes ...nfrastructure_traffic_lights_vehicles_top_3.png | Bin 0 -> 817 bytes ...nfrastructure_traffic_lights_vehicles_top_4.png | Bin 0 -> 1159 bytes infrastructure/textures/infrastructure_truss.png | Bin 0 -> 1328 bytes .../textures/infrastructure_warning_light_back.png | Bin 0 -> 481 bytes .../infrastructure_warning_light_bottom.png | Bin 0 -> 269 bytes .../infrastructure_warning_light_front_bright.png | Bin 0 -> 969 bytes .../infrastructure_warning_light_front_dark.png | Bin 0 -> 464 bytes .../textures/infrastructure_warning_light_left.png | Bin 0 -> 247 bytes .../infrastructure_warning_light_right.png | Bin 0 -> 236 bytes .../textures/infrastructure_warning_light_top.png | Bin 0 -> 250 bytes .../textures/infrastructure_wire_netting.png | Bin 0 -> 1030 bytes ...nfrastructure_wire_rope_safety_barrier_back.png | Bin 0 -> 1134 bytes ...frastructure_wire_rope_safety_barrier_front.png | Bin 0 -> 1146 bytes 170 files changed, 4604 insertions(+) create mode 100644 infrastructure/README create mode 100644 infrastructure/advanced_aircraft_warning_light.lua create mode 100644 infrastructure/advanced_automatic_warning_device.lua create mode 100644 infrastructure/advanced_boom_barrier.lua create mode 100644 infrastructure/advanced_crosswalk_lighting.lua create mode 100644 infrastructure/advanced_crosswalk_safety_sign.lua create mode 100644 infrastructure/advanced_crosswalk_warning_light.lua create mode 100644 infrastructure/advanced_curve_chevron.lua create mode 100644 infrastructure/advanced_emergency_phone.lua create mode 100644 infrastructure/advanced_lane_control_lights.lua create mode 100644 infrastructure/advanced_road_signs.lua create mode 100644 infrastructure/advanced_traffic_lights_pedestrians.lua create mode 100644 infrastructure/advanced_warning_light.lua create mode 100644 infrastructure/crafts.lua create mode 100644 infrastructure/depends.txt create mode 100644 infrastructure/init.lua create mode 100644 infrastructure/nodes.lua create mode 100644 infrastructure/nodes_extension.lua create mode 100644 infrastructure/settings.lua create mode 100644 infrastructure/sounds/infrastructure_automatic_warning_device.ogg create mode 100644 infrastructure/sounds/infrastructure_boom_barrier.ogg create mode 100644 infrastructure/sounds/infrastructure_ebell.ogg create mode 100644 infrastructure/sounds/infrastructure_emergency_phone.ogg create mode 100644 infrastructure/sounds/infrastructure_traffic_lights_1.ogg create mode 100644 infrastructure/sounds/infrastructure_traffic_lights_2.ogg create mode 100644 infrastructure/textures/infrastructure_aircraft_warning_light_side_bright.png create mode 100644 infrastructure/textures/infrastructure_aircraft_warning_light_side_dark.png create mode 100644 infrastructure/textures/infrastructure_aircraft_warning_light_top_bright.png create mode 100644 infrastructure/textures/infrastructure_aircraft_warning_light_top_dark.png create mode 100644 infrastructure/textures/infrastructure_anti_dazzling_panel_side.png create mode 100644 infrastructure/textures/infrastructure_anti_dazzling_panel_top_bottom.png create mode 100644 infrastructure/textures/infrastructure_asphalt.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_bottom.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_center_1.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_center_2.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_center_3.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_center_side.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_left_1.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_left_2.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_left_side.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_right_1.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_right_2.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_right_side.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_middle_side.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_top.png create mode 100644 infrastructure/textures/infrastructure_automatic_warning_device_top_side.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_arm_h_bottom_front_back.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_bright.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_dark.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_arm_h_top.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_arm_v_left.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_arm_v_right.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_h_bottom.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_h_front_back.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_h_left.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_h_right.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_h_top.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_v_bottom.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_v_front_back.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_v_left.png create mode 100644 infrastructure/textures/infrastructure_boom_barrier_v_right.png create mode 100644 infrastructure/textures/infrastructure_cable_barrier_terminal_back.png create mode 100644 infrastructure/textures/infrastructure_cable_barrier_terminal_front.png create mode 100644 infrastructure/textures/infrastructure_concrete.png create mode 100644 infrastructure/textures/infrastructure_corrugated_guide_rail_back.png create mode 100644 infrastructure/textures/infrastructure_corrugated_guide_rail_front.png create mode 100644 infrastructure/textures/infrastructure_corrugated_guide_rail_side.png create mode 100644 infrastructure/textures/infrastructure_corrugated_sheet.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_lighting_back.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_lighting_bottom.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_lighting_front.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_safety_sign.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_front_back.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_side.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_safety_sign_top.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_safety_sign_top_front_back.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_safety_sign_top_side.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_warning_light_back.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_warning_light_front_bright.png create mode 100644 infrastructure/textures/infrastructure_crosswalk_warning_light_front_dark.png create mode 100644 infrastructure/textures/infrastructure_crowd_control_barricade_back.png create mode 100644 infrastructure/textures/infrastructure_crowd_control_barricade_front.png create mode 100644 infrastructure/textures/infrastructure_curve_chevron_left_bright.png create mode 100644 infrastructure/textures/infrastructure_curve_chevron_left_dark.png create mode 100644 infrastructure/textures/infrastructure_curve_chevron_right_bright.png create mode 100644 infrastructure/textures/infrastructure_curve_chevron_right_dark.png create mode 100644 infrastructure/textures/infrastructure_delineator_retroreflector_red.png create mode 100644 infrastructure/textures/infrastructure_delineator_retroreflector_yellow.png create mode 100644 infrastructure/textures/infrastructure_delineator_wrapper_left.png create mode 100644 infrastructure/textures/infrastructure_delineator_wrapper_right.png create mode 100644 infrastructure/textures/infrastructure_double_yellow_line.png create mode 100644 infrastructure/textures/infrastructure_drainage_channel_grating.png create mode 100644 infrastructure/textures/infrastructure_emergency_phone_bottom.png create mode 100644 infrastructure/textures/infrastructure_emergency_phone_front.png create mode 100644 infrastructure/textures/infrastructure_emergency_phone_side.png create mode 100644 infrastructure/textures/infrastructure_emergency_phone_top.png create mode 100644 infrastructure/textures/infrastructure_energy_absorbing_terminal_back.png create mode 100644 infrastructure/textures/infrastructure_energy_absorbing_terminal_front.png create mode 100644 infrastructure/textures/infrastructure_fitch_barrel_bottom.png create mode 100644 infrastructure/textures/infrastructure_fitch_barrel_side.png create mode 100644 infrastructure/textures/infrastructure_fitch_barrel_top.png create mode 100644 infrastructure/textures/infrastructure_galvanized_steel.png create mode 100644 infrastructure/textures/infrastructure_grid_paver_bottom.png create mode 100644 infrastructure/textures/infrastructure_grid_paver_grass.png create mode 100644 infrastructure/textures/infrastructure_grid_paver_top.png create mode 100644 infrastructure/textures/infrastructure_lane_control_lights_1.png create mode 100644 infrastructure/textures/infrastructure_lane_control_lights_2.png create mode 100644 infrastructure/textures/infrastructure_lane_control_lights_3.png create mode 100644 infrastructure/textures/infrastructure_lane_control_lights_4.png create mode 100644 infrastructure/textures/infrastructure_lane_control_lights_5.png create mode 100644 infrastructure/textures/infrastructure_manhole_cover_side.png create mode 100644 infrastructure/textures/infrastructure_manhole_cover_top_bottom.png create mode 100644 infrastructure/textures/infrastructure_marker_bottom_side.png create mode 100644 infrastructure/textures/infrastructure_marker_side_red.png create mode 100644 infrastructure/textures/infrastructure_marker_side_yellow.png create mode 100644 infrastructure/textures/infrastructure_marker_top_red_yellow.png create mode 100644 infrastructure/textures/infrastructure_marker_top_yellow_yellow.png create mode 100644 infrastructure/textures/infrastructure_noise_barrier.png create mode 100644 infrastructure/textures/infrastructure_razor_wire.png create mode 100644 infrastructure/textures/infrastructure_riffled_sheet.png create mode 100644 infrastructure/textures/infrastructure_road_sign_crosswalk_back.png create mode 100644 infrastructure/textures/infrastructure_road_sign_crosswalk_front.png create mode 100644 infrastructure/textures/infrastructure_road_sign_retroreflective_surface.png create mode 100644 infrastructure/textures/infrastructure_road_sign_right_of_way_back.png create mode 100644 infrastructure/textures/infrastructure_road_sign_right_of_way_front.png create mode 100644 infrastructure/textures/infrastructure_road_sign_stop_back.png create mode 100644 infrastructure/textures/infrastructure_road_sign_stop_front.png create mode 100644 infrastructure/textures/infrastructure_road_sign_yield_back.png create mode 100644 infrastructure/textures/infrastructure_road_sign_yield_front.png create mode 100644 infrastructure/textures/infrastructure_single_yellow_line.png create mode 100644 infrastructure/textures/infrastructure_single_yellow_line_corner.png create mode 100644 infrastructure/textures/infrastructure_solid_double_yellow_line_corner.png create mode 100644 infrastructure/textures/infrastructure_solid_yellow_line_one_side.png create mode 100644 infrastructure/textures/infrastructure_traffic_cone_bottom.png create mode 100644 infrastructure/textures/infrastructure_traffic_cone_side.png create mode 100644 infrastructure/textures/infrastructure_traffic_cone_top.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_back.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_1.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_2.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_3.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_4.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_back.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_1.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_2.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_3.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_4.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_side.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_1.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_2.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_3.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_4.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_top_1.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_top_2.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_top_3.png create mode 100644 infrastructure/textures/infrastructure_traffic_lights_vehicles_top_4.png create mode 100644 infrastructure/textures/infrastructure_truss.png create mode 100644 infrastructure/textures/infrastructure_warning_light_back.png create mode 100644 infrastructure/textures/infrastructure_warning_light_bottom.png create mode 100644 infrastructure/textures/infrastructure_warning_light_front_bright.png create mode 100644 infrastructure/textures/infrastructure_warning_light_front_dark.png create mode 100644 infrastructure/textures/infrastructure_warning_light_left.png create mode 100644 infrastructure/textures/infrastructure_warning_light_right.png create mode 100644 infrastructure/textures/infrastructure_warning_light_top.png create mode 100644 infrastructure/textures/infrastructure_wire_netting.png create mode 100644 infrastructure/textures/infrastructure_wire_rope_safety_barrier_back.png create mode 100644 infrastructure/textures/infrastructure_wire_rope_safety_barrier_front.png (limited to 'infrastructure') 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 new file mode 100644 index 0000000..71d1679 Binary files /dev/null and b/infrastructure/sounds/infrastructure_automatic_warning_device.ogg differ diff --git a/infrastructure/sounds/infrastructure_boom_barrier.ogg b/infrastructure/sounds/infrastructure_boom_barrier.ogg new file mode 100644 index 0000000..4106df2 Binary files /dev/null and b/infrastructure/sounds/infrastructure_boom_barrier.ogg differ diff --git a/infrastructure/sounds/infrastructure_ebell.ogg b/infrastructure/sounds/infrastructure_ebell.ogg new file mode 100644 index 0000000..d59d1b9 Binary files /dev/null and b/infrastructure/sounds/infrastructure_ebell.ogg differ diff --git a/infrastructure/sounds/infrastructure_emergency_phone.ogg b/infrastructure/sounds/infrastructure_emergency_phone.ogg new file mode 100644 index 0000000..7e84eb2 Binary files /dev/null and b/infrastructure/sounds/infrastructure_emergency_phone.ogg differ diff --git a/infrastructure/sounds/infrastructure_traffic_lights_1.ogg b/infrastructure/sounds/infrastructure_traffic_lights_1.ogg new file mode 100644 index 0000000..d790e9a Binary files /dev/null and b/infrastructure/sounds/infrastructure_traffic_lights_1.ogg differ diff --git a/infrastructure/sounds/infrastructure_traffic_lights_2.ogg b/infrastructure/sounds/infrastructure_traffic_lights_2.ogg new file mode 100644 index 0000000..8fa7753 Binary files /dev/null and b/infrastructure/sounds/infrastructure_traffic_lights_2.ogg differ diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_side_bright.png b/infrastructure/textures/infrastructure_aircraft_warning_light_side_bright.png new file mode 100644 index 0000000..3105665 Binary files /dev/null and b/infrastructure/textures/infrastructure_aircraft_warning_light_side_bright.png differ diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_side_dark.png b/infrastructure/textures/infrastructure_aircraft_warning_light_side_dark.png new file mode 100644 index 0000000..a696f31 Binary files /dev/null and b/infrastructure/textures/infrastructure_aircraft_warning_light_side_dark.png differ diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_top_bright.png b/infrastructure/textures/infrastructure_aircraft_warning_light_top_bright.png new file mode 100644 index 0000000..a71f59b Binary files /dev/null and b/infrastructure/textures/infrastructure_aircraft_warning_light_top_bright.png differ diff --git a/infrastructure/textures/infrastructure_aircraft_warning_light_top_dark.png b/infrastructure/textures/infrastructure_aircraft_warning_light_top_dark.png new file mode 100644 index 0000000..b3d91a6 Binary files /dev/null and b/infrastructure/textures/infrastructure_aircraft_warning_light_top_dark.png differ diff --git a/infrastructure/textures/infrastructure_anti_dazzling_panel_side.png b/infrastructure/textures/infrastructure_anti_dazzling_panel_side.png new file mode 100644 index 0000000..5965006 Binary files /dev/null and b/infrastructure/textures/infrastructure_anti_dazzling_panel_side.png differ diff --git a/infrastructure/textures/infrastructure_anti_dazzling_panel_top_bottom.png b/infrastructure/textures/infrastructure_anti_dazzling_panel_top_bottom.png new file mode 100644 index 0000000..0f257bd Binary files /dev/null and b/infrastructure/textures/infrastructure_anti_dazzling_panel_top_bottom.png differ diff --git a/infrastructure/textures/infrastructure_asphalt.png b/infrastructure/textures/infrastructure_asphalt.png new file mode 100644 index 0000000..2906a0d Binary files /dev/null and b/infrastructure/textures/infrastructure_asphalt.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device.png b/infrastructure/textures/infrastructure_automatic_warning_device.png new file mode 100644 index 0000000..d5f6c62 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_bottom.png b/infrastructure/textures/infrastructure_automatic_warning_device_bottom.png new file mode 100644 index 0000000..87ddf0c Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_bottom.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle.png new file mode 100644 index 0000000..5185a29 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_1.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_1.png new file mode 100644 index 0000000..ac85b26 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_1.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_2.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_2.png new file mode 100644 index 0000000..9e38834 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_2.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_3.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_3.png new file mode 100644 index 0000000..f741647 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_3.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_side.png new file mode 100644 index 0000000..7c50472 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_center_side.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_1.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_1.png new file mode 100644 index 0000000..3acc761 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_1.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_2.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_2.png new file mode 100644 index 0000000..dbb2428 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_2.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_side.png new file mode 100644 index 0000000..8d73676 Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_left_side.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_1.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_1.png new file mode 100644 index 0000000..d3e378a Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_1.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_2.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_2.png new file mode 100644 index 0000000..d1b150e Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_2.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_side.png new file mode 100644 index 0000000..cb6a9bc Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_right_side.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_middle_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_middle_side.png new file mode 100644 index 0000000..469addf Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_middle_side.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_top.png b/infrastructure/textures/infrastructure_automatic_warning_device_top.png new file mode 100644 index 0000000..a9fb96f Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_top.png differ diff --git a/infrastructure/textures/infrastructure_automatic_warning_device_top_side.png b/infrastructure/textures/infrastructure_automatic_warning_device_top_side.png new file mode 100644 index 0000000..49412ec Binary files /dev/null and b/infrastructure/textures/infrastructure_automatic_warning_device_top_side.png differ 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 new file mode 100644 index 0000000..e283612 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_arm_h_bottom_front_back.png differ 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 new file mode 100644 index 0000000..0e6e50c Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_bright.png differ 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 new file mode 100644 index 0000000..e88de7d Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_arm_h_left_right_dark.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_h_top.png b/infrastructure/textures/infrastructure_boom_barrier_arm_h_top.png new file mode 100644 index 0000000..5f997a4 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_arm_h_top.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_v_left.png b/infrastructure/textures/infrastructure_boom_barrier_arm_v_left.png new file mode 100644 index 0000000..87b3bbb Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_arm_v_left.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_arm_v_right.png b/infrastructure/textures/infrastructure_boom_barrier_arm_v_right.png new file mode 100644 index 0000000..c777597 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_arm_v_right.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_bottom.png b/infrastructure/textures/infrastructure_boom_barrier_h_bottom.png new file mode 100644 index 0000000..c7fbfea Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_h_bottom.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_front_back.png b/infrastructure/textures/infrastructure_boom_barrier_h_front_back.png new file mode 100644 index 0000000..5d019fc Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_h_front_back.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_left.png b/infrastructure/textures/infrastructure_boom_barrier_h_left.png new file mode 100644 index 0000000..08348fb Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_h_left.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_right.png b/infrastructure/textures/infrastructure_boom_barrier_h_right.png new file mode 100644 index 0000000..5399be8 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_h_right.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_h_top.png b/infrastructure/textures/infrastructure_boom_barrier_h_top.png new file mode 100644 index 0000000..7796232 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_h_top.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_bottom.png b/infrastructure/textures/infrastructure_boom_barrier_v_bottom.png new file mode 100644 index 0000000..9ae9ed3 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_v_bottom.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_front_back.png b/infrastructure/textures/infrastructure_boom_barrier_v_front_back.png new file mode 100644 index 0000000..d7b7a3b Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_v_front_back.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_left.png b/infrastructure/textures/infrastructure_boom_barrier_v_left.png new file mode 100644 index 0000000..4ddd606 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_v_left.png differ diff --git a/infrastructure/textures/infrastructure_boom_barrier_v_right.png b/infrastructure/textures/infrastructure_boom_barrier_v_right.png new file mode 100644 index 0000000..91c5600 Binary files /dev/null and b/infrastructure/textures/infrastructure_boom_barrier_v_right.png differ diff --git a/infrastructure/textures/infrastructure_cable_barrier_terminal_back.png b/infrastructure/textures/infrastructure_cable_barrier_terminal_back.png new file mode 100644 index 0000000..5f90cf2 Binary files /dev/null and b/infrastructure/textures/infrastructure_cable_barrier_terminal_back.png differ diff --git a/infrastructure/textures/infrastructure_cable_barrier_terminal_front.png b/infrastructure/textures/infrastructure_cable_barrier_terminal_front.png new file mode 100644 index 0000000..607f6d9 Binary files /dev/null and b/infrastructure/textures/infrastructure_cable_barrier_terminal_front.png differ diff --git a/infrastructure/textures/infrastructure_concrete.png b/infrastructure/textures/infrastructure_concrete.png new file mode 100644 index 0000000..3be0c52 Binary files /dev/null and b/infrastructure/textures/infrastructure_concrete.png differ diff --git a/infrastructure/textures/infrastructure_corrugated_guide_rail_back.png b/infrastructure/textures/infrastructure_corrugated_guide_rail_back.png new file mode 100644 index 0000000..d7aaf99 Binary files /dev/null and b/infrastructure/textures/infrastructure_corrugated_guide_rail_back.png differ diff --git a/infrastructure/textures/infrastructure_corrugated_guide_rail_front.png b/infrastructure/textures/infrastructure_corrugated_guide_rail_front.png new file mode 100644 index 0000000..c3a7b37 Binary files /dev/null and b/infrastructure/textures/infrastructure_corrugated_guide_rail_front.png differ diff --git a/infrastructure/textures/infrastructure_corrugated_guide_rail_side.png b/infrastructure/textures/infrastructure_corrugated_guide_rail_side.png new file mode 100644 index 0000000..739e6de Binary files /dev/null and b/infrastructure/textures/infrastructure_corrugated_guide_rail_side.png differ diff --git a/infrastructure/textures/infrastructure_corrugated_sheet.png b/infrastructure/textures/infrastructure_corrugated_sheet.png new file mode 100644 index 0000000..9b6bef4 Binary files /dev/null and b/infrastructure/textures/infrastructure_corrugated_sheet.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_lighting_back.png b/infrastructure/textures/infrastructure_crosswalk_lighting_back.png new file mode 100644 index 0000000..fd73443 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_lighting_back.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_lighting_bottom.png b/infrastructure/textures/infrastructure_crosswalk_lighting_bottom.png new file mode 100644 index 0000000..f6f5db9 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_lighting_bottom.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_lighting_front.png b/infrastructure/textures/infrastructure_crosswalk_lighting_front.png new file mode 100644 index 0000000..bf6bf01 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_lighting_front.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign.png new file mode 100644 index 0000000..b20ca91 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_safety_sign.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_front_back.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_front_back.png new file mode 100644 index 0000000..2ff6832 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_front_back.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_side.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_side.png new file mode 100644 index 0000000..9e7c58c Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_safety_sign_bottom_side.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_top.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top.png new file mode 100644 index 0000000..6ba1c7b Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_front_back.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_front_back.png new file mode 100644 index 0000000..f115876 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_front_back.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_side.png b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_side.png new file mode 100644 index 0000000..9db3518 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_safety_sign_top_side.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_warning_light_back.png b/infrastructure/textures/infrastructure_crosswalk_warning_light_back.png new file mode 100644 index 0000000..51d024b Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_warning_light_back.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_warning_light_front_bright.png b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_bright.png new file mode 100644 index 0000000..3525a3c Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_bright.png differ diff --git a/infrastructure/textures/infrastructure_crosswalk_warning_light_front_dark.png b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_dark.png new file mode 100644 index 0000000..357bda3 Binary files /dev/null and b/infrastructure/textures/infrastructure_crosswalk_warning_light_front_dark.png differ diff --git a/infrastructure/textures/infrastructure_crowd_control_barricade_back.png b/infrastructure/textures/infrastructure_crowd_control_barricade_back.png new file mode 100644 index 0000000..0f5c6ea Binary files /dev/null and b/infrastructure/textures/infrastructure_crowd_control_barricade_back.png differ diff --git a/infrastructure/textures/infrastructure_crowd_control_barricade_front.png b/infrastructure/textures/infrastructure_crowd_control_barricade_front.png new file mode 100644 index 0000000..a16c363 Binary files /dev/null and b/infrastructure/textures/infrastructure_crowd_control_barricade_front.png differ diff --git a/infrastructure/textures/infrastructure_curve_chevron_left_bright.png b/infrastructure/textures/infrastructure_curve_chevron_left_bright.png new file mode 100644 index 0000000..199751f Binary files /dev/null and b/infrastructure/textures/infrastructure_curve_chevron_left_bright.png differ diff --git a/infrastructure/textures/infrastructure_curve_chevron_left_dark.png b/infrastructure/textures/infrastructure_curve_chevron_left_dark.png new file mode 100644 index 0000000..f7d68f5 Binary files /dev/null and b/infrastructure/textures/infrastructure_curve_chevron_left_dark.png differ diff --git a/infrastructure/textures/infrastructure_curve_chevron_right_bright.png b/infrastructure/textures/infrastructure_curve_chevron_right_bright.png new file mode 100644 index 0000000..d1bae78 Binary files /dev/null and b/infrastructure/textures/infrastructure_curve_chevron_right_bright.png differ diff --git a/infrastructure/textures/infrastructure_curve_chevron_right_dark.png b/infrastructure/textures/infrastructure_curve_chevron_right_dark.png new file mode 100644 index 0000000..b8f442f Binary files /dev/null and b/infrastructure/textures/infrastructure_curve_chevron_right_dark.png differ diff --git a/infrastructure/textures/infrastructure_delineator_retroreflector_red.png b/infrastructure/textures/infrastructure_delineator_retroreflector_red.png new file mode 100644 index 0000000..b2d4336 Binary files /dev/null and b/infrastructure/textures/infrastructure_delineator_retroreflector_red.png differ diff --git a/infrastructure/textures/infrastructure_delineator_retroreflector_yellow.png b/infrastructure/textures/infrastructure_delineator_retroreflector_yellow.png new file mode 100644 index 0000000..b6fe651 Binary files /dev/null and b/infrastructure/textures/infrastructure_delineator_retroreflector_yellow.png differ diff --git a/infrastructure/textures/infrastructure_delineator_wrapper_left.png b/infrastructure/textures/infrastructure_delineator_wrapper_left.png new file mode 100644 index 0000000..a4d0edd Binary files /dev/null and b/infrastructure/textures/infrastructure_delineator_wrapper_left.png differ diff --git a/infrastructure/textures/infrastructure_delineator_wrapper_right.png b/infrastructure/textures/infrastructure_delineator_wrapper_right.png new file mode 100644 index 0000000..2743183 Binary files /dev/null and b/infrastructure/textures/infrastructure_delineator_wrapper_right.png differ diff --git a/infrastructure/textures/infrastructure_double_yellow_line.png b/infrastructure/textures/infrastructure_double_yellow_line.png new file mode 100644 index 0000000..3f21c45 Binary files /dev/null and b/infrastructure/textures/infrastructure_double_yellow_line.png differ diff --git a/infrastructure/textures/infrastructure_drainage_channel_grating.png b/infrastructure/textures/infrastructure_drainage_channel_grating.png new file mode 100644 index 0000000..dc720cd Binary files /dev/null and b/infrastructure/textures/infrastructure_drainage_channel_grating.png differ diff --git a/infrastructure/textures/infrastructure_emergency_phone_bottom.png b/infrastructure/textures/infrastructure_emergency_phone_bottom.png new file mode 100644 index 0000000..8106816 Binary files /dev/null and b/infrastructure/textures/infrastructure_emergency_phone_bottom.png differ diff --git a/infrastructure/textures/infrastructure_emergency_phone_front.png b/infrastructure/textures/infrastructure_emergency_phone_front.png new file mode 100644 index 0000000..1153717 Binary files /dev/null and b/infrastructure/textures/infrastructure_emergency_phone_front.png differ diff --git a/infrastructure/textures/infrastructure_emergency_phone_side.png b/infrastructure/textures/infrastructure_emergency_phone_side.png new file mode 100644 index 0000000..930437c Binary files /dev/null and b/infrastructure/textures/infrastructure_emergency_phone_side.png differ diff --git a/infrastructure/textures/infrastructure_emergency_phone_top.png b/infrastructure/textures/infrastructure_emergency_phone_top.png new file mode 100644 index 0000000..2ff4038 Binary files /dev/null and b/infrastructure/textures/infrastructure_emergency_phone_top.png differ diff --git a/infrastructure/textures/infrastructure_energy_absorbing_terminal_back.png b/infrastructure/textures/infrastructure_energy_absorbing_terminal_back.png new file mode 100644 index 0000000..6264bd5 Binary files /dev/null and b/infrastructure/textures/infrastructure_energy_absorbing_terminal_back.png differ diff --git a/infrastructure/textures/infrastructure_energy_absorbing_terminal_front.png b/infrastructure/textures/infrastructure_energy_absorbing_terminal_front.png new file mode 100644 index 0000000..cd20a40 Binary files /dev/null and b/infrastructure/textures/infrastructure_energy_absorbing_terminal_front.png differ diff --git a/infrastructure/textures/infrastructure_fitch_barrel_bottom.png b/infrastructure/textures/infrastructure_fitch_barrel_bottom.png new file mode 100644 index 0000000..7664b97 Binary files /dev/null and b/infrastructure/textures/infrastructure_fitch_barrel_bottom.png differ diff --git a/infrastructure/textures/infrastructure_fitch_barrel_side.png b/infrastructure/textures/infrastructure_fitch_barrel_side.png new file mode 100644 index 0000000..7471830 Binary files /dev/null and b/infrastructure/textures/infrastructure_fitch_barrel_side.png differ diff --git a/infrastructure/textures/infrastructure_fitch_barrel_top.png b/infrastructure/textures/infrastructure_fitch_barrel_top.png new file mode 100644 index 0000000..223e119 Binary files /dev/null and b/infrastructure/textures/infrastructure_fitch_barrel_top.png differ diff --git a/infrastructure/textures/infrastructure_galvanized_steel.png b/infrastructure/textures/infrastructure_galvanized_steel.png new file mode 100644 index 0000000..841e68b Binary files /dev/null and b/infrastructure/textures/infrastructure_galvanized_steel.png differ diff --git a/infrastructure/textures/infrastructure_grid_paver_bottom.png b/infrastructure/textures/infrastructure_grid_paver_bottom.png new file mode 100644 index 0000000..de051cf Binary files /dev/null and b/infrastructure/textures/infrastructure_grid_paver_bottom.png differ diff --git a/infrastructure/textures/infrastructure_grid_paver_grass.png b/infrastructure/textures/infrastructure_grid_paver_grass.png new file mode 100644 index 0000000..87bae79 Binary files /dev/null and b/infrastructure/textures/infrastructure_grid_paver_grass.png differ diff --git a/infrastructure/textures/infrastructure_grid_paver_top.png b/infrastructure/textures/infrastructure_grid_paver_top.png new file mode 100644 index 0000000..ea079c3 Binary files /dev/null and b/infrastructure/textures/infrastructure_grid_paver_top.png differ diff --git a/infrastructure/textures/infrastructure_lane_control_lights_1.png b/infrastructure/textures/infrastructure_lane_control_lights_1.png new file mode 100644 index 0000000..e2c5d16 Binary files /dev/null and b/infrastructure/textures/infrastructure_lane_control_lights_1.png differ diff --git a/infrastructure/textures/infrastructure_lane_control_lights_2.png b/infrastructure/textures/infrastructure_lane_control_lights_2.png new file mode 100644 index 0000000..913572a Binary files /dev/null and b/infrastructure/textures/infrastructure_lane_control_lights_2.png differ diff --git a/infrastructure/textures/infrastructure_lane_control_lights_3.png b/infrastructure/textures/infrastructure_lane_control_lights_3.png new file mode 100644 index 0000000..ffe4e01 Binary files /dev/null and b/infrastructure/textures/infrastructure_lane_control_lights_3.png differ diff --git a/infrastructure/textures/infrastructure_lane_control_lights_4.png b/infrastructure/textures/infrastructure_lane_control_lights_4.png new file mode 100644 index 0000000..6b24780 Binary files /dev/null and b/infrastructure/textures/infrastructure_lane_control_lights_4.png differ diff --git a/infrastructure/textures/infrastructure_lane_control_lights_5.png b/infrastructure/textures/infrastructure_lane_control_lights_5.png new file mode 100644 index 0000000..1a8afcb Binary files /dev/null and b/infrastructure/textures/infrastructure_lane_control_lights_5.png differ diff --git a/infrastructure/textures/infrastructure_manhole_cover_side.png b/infrastructure/textures/infrastructure_manhole_cover_side.png new file mode 100644 index 0000000..11bf08e Binary files /dev/null and b/infrastructure/textures/infrastructure_manhole_cover_side.png differ diff --git a/infrastructure/textures/infrastructure_manhole_cover_top_bottom.png b/infrastructure/textures/infrastructure_manhole_cover_top_bottom.png new file mode 100644 index 0000000..4338a82 Binary files /dev/null and b/infrastructure/textures/infrastructure_manhole_cover_top_bottom.png differ diff --git a/infrastructure/textures/infrastructure_marker_bottom_side.png b/infrastructure/textures/infrastructure_marker_bottom_side.png new file mode 100644 index 0000000..6cf3e60 Binary files /dev/null and b/infrastructure/textures/infrastructure_marker_bottom_side.png differ diff --git a/infrastructure/textures/infrastructure_marker_side_red.png b/infrastructure/textures/infrastructure_marker_side_red.png new file mode 100644 index 0000000..5a5ae22 Binary files /dev/null and b/infrastructure/textures/infrastructure_marker_side_red.png differ diff --git a/infrastructure/textures/infrastructure_marker_side_yellow.png b/infrastructure/textures/infrastructure_marker_side_yellow.png new file mode 100644 index 0000000..a3a439d Binary files /dev/null and b/infrastructure/textures/infrastructure_marker_side_yellow.png differ diff --git a/infrastructure/textures/infrastructure_marker_top_red_yellow.png b/infrastructure/textures/infrastructure_marker_top_red_yellow.png new file mode 100644 index 0000000..afebd88 Binary files /dev/null and b/infrastructure/textures/infrastructure_marker_top_red_yellow.png differ diff --git a/infrastructure/textures/infrastructure_marker_top_yellow_yellow.png b/infrastructure/textures/infrastructure_marker_top_yellow_yellow.png new file mode 100644 index 0000000..de9d4d6 Binary files /dev/null and b/infrastructure/textures/infrastructure_marker_top_yellow_yellow.png differ diff --git a/infrastructure/textures/infrastructure_noise_barrier.png b/infrastructure/textures/infrastructure_noise_barrier.png new file mode 100644 index 0000000..a52a243 Binary files /dev/null and b/infrastructure/textures/infrastructure_noise_barrier.png differ diff --git a/infrastructure/textures/infrastructure_razor_wire.png b/infrastructure/textures/infrastructure_razor_wire.png new file mode 100644 index 0000000..150a98f Binary files /dev/null and b/infrastructure/textures/infrastructure_razor_wire.png differ diff --git a/infrastructure/textures/infrastructure_riffled_sheet.png b/infrastructure/textures/infrastructure_riffled_sheet.png new file mode 100644 index 0000000..0f83bce Binary files /dev/null and b/infrastructure/textures/infrastructure_riffled_sheet.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_crosswalk_back.png b/infrastructure/textures/infrastructure_road_sign_crosswalk_back.png new file mode 100644 index 0000000..590e65d Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_crosswalk_back.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_crosswalk_front.png b/infrastructure/textures/infrastructure_road_sign_crosswalk_front.png new file mode 100644 index 0000000..78b5dce Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_crosswalk_front.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_retroreflective_surface.png b/infrastructure/textures/infrastructure_road_sign_retroreflective_surface.png new file mode 100644 index 0000000..f9c95c1 Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_retroreflective_surface.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_right_of_way_back.png b/infrastructure/textures/infrastructure_road_sign_right_of_way_back.png new file mode 100644 index 0000000..a98467f Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_right_of_way_back.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_right_of_way_front.png b/infrastructure/textures/infrastructure_road_sign_right_of_way_front.png new file mode 100644 index 0000000..0f52f69 Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_right_of_way_front.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_stop_back.png b/infrastructure/textures/infrastructure_road_sign_stop_back.png new file mode 100644 index 0000000..d87b178 Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_stop_back.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_stop_front.png b/infrastructure/textures/infrastructure_road_sign_stop_front.png new file mode 100644 index 0000000..42a099f Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_stop_front.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_yield_back.png b/infrastructure/textures/infrastructure_road_sign_yield_back.png new file mode 100644 index 0000000..d934905 Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_yield_back.png differ diff --git a/infrastructure/textures/infrastructure_road_sign_yield_front.png b/infrastructure/textures/infrastructure_road_sign_yield_front.png new file mode 100644 index 0000000..caad0cc Binary files /dev/null and b/infrastructure/textures/infrastructure_road_sign_yield_front.png differ diff --git a/infrastructure/textures/infrastructure_single_yellow_line.png b/infrastructure/textures/infrastructure_single_yellow_line.png new file mode 100644 index 0000000..a9ca74b Binary files /dev/null and b/infrastructure/textures/infrastructure_single_yellow_line.png differ diff --git a/infrastructure/textures/infrastructure_single_yellow_line_corner.png b/infrastructure/textures/infrastructure_single_yellow_line_corner.png new file mode 100644 index 0000000..a41d06a Binary files /dev/null and b/infrastructure/textures/infrastructure_single_yellow_line_corner.png differ diff --git a/infrastructure/textures/infrastructure_solid_double_yellow_line_corner.png b/infrastructure/textures/infrastructure_solid_double_yellow_line_corner.png new file mode 100644 index 0000000..09a3719 Binary files /dev/null and b/infrastructure/textures/infrastructure_solid_double_yellow_line_corner.png differ diff --git a/infrastructure/textures/infrastructure_solid_yellow_line_one_side.png b/infrastructure/textures/infrastructure_solid_yellow_line_one_side.png new file mode 100644 index 0000000..0cff2e9 Binary files /dev/null and b/infrastructure/textures/infrastructure_solid_yellow_line_one_side.png differ diff --git a/infrastructure/textures/infrastructure_traffic_cone_bottom.png b/infrastructure/textures/infrastructure_traffic_cone_bottom.png new file mode 100644 index 0000000..c9a5137 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_cone_bottom.png differ diff --git a/infrastructure/textures/infrastructure_traffic_cone_side.png b/infrastructure/textures/infrastructure_traffic_cone_side.png new file mode 100644 index 0000000..134837f Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_cone_side.png differ diff --git a/infrastructure/textures/infrastructure_traffic_cone_top.png b/infrastructure/textures/infrastructure_traffic_cone_top.png new file mode 100644 index 0000000..2dca4ae Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_cone_top.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians.png new file mode 100644 index 0000000..9cd1470 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_back.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_back.png new file mode 100644 index 0000000..357011d Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_back.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_1.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_1.png new file mode 100644 index 0000000..a689dc4 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_1.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_2.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_2.png new file mode 100644 index 0000000..a689dc4 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_2.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_3.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_3.png new file mode 100644 index 0000000..7729d96 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_3.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_4.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_4.png new file mode 100644 index 0000000..7729d96 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_bottom_front_4.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_back.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_back.png new file mode 100644 index 0000000..708d59b Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_back.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_1.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_1.png new file mode 100644 index 0000000..737c426 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_1.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_2.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_2.png new file mode 100644 index 0000000..737c426 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_2.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_3.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_3.png new file mode 100644 index 0000000..8d22856 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_3.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_4.png b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_4.png new file mode 100644 index 0000000..8d22856 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_pedestrians_top_front_4.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_side.png b/infrastructure/textures/infrastructure_traffic_lights_side.png new file mode 100644 index 0000000..01076e3 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_side.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles.png new file mode 100644 index 0000000..393422a Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_1.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_1.png new file mode 100644 index 0000000..4cbb75b Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_1.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_2.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_2.png new file mode 100644 index 0000000..c81f500 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_2.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_3.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_3.png new file mode 100644 index 0000000..f55108c Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_3.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_4.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_4.png new file mode 100644 index 0000000..c81f500 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_bottom_4.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_1.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_1.png new file mode 100644 index 0000000..116ae46 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_1.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_2.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_2.png new file mode 100644 index 0000000..4a57e89 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_2.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_3.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_3.png new file mode 100644 index 0000000..9dab2ea Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_3.png differ diff --git a/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_4.png b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_4.png new file mode 100644 index 0000000..ddc2364 Binary files /dev/null and b/infrastructure/textures/infrastructure_traffic_lights_vehicles_top_4.png differ diff --git a/infrastructure/textures/infrastructure_truss.png b/infrastructure/textures/infrastructure_truss.png new file mode 100644 index 0000000..ba628f1 Binary files /dev/null and b/infrastructure/textures/infrastructure_truss.png differ diff --git a/infrastructure/textures/infrastructure_warning_light_back.png b/infrastructure/textures/infrastructure_warning_light_back.png new file mode 100644 index 0000000..0301aee Binary files /dev/null and b/infrastructure/textures/infrastructure_warning_light_back.png differ diff --git a/infrastructure/textures/infrastructure_warning_light_bottom.png b/infrastructure/textures/infrastructure_warning_light_bottom.png new file mode 100644 index 0000000..e7090a0 Binary files /dev/null and b/infrastructure/textures/infrastructure_warning_light_bottom.png differ diff --git a/infrastructure/textures/infrastructure_warning_light_front_bright.png b/infrastructure/textures/infrastructure_warning_light_front_bright.png new file mode 100644 index 0000000..8d9c937 Binary files /dev/null and b/infrastructure/textures/infrastructure_warning_light_front_bright.png differ diff --git a/infrastructure/textures/infrastructure_warning_light_front_dark.png b/infrastructure/textures/infrastructure_warning_light_front_dark.png new file mode 100644 index 0000000..3496420 Binary files /dev/null and b/infrastructure/textures/infrastructure_warning_light_front_dark.png differ diff --git a/infrastructure/textures/infrastructure_warning_light_left.png b/infrastructure/textures/infrastructure_warning_light_left.png new file mode 100644 index 0000000..e519af4 Binary files /dev/null and b/infrastructure/textures/infrastructure_warning_light_left.png differ diff --git a/infrastructure/textures/infrastructure_warning_light_right.png b/infrastructure/textures/infrastructure_warning_light_right.png new file mode 100644 index 0000000..4bd42dc Binary files /dev/null and b/infrastructure/textures/infrastructure_warning_light_right.png differ diff --git a/infrastructure/textures/infrastructure_warning_light_top.png b/infrastructure/textures/infrastructure_warning_light_top.png new file mode 100644 index 0000000..898ed0f Binary files /dev/null and b/infrastructure/textures/infrastructure_warning_light_top.png differ diff --git a/infrastructure/textures/infrastructure_wire_netting.png b/infrastructure/textures/infrastructure_wire_netting.png new file mode 100644 index 0000000..a685e97 Binary files /dev/null and b/infrastructure/textures/infrastructure_wire_netting.png differ diff --git a/infrastructure/textures/infrastructure_wire_rope_safety_barrier_back.png b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_back.png new file mode 100644 index 0000000..31418f3 Binary files /dev/null and b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_back.png differ diff --git a/infrastructure/textures/infrastructure_wire_rope_safety_barrier_front.png b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_front.png new file mode 100644 index 0000000..3e46bd1 Binary files /dev/null and b/infrastructure/textures/infrastructure_wire_rope_safety_barrier_front.png differ -- cgit v1.2.3