|
|
|
|
@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)
|