You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			418 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
		
		
			
		
	
	
			418 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Plaintext
		
	
| 
								 
											2 years ago
										 
									 | 
							
								[gd_scene load_steps=8 format=3 uid="uid://df5fuj4vjr11p"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[ext_resource type="Script" path="res://addons/MetroidvaniaSystem/Database/MapViewer.gd" id="1_s16ok"]
							 | 
						||
| 
								 | 
							
								[ext_resource type="Script" path="res://addons/MetroidvaniaSystem/Database/MapOverlay.gd" id="2_pgyha"]
							 | 
						||
| 
								 | 
							
								[ext_resource type="Script" path="res://addons/MetroidvaniaSystem/Scripts/EditorIconButton.gd" id="2_tjngl"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[sub_resource type="ButtonGroup" id="ButtonGroup_lmh17"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[sub_resource type="GDScript" id="GDScript_fjyy3"]
							 | 
						||
| 
								 | 
							
								resource_name = "Settings"
							 | 
						||
| 
								 | 
							
								script/source = "@tool
							 | 
						||
| 
								 | 
							
								extends Button
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var plugin: EditorPlugin
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func _enter_tree() -> void:
							 | 
						||
| 
								 | 
							
									if owner:
							 | 
						||
| 
								 | 
							
										plugin = owner.plugin
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func _ready() -> void:
							 | 
						||
| 
								 | 
							
									if not plugin:
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									_pressed()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									await get_tree().process_frame
							 | 
						||
| 
								 | 
							
									for data in MetSys.settings.collectible_list:
							 | 
						||
| 
								 | 
							
										var collectible := add_collectible()
							 | 
						||
| 
								 | 
							
										collectible.set_data(data)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func _pressed() -> void:
							 | 
						||
| 
								 | 
							
									for button in button_group.get_buttons():
							 | 
						||
| 
								 | 
							
										button.exit()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									%Settings.show()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func exit():
							 | 
						||
| 
								 | 
							
									%Settings.hide()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func add_collectible() -> Control:
							 | 
						||
| 
								 | 
							
									var collectible := preload(\"res://addons/MetroidvaniaSystem/Nodes/CollectibleElement.tscn\").instantiate()
							 | 
						||
| 
								 | 
							
									%CollectibleList.add_child(collectible)
							 | 
						||
| 
								 | 
							
									collectible.save_request.connect(save_collectible_list)
							 | 
						||
| 
								 | 
							
									return collectible
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func save_collectible_list():
							 | 
						||
| 
								 | 
							
									var list: Array[Dictionary]
							 | 
						||
| 
								 | 
							
									for collectible in %CollectibleList.get_children():
							 | 
						||
| 
								 | 
							
										if not collectible.is_queued_for_deletion():
							 | 
						||
| 
								 | 
							
											list.append(collectible.get_data())
							 | 
						||
| 
								 | 
							
									MetSys.settings.collectible_list = list
							 | 
						||
| 
								 | 
							
									ResourceSaver.save(MetSys.settings)
							 | 
						||
| 
								 | 
							
								"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[sub_resource type="GDScript" id="GDScript_dicqo"]
							 | 
						||
| 
								 | 
							
								resource_name = "Finder"
							 | 
						||
| 
								 | 
							
								script/source = "@tool
							 | 
						||
| 
								 | 
							
								extends Button
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@onready var scan_progress: ProgressBar = %ScanProgress
							 | 
						||
| 
								 | 
							
								@onready var show_on_map: CheckButton = %ShowOnMap
							 | 
						||
| 
								 | 
							
								@onready var summary: VBoxContainer = %Summary
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var thread: Thread
							 | 
						||
| 
								 | 
							
								var found_elements: Array[Dictionary]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func _ready() -> void:
							 | 
						||
| 
								 | 
							
									scan_progress.hide()
							 | 
						||
| 
								 | 
							
									show_on_map.hide()
							 | 
						||
| 
								 | 
							
									exit()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func _pressed() -> void:
							 | 
						||
| 
								 | 
							
									for button in button_group.get_buttons():
							 | 
						||
| 
								 | 
							
										button.exit()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									%Finder.show()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func exit():
							 | 
						||
| 
								 | 
							
									%Finder.hide()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func start_scan() -> void:
							 | 
						||
| 
								 | 
							
									summary.hide()
							 | 
						||
| 
								 | 
							
									%ScanButton.disabled = true
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									var collectible_list: Array[Dictionary]
							 | 
						||
| 
								 | 
							
									for item in %CollectibleList.get_children():
							 | 
						||
| 
								 | 
							
										collectible_list.append(item.get_data2())
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									found_elements.clear()
							 | 
						||
| 
								 | 
							
									for item in summary.get_children():
							 | 
						||
| 
								 | 
							
										item.free()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									thread = Thread.new()
							 | 
						||
| 
								 | 
							
									thread.start(scan_maps.bind(collectible_list))
							 | 
						||
| 
								 | 
							
									set_process(true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func _process(delta: float) -> void:
							 | 
						||
| 
								 | 
							
									if not thread:
							 | 
						||
| 
								 | 
							
										set_process(false)
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									if thread.is_alive():
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									thread.wait_to_finish()
							 | 
						||
| 
								 | 
							
									thread = null
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									scan_progress.hide()
							 | 
						||
| 
								 | 
							
									show_on_map.show()
							 | 
						||
| 
								 | 
							
									summary.show()
							 | 
						||
| 
								 | 
							
									%ScanButton.disabled = false
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									for item in %CollectibleList.get_children():
							 | 
						||
| 
								 | 
							
										var data: Dictionary = item.get_data2()
							 | 
						||
| 
								 | 
							
										var count := 0
							 | 
						||
| 
								 | 
							
										var count_label := setup_header(data)
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										for found in found_elements:
							 | 
						||
| 
								 | 
							
											if found.element != data.element:
							 | 
						||
| 
								 | 
							
												continue
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
											count += 1
							 | 
						||
| 
								 | 
							
											setup_found(found)
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										count_label.text = str(count)
							 | 
						||
| 
								 | 
							
										summary.add_child(HSeparator.new())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func scan_maps(element_list: Array[Dictionary]):
							 | 
						||
| 
								 | 
							
									Thread.set_thread_safety_checks_enabled(false)
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									var maps: Array[String]
							 | 
						||
| 
								 | 
							
									var folders: Array[String]
							 | 
						||
| 
								 | 
							
									folders.append(MetSys.settings.map_root_folder)
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									while not folders.is_empty():
							 | 
						||
| 
								 | 
							
										var folder := folders.pop_back()
							 | 
						||
| 
								 | 
							
										folders.append_array(Array(DirAccess.get_directories_at(folder)).map(func(subfolder: String) -> String: return folder.path_join(subfolder)))
							 | 
						||
| 
								 | 
							
										maps.append_array(Array(DirAccess.get_files_at(folder)).map(func(file: String) -> String: return folder.path_join(file)))
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									scan_progress.max_value = maps.size()
							 | 
						||
| 
								 | 
							
									scan_progress.value = 0
							 | 
						||
| 
								 | 
							
									scan_progress.show()
							 | 
						||
| 
								 | 
							
									show_on_map.hide()
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									for map in maps:
							 | 
						||
| 
								 | 
							
										var lines := FileAccess.open(map, FileAccess.READ).get_as_text().split(\"\\n\")
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										var current_element: Dictionary
							 | 
						||
| 
								 | 
							
										for line in lines:
							 | 
						||
| 
								 | 
							
											if not current_element.is_empty():
							 | 
						||
| 
								 | 
							
												if line.begins_with(\"[\"):
							 | 
						||
| 
								 | 
							
													found_elements.append(current_element)
							 | 
						||
| 
								 | 
							
													current_element = {}
							 | 
						||
| 
								 | 
							
												elif line.begins_with(\"position =\"):
							 | 
						||
| 
								 | 
							
													current_element.position = str_to_var(line.get_slice(\"=\", 1))
							 | 
						||
| 
								 | 
							
												else:
							 | 
						||
| 
								 | 
							
													continue
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
											for element in element_list:
							 | 
						||
| 
								 | 
							
												if line.begins_with(\"[node name=\\\"%s\" % element.element):
							 | 
						||
| 
								 | 
							
													current_element = element.duplicate()
							 | 
						||
| 
								 | 
							
													current_element.map = map
							 | 
						||
| 
								 | 
							
													break
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										if not current_element.is_empty():
							 | 
						||
| 
								 | 
							
											found_elements.append(current_element)
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										scan_progress.value += 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func complete_element(element: Dictionary):
							 | 
						||
| 
								 | 
							
									var found := preload(\"res://addons/MetroidvaniaSystem/Nodes/CollectibleFoundItem.tscn\").instantiate()
							 | 
						||
| 
								 | 
							
									found.set_element(element)
							 | 
						||
| 
								 | 
							
									found.hovered.connect(owner._on_item_hover.bind(found))
							 | 
						||
| 
								 | 
							
									summary.add_child.call_deferred(found)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func setup_header(data: Dictionary) -> Label:
							 | 
						||
| 
								 | 
							
									var hbox := HBoxContainer.new()
							 | 
						||
| 
								 | 
							
									summary.add_child(hbox)
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									var tex := TextureRect.new()
							 | 
						||
| 
								 | 
							
									hbox.add_child(tex)
							 | 
						||
| 
								 | 
							
									tex.texture = data.get(\"icon\")
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									var label := Label.new()
							 | 
						||
| 
								 | 
							
									hbox.add_child(label)
							 | 
						||
| 
								 | 
							
									label.text = data.element
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									label = Label.new()
							 | 
						||
| 
								 | 
							
									hbox.add_child(label)
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									return label
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func setup_found(data: Dictionary):
							 | 
						||
| 
								 | 
							
									var label := Label.new()
							 | 
						||
| 
								 | 
							
									summary.add_child(label)
							 | 
						||
| 
								 | 
							
									label.mouse_filter = Control.MOUSE_FILTER_PASS
							 | 
						||
| 
								 | 
							
									label.set_meta(&\"data\", data)
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									data.map = data.map.trim_prefix(MetSys.settings.map_root_folder)
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									var room := MetSys.map_data.get_cells_assigned_to(data.map)
							 | 
						||
| 
								 | 
							
									if \"position\" in data and not room.is_empty():
							 | 
						||
| 
								 | 
							
										var top_left := Vector2i.MAX
							 | 
						||
| 
								 | 
							
										for coords in room:
							 | 
						||
| 
								 | 
							
											top_left.x = mini(coords.x, top_left.x)
							 | 
						||
| 
								 | 
							
											top_left.y = mini(coords.y, top_left.y)
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										var pos := top_left + Vector2i(data.position / MetSys.settings.in_game_cell_size)
							 | 
						||
| 
								 | 
							
										data.coords = Vector3i(pos.x, pos.y, room[0].z)
							 | 
						||
| 
								 | 
							
										label.text = \"%s %s\" % [data.map, data.coords]
							 | 
						||
| 
								 | 
							
									else:
							 | 
						||
| 
								 | 
							
										label.text = \"%s\" % data.map
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									label.mouse_entered.connect(owner._on_item_hover.bind(label))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func toggle_display_on_map(toggled_on: bool) -> void:
							 | 
						||
| 
								 | 
							
									if toggled_on:
							 | 
						||
| 
								 | 
							
										owner.extra_draw = draw_collectibles_on_map
							 | 
						||
| 
								 | 
							
									else:
							 | 
						||
| 
								 | 
							
										owner.extra_draw = Callable()
							 | 
						||
| 
								 | 
							
									owner.map_overlay.queue_redraw()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func draw_collectibles_on_map(canvas_item: CanvasItem):
							 | 
						||
| 
								 | 
							
									for element in found_elements:
							 | 
						||
| 
								 | 
							
										var icon: Texture2D = element.icon
							 | 
						||
| 
								 | 
							
										var target_size := icon.get_size() * (minf(MetSys.CELL_SIZE.x, MetSys.CELL_SIZE.y) / minf(icon.get_width(), icon.get_height()) * 0.9)
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
										if \"coords\" in element:
							 | 
						||
| 
								 | 
							
											var coords: Vector3i = element.coords
							 | 
						||
| 
								 | 
							
											if coords.z != owner.current_layer:
							 | 
						||
| 
								 | 
							
												continue
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
											var pos := Vector2(coords.x + owner.map_offset.x, coords.y + owner.map_offset.y) * MetSys.CELL_SIZE
							 | 
						||
| 
								 | 
							
											canvas_item.draw_texture_rect(icon, Rect2(pos + MetSys.CELL_SIZE * 0.5 - target_size * 0.5, target_size), false)
							 | 
						||
| 
								 | 
							
										else:
							 | 
						||
| 
								 | 
							
											for coords in MetSys.map_data.get_cells_assigned_to(element.map):
							 | 
						||
| 
								 | 
							
												if coords.z != owner.current_layer:
							 | 
						||
| 
								 | 
							
													break
							 | 
						||
| 
								 | 
							
												
							 | 
						||
| 
								 | 
							
												var pos := Vector2(coords.x + owner.map_offset.x, coords.y + owner.map_offset.y) * MetSys.CELL_SIZE
							 | 
						||
| 
								 | 
							
												canvas_item.draw_texture_rect(icon, Rect2(pos + MetSys.CELL_SIZE * 0.5 - target_size * 0.5, target_size), false)
							 | 
						||
| 
								 | 
							
												break
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qbvjg"]
							 | 
						||
| 
								 | 
							
								content_margin_left = 4.0
							 | 
						||
| 
								 | 
							
								content_margin_right = 4.0
							 | 
						||
| 
								 | 
							
								bg_color = Color(0, 0, 0, 0.501961)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="MapViewer" type="HBoxContainer"]
							 | 
						||
| 
								 | 
							
								anchors_preset = 15
							 | 
						||
| 
								 | 
							
								anchor_right = 1.0
							 | 
						||
| 
								 | 
							
								anchor_bottom = 1.0
							 | 
						||
| 
								 | 
							
								grow_horizontal = 2
							 | 
						||
| 
								 | 
							
								grow_vertical = 2
							 | 
						||
| 
								 | 
							
								script = ExtResource("1_s16ok")
							 | 
						||
| 
								 | 
							
								metadata/_edit_lock_ = true
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Panel" type="PanelContainer" parent="."]
							 | 
						||
| 
								 | 
							
								custom_minimum_size = Vector2(200, 0)
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="ScrollContainer" type="ScrollContainer" parent="Panel"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="VBoxContainer" type="VBoxContainer" parent="Panel/ScrollContainer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 3
							 | 
						||
| 
								 | 
							
								size_flags_vertical = 3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Layer" type="VBoxContainer" parent="Panel/ScrollContainer/VBoxContainer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								mouse_filter = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Label" type="Label" parent="Panel/ScrollContainer/VBoxContainer/Layer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								text = "当前层"
							 | 
						||
| 
								 | 
							
								horizontal_alignment = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="CurrentLayer" type="SpinBox" parent="Panel/ScrollContainer/VBoxContainer/Layer"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 4
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="RecenterButton" type="Button" parent="Panel/ScrollContainer/VBoxContainer/Layer"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 4
							 | 
						||
| 
								 | 
							
								text = "重置视角"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="CheckButton" type="CheckButton" parent="Panel/ScrollContainer/VBoxContainer/Layer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 4
							 | 
						||
| 
								 | 
							
								text = "预览映射"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="HSeparator" type="HSeparator" parent="Panel/ScrollContainer/VBoxContainer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Modes" type="VBoxContainer" parent="Panel/ScrollContainer/VBoxContainer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Settings" type="Button" parent="Panel/ScrollContainer/VBoxContainer/Modes"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								toggle_mode = true
							 | 
						||
| 
								 | 
							
								button_pressed = true
							 | 
						||
| 
								 | 
							
								button_group = SubResource("ButtonGroup_lmh17")
							 | 
						||
| 
								 | 
							
								text = "收集品设置"
							 | 
						||
| 
								 | 
							
								script = SubResource("GDScript_fjyy3")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Finder" type="Button" parent="Panel/ScrollContainer/VBoxContainer/Modes"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								toggle_mode = true
							 | 
						||
| 
								 | 
							
								button_group = SubResource("ButtonGroup_lmh17")
							 | 
						||
| 
								 | 
							
								text = "收集品查找"
							 | 
						||
| 
								 | 
							
								script = SubResource("GDScript_dicqo")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="HSeparator2" type="HSeparator" parent="Panel/ScrollContainer/VBoxContainer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="EditControls" type="VBoxContainer" parent="Panel/ScrollContainer/VBoxContainer"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_vertical = 3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Settings" type="VBoxContainer" parent="Panel/ScrollContainer/VBoxContainer/EditControls"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								visible = false
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_vertical = 3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="ScrollContainer" type="ScrollContainer" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Settings"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_vertical = 3
							 | 
						||
| 
								 | 
							
								vertical_scroll_mode = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="CollectibleList" type="VBoxContainer" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Settings/ScrollContainer"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Button" type="Button" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Settings"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								icon_alignment = 1
							 | 
						||
| 
								 | 
							
								script = ExtResource("2_tjngl")
							 | 
						||
| 
								 | 
							
								icon_name = "Add"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Finder" type="VBoxContainer" parent="Panel/ScrollContainer/VBoxContainer/EditControls"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								visible = false
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_vertical = 3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="ScanButton" type="Button" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Finder"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								text = "Scan Maps"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="ScanProgress" type="ProgressBar" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Finder"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								visible = false
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="ShowOnMap" type="CheckButton" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Finder"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								visible = false
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								text = "Display on Map"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="ScrollContainer" type="ScrollContainer" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Finder"]
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_vertical = 3
							 | 
						||
| 
								 | 
							
								horizontal_scroll_mode = 3
							 | 
						||
| 
								 | 
							
								vertical_scroll_mode = 2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="Summary" type="VBoxContainer" parent="Panel/ScrollContainer/VBoxContainer/EditControls/Finder/ScrollContainer"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 3
							 | 
						||
| 
								 | 
							
								size_flags_vertical = 0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[node name="MapOverlay" type="Control" parent="."]
							 | 
						||
| 
								 | 
							
								clip_contents = true
							 | 
						||
| 
								 | 
							
								layout_mode = 2
							 | 
						||
| 
								 | 
							
								size_flags_horizontal = 3
							 | 
						||
| 
								 | 
							
								script = ExtResource("2_pgyha")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[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="Map" type="Control" parent="MapOverlay"]
							 | 
						||
| 
								 | 
							
								unique_name_in_owner = true
							 | 
						||
| 
								 | 
							
								show_behind_parent = true
							 | 
						||
| 
								 | 
							
								anchors_preset = 0
							 | 
						||
| 
								 | 
							
								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_qbvjg")
							 | 
						||
| 
								 | 
							
								vertical_alignment = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[connection signal="toggled" from="Panel/ScrollContainer/VBoxContainer/Layer/CheckButton" to="." method="toggle_mapped"]
							 | 
						||
| 
								 | 
							
								[connection signal="pressed" from="Panel/ScrollContainer/VBoxContainer/EditControls/Settings/Button" to="Panel/ScrollContainer/VBoxContainer/Modes/Settings" method="add_collectible"]
							 | 
						||
| 
								 | 
							
								[connection signal="pressed" from="Panel/ScrollContainer/VBoxContainer/EditControls/Finder/ScanButton" to="Panel/ScrollContainer/VBoxContainer/Modes/Finder" method="start_scan"]
							 | 
						||
| 
								 | 
							
								[connection signal="toggled" from="Panel/ScrollContainer/VBoxContainer/EditControls/Finder/ShowOnMap" to="Panel/ScrollContainer/VBoxContainer/Modes/Finder" method="toggle_display_on_map"]
							 |