extends Control var power_throttle_timeout : float var keyboard_height_offset : int var themes := [ preload("res://themes/day.tres") as Theme, preload("res://themes/night.tres") as Theme ] var themes_color := [ Color.white, Color.black ] onready var settings := Settings.new() onready var popup := get_node("/root/main/popup") as ModalPopup onready var file_picker := get_node("/root/main/file_picker") as FileDialog onready var stage := get_node("/root/main/stage") as Stage onready var database := get_node("/root/main/database") as Database onready var controls_sensible_to_keyboard := [ self, file_picker, ] func _init(): Physics2DServer.set_active(false) PhysicsServer.set_active(false) if OS.get_name() == "Android": var permissions := Array(OS.get_granted_permissions()) if permissions.has("android.permission.READ_EXTERNAL_STORAGE") == false \ or permissions.has("android.permission.WRITE_EXTERNAL_STORAGE") == false: OS.request_permissions() func _ready(): Input.set_use_accumulated_input(false) apply_theme(settings.get_value("theme_index", 0)) keyboard_height_offset = OS.get_virtual_keyboard_height() func _process(delta: float): var keyboard_height: int = OS.get_virtual_keyboard_height() keyboard_height = max(0, keyboard_height - keyboard_height_offset) for it in controls_sensible_to_keyboard: it.margin_bottom = -keyboard_height if power_throttle_timeout > 0.0: power_throttle_timeout -= delta else: Engine.target_fps = 10 func _input(event: InputEvent): Engine.target_fps = 0 power_throttle_timeout = 3.5 func _unhandled_input(event: InputEvent): Engine.target_fps = 0 power_throttle_timeout = 3.5 if event is InputEventKey && event.is_echo() == false && event.is_pressed() && event.scancode == KEY_ESCAPE: _notification(MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST) func _notification(what: int): if what == MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST: if popup.visible: popup.call_deferred("dismiss") elif file_picker.visible: file_picker.hide() elif stage.visible: stage.discard_action() elif database.selected_idx != -1: database.clear_selection() else: get_tree().quit() func toggle_theme(): var theme_idx := settings.get_value("theme_index", 0) as int var next_theme_idx = (theme_idx + 1) % themes.size() apply_theme(next_theme_idx) settings.set_value("theme_index", next_theme_idx) func apply_theme(theme_idx: int) -> void: self.theme = themes[theme_idx] VisualServer.set_default_clear_color(themes_color[theme_idx])