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.
		
		
		
		
		
			
		
			
	
	
		
			77 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			GDScript
		
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			GDScript
		
	
| 
											2 years ago
										 | @tool | ||
|  | extends EditorPlugin | ||
|  | 
 | ||
|  | enum { TAB_EDITOR, TAB_OVERVIEW, TAB_MANAGE } | ||
|  | 
 | ||
|  | var main: Control | ||
|  | var modified: bool: | ||
|  | 	set(m): | ||
|  | 		if m == modified: | ||
|  | 			return | ||
|  | 		 | ||
|  | 		modified = m | ||
|  | 		dirty_toggled.emit(modified) | ||
|  | 
 | ||
|  | var theme_scanner: Timer | ||
|  | var prev_theme_state: Array | ||
|  | 
 | ||
|  | signal dirty_toggled | ||
|  | 
 | ||
|  | func _has_main_screen() -> bool: | ||
|  | 	return true | ||
|  | 
 | ||
|  | func _get_plugin_name() -> String: | ||
|  | 	return "MetSys" | ||
|  | 
 | ||
|  | func _get_plugin_icon() -> Texture2D: | ||
|  | 	return preload("res://addons/MetroidvaniaSystem/Icon.png") | ||
|  | 
 | ||
|  | func _enter_tree() -> void: | ||
|  | 	theme_scanner = Timer.new() | ||
|  | 	theme_scanner.wait_time = 0.6 | ||
|  | 	add_child(theme_scanner) | ||
|  | 	theme_scanner.timeout.connect(check_theme) | ||
|  | 	 | ||
|  | 	await get_tree().process_frame | ||
|  | 	if not get_singleton(): | ||
|  | 		add_autoload_singleton("MetSys", "res://addons/MetroidvaniaSystem/Nodes/Singleton.tscn") | ||
|  | 		ProjectSettings.save() | ||
|  | 		OS.set_restart_on_exit(true, ["-e"]) | ||
|  | 		get_tree().quit() | ||
|  | 		return | ||
|  | 	 | ||
|  | 	main = preload("res://addons/MetroidvaniaSystem/Database/Main.tscn").instantiate() | ||
|  | 	main.plugin = self | ||
|  | 	get_editor_interface().get_editor_main_screen().add_child(main) | ||
|  | 	main.hide() | ||
|  | 	 | ||
|  | 	get_singleton().settings.theme_changed.connect(func(): prev_theme_state.clear()) | ||
|  | 
 | ||
|  | func _exit_tree() -> void: | ||
|  | 	main.queue_free() | ||
|  | 
 | ||
|  | func _make_visible(visible: bool) -> void: | ||
|  | 	main.visible = visible | ||
|  | 	if visible: | ||
|  | 		theme_scanner.start() | ||
|  | 	else: | ||
|  | 		theme_scanner.stop() | ||
|  | 
 | ||
|  | func _save_external_data() -> void: | ||
|  | 	get_singleton().map_data.save_data() | ||
|  | 	modified = false | ||
|  | 
 | ||
|  | func _get_unsaved_status(for_scene: String) -> String: | ||
|  | 	if modified and for_scene.is_empty(): | ||
|  | 		return "MetSys map has been modified." | ||
|  | 	return "" | ||
|  | 
 | ||
|  | func get_singleton() -> MetroidvaniaSystem: | ||
|  | 	return get_tree().root.get_node_or_null(^"MetSys") | ||
|  | 
 | ||
|  | func check_theme(): | ||
|  | 	var theme := get_singleton().settings.theme | ||
|  | 	var changed := theme.check_for_changes(prev_theme_state) | ||
|  | 	if not changed.is_empty(): | ||
|  | 		get_singleton().theme_modified.emit(changed) |