Worked on debugging and metadata stuff

This commit is contained in:
2024-09-18 23:00:52 +03:00
parent a9190fcc09
commit 43c312e371
13 changed files with 431 additions and 110 deletions

View File

@@ -51,7 +51,9 @@ var ignore_events = [
"mouse_drag_on", "mouse_drag_on",
"mouse_drag_off", "mouse_drag_off",
"line_cursor_motion", "line_cursor_motion",
"button:create_building" "button:create_building",
"lines_select_line",
"lines_changed_line"
] ]
func editor_event(evname: String, args: Array): func editor_event(evname: String, args: Array):
print(evname, args) print(evname, args)

View File

@@ -56,18 +56,18 @@ script = ExtResource( 1 )
anchor_left = 1.0 anchor_left = 1.0
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
margin_left = -232.0 margin_left = -248.0
[node name="NavPanel" type="NavPanel" parent="VBoxContainer"] [node name="NavPanel" type="NavPanel" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_right = 232.0 margin_right = 248.0
margin_bottom = 48.0 margin_bottom = 48.0
rect_min_size = Vector2( 48, 48 ) rect_min_size = Vector2( 48, 48 )
focus_mode = 2 focus_mode = 2
[node name="ColorRect" type="ColorRect" parent="VBoxContainer"] [node name="ColorRect" type="ColorRect" parent="VBoxContainer"]
margin_top = 52.0 margin_top = 52.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 82.0 margin_bottom = 82.0
rect_min_size = Vector2( 160, 30 ) rect_min_size = Vector2( 160, 30 )
size_flags_horizontal = 3 size_flags_horizontal = 3
@@ -88,58 +88,58 @@ valign = 1
[node name="select_buildings" type="Button" parent="VBoxContainer"] [node name="select_buildings" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 86.0 margin_top = 86.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 106.0 margin_bottom = 106.0
text = "Buildings Mode" text = "Buildings Mode"
[node name="select_navigation" type="Button" parent="VBoxContainer"] [node name="select_navigation" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 110.0 margin_top = 110.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 130.0 margin_bottom = 130.0
text = "Navigation Mode" text = "Navigation Mode"
[node name="select_poi" type="Button" parent="VBoxContainer"] [node name="select_poi" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 134.0 margin_top = 134.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 154.0 margin_bottom = 154.0
text = "POI Mode" text = "POI Mode"
[node name="select_road_lines" type="Button" parent="VBoxContainer"] [node name="select_road_lines" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 158.0 margin_top = 158.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 178.0 margin_bottom = 178.0
text = "Road Lines Mode" text = "Road Lines Mode"
[node name="select_npc" type="Button" parent="VBoxContainer"] [node name="select_npc" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 182.0 margin_top = 182.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 202.0 margin_bottom = 202.0
text = "NPC Mode" text = "NPC Mode"
[node name="v_buildings" type="VBoxContainer" parent="VBoxContainer"] [node name="v_buildings" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 206.0 margin_top = 206.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 374.0 margin_bottom = 374.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_buildings"] [node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_buildings"]
margin_right = 232.0 margin_right = 248.0
margin_bottom = 4.0 margin_bottom = 4.0
[node name="Label" type="Label" parent="VBoxContainer/v_buildings"] [node name="Label" type="Label" parent="VBoxContainer/v_buildings"]
margin_top = 8.0 margin_top = 8.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 22.0 margin_bottom = 22.0
text = "Buildings mode" text = "Buildings mode"
[node name="buildings_edit_mode" type="OptionButton" parent="VBoxContainer/v_buildings"] [node name="buildings_edit_mode" type="OptionButton" parent="VBoxContainer/v_buildings"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 26.0 margin_top = 26.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 46.0 margin_bottom = 46.0
text = "Select" text = "Select"
items = [ "Select", null, false, 0, null, "Move", null, false, 1, null, "Rotate", null, false, 2, null, "Create", null, false, 3, null ] items = [ "Select", null, false, 0, null, "Move", null, false, 1, null, "Rotate", null, false, 2, null, "Create", null, false, 3, null ]
@@ -147,102 +147,102 @@ selected = 0
[node name="Label2" type="Label" parent="VBoxContainer/v_buildings"] [node name="Label2" type="Label" parent="VBoxContainer/v_buildings"]
margin_top = 50.0 margin_top = 50.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 64.0 margin_bottom = 64.0
text = "Building type" text = "Building type"
[node name="building_type" type="OptionButton" parent="VBoxContainer/v_buildings"] [node name="building_type" type="OptionButton" parent="VBoxContainer/v_buildings"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 68.0 margin_top = 68.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 88.0 margin_bottom = 88.0
text = "Building Type" text = "Building Type"
[node name="HSeparator2" type="HSeparator" parent="VBoxContainer/v_buildings"] [node name="HSeparator2" type="HSeparator" parent="VBoxContainer/v_buildings"]
margin_top = 92.0 margin_top = 92.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 96.0 margin_bottom = 96.0
[node name="buildings_delete_building" type="Button" parent="VBoxContainer/v_buildings"] [node name="buildings_delete_building" type="Button" parent="VBoxContainer/v_buildings"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 100.0 margin_top = 100.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 120.0 margin_bottom = 120.0
text = "Delete building" text = "Delete building"
[node name="buildings_create_building" type="Button" parent="VBoxContainer/v_buildings"] [node name="buildings_create_building" type="Button" parent="VBoxContainer/v_buildings"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 124.0 margin_top = 124.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 144.0 margin_bottom = 144.0
text = "Create building" text = "Create building"
[node name="buildings_save" type="Button" parent="VBoxContainer/v_buildings"] [node name="buildings_save" type="Button" parent="VBoxContainer/v_buildings"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 148.0 margin_top = 148.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 168.0 margin_bottom = 168.0
text = "Save Buildings" text = "Save Buildings"
[node name="v_navigation" type="VBoxContainer" parent="VBoxContainer"] [node name="v_navigation" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 378.0 margin_top = 378.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 400.0 margin_bottom = 400.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_navigation"] [node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_navigation"]
margin_right = 232.0 margin_right = 248.0
margin_bottom = 4.0 margin_bottom = 4.0
[node name="Label" type="Label" parent="VBoxContainer/v_navigation"] [node name="Label" type="Label" parent="VBoxContainer/v_navigation"]
margin_top = 8.0 margin_top = 8.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 22.0 margin_bottom = 22.0
text = "Navigation mode" text = "Navigation mode"
[node name="v_poi" type="VBoxContainer" parent="VBoxContainer"] [node name="v_poi" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 404.0 margin_top = 404.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 426.0 margin_bottom = 426.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_poi"] [node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_poi"]
margin_right = 232.0 margin_right = 248.0
margin_bottom = 4.0 margin_bottom = 4.0
[node name="Label" type="Label" parent="VBoxContainer/v_poi"] [node name="Label" type="Label" parent="VBoxContainer/v_poi"]
margin_top = 8.0 margin_top = 8.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 22.0 margin_bottom = 22.0
text = "POI mode" text = "POI mode"
[node name="v_road_lines" type="VBoxContainer" parent="VBoxContainer"] [node name="v_road_lines" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 430.0 margin_top = 430.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 1038.0 margin_bottom = 1080.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_road_lines"] [node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_road_lines"]
margin_right = 232.0 margin_right = 248.0
margin_bottom = 4.0 margin_bottom = 4.0
[node name="road_lines_base" type="PanelContainer" parent="VBoxContainer/v_road_lines"] [node name="road_lines_base" type="PanelContainer" parent="VBoxContainer/v_road_lines"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 8.0 margin_top = 8.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 316.0 margin_bottom = 316.0
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base"] [node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base"]
margin_left = 7.0 margin_left = 7.0
margin_top = 7.0 margin_top = 7.0
margin_right = 225.0 margin_right = 241.0
margin_bottom = 301.0 margin_bottom = 301.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
[node name="road_lines_menu_block" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="road_lines_menu_block" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_right = 218.0 margin_right = 234.0
margin_bottom = 20.0 margin_bottom = 20.0
[node name="road_lines_file_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"] [node name="road_lines_file_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"]
@@ -252,6 +252,7 @@ margin_bottom = 20.0
focus_mode = 2 focus_mode = 2
text = "File" text = "File"
items = [ "Save Lines", null, 0, false, false, 101, 0, null, "", false ] items = [ "Save Lines", null, 0, false, false, 101, 0, null, "", false ]
switch_on_hover = true
[node name="road_lines_edit_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"] [node name="road_lines_edit_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -261,6 +262,7 @@ margin_bottom = 20.0
focus_mode = 2 focus_mode = 2
text = "Edit" text = "Edit"
items = [ "Undo", null, 0, false, false, 201, 0, null, "", false ] items = [ "Undo", null, 0, false, false, 201, 0, null, "", false ]
switch_on_hover = true
[node name="road_lines_point_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"] [node name="road_lines_point_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -269,6 +271,7 @@ margin_right = 124.0
margin_bottom = 20.0 margin_bottom = 20.0
text = "Point" text = "Point"
items = [ "", null, 0, false, false, 0, 0, null, "", true, "Create", null, 0, false, false, 11, 0, null, "", false, "Remove", null, 0, false, false, 12, 0, null, "", false, "", null, 0, false, false, 3, 0, null, "", true, "Point To Cursor", null, 0, false, false, 51, 0, null, "", false, "Cursor To Point", null, 0, false, false, 52, 0, null, "", false, "Item 6", null, 0, false, false, 6, 0, null, "", false, "Item 7", null, 0, false, false, 7, 0, null, "", false ] items = [ "", null, 0, false, false, 0, 0, null, "", true, "Create", null, 0, false, false, 11, 0, null, "", false, "Remove", null, 0, false, false, 12, 0, null, "", false, "", null, 0, false, false, 3, 0, null, "", true, "Point To Cursor", null, 0, false, false, 51, 0, null, "", false, "Cursor To Point", null, 0, false, false, 52, 0, null, "", false, "Item 6", null, 0, false, false, 6, 0, null, "", false, "Item 7", null, 0, false, false, 7, 0, null, "", false ]
switch_on_hover = true
[node name="road_lines_line_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"] [node name="road_lines_line_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"]
unique_name_in_owner = true unique_name_in_owner = true
@@ -278,21 +281,31 @@ margin_bottom = 20.0
focus_mode = 2 focus_mode = 2
text = "Line" text = "Line"
items = [ "Create", null, 0, false, false, 21, 0, null, "", false, "Delete", null, 0, false, false, 22, 0, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Remove Generated", null, 0, false, false, 30, 0, null, "", false, "Place Generated Objects", null, 0, false, false, 31, 0, null, "", false, "Edit Line Metadata", null, 0, false, false, 23, 0, null, "", false, "Rebuild roads", null, 0, false, false, 32, 0, null, "", false, "Remove road meshes", null, 0, false, false, 33, 0, null, "", false ] items = [ "Create", null, 0, false, false, 21, 0, null, "", false, "Delete", null, 0, false, false, 22, 0, null, "", false, "", null, 0, false, false, -1, 0, null, "", true, "Remove Generated", null, 0, false, false, 30, 0, null, "", false, "Place Generated Objects", null, 0, false, false, 31, 0, null, "", false, "Edit Line Metadata", null, 0, false, false, 23, 0, null, "", false, "Rebuild roads", null, 0, false, false, 32, 0, null, "", false, "Remove road meshes", null, 0, false, false, 33, 0, null, "", false ]
switch_on_hover = true
[node name="road_lines_options_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"]
unique_name_in_owner = true
margin_left = 171.0
margin_right = 234.0
margin_bottom = 20.0
text = "Options"
items = [ "Update roads", null, 1, false, false, 201, 0, null, "", false, "", null, 0, false, false, 1, 0, null, "", true, "Debug Road Nodes", null, 1, false, false, 210, 0, null, "", false, "Debug Road Edges", null, 1, false, false, 211, 0, null, "", false, "Debug Road Wedges", null, 1, false, false, 212, 0, null, "", false ]
switch_on_hover = true
[node name="HSeparator3" type="HSeparator" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="HSeparator3" type="HSeparator" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
margin_top = 24.0 margin_top = 24.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 28.0 margin_bottom = 28.0
[node name="Label" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="Label" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
margin_top = 32.0 margin_top = 32.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 46.0 margin_bottom = 46.0
text = "Road Lines mode" text = "Road Lines mode"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
margin_top = 50.0 margin_top = 50.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 74.0 margin_bottom = 74.0
[node name="Label" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/HBoxContainer"] [node name="Label" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/HBoxContainer"]
@@ -304,14 +317,14 @@ text = "Filter: "
[node name="road_lines_filter" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/HBoxContainer"] [node name="road_lines_filter" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_left = 45.0 margin_left = 45.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 24.0 margin_bottom = 24.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="lines_list" type="ItemList" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="lines_list" type="ItemList" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 78.0 margin_top = 78.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 158.0 margin_bottom = 158.0
rect_min_size = Vector2( 0, 80 ) rect_min_size = Vector2( 0, 80 )
size_flags_horizontal = 3 size_flags_horizontal = 3
@@ -319,175 +332,191 @@ size_flags_horizontal = 3
[node name="line_index" type="SpinBox" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="line_index" type="SpinBox" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 162.0 margin_top = 162.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 186.0 margin_bottom = 186.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
margin_top = 190.0 margin_top = 190.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 194.0 margin_bottom = 194.0
[node name="Label2" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="Label2" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
margin_top = 198.0 margin_top = 198.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 212.0 margin_bottom = 212.0
text = "Cursor position" text = "Cursor position"
[node name="road_lines_cursor_position" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="road_lines_cursor_position" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 216.0 margin_top = 216.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 240.0 margin_bottom = 240.0
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position"] [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position"]
margin_right = 218.0 margin_right = 234.0
margin_bottom = 24.0 margin_bottom = 24.0
[node name="cursor_x" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"] [node name="cursor_x" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_right = 58.0 margin_right = 63.0
margin_bottom = 24.0 margin_bottom = 24.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="cursor_y" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"] [node name="cursor_y" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_left = 62.0 margin_left = 67.0
margin_right = 120.0 margin_right = 130.0
margin_bottom = 24.0 margin_bottom = 24.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="cursor_z" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"] [node name="cursor_z" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_left = 124.0 margin_left = 134.0
margin_right = 182.0 margin_right = 197.0
margin_bottom = 24.0 margin_bottom = 24.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="road_lines_set_cursor_position" type="Button" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"] [node name="road_lines_set_cursor_position" type="Button" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_cursor_position/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_left = 186.0 margin_left = 201.0
margin_right = 218.0 margin_right = 233.0
margin_bottom = 24.0 margin_bottom = 24.0
text = "Set" text = "Set"
[node name="HSeparator4" type="HSeparator" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="HSeparator4" type="HSeparator" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
margin_top = 244.0 margin_top = 244.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 248.0 margin_bottom = 248.0
[node name="Label3" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="Label3" type="Label" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
margin_top = 252.0 margin_top = 252.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 266.0 margin_bottom = 266.0
text = "Point position" text = "Point position"
[node name="road_lines_point_position" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"] [node name="road_lines_point_position" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 270.0 margin_top = 270.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 294.0 margin_bottom = 294.0
[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position"] [node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position"]
margin_right = 218.0 margin_right = 234.0
margin_bottom = 24.0 margin_bottom = 24.0
[node name="point_x" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"] [node name="point_x" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
margin_right = 58.0 margin_right = 63.0
margin_bottom = 24.0 margin_bottom = 24.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="point_y" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"] [node name="point_y" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
margin_left = 62.0 margin_left = 67.0
margin_right = 120.0 margin_right = 130.0
margin_bottom = 24.0 margin_bottom = 24.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="point_z" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"] [node name="point_z" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
margin_left = 124.0 margin_left = 134.0
margin_right = 182.0 margin_right = 197.0
margin_bottom = 24.0 margin_bottom = 24.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="road_lines_set_point_position" type="Button" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"] [node name="road_lines_set_point_position" type="Button" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_point_position/HBoxContainer2"]
unique_name_in_owner = true unique_name_in_owner = true
margin_left = 186.0 margin_left = 201.0
margin_right = 218.0 margin_right = 233.0
margin_bottom = 24.0 margin_bottom = 24.0
text = "Set" text = "Set"
[node name="road_lines_create_new_line_dlg" type="PanelContainer" parent="VBoxContainer/v_road_lines"] [node name="road_lines_create_new_line_dlg" type="PanelContainer" parent="VBoxContainer/v_road_lines"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 320.0 margin_top = 320.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 382.0 margin_bottom = 382.0
[node name="v" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_create_new_line_dlg"] [node name="v" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_create_new_line_dlg"]
margin_left = 7.0 margin_left = 7.0
margin_top = 7.0 margin_top = 7.0
margin_right = 225.0 margin_right = 241.0
margin_bottom = 55.0 margin_bottom = 55.0
[node name="road_lines_create_new_line_name" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_create_new_line_dlg/v"] [node name="road_lines_create_new_line_name" type="LineEdit" parent="VBoxContainer/v_road_lines/road_lines_create_new_line_dlg/v"]
unique_name_in_owner = true unique_name_in_owner = true
margin_right = 218.0 margin_right = 234.0
margin_bottom = 24.0 margin_bottom = 24.0
[node name="road_lines_create_new_cancel" type="Button" parent="VBoxContainer/v_road_lines/road_lines_create_new_line_dlg/v"] [node name="road_lines_create_new_cancel" type="Button" parent="VBoxContainer/v_road_lines/road_lines_create_new_line_dlg/v"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 28.0 margin_top = 28.0
margin_right = 218.0 margin_right = 234.0
margin_bottom = 48.0 margin_bottom = 48.0
text = "Cancel" text = "Cancel"
[node name="road_lines_edit_metadata_dlg" type="PanelContainer" parent="VBoxContainer/v_road_lines"] [node name="road_lines_edit_metadata_dlg" type="PanelContainer" parent="VBoxContainer/v_road_lines"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 386.0 margin_top = 386.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 608.0 margin_bottom = 650.0
[node name="v" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg"] [node name="scroll" type="ScrollContainer" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg"]
margin_left = 7.0 margin_left = 7.0
margin_top = 7.0 margin_top = 7.0
margin_right = 225.0 margin_right = 241.0
margin_bottom = 215.0 margin_bottom = 257.0
rect_min_size = Vector2( 0, 250 )
size_flags_horizontal = 3
size_flags_vertical = 3
scroll_horizontal_enabled = false
[node name="road_lines_metadata_edit" type="TextEdit" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/v"] [node name="v" type="VBoxContainer" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/scroll"]
margin_right = 222.0
margin_bottom = 418.0
size_flags_horizontal = 3
size_flags_vertical = 3
[node name="road_lines_metadata_edit" type="TextEdit" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/scroll/v"]
unique_name_in_owner = true unique_name_in_owner = true
margin_right = 218.0 margin_right = 222.0
margin_bottom = 160.0 margin_bottom = 160.0
rect_min_size = Vector2( 0, 160 ) rect_min_size = Vector2( 0, 160 )
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="road_lines_metadata_update" type="Button" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/v"] [node name="road_lines_metadata_update" type="Button" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/scroll/v"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 164.0 margin_top = 164.0
margin_right = 218.0 margin_right = 222.0
margin_bottom = 184.0 margin_bottom = 184.0
text = "Update" text = "Update"
[node name="road_lines_metadata_cancel" type="Button" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/v"] [node name="road_lines_metadata_cancel" type="Button" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/scroll/v"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 188.0 margin_top = 188.0
margin_right = 218.0 margin_right = 222.0
margin_bottom = 208.0 margin_bottom = 208.0
text = "Cancel" text = "Cancel"
[node name="lines_buildings_metadata_edit" type="LineMetadataEditor" parent="VBoxContainer/v_road_lines/road_lines_edit_metadata_dlg/scroll/v"]
unique_name_in_owner = true
margin_top = 212.0
margin_right = 222.0
margin_bottom = 418.0
[node name="v_npc" type="VBoxContainer" parent="VBoxContainer"] [node name="v_npc" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
margin_top = 1042.0 margin_top = 1084.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 1064.0 margin_bottom = 1106.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_npc"] [node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_npc"]
margin_right = 232.0 margin_right = 248.0
margin_bottom = 4.0 margin_bottom = 4.0
[node name="Label" type="Label" parent="VBoxContainer/v_npc"] [node name="Label" type="Label" parent="VBoxContainer/v_npc"]
margin_top = 8.0 margin_top = 8.0
margin_right = 232.0 margin_right = 248.0
margin_bottom = 22.0 margin_bottom = 22.0
text = "NPC mode" text = "NPC mode"

View File

@@ -0,0 +1,91 @@
#include <vector>
#include <unordered_map>
#include <scene/gui/item_list.h>
#include <scene/gui/box_container.h>
#include <scene/gui/spin_box.h>
#include <scene/gui/grid_container.h>
#include <scene/gui/label.h>
#include "editor_event.h"
#include "road_lines_data.h"
#include "line_metadata_editor.h"
static ItemList *line_buildings_list;
static ItemList *line_building_types_list;
static SpinBox *line_segment_num;
LineMetadataEditor::LineMetadataEditor()
{
}
LineMetadataEditor::~LineMetadataEditor()
{
if (line_buildings_list) {
line_buildings_list->queue_delete();
line_buildings_list = nullptr;
}
}
void LineMetadataEditor::_notification(int which)
{
switch (which) {
case NOTIFICATION_ENTER_TREE: {
VBoxContainer *box = memnew(VBoxContainer);
line_buildings_list = memnew(ItemList);
line_buildings_list->set_custom_minimum_size(
Vector2(0.0f, 80.0f));
box->add_child(line_buildings_list);
line_buildings_list->set_owner(this);
line_building_types_list = memnew(ItemList);
line_building_types_list->set_custom_minimum_size(
Vector2(0.0f, 80.0f));
box->add_child(line_building_types_list);
line_building_types_list->set_owner(this);
GridContainer *grid = memnew(GridContainer);
grid->set_columns(2);
Label *label = memnew(Label);
label->set_text("Segment:");
grid->add_child(label);
line_segment_num = memnew(SpinBox);
grid->add_child(line_segment_num);
box->add_child(grid);
add_child(box);
box->set_owner(this);
line_buildings_list->set_owner(this);
EditorEvent::get_singleton()->event.add_listener(
this, &LineMetadataEditor::event_handler);
Array args;
EditorEvent::get_singleton()->event.emit(
"lines_get_current_line", args);
} break;
case NOTIFICATION_EXIT_TREE: {
EditorEvent::get_singleton()->event.remove_listener(
this, &LineMetadataEditor::event_handler);
if (line_buildings_list) {
line_buildings_list->queue_delete();
line_buildings_list = nullptr;
}
} break;
}
}
void LineMetadataEditor::_bind_methods()
{
}
void LineMetadataEditor::event_handler(const String &event, const Array &args)
{
if (event == "lines_select_line") {
const String &current_line = args[0];
print_line("line selected: " + current_line);
#if 0
if (current_line.ends_with("_buildings")) {
int i;
for (i = 0; i < u_controls.size(); i++)
u_controls[i]->queue_delete();
ItemList *item_list = memnew(ItemList);
add_child RoadLinesData::get_singleton()
-> lines[current_line]
.metadata;
}
#endif
}
}

View File

@@ -0,0 +1,15 @@
#include <scene/gui/panel_container.h>
#include "editor_event.h"
class LineMetadataEditor : public PanelContainer {
GDCLASS(LineMetadataEditor, PanelContainer)
public:
LineMetadataEditor();
virtual ~LineMetadataEditor();
private:
Vector<Control *> u_controls;
void _notification(int which);
static void _bind_methods();
void event_handler(const String &event, const Array &args);
};

View File

@@ -36,6 +36,9 @@ void NavPanel::_notification(int which)
add_child(h); add_child(h);
add_child(v); add_child(v);
add_child(r); add_child(r);
h->set_focus_mode(Control::FOCUS_CLICK);
v->set_focus_mode(Control::FOCUS_CLICK);
r->set_focus_mode(Control::FOCUS_CLICK);
h->connect("gui_input", this, "gui_input_handler_h"); h->connect("gui_input", this, "gui_input_handler_h");
v->connect("gui_input", this, "gui_input_handler_v"); v->connect("gui_input", this, "gui_input_handler_v");
r->connect("gui_input", this, "gui_input_handler_r"); r->connect("gui_input", this, "gui_input_handler_r");
@@ -114,6 +117,7 @@ void NavPanel::gui_input_handler_h(const Ref<InputEvent> &e)
{ {
if (Input::get_singleton()->is_action_just_pressed("mouse1")) { if (Input::get_singleton()->is_action_just_pressed("mouse1")) {
h_active = true; h_active = true;
h->grab_focus();
Input::get_singleton()->set_mouse_mode( Input::get_singleton()->set_mouse_mode(
Input::MOUSE_MODE_CAPTURED); Input::MOUSE_MODE_CAPTURED);
} else if (Input::get_singleton()->is_action_just_released("mouse1")) { } else if (Input::get_singleton()->is_action_just_released("mouse1")) {
@@ -140,6 +144,7 @@ void NavPanel::gui_input_handler_v(const Ref<InputEvent> &e)
v_active = true; v_active = true;
Input::get_singleton()->set_mouse_mode( Input::get_singleton()->set_mouse_mode(
Input::MOUSE_MODE_CAPTURED); Input::MOUSE_MODE_CAPTURED);
v->grab_focus();
} else if (Input::get_singleton()->is_action_just_released("mouse1")) { } else if (Input::get_singleton()->is_action_just_released("mouse1")) {
v_active = false; v_active = false;
Input::get_singleton()->set_mouse_mode( Input::get_singleton()->set_mouse_mode(
@@ -167,6 +172,7 @@ void NavPanel::gui_input_handler_r(const Ref<InputEvent> &e)
r_active = true; r_active = true;
Input::get_singleton()->set_mouse_mode( Input::get_singleton()->set_mouse_mode(
Input::MOUSE_MODE_CAPTURED); Input::MOUSE_MODE_CAPTURED);
r->grab_focus();
} else if (Input::get_singleton()->is_action_just_released("mouse1")) { } else if (Input::get_singleton()->is_action_just_released("mouse1")) {
r_active = false; r_active = false;

View File

@@ -3,6 +3,7 @@
#include "road_debug.h" #include "road_debug.h"
#include "world_editor.h" #include "world_editor.h"
#include "nav_panel.h" #include "nav_panel.h"
#include "line_metadata_editor.h"
void register_stream_types() void register_stream_types()
{ {
@@ -10,6 +11,7 @@ void register_stream_types()
ClassDB::register_class<RoadDebug>(); ClassDB::register_class<RoadDebug>();
ClassDB::register_class<WorldEditor>(); ClassDB::register_class<WorldEditor>();
ClassDB::register_class<NavPanel>(); ClassDB::register_class<NavPanel>();
ClassDB::register_class<LineMetadataEditor>();
} }
void unregister_stream_types() void unregister_stream_types()

View File

@@ -13,7 +13,7 @@
#include "from_string.h" #include "from_string.h"
#include "road_lines_data.h" #include "road_lines_data.h"
static ImmediateGeometry *debug_im; ImmediateGeometry *RoadLinesData::debug_im = nullptr;
static Ref<Material> debug_material; static Ref<Material> debug_material;
RoadLinesData::RoadLinesData() RoadLinesData::RoadLinesData()
{ {
@@ -73,10 +73,12 @@ RoadLinesData *RoadLinesData::get_singleton()
RoadLinesData::~RoadLinesData() RoadLinesData::~RoadLinesData()
{ {
#if 0
if (debug_im) { if (debug_im) {
memdelete(debug_im); memdelete(debug_im);
debug_im = nullptr; debug_im = nullptr;
} }
#endif
} }
void RoadLinesData::cleanup() void RoadLinesData::cleanup()
@@ -159,7 +161,6 @@ uint32_t RoadLinesData::road_lines_hash(const Vector3 &v)
int z = (int)(v.z / 100); int z = (int)(v.z / 100);
return x ^ (y * 100) ^ (z * 10000); return x ^ (y * 100) ^ (z * 10000);
} }
void RoadLinesData::road_lines_curve_index( void RoadLinesData::road_lines_curve_index(
struct RoadLinesData::road_line &rline, struct RoadLinesData::road_line &rline,
std::unordered_map<uint32_t, std::vector<Vector3> > std::unordered_map<uint32_t, std::vector<Vector3> >
@@ -454,20 +455,24 @@ void RoadLinesData::dump_road_lines(const std::vector<Vector3> &road_lines_nodes
} }
} }
static inline ImmediateGeometry *get_debug_node() ImmediateGeometry *RoadLinesData::get_debug_node()
{ {
debug_im = memnew(ImmediateGeometry); if (!debug_im) {
Ref<SpatialMaterial> tmpmat; debug_im = memnew(ImmediateGeometry);
tmpmat.instance(); Ref<SpatialMaterial> tmpmat;
tmpmat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); tmpmat.instance();
tmpmat->set_flag(SpatialMaterial::FLAG_DISABLE_DEPTH_TEST, true); tmpmat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR,
tmpmat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); true);
debug_material = tmpmat; tmpmat->set_flag(SpatialMaterial::FLAG_DISABLE_DEPTH_TEST,
debug_im->set_material_override(debug_material); true);
SceneTree::get_singleton() tmpmat->set_flag(SpatialMaterial::FLAG_UNSHADED, true);
->get_current_scene() debug_material = tmpmat;
->get_viewport() debug_im->set_material_override(debug_material);
->add_child(debug_im); SceneTree::get_singleton()
->get_current_scene()
->get_viewport()
->call_deferred("add_child", debug_im);
}
return debug_im; return debug_im;
} }
@@ -477,19 +482,35 @@ void RoadLinesData::process_lines(
std::vector<Vector3> &road_lines_nodes) std::vector<Vector3> &road_lines_nodes)
{ {
int i; int i;
get_debug_node(); get_debug_node()->clear();
debug_im->clear();
index_lines(road_lines_nodes_hash, road_lines_nodes); index_lines(road_lines_nodes_hash, road_lines_nodes);
debug_im->begin(Mesh::PRIMITIVE_LINES);
for (i = 0; i < (int)road_lines_nodes.size(); i++) {
debug_im->set_color(Color(0.1f, 0.6f, 0.6f, 1.0f));
debug_im->add_vertex(road_lines_nodes[i]);
debug_im->set_color(Color(0.1f, 0.6f, 0.6f, 1.0f));
debug_im->add_vertex(road_lines_nodes[i] +
Vector3(0.0f, 200.0f, 0.0f));
}
debug_im->end();
insert_close_points(road_lines_nodes, 160.0f); insert_close_points(road_lines_nodes, 160.0f);
update_road_lines_nodes(road_lines_nodes); update_road_lines_nodes(road_lines_nodes);
dump_road_lines(road_lines_nodes); dump_road_lines(road_lines_nodes);
if (debug_flags & 1) {
get_debug_node()->begin(Mesh::PRIMITIVE_LINES);
for (i = 0; i < (int)road_lines_nodes.size(); i++) {
print_line("debug_node: " + itos(i) + " " +
(road_lines_nodes[i].operator String()));
get_debug_node()->set_color(
Color(0.1f, 0.6f, 0.6f, 1.0f));
get_debug_node()->add_vertex(road_lines_nodes[i]);
get_debug_node()->set_color(
Color(0.1f, 0.6f, 0.6f, 1.0f));
get_debug_node()->add_vertex(
road_lines_nodes[i] +
Vector3(0.0f, 200.0f, 0.0f));
}
get_debug_node()->end();
}
}
void RoadLinesData::set_debug_flags(int debug_flags)
{
this->debug_flags = debug_flags;
}
int RoadLinesData::get_debug_flags() const
{
return debug_flags;
} }

View File

@@ -1,9 +1,13 @@
#ifndef ROAD_LINES_DATA_H #ifndef ROAD_LINES_DATA_H
#define ROAD_LINES_DATA_H #define ROAD_LINES_DATA_H
#include "callable.h" #include "callable.h"
class ImmediateGeometry;
class RoadLinesData { class RoadLinesData {
int debug_flags;
String road_lines_path; String road_lines_path;
uint32_t road_lines_hash(const Vector3 &v); uint32_t road_lines_hash(const Vector3 &v);
static ImmediateGeometry *debug_im;
static ImmediateGeometry *get_debug_node();
protected: protected:
RoadLinesData(); RoadLinesData();
@@ -30,6 +34,8 @@ public:
void process_lines(std::unordered_map<uint32_t, std::vector<Vector3> > void process_lines(std::unordered_map<uint32_t, std::vector<Vector3> >
&road_lines_nodes_hash, &road_lines_nodes_hash,
std::vector<Vector3> &road_lines_nodes); std::vector<Vector3> &road_lines_nodes);
void set_debug_flags(int debug_flags);
int get_debug_flags() const;
private: private:
void index_lines(std::unordered_map<uint32_t, std::vector<Vector3> > void index_lines(std::unordered_map<uint32_t, std::vector<Vector3> >

View File

@@ -16,6 +16,7 @@
#include <core/os/time.h> #include <core/os/time.h>
#include <core/io/json.h> #include <core/io/json.h>
#include <modules/regex/regex.h> #include <modules/regex/regex.h>
#include "editor_event.h"
#include "world_editor.h" #include "world_editor.h"
#include "from_string.h" #include "from_string.h"
#include "road_lines_data.h" #include "road_lines_data.h"
@@ -157,6 +158,8 @@ protected:
} }
}; };
static String current_line = "";
class HandlePointSelection : public Object { class HandlePointSelection : public Object {
GDCLASS(HandlePointSelection, Object) GDCLASS(HandlePointSelection, Object)
RoadLinesEditor *editor; RoadLinesEditor *editor;
@@ -286,6 +289,8 @@ public:
protected: protected:
void update_metadata_editor() void update_metadata_editor()
{ {
if (current_line == "")
return;
TextEdit *metadata_edit = editor->get_as_node<TextEdit>( TextEdit *metadata_edit = editor->get_as_node<TextEdit>(
"%road_lines_metadata_edit"); "%road_lines_metadata_edit");
String text = editor->get_current_line_metadata(); String text = editor->get_current_line_metadata();
@@ -313,6 +318,10 @@ protected:
break; break;
case 23: case 23:
/* edit line metadata */ /* edit line metadata */
if (current_line == "") {
print_error("No current line set");
return;
}
editor->get_as_node<Control>("%road_lines_base")->hide(); editor->get_as_node<Control>("%road_lines_base")->hide();
editor->get_as_node<Control>( editor->get_as_node<Control>(
"%road_lines_edit_metadata_dlg") "%road_lines_edit_metadata_dlg")
@@ -340,6 +349,58 @@ protected:
case 101: case 101:
editor->save_data(); editor->save_data();
break; break;
case 201:
case 210:
case 211:
case 212: {
print_line("selected item 201");
int i, j;
Node *menu_block = editor->get_as_node<Node>(
"%road_lines_menu_block");
for (i = 0; i < menu_block->get_child_count(); i++) {
Node *menu_button_node =
menu_block->get_child(i);
MenuButton *menu_button =
Object::cast_to<MenuButton>(
menu_button_node);
if (!menu_button)
continue;
PopupMenu *popup = menu_button->get_popup();
for (j = 0; j < popup->get_item_count(); j++) {
int nid = popup->get_item_id(j);
if (nid == id) {
bool checked =
popup->is_item_checked(
j);
if (checked)
print_line("checked");
else
print_line("unchecked");
checked = !checked;
popup->set_item_checked(
j, checked);
switch (id) {
case 201:
editor->set_update_roads(
checked);
break;
case 210:
editor->set_debug_road_nodes(
checked);
break;
case 211:
editor->set_debug_road_edges(
checked);
break;
case 212:
editor->set_debug_road_wedges(
checked);
break;
}
}
}
}
} break;
default: default:
print_line("menu option pressed: " + itos(id)); print_line("menu option pressed: " + itos(id));
} }
@@ -467,6 +528,10 @@ RoadLinesEditor::RoadLinesEditor(WorldEditor *editor)
, cursor_enabled(false) , cursor_enabled(false)
, filter_text("") , filter_text("")
, camera_moved(false) , camera_moved(false)
, update_roads(false)
, debug_road_nodes(false)
, debug_road_edges(false)
, debug_road_wedges(false)
{ {
} }
@@ -483,7 +548,6 @@ Node *RoadLinesEditor::scene()
return editor->get_tree()->get_current_scene(); return editor->get_tree()->get_current_scene();
} }
static String current_line = "";
void RoadLinesEditor::update_line_geometry() void RoadLinesEditor::update_line_geometry()
{ {
RoadLinesData *rld = RoadLinesData::get_singleton(); RoadLinesData *rld = RoadLinesData::get_singleton();
@@ -553,6 +617,9 @@ void RoadLinesEditor::select_line(const String &line_name)
set_line_index(0); set_line_index(0);
update_line_geometry(); update_line_geometry();
} }
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_select_line", args);
update_ui(); update_ui();
} }
@@ -572,6 +639,9 @@ void RoadLinesEditor::line_create_point()
int index = get_line_index(); int index = get_line_index();
rld->lines[current_line].points.insert( rld->lines[current_line].points.insert(
rld->lines[current_line].points.begin() + index + 1, xform); rld->lines[current_line].points.begin() + index + 1, xform);
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
update_line_geometry(); update_line_geometry();
update_line_index_ui(); update_line_index_ui();
SpinBox *sp_line_index = get_as_node<SpinBox>("%line_index"); SpinBox *sp_line_index = get_as_node<SpinBox>("%line_index");
@@ -589,6 +659,9 @@ void RoadLinesEditor::line_delete_point()
return; return;
rld->lines[current_line].points.erase( rld->lines[current_line].points.erase(
rld->lines[current_line].points.begin() + index); rld->lines[current_line].points.begin() + index);
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
update_line_geometry(); update_line_geometry();
update_line_index_ui(); update_line_index_ui();
SpinBox *sp_line_index = get_as_node<SpinBox>("%line_index"); SpinBox *sp_line_index = get_as_node<SpinBox>("%line_index");
@@ -607,6 +680,9 @@ void RoadLinesEditor::set_point_to_cursor()
Transform xform = cursor->get_global_transform(); Transform xform = cursor->get_global_transform();
int index = get_line_index(); int index = get_line_index();
rld->lines[current_line].points[index].origin = xform.origin; rld->lines[current_line].points[index].origin = xform.origin;
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
update_line_geometry(); update_line_geometry();
set_ui_point_position(rld->lines[current_line].points[index].origin); set_ui_point_position(rld->lines[current_line].points[index].origin);
} }
@@ -798,6 +874,9 @@ void RoadLinesEditor::set_point_position(const Vector3 &position)
RoadLinesData *rld = RoadLinesData::get_singleton(); RoadLinesData *rld = RoadLinesData::get_singleton();
int index = get_line_index(); int index = get_line_index();
rld->lines[current_line].points[index].origin = position; rld->lines[current_line].points[index].origin = position;
Array args;
args.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_changed_line", args);
update_line_geometry(); update_line_geometry();
} }
void RoadLinesEditor::set_ui_cursor_position(const Vector3 &cursor_position) void RoadLinesEditor::set_ui_cursor_position(const Vector3 &cursor_position)
@@ -869,12 +948,16 @@ void RoadLinesEditor::activate()
new_line_handler = memnew(HandleCreateNewLine(this)); new_line_handler = memnew(HandleCreateNewLine(this));
if (!point_selection_handler) if (!point_selection_handler)
point_selection_handler = memnew(HandlePointSelection(this)); point_selection_handler = memnew(HandlePointSelection(this));
EditorEvent::get_singleton()->event.add_listener(
this, &RoadLinesEditor::event_handler);
active = true; active = true;
} }
void RoadLinesEditor::deactivate() void RoadLinesEditor::deactivate()
{ {
EditorEvent::get_singleton()->event.remove_listener(
this, &RoadLinesEditor::event_handler);
Node *lines_list_node = Node *lines_list_node =
editor->get_tree()->get_current_scene()->get_node( editor->get_tree()->get_current_scene()->get_node(
NodePath("%lines_list")); NodePath("%lines_list"));
@@ -913,6 +996,15 @@ void RoadLinesEditor::place_generated_objects()
void RoadLinesEditor::rebuild_roads() void RoadLinesEditor::rebuild_roads()
{ {
Array args; Array args;
int debug_flags = 0;
if (debug_road_nodes)
debug_flags |= (1 << 0);
if (debug_road_edges)
debug_flags |= (1 << 1);
if (debug_road_wedges)
debug_flags |= (1 << 2);
print_line("rebuild_roads: debug: " + itos(debug_flags));
args.push_back(debug_flags);
editor->editor_command("rebuild_roads", args); editor->editor_command("rebuild_roads", args);
} }
void RoadLinesEditor::remove_road_meshes() void RoadLinesEditor::remove_road_meshes()
@@ -925,6 +1017,22 @@ void RoadLinesEditor::handle_input()
if (editor->get_camera_mode() != 3) if (editor->get_camera_mode() != 3)
return; return;
} }
void RoadLinesEditor::set_update_roads(bool checked)
{
update_roads = checked;
}
void RoadLinesEditor::set_debug_road_nodes(bool checked)
{
debug_road_nodes = checked;
}
void RoadLinesEditor::set_debug_road_edges(bool checked)
{
debug_road_edges = checked;
}
void RoadLinesEditor::set_debug_road_wedges(bool checked)
{
debug_road_wedges = checked;
}
void RoadLinesEditor::place_zebras() void RoadLinesEditor::place_zebras()
{ {
Array args; Array args;
@@ -1053,3 +1161,21 @@ template <class T> T *RoadLinesEditor::get_as_node(const String &path)
assert(ret); assert(ret);
return ret; return ret;
} }
void RoadLinesEditor::event_handler(const String &event, const Array &args)
{
if (event == "lines_get_current_line" && current_line != "") {
Array nargs;
nargs.push_back(current_line);
EditorEvent::get_singleton()->event.emit("lines_select_line",
nargs);
}
if (event == "lines_changed_line") {
if (!update_roads)
print_line("road update disabled");
if (current_line.ends_with("_road"))
print_line("the line is a road");
if (current_line.ends_with("_road") && update_roads)
rebuild_roads();
}
}

View File

@@ -11,6 +11,11 @@ class RoadLinesEditor {
Ref<RegEx> re; Ref<RegEx> re;
bool camera_moved; bool camera_moved;
Vector3 camera_motion; Vector3 camera_motion;
void event_handler(const String &event, const Array &args);
bool update_roads; // 201
bool debug_road_nodes; // 210
bool debug_road_edges; // 211
bool debug_road_wedges; // 212
public: public:
RoadLinesEditor(WorldEditor *editor); RoadLinesEditor(WorldEditor *editor);
@@ -49,6 +54,10 @@ public:
void rebuild_roads(); void rebuild_roads();
void remove_road_meshes(); void remove_road_meshes();
void handle_input(); void handle_input();
void set_update_roads(bool checked);
void set_debug_road_nodes(bool checked);
void set_debug_road_edges(bool checked);
void set_debug_road_wedges(bool checked);
protected: protected:
void activate(); void activate();

View File

@@ -34,6 +34,7 @@ struct RoadLinesProcessing {
std::unordered_map<uint32_t, std::vector<struct wedge> > wedges; std::unordered_map<uint32_t, std::vector<struct wedge> > wedges;
String road_center_mesh_path, road_mid_mesh_path, String road_center_mesh_path, road_mid_mesh_path,
road_sidewalk_mesh_path; road_sidewalk_mesh_path;
int debug_flags;
static struct RoadLinesProcessing *singleton; static struct RoadLinesProcessing *singleton;
static RoadLinesProcessing *get_singleton() static RoadLinesProcessing *get_singleton()
{ {
@@ -186,6 +187,14 @@ struct RoadLinesProcessing {
singleton = nullptr; singleton = nullptr;
} }
} }
void set_debug_flags(int debug_flags)
{
this->debug_flags = debug_flags;
}
int get_debug_flags() const
{
return debug_flags;
}
void road_setup() void road_setup()
{ {
RoadLinesData *rld = RoadLinesData::get_singleton(); RoadLinesData *rld = RoadLinesData::get_singleton();
@@ -194,6 +203,7 @@ struct RoadLinesProcessing {
road_lines_nodes_hash; road_lines_nodes_hash;
road_lines_nodes.clear(); road_lines_nodes.clear();
road_lines_nodes_hash.clear(); road_lines_nodes_hash.clear();
rld->set_debug_flags(debug_flags);
rld->process_lines(road_lines_nodes_hash, road_lines_nodes); rld->process_lines(road_lines_nodes_hash, road_lines_nodes);
create_nodes(road_lines_nodes); create_nodes(road_lines_nodes);
create_edges(); create_edges();
@@ -631,8 +641,9 @@ public:
}; };
RoadMeshProcessing *RoadMeshProcessing::singleton; RoadMeshProcessing *RoadMeshProcessing::singleton;
void RoadProcessing::road_setup(Node *target) void RoadProcessing::road_setup(Node *target, int debug_flags)
{ {
RoadLinesProcessing::get_singleton()->set_debug_flags(debug_flags);
RoadLinesProcessing::get_singleton()->road_setup(); RoadLinesProcessing::get_singleton()->road_setup();
RoadMeshProcessing::get_singleton()->create_road_meshes(target); RoadMeshProcessing::get_singleton()->create_road_meshes(target);
} }

View File

@@ -4,7 +4,7 @@ class Node;
class ImmediateGeometry; class ImmediateGeometry;
class RoadProcessing { class RoadProcessing {
public: public:
static void road_setup(Node *target); static void road_setup(Node *target, int debug_flags);
static void remove_road_meshes(Node *target); static void remove_road_meshes(Node *target);
static void load_data(); static void load_data();
static void cleanup(); static void cleanup();

View File

@@ -398,7 +398,10 @@ void StreamWorld::run_command(const String &command, const Array &args)
remove_generated_stuff(); remove_generated_stuff();
update_items(); update_items();
} else if (command == "rebuild_roads") { } else if (command == "rebuild_roads") {
RoadProcessing::road_setup(this); if (args.size() > 0)
RoadProcessing::road_setup(this, args[0]);
else
RoadProcessing::road_setup(this, 0);
print_line("road_rebuild done"); print_line("road_rebuild done");
} else if (command == "remove_road_meshes") { } else if (command == "remove_road_meshes") {
RoadProcessing::remove_road_meshes(this); RoadProcessing::remove_road_meshes(this);
@@ -426,7 +429,7 @@ void StreamWorld::_notification(int which)
current_scene = get_tree()->get_root(); current_scene = get_tree()->get_root();
} }
ERR_FAIL_COND_MSG(!current_scene, "No current scene"); ERR_FAIL_COND_MSG(!current_scene, "No current scene");
RoadProcessing::road_setup(this); RoadProcessing::road_setup(this, 0);
set_process(true); set_process(true);
} }
break; break;