[gd_scene load_steps=13 format=3 uid="uid://dfbykrvyqnqr5"] [ext_resource type="Script" path="res://addons/MetroidvaniaSystem/Database/MapEditor.gd" id="1_i7yda"] [ext_resource type="Script" path="res://addons/MetroidvaniaSystem/Database/MapOverlay.gd" id="2_w1wnt"] [sub_resource type="ButtonGroup" id="ButtonGroup_pv7fp"] [sub_resource type="GDScript" id="GDScript_dsps8"] resource_name = "RoomLayout" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/SubEditor.gd\" var erase_mode: bool func _editor_init() -> void: room_only_cursor = false func _update_theme(): theme_cache.cursor_color = get_theme_color(&\"cursor_color\", &\"MetSys\") func _editor_input(event: InputEvent): if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT: if event.pressed: drag_from = get_cursor_pos() else: var rect := get_rect_between(drag_from, get_cursor_pos()) update_rooms(rect) drag_from = EDITOR_SCRIPT.NULL_VECTOR2I elif event.button_index == MOUSE_BUTTON_RIGHT: if event.pressed: drag_from = get_cursor_pos() erase_mode = true theme_cache.cursor_color = get_theme_color(&\"cursor_color_erase\", &\"MetSys\") queue_redraw() else: var rect := get_rect_between(drag_from, get_cursor_pos()) erase_rooms(rect) erase_mode = false theme_cache.cursor_color = get_theme_color(&\"cursor_color\", &\"MetSys\") drag_from = EDITOR_SCRIPT.NULL_VECTOR2I func update_rooms(rect: Rect2i): var map_data: MetroidvaniaSystem.MapData = MetSys.map_data for x in range(rect.position.x, rect.end.x): for y in range(rect.position.y, rect.end.y): var coords := Vector3i(x, y, editor.current_layer) var cell = map_data.get_cell_at(coords) if cell: remove_assign(coords) if x != rect.end.x - 1: cell.borders[0] = -1 if y != rect.end.y - 1: cell.borders[1] = -1 if x != rect.position.x: cell.borders[2] = -1 if y != rect.position.y: cell.borders[3] = -1 else: cell = map_data.create_cell_at(coords) if x == rect.end.x - 1: cell.borders[0] = 0 if y == rect.end.y - 1: cell.borders[1] = 0 if x == rect.position.x: cell.borders[2] = 0 if y == rect.position.y: cell.borders[3] = 0 mark_modified() editor.map.queue_redraw() func erase_rooms(rect: Rect2i): var map_data: MetroidvaniaSystem.MapData = MetSys.map_data for x in range(rect.position.x, rect.end.x): for y in range(rect.position.y, rect.end.y): var coords := Vector3i(x, y, editor.current_layer) var cell_data := map_data.get_cell_at(coords) if not cell_data: continue if x == rect.end.x - 1: close_border(Vector2i(x + 1, y), 2) if y == rect.end.y - 1: close_border(Vector2i(x, y + 1), 3) if x == rect.position.x: close_border(Vector2i(x - 1, y), 0) if y == rect.position.y: close_border(Vector2i(x, y - 1), 1) map_data.erase_cell(coords) mark_modified() editor.map.queue_redraw() func remove_assign(coords: Vector3i): var assigned_scene: String = MetSys.map_data.cells[coords].assigned_scene MetSys.map_data.assigned_scenes.erase(assigned_scene) func close_border(pos: Vector2i, border: int): var cell: MetroidvaniaSystem.MapData.CellData = MetSys.map_data.get_cell_at(get_coords(pos)) if cell: cell.borders[border] = 0 " [sub_resource type="GDScript" id="GDScript_tlx5u"] resource_name = "CellColor" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/CellPaintEditor.gd\" func _editor_init() -> void: super() can_pick = true func _editor_enter(): super() %Colors.show() func _editor_exit(): super() %Colors.hide() func modify_cell(cell_data: MetroidvaniaSystem.MapData.CellData, mode: int) -> bool: if mode == MODE_PICK: if cell_data.color.a > 0: %CurrentColor.color = cell_data.color else: var target_color := Color.TRANSPARENT if mode == MODE_DRAW: target_color = %CurrentColor.color if cell_data.color != target_color: cell_data.color = target_color return true return false " [sub_resource type="GDScript" id="GDScript_ujwfx"] resource_name = "CellSymbol" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/CellPaintEditor.gd\" var symbol_group: ButtonGroup func _editor_init() -> void: can_pick = true super() symbol_group = ButtonGroup.new() reload_symbols() MetSys.settings.theme_changed.connect(reload_symbols) MetSys.theme_modified.connect(func(changes: Array[String]): if \"symbols\" in changes: reload_symbols()) func reload_symbols(): for symbol in %SymbolContainer.get_children(): symbol.free() for symbol in MetSys.settings.theme.symbols: add_symbol(symbol) func _editor_enter(): super() %Symbols.show() func _editor_exit(): super() %Symbols.hide() func modify_cell(cell_data: MetroidvaniaSystem.MapData.CellData, mode: int) -> bool: if mode == MODE_PICK: if cell_data.symbol > -1: symbol_group.get_buttons()[cell_data.symbol].button_pressed = true return false var target_symbol := -1 if mode == MODE_DRAW: target_symbol = symbol_group.get_pressed_button().get_index() if cell_data.symbol != target_symbol: cell_data.symbol = target_symbol return true return false func add_symbol(texture: Texture2D): var button := Button.new() button.icon = texture button.toggle_mode = true button.button_group = symbol_group if not symbol_group.get_pressed_button(): button.button_pressed = true %SymbolContainer.add_child(button) " [sub_resource type="GDScript" id="GDScript_a80ln"] resource_name = "CellGroup" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/CellPaintEditor.gd\" var cell_groups: Dictionary var drawing: int func _editor_init() -> void: super() room_only_cursor = true cell_groups = MetSys.map_data.cell_groups func _update_theme(): theme_cache.group_color = get_theme_color(&\"group_color\", &\"MetSys\") func _editor_enter(): super() %Groups.show() func _editor_exit(): super() %Groups.hide() func _editor_draw(map_overlay: CanvasItem): super(map_overlay) for p in cell_groups.get(%CurrentGroup.value as int, []): map_overlay.draw_rect(Rect2(Vector2(p.x, p.y) * MetSys.CELL_SIZE, MetSys.CELL_SIZE), theme_cache.group_color) func modify_coords(coords: Vector3i, mode: int) -> bool: var current_group: int = %CurrentGroup.value if mode == MODE_DRAW: if not current_group in cell_groups: cell_groups[current_group] = [] if not coords in cell_groups[current_group]: cell_groups[current_group].append(coords) return true else: if coords in cell_groups[current_group]: cell_groups[current_group].erase(coords) return true return false func draw_group(): if drawing == 0: return var coords := get_coords(get_cursor_pos()) var current_group: int = %CurrentGroup.value if drawing & MOUSE_BUTTON_MASK_LEFT != 0: var cell_data: MetroidvaniaSystem.MapData.CellData = MetSys.map_data.get_cell_at(coords) if not cell_data: return if not current_group in cell_groups: cell_groups[current_group] = [] if not coords in cell_groups[current_group]: cell_groups[current_group].append(coords) mark_modified() editor.map_overlay.queue_redraw() elif drawing & MOUSE_BUTTON_MASK_RIGHT != 0: if not current_group in cell_groups: return var cell_data: MetroidvaniaSystem.MapData.CellData = MetSys.map_data.get_cell_at(coords) if not cell_data: return cell_groups[current_group].erase(coords) mark_modified() editor.map_overlay.queue_redraw() " [sub_resource type="GDScript" id="GDScript_ilxbw"] resource_name = "BorderType" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/BorderPaintEditor.gd\" var border_group: ButtonGroup func _editor_init() -> void: use_cursor = false can_pick = true super() border_group = ButtonGroup.new() reload_borders() MetSys.settings.theme_changed.connect(reload_borders) MetSys.theme_modified.connect(func(changes: Array[String]): if \"borders\" in changes or \"vertical_borders\" or \"vertical_borders\" in changes: reload_borders()) func reload_borders(): for symbol in %BorderContainer.get_children(): symbol.free() if MetSys.settings.theme.rectangle: add_border(MetSys.settings.theme.vertical_wall) add_border(MetSys.settings.theme.vertical_passage) for border in MetSys.settings.theme.vertical_borders: add_border(border) else: add_border(MetSys.settings.theme.wall) add_border(MetSys.settings.theme.passage) for border in MetSys.settings.theme.borders: add_border(border) func _editor_enter(): super() %Borders.show() func _editor_exit(): super() %Borders.hide() func modify_border(cell_data: MetroidvaniaSystem.MapData.CellData, border: int, mode: int) -> bool: if cell_data.borders[border] == -1: return false if mode == MODE_PICK: border_group.get_buttons()[cell_data.borders[border]].button_pressed = true else: var target_border := 0 if mode == MODE_DRAW: target_border = border_group.get_pressed_button().get_index() if cell_data.borders[border] != target_border: cell_data.borders[border] = target_border return true return false func add_border(texture: Texture2D): var button := Button.new() button.icon = texture button.toggle_mode = true button.button_group = border_group button.custom_minimum_size.x = MetSys.CELL_SIZE.x button.icon_alignment = HORIZONTAL_ALIGNMENT_RIGHT if not border_group.get_pressed_button(): button.button_pressed = true %BorderContainer.add_child(button) " [sub_resource type="GDScript" id="GDScript_a3fsx"] resource_name = "BorderColor" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/BorderPaintEditor.gd\" func _editor_init(): can_pick = true super() func _editor_enter(): super() %Colors.show() func _editor_exit(): super() %Colors.hide() func modify_border(cell_data: MetroidvaniaSystem.MapData.CellData, border: int, mode: int) -> bool: if cell_data.borders[border] == -1: return false if mode == MODE_PICK: if cell_data.border_colors[border].a > 0: %CurrentColor.color = cell_data.border_colors[border] else: var target_color := Color.TRANSPARENT if mode == MODE_DRAW: target_color = %CurrentColor.color if cell_data.border_colors[border] != target_color: cell_data.border_colors[border] = target_color return true return false " [sub_resource type="GDScript" id="GDScript_p75ne"] resource_name = "SceneAssign" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/SubEditor.gd\" func _editor_init() -> void: use_cursor = false func _update_theme(): theme_cache.assigned_scene = get_theme_color(&\"assigned_scene\", &\"MetSys\") func _editor_input(event: InputEvent): if event is InputEventMouseMotion: var hr := highlighted_room highlighted_room = MetSys.map_data.get_whole_room(get_coords(get_cursor_pos())) if highlighted_room != hr: editor.map_overlay.queue_redraw() if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT: if event.pressed: if not highlighted_room.is_empty(): if %FileDialog.root_subfolder.is_empty(): %FileDialog.root_subfolder = MetSys.settings.map_root_folder.trim_prefix(\"res://\") %FileDialog.popup_centered_ratio(0.6) elif event.button_index == MOUSE_BUTTON_RIGHT: var first := true for p in highlighted_room: if first: var assigned_scene: String = MetSys.map_data.get_cell_at(p).assigned_scene MetSys.map_data.assigned_scenes.erase(assigned_scene) first = false MetSys.map_data.get_cell_at(p).assigned_scene = \"\" MetSys.room_assign_updated.emit() mark_modified() editor.map_overlay.queue_redraw() func _editor_draw(map_overlay: CanvasItem): super(map_overlay) for coords in MetSys.map_data.assigned_scenes.values(): if coords[0].z != editor.current_layer: continue for p in coords: map_overlay.draw_rect(Rect2(Vector2(p.x, p.y) * MetSys.CELL_SIZE, MetSys.CELL_SIZE), theme_cache.assigned_scene) if not highlighted_room.is_empty(): map_overlay.draw_set_transform_matrix(Transform2D()) map_overlay.draw_string(get_theme_font(&\"font\", &\"Label\"), Vector2(0, 40), MetSys.map_data.get_cell_at(highlighted_room.front()).assigned_scene) func on_map_selected(path: String) -> void: path = path.trim_prefix(MetSys.settings.map_root_folder) MetSys.map_data.assigned_scenes[path] = [] for coords in highlighted_room: MetSys.map_data.get_cell_at(coords).assigned_scene = path MetSys.map_data.assigned_scenes[path].append(coords) MetSys.room_assign_updated.emit() mark_modified() editor.map_overlay.queue_redraw() " [sub_resource type="GDScript" id="GDScript_gb3rf"] resource_name = "CustomElements" script/source = "@tool extends \"res://addons/MetroidvaniaSystem/Database/SubEditor.gd\" var current_element: String var custom_elements: Dictionary func _editor_init() -> void: room_only_cursor = false custom_elements = MetSys.map_data.custom_elements MetSys.settings.custom_elements_changed.connect(reload_custom_elements) reload_custom_elements() func _update_theme(): theme_cache.active_custom_element = get_theme_color(&\"active_custom_element\", &\"MetSys\") theme_cache.inactive_custom_element = get_theme_color(&\"inactive_custom_element\", &\"MetSys\") theme_cache.custom_element_marker = get_theme_color(&\"custom_element_marker\", &\"MetSys\") func reload_custom_elements(): for element in %CustomElementContainer.get_children(): element.queue_free() current_element = \"\" if not MetSys.settings.custom_elements or MetSys.settings.custom_elements.custom_elements.is_empty(): %NoElements.show() return else: %NoElements.hide() var element_group := ButtonGroup.new() for element in MetSys.settings.custom_elements.custom_elements: var button := CheckBox.new() button.text = str(element).capitalize() button.button_group = element_group button.pressed.connect(set_current_element.bind(element)) %CustomElementContainer.add_child(button) if not element_group.get_pressed_button(): button.button_pressed = true set_current_element(element) func _editor_enter(): %CustomElements.show() func _editor_exit(): %CustomElements.hide() func set_current_element(element: String): current_element = element editor.map_overlay.queue_redraw() func _editor_draw(map_overlay: CanvasItem): super(map_overlay) for coords in custom_elements: if coords.z != editor.current_layer: continue var element_color: Color var element: Dictionary = custom_elements[coords] if element.name == current_element: element_color = theme_cache.active_custom_element else: element_color = theme_cache.inactive_custom_element map_overlay.draw_rect(Rect2(Vector2(coords.x, coords.y) * MetSys.CELL_SIZE, Vector2(element.size) * MetSys.CELL_SIZE), element_color) var square := minf(MetSys.CELL_SIZE.x, MetSys.CELL_SIZE.y) map_overlay.draw_rect(Rect2((Vector2(coords.x, coords.y) + Vector2(0.5, 0.5)) * MetSys.CELL_SIZE - Vector2.ONE * square * 0.5, Vector2.ONE * square).grow(-square * 0.2), theme_cache.custom_element_marker) func _editor_input(event: InputEvent): if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT: if event.pressed: drag_from = get_cursor_pos() else: var rect := get_rect_between(drag_from, get_cursor_pos()) add_element(rect) mark_modified() drag_from = EDITOR_SCRIPT.NULL_VECTOR2I elif event.button_index == MOUSE_BUTTON_RIGHT: if event.pressed: var coords := Vector3i(get_cursor_pos().x, get_cursor_pos().y, editor.current_layer) if coords in MetSys.map_data.custom_elements: MetSys.map_data.custom_elements.erase(coords) mark_modified() editor.map.queue_redraw() func add_element(rect: Rect2i): var element: Dictionary element.name = current_element element.size = rect.size element.data = %CustomData.text var coords := Vector3i(rect.position.x, rect.position.y, editor.current_layer) MetSys.map_data.custom_elements[coords] = element editor.map.queue_redraw() " [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xiyo8"] content_margin_left = 4.0 content_margin_right = 4.0 bg_color = Color(0, 0, 0, 0.501961) [node name="MapEditor" type="HBoxContainer"] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_i7yda") mode_group = SubResource("ButtonGroup_pv7fp") metadata/_edit_lock_ = true [node name="PanelContainer" type="PanelContainer" parent="."] custom_minimum_size = Vector2(200, 0) layout_mode = 2 [node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer"] layout_mode = 2 [node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/ScrollContainer"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 [node name="Layer" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer"] layout_mode = 2 mouse_filter = 2 metadata/_edit_lock_ = true [node name="Label" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/Layer"] layout_mode = 2 text = "当前层" horizontal_alignment = 1 [node name="CurrentLayer" type="SpinBox" parent="PanelContainer/ScrollContainer/VBoxContainer/Layer"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 [node name="Label2" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/Layer"] layout_mode = 2 text = "预览层" horizontal_alignment = 1 [node name="SpinBox2" type="SpinBox" parent="PanelContainer/ScrollContainer/VBoxContainer/Layer"] layout_mode = 2 size_flags_horizontal = 4 min_value = -1.0 value = -1.0 [node name="RecenterButton" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Layer"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 text = "重置相机" [node name="HSeparator" type="HSeparator" parent="PanelContainer/ScrollContainer/VBoxContainer"] layout_mode = 2 [node name="Modes" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer"] layout_mode = 2 alignment = 1 [node name="Label" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 text = "模式" horizontal_alignment = 1 [node name="RoomLayout" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_pressed = true button_group = SubResource("ButtonGroup_pv7fp") text = "房间布局" script = SubResource("GDScript_dsps8") [node name="CellColor" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_group = SubResource("ButtonGroup_pv7fp") text = "地块颜色" script = SubResource("GDScript_tlx5u") [node name="CellSymbol" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_group = SubResource("ButtonGroup_pv7fp") text = "地块符号" script = SubResource("GDScript_ujwfx") [node name="CellGroup" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_group = SubResource("ButtonGroup_pv7fp") text = "地块组" script = SubResource("GDScript_a80ln") [node name="BorderType" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_group = SubResource("ButtonGroup_pv7fp") text = "边缘类型" script = SubResource("GDScript_ilxbw") [node name="BorderColor" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_group = SubResource("ButtonGroup_pv7fp") text = "边缘颜色" script = SubResource("GDScript_a3fsx") [node name="SceneAssign" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_group = SubResource("ButtonGroup_pv7fp") text = "场景分配" script = SubResource("GDScript_p75ne") [node name="CustomElements" type="Button" parent="PanelContainer/ScrollContainer/VBoxContainer/Modes"] layout_mode = 2 toggle_mode = true button_group = SubResource("ButtonGroup_pv7fp") text = "自定义元素" script = SubResource("GDScript_gb3rf") [node name="HSeparator2" type="HSeparator" parent="PanelContainer/ScrollContainer/VBoxContainer"] layout_mode = 2 [node name="EditControls" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer"] layout_mode = 2 size_flags_vertical = 0 mouse_filter = 2 alignment = 2 metadata/_edit_lock_ = true [node name="Symbols" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls"] unique_name_in_owner = true visible = false layout_mode = 2 [node name="SymbolContainer" type="HFlowContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Symbols"] unique_name_in_owner = true layout_mode = 2 [node name="Borders" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls"] unique_name_in_owner = true visible = false layout_mode = 2 [node name="BorderContainer" type="HFlowContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Borders"] unique_name_in_owner = true layout_mode = 2 [node name="Groups" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls"] unique_name_in_owner = true visible = false layout_mode = 2 [node name="Label" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Groups"] layout_mode = 2 text = "Group ID" horizontal_alignment = 1 [node name="CurrentGroup" type="SpinBox" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Groups"] unique_name_in_owner = true layout_mode = 2 [node name="Colors" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls"] unique_name_in_owner = true visible = false layout_mode = 2 [node name="CurrentColor" type="ColorPickerButton" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Colors"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 30) layout_mode = 2 edit_alpha = false [node name="CustomElements" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls"] unique_name_in_owner = true visible = false layout_mode = 2 [node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/CustomElements"] layout_mode = 2 [node name="Label" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/CustomElements/HBoxContainer"] layout_mode = 2 text = "Data" [node name="CustomData" type="LineEdit" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/CustomElements/HBoxContainer"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 [node name="NoElements" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/CustomElements"] unique_name_in_owner = true layout_mode = 2 text = "No Custom Elements Registered" autowrap_mode = 2 [node name="CustomElementContainer" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/CustomElements"] unique_name_in_owner = true layout_mode = 2 [node name="Shortcuts" type="VBoxContainer" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls"] unique_name_in_owner = true layout_mode = 2 [node name="ShortcutPick" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Shortcuts"] unique_name_in_owner = true layout_mode = 2 text = "Ctrl+Click: 从地图拾取" autowrap_mode = 2 [node name="Label2" type="Label" parent="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Shortcuts"] layout_mode = 2 text = "Shift+Click: 为整个房间设置" autowrap_mode = 2 [node name="MapOverlay" type="Control" parent="."] texture_filter = 1 clip_contents = true layout_mode = 2 size_flags_horizontal = 3 focus_mode = 2 script = ExtResource("2_w1wnt") [node name="ColorRect" type="ColorRect" parent="MapOverlay"] modulate = Color(0, 0, 0, 0.12549) show_behind_parent = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 [node name="Grid" type="Control" parent="MapOverlay"] unique_name_in_owner = true show_behind_parent = true clip_contents = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 3 mouse_filter = 2 [node name="Map" type="Control" parent="MapOverlay"] unique_name_in_owner = true show_behind_parent = true clip_contents = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 3 mouse_filter = 2 [node name="GhostMap" type="Control" parent="MapOverlay"] unique_name_in_owner = true modulate = Color(1, 1, 1, 0.12549) show_behind_parent = true clip_contents = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 3 mouse_filter = 2 [node name="StatusLabel" type="Label" parent="MapOverlay"] unique_name_in_owner = true layout_mode = 0 offset_right = 1.0 offset_bottom = 23.0 theme_override_styles/normal = SubResource("StyleBoxFlat_xiyo8") vertical_alignment = 1 [node name="FileDialog" type="FileDialog" parent="."] unique_name_in_owner = true title = "Open a File" size = Vector2i(345, 162) ok_button_text = "打开" file_mode = 0 filters = PackedStringArray("*.tscn") [connection signal="value_changed" from="PanelContainer/ScrollContainer/VBoxContainer/Layer/SpinBox2" to="." method="preview_layer_changed"] [connection signal="value_changed" from="PanelContainer/ScrollContainer/VBoxContainer/EditControls/Groups/CurrentGroup" to="MapOverlay" method="queue_redraw" unbinds=1] [connection signal="draw" from="MapOverlay/Grid" to="." method="_on_grid_draw"] [connection signal="draw" from="MapOverlay/GhostMap" to="." method="_on_ghost_map_draw"] [connection signal="file_selected" from="FileDialog" to="PanelContainer/ScrollContainer/VBoxContainer/Modes/SceneAssign" method="on_map_selected"]