From f16de043c802afd0369f91c7c55e3d7ff2e40aab Mon Sep 17 00:00:00 2001 From: Russell Matney Date: Wed, 29 Jan 2025 20:59:28 -0500 Subject: [PATCH] wip: drop actionInputIcon in favor of bones's icon comp --- addons/bones/actions/ActionInputIcon.tscn | 1 - src/Store.gd | 61 ++-- src/events/PuzzleCompleted.gd | 2 +- src/hud/HUD.gd | 97 +++--- src/hud/HUD.tscn | 4 +- src/menus/controls/ActionInputIcon.gd | 391 ---------------------- src/menus/controls/ActionInputIcon.tscn | 15 - src/menus/worldmap/PuzzleMap.tscn | 111 +++++- src/themes/winter/Goal.tscn | 1 + src/ui/components/Jumbotron.gd | 6 +- 10 files changed, 196 insertions(+), 493 deletions(-) delete mode 100644 src/menus/controls/ActionInputIcon.gd delete mode 100644 src/menus/controls/ActionInputIcon.tscn diff --git a/addons/bones/actions/ActionInputIcon.tscn b/addons/bones/actions/ActionInputIcon.tscn index 58e53876..8ba7a89f 100644 --- a/addons/bones/actions/ActionInputIcon.tscn +++ b/addons/bones/actions/ActionInputIcon.tscn @@ -4,7 +4,6 @@ [ext_resource type="Script" path="res://addons/bones/actions/ActionInputIcon.gd" id="1_ui3le"] [node name="ActionInputIcon" type="TextureRect"] -visible = false custom_minimum_size = Vector2(30, 0) offset_right = 30.0 offset_bottom = 48.0 diff --git a/src/Store.gd b/src/Store.gd index 0280d4a4..fc272495 100644 --- a/src/Store.gd +++ b/src/Store.gd @@ -3,7 +3,7 @@ extends Node ## _ready ########################################### -func _enter_tree(): +func _enter_tree() -> void: load_game() ## data store ########################################### @@ -12,25 +12,25 @@ var state: GameState var events: Array[Event] = [] -func save_game(): - events.map(func(ev): +func save_game() -> void: + events.map(func(ev: Event) -> void: if ev == null: Log.warn("Cannot save null event!", ev) ) SaveGame.save_game(get_tree(), { - events=events.filter(func(ev): return ev != null)\ + events=events.filter(func(ev: Event) -> bool: return ev != null)\ .map(Pandora.serialize), }) # validation and basic recovery from crashes on loaded data? # i.e. missing puzzle_sets, at least set the initial ones and get to playable state -func load_game(): - var data = SaveGame.load_game(get_tree()) +func load_game() -> void: + var data: Dictionary = SaveGame.load_game(get_tree()) if not "events" in data or len(data.events) == 0: events = initial_events() else: - events.assign(data.events\ - .filter(func(ev): return ev != null)\ + events.assign((data.events as Array)\ + .filter(func(ev: Event) -> bool: return ev != null)\ # TODO handle crashes when events can't deserialize .map(Pandora.deserialize)) @@ -40,7 +40,7 @@ func load_game(): events=len(events), puzzle_sets=len(state.puzzle_sets), themes=len(state.themes) }) -func reset_game_data(): +func reset_game_data() -> void: SaveGame.delete_save() load_game() @@ -54,7 +54,7 @@ func initial_events() -> Array[Event]: func get_puzzle_sets() -> Array[PuzzleSet]: return state.puzzle_sets -func find_puzzle_set(ps: PuzzleSet): +func find_puzzle_set(ps: PuzzleSet) -> PuzzleSet: return state.find_puzzle_set(ps) func get_themes() -> Array[PuzzleTheme]: @@ -63,11 +63,11 @@ func get_themes() -> Array[PuzzleTheme]: func get_events() -> Array[Event]: return events -func find_events(filter_fn) -> Array[Event]: +func find_events(filter_fn: Callable) -> Array[Event]: return events.filter(filter_fn) -func find_event(filter_fn) -> Event: - var evs = find_events(filter_fn) +func find_event(filter_fn: Callable) -> Event: + var evs: Array = find_events(filter_fn) if len(evs) > 0: return evs[0] else: @@ -75,8 +75,8 @@ func find_event(filter_fn) -> Event: ## events ########################################### -func complete_puzzle_set(puz: PuzzleSet): - var event = find_event(func(ev): return PuzzleSetCompleted.is_matching_event(ev, puz)) +func complete_puzzle_set(puz: PuzzleSet) -> void: + var event: PuzzleSetCompleted = find_event(func(ev: Event) -> bool: return PuzzleSetCompleted.is_matching_event(ev, puz)) if event: event.inc_count() elif not event: @@ -85,8 +85,8 @@ func complete_puzzle_set(puz: PuzzleSet): events.append(event) save_game() -func complete_puzzle_index(puz: PuzzleSet, idx: int): - var event = find_event(func(ev): return PuzzleCompleted.is_matching_event(ev, puz, idx)) +func complete_puzzle_index(puz: PuzzleSet, idx: int) -> void: + var event: PuzzleCompleted = find_event(func(ev: Event) -> bool: return PuzzleCompleted.is_matching_event(ev, puz, idx)) if event: event.inc_count() elif not event: @@ -94,20 +94,21 @@ func complete_puzzle_index(puz: PuzzleSet, idx: int): state.apply_event(event) events.append(event) - var skip_event = find_event(func(ev): - return PuzzleSkipped.is_matching_event(ev, puz, idx) and ev.is_active()) + var skip_event: Event = find_event(func(ev: Event) -> bool: + return PuzzleSkipped.is_matching_event(ev, puz, idx) and (ev as PuzzleSkipped).is_active()) if skip_event: - skip_event.mark_inactive() + (skip_event as PuzzleSkipped).mark_inactive() # NOTE the in-place (passed) puzzle set is not updated state.apply_event(skip_event) - var p = state.find_puzzle_set(event.get_puzzle_set()) + @warning_ignore("unsafe_method_access") + var p: PuzzleSet = state.find_puzzle_set(event.get_puzzle_set() as PuzzleSet) p.attach_game_def_stats() save_game() -func skip_puzzle(puz: PuzzleSet, idx: int): - var event = find_event(func(ev): return PuzzleSkipped.is_matching_event(ev, puz, idx)) +func skip_puzzle(puz: PuzzleSet, idx: int) -> void: + var event: PuzzleSkipped = find_event(func(ev: Event) -> bool: return PuzzleSkipped.is_matching_event(ev, puz, idx)) if event: event.inc_count() elif not event: @@ -120,8 +121,8 @@ func skip_puzzle(puz: PuzzleSet, idx: int): save_game() -func unlock_puzzle_set(puz: PuzzleSet): - var event = find_event(func(ev): return PuzzleSetUnlocked.is_matching_event(ev, puz)) +func unlock_puzzle_set(puz: PuzzleSet) -> void: + var event: Event = find_event(func(ev: Event) -> bool: return PuzzleSetUnlocked.is_matching_event(ev, puz)) if event: event.inc_count() elif not event: @@ -133,17 +134,17 @@ func unlock_puzzle_set(puz: PuzzleSet): save_game() # Deprecated -func unlock_next_puzzle_set(puz: PuzzleSet): - var next = puz.get_next_puzzle_set() +func unlock_next_puzzle_set(puz: PuzzleSet) -> void: + var next: PuzzleSet = puz.get_next_puzzle_set() if next: unlock_puzzle_set(next) else: Log.warn("No next puzzle to unlock!", puz) -func unlock_all_puzzle_sets(): +func unlock_all_puzzle_sets() -> void: Log.warn("Unlocking all puzzle sets!") - for ps in state.puzzle_sets: - var event = find_event(func(ev): return PuzzleSetUnlocked.is_matching_event(ev, ps)) + for ps: PuzzleSet in state.puzzle_sets: + var event: PuzzleSetUnlocked = find_event(func(ev: Event) -> bool: return PuzzleSetUnlocked.is_matching_event(ev, ps)) if event: continue event = PuzzleSetUnlocked.new_event(ps) diff --git a/src/events/PuzzleCompleted.gd b/src/events/PuzzleCompleted.gd index 831bc758..079155a4 100644 --- a/src/events/PuzzleCompleted.gd +++ b/src/events/PuzzleCompleted.gd @@ -29,7 +29,7 @@ static func new_event(puzzle_set: PuzzleSet, puzzle_idx: int) -> PuzzleCompleted }) return event -static func is_matching_event(event: PuzzleCompleted, puzzle_set: PuzzleSet, idx: int) -> bool: +static func is_matching_event(event: Event, puzzle_set: PuzzleSet, idx: int) -> bool: if not event is PuzzleCompleted: return false return (event as PuzzleCompleted).get_puzzle_set_id() == puzzle_set.get_entity_id() and \ diff --git a/src/hud/HUD.gd b/src/hud/HUD.gd index 280994b6..20abd7a6 100644 --- a/src/hud/HUD.gd +++ b/src/hud/HUD.gd @@ -3,19 +3,20 @@ class_name HUD ## vars ######################################################## -@onready var puzzle_num_label = $%LevelNum -@onready var puzzle_message_label = $%LevelMessage -@onready var dots_remaining_label = $%DotsRemaining +@onready var puzzle_num_label: RichTextLabel = $%LevelNum +@onready var puzzle_message_label: RichTextLabel = $%LevelMessage +@onready var dots_remaining_label: RichTextLabel = $%DotsRemaining -@onready var undo_control_hint = $%UndoControlHint -@onready var reset_control_hint = $%ResetControlHint -@onready var undo_label = $%UndoLabel -@onready var reset_label = $%ResetLabel -@onready var undo_input_icon = $%UndoInputIcon -@onready var reset_input_icon = $%ResetInputIcon +@onready var undo_control_hint: BoxContainer = $%UndoControlHint +@onready var reset_control_hint: BoxContainer = $%ResetControlHint +@onready var undo_label: RichTextLabel = $%UndoLabel +@onready var reset_label: RichTextLabel = $%ResetLabel -@onready var undo_button = $%UndoButton -@onready var reset_button = $%ResetButton +@onready var undo_input_icon: ActionInputIcon = $%UndoInputIcon +@onready var reset_input_icon: ActionInputIcon = $%ResetInputIcon + +@onready var undo_button: Button = $%UndoButton +@onready var reset_button: Button = $%ResetButton signal undo_pressed signal reset_pressed @@ -24,25 +25,25 @@ var puzzle_def: PuzzleDef ## ready ######################################################## -func _ready(): +func _ready() -> void: set_control_icons() - InputHelper.device_changed.connect(func(_device, _di): set_control_icons()) - InputHelper.joypad_changed.connect(func(_di, _connected): set_control_icons()) - InputHelper.keyboard_input_changed.connect(func(_action, _event): set_control_icons()) - InputHelper.joypad_input_changed.connect(func(_action, _event): set_control_icons()) + InputHelper.device_changed.connect(func(_device: String, _di: int) -> void: set_control_icons()) + InputHelper.joypad_changed.connect(func(_di: int, _connected: bool) -> void: set_control_icons()) + InputHelper.keyboard_input_changed.connect(func(_action: String, _event: InputEvent) -> void: set_control_icons()) + InputHelper.joypad_input_changed.connect(func(_action: String, _event: InputEvent) -> void: set_control_icons()) - reset_button.pressed.connect(func(): reset_pressed.emit()) - undo_button.pressed.connect(func(): undo_pressed.emit()) + reset_button.pressed.connect(func() -> void: reset_pressed.emit()) + undo_button.pressed.connect(func() -> void: undo_pressed.emit()) -func set_control_icons(): +func set_control_icons() -> void: undo_input_icon.set_icon_for_action("ui_undo") reset_input_icon.set_icon_for_action("restart") ## unhandled_input ######################################################## -func _unhandled_input(event): - var is_restart_held = Trolls.is_restart_held(event) - var is_restart_released = Trolls.is_restart_released(event) +func _unhandled_input(event: InputEvent) -> void: + var is_restart_held: bool = Trolls.is_restart_held(event) + var is_restart_released: bool = Trolls.is_restart_released(event) if is_restart_held: show_resetting() @@ -51,9 +52,9 @@ func _unhandled_input(event): ## update ######################################################## -var last_puzzle_update +var last_puzzle_update: Dictionary -func update_state(data): +func update_state(data: Dictionary) -> void: last_puzzle_update = data puzzle_def = data.puzzle_def @@ -63,9 +64,9 @@ func update_state(data): ## puzzle number ######################################################## -func update_puzzle_number(entry): +func update_puzzle_number(entry: Dictionary) -> void: if "puzzles_remaining" in entry: - var rem = entry.puzzles_remaining + var rem: int = entry.puzzles_remaining if rem == 0: puzzle_num_label.text = "[center]Puzzle set complete![/center]" elif rem == 1: @@ -75,50 +76,50 @@ func update_puzzle_number(entry): ## message ######################################################## -func update_puzzle_message(): +func update_puzzle_message() -> void: if puzzle_def.get_message(): puzzle_message_label.text = "[center]%s[/center]" % puzzle_def.get_message() ## dots remaining ######################################################## -func update_dots_remaining(entry): +func update_dots_remaining(entry: Dictionary) -> void: if "dots_total" in entry: dots_remaining_label.text = "[center]%s dots left[/center]" % entry.dots_remaining ## controls ######################################################## -func controls(): - var cts = [] +func controls() -> Array: + var cts: Array = [] if not resetting: cts.append(reset_control_hint) if not undoing: cts.append(undo_control_hint) return cts -var fade_controls_tween -func fade_controls(): +var fade_controls_tween: Tween +func fade_controls() -> void: if fade_controls_tween != null and fade_controls_tween.is_running(): return fade_controls_tween = create_tween() # wait a bit before fading fade_controls_tween.tween_interval(0.8) - controls().map(func(c): + controls().map(func(c: CanvasItem) -> void: fade_controls_tween.parallel().tween_property(c, "modulate:a", 0.5, 0.8)) -var show_controls_tween -func show_controls(force=false): +var show_controls_tween: Tween +func show_controls(force: bool = false) -> void: Log.pr("showing controls (force: ", force, ")") if show_controls_tween != null and show_controls_tween.is_running(): show_controls_tween.kill() if not force: return show_controls_tween = create_tween() - controls().map(func(c): + controls().map(func(c: CanvasItem) -> void: show_controls_tween.parallel().tween_property(c, "modulate:a", 1.0, 0.6)) # could probably just use a timer, but meh -var controls_tween -func restart_fade_in_controls_tween(): +var controls_tween: Tween +func restart_fade_in_controls_tween() -> void: fade_controls() if controls_tween != null: controls_tween.kill() @@ -127,10 +128,10 @@ func restart_fade_in_controls_tween(): ## undoing ######################################################## -var undoing -var undo_tween -var undo_t = 0.3 -func animate_undo(): +var undoing: bool +var undo_tween: Tween +var undo_t: float = 0.3 +func animate_undo() -> void: undoing = true undo_control_hint.set_pivot_offset(undo_control_hint.size/2) @@ -142,14 +143,14 @@ func animate_undo(): undo_tween.tween_property(undo_control_hint, "modulate:a", 1.0, undo_t/4) undo_tween.parallel().tween_property(undo_control_hint, "scale", Vector2.ONE*1.4, undo_t/2) undo_tween.tween_property(undo_control_hint, "scale", Vector2.ONE, undo_t/2) - undo_tween.tween_callback(func(): undoing = false) + undo_tween.tween_callback(func() -> void: undoing = false) ## restarting ######################################################## -var resetting -var reset_tween -func show_resetting(): - var hold_t = DHData.reset_hold_t +var resetting: bool +var reset_tween: Tween +func show_resetting() -> void: + var hold_t: float = DHData.reset_hold_t resetting = true reset_label.text = "Hold..." @@ -163,7 +164,7 @@ func show_resetting(): # presumably we're back at the beginning reset_tween.tween_callback(hide_resetting) -func hide_resetting(): +func hide_resetting() -> void: resetting = false if reset_tween != null: reset_tween.kill() diff --git a/src/hud/HUD.tscn b/src/hud/HUD.tscn index c8963d66..af44f63e 100644 --- a/src/hud/HUD.tscn +++ b/src/hud/HUD.tscn @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://src/hud/HUD.gd" id="1_5wqol"] [ext_resource type="FontFile" uid="uid://b1c3fty8httvk" path="res://addons/bones/fonts/at01.ttf" id="2_1a27s"] [ext_resource type="PackedScene" uid="uid://drbmqe5fgckq2" path="res://src/ui/notifications/Notifications.tscn" id="3_fxnlu"] -[ext_resource type="PackedScene" path="res://addons/bones/actions/ActionInputIcon.tscn" id="3_ocg6b"] +[ext_resource type="PackedScene" uid="uid://dq1rff2gu3q68" path="res://addons/bones/actions/ActionInputIcon.tscn" id="3_ocg6b"] [ext_resource type="Texture2D" uid="uid://o2pra12ik1cg" path="res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_z.png" id="4_bq2ar"] [ext_resource type="Texture2D" uid="uid://cthfejrkt0eh7" path="res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_r.png" id="5_eiimu"] [ext_resource type="Theme" uid="uid://cul4fuxbykddp" path="res://src/ui/BlueButtonTheme.tres" id="5_h4785"] @@ -109,7 +109,6 @@ layout_mode = 2 [node name="UndoInputIcon" parent="VBoxContainer/HBoxContainer/VBoxContainer/UndoControlHint" instance=ExtResource("3_ocg6b")] unique_name_in_owner = true -visible = true custom_minimum_size = Vector2(50, 0) layout_mode = 2 size_flags_horizontal = 0 @@ -148,7 +147,6 @@ layout_mode = 2 [node name="ResetInputIcon" parent="VBoxContainer/HBoxContainer/VBoxContainer/ResetControlHint" instance=ExtResource("3_ocg6b")] unique_name_in_owner = true -visible = true custom_minimum_size = Vector2(50, 0) layout_mode = 2 texture = ExtResource("5_eiimu") diff --git a/src/menus/controls/ActionInputIcon.gd b/src/menus/controls/ActionInputIcon.gd deleted file mode 100644 index cbcdf6b1..00000000 --- a/src/menus/controls/ActionInputIcon.gd +++ /dev/null @@ -1,391 +0,0 @@ -@tool -extends TextureRect -# class_name ActionInputIcon - -@export var input_text = "" : - set(v): - input_text = v - render_icon() - -@export var joy_button = [] : - set(v): - if v and len(v) == 2: - input_text = button_to_input_text(v) - -func button_to_input_text(button): - var device_type = button[0] - var idx = button[1] - if device_type == "keyboard": - # not sure i love this - device_type = "generic" - - var dev_map = device_button_idx_input_text.get(device_type, {}) - var txt - if idx in dev_map: - txt = dev_map.get(idx, "") - - return txt - - -@export var joy_axis = [] : - set(v): - if input_text == "" and v and len(v) == 2: - input_text = axis_to_input_text(v) - -func axis_to_input_text(axis): - var idx = axis[0] - var val = axis[1] - - var txt = "" - match idx: - JOY_AXIS_LEFT_X: - if val > 0: - txt = "Joystick right" - else: - txt = "Joystick left" - JOY_AXIS_LEFT_Y: - if val > 0: - txt = "Joystick down" - else: - txt = "Joystick up" - JOY_AXIS_RIGHT_X: - if val > 0: - txt = "Joystick right" - else: - txt = "Joystick left" - JOY_AXIS_RIGHT_Y: - if val > 0: - txt = "Joystick down" - else: - txt = "Joystick up" - [JOY_AXIS_INVALID, JOY_AXIS_TRIGGER_LEFT, JOY_AXIS_TRIGGER_RIGHT, JOY_AXIS_SDL_MAX, JOY_AXIS_MAX]: - Log.pr("Unsupported joystick axis") - return - return txt - -## public - -func set_icon_for_action(action_name, device=null): - if Engine.is_editor_hint(): - input_text = U.rand_of(["A Button", "Enter", "X", "Ctrl+Z"]) - return - if not device: - device = InputHelper.device - var input = InputHelper.get_keyboard_or_joypad_input_for_action(action_name) - if device == InputHelper.DEVICE_KEYBOARD: - input_text = OS.get_keycode_string(input.get_keycode_with_modifiers()) - else: - # TODO support axes as well - joy_button = [device, input.button_index] - -## ready - -func _ready(): - render_icon() - -func get_input_texture(input_key): - var inp_texture = keymap.get(input_key) - - if inp_texture: - return inp_texture - else: - Log.warn("No texture found for input", input_key) - return - -func render_icon(): - if input_text == null or input_text in ignores: - set_visible(false) - return - set_visible(true) - - var input_key = "" - var mods = [] - var parts = input_text.split("+") - if len(parts) == 0: - set_visible(false) - return - parts.reverse() - input_key = parts[0] - if len(parts) > 1: - mods = parts.slice(1) - - var inp_texture = get_input_texture(input_key) - if inp_texture == null: - return - # var mod_width = 0 - - var mod_textures = [] - for m in mods: - var mod_texture = get_input_texture(m) - mod_textures.append(mod_texture) - # if m in ["Shift"]: - # mod_width += 90 - # elif m in ["Ctrl"]: - # mod_width += 80 - # else: - # mod_width += 80 - - if len(mod_textures) > 0: - Log.pr("I have mod_textures to render!") - - # update text - set_texture(inp_texture) - - # update size - # if input_text in ["Space"]: - # set_custom_minimum_size(Vector2(110 + mod_width, 0)) - # elif input_text in ["Enter"]: - # set_custom_minimum_size(Vector2(90 + mod_width, 0)) - # elif input_text in ["Escape"]: - # set_custom_minimum_size(Vector2(70 + mod_width, 0)) - # else: - # set_custom_minimum_size(Vector2(50 + mod_width, 0)) - -var ignores = ["", "Kp Enter"] - -var keymap = { - # keyboard - "A"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_a.png"), - "B"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_b.png"), - "C"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_c.png"), - "D"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_d.png"), - "E"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_e.png"), - "F"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f.png"), - "G"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_g.png"), - "H"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_h.png"), - "I"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_i.png"), - "J"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_j.png"), - "K"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_k.png"), - "L"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_l.png"), - "M"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_m.png"), - "N"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_n.png"), - "O"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_o.png"), - "P"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_p.png"), - "Q"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_q.png"), - "R"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_r.png"), - "S"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_s.png"), - "T"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_t.png"), - "U"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_u.png"), - "V"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_v.png"), - "W"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_w.png"), - "X"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_x.png"), - "Y"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_y.png"), - "Z"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_z.png"), - "0"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_0.png"), - "1"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_1.png"), - "2"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_2.png"), - "3"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_3.png"), - "4"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_4.png"), - "5"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_5.png"), - "6"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_6.png"), - "7"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_7.png"), - "8"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_8.png"), - "9"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_9.png"), - "!"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_exclamation.png"), - "\""=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_quote.png"), - # "#"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_pound.png"), - # "$"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_dollar.png"), - # "%"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_percent.png"), - # "&"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_ampersand.png"), - "'"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_apostrophe.png"), - # "("=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_parens_open.png"), - # ")"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_parens_closed).png"), - "*"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_asterisk.png"), - "+"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_plus.png"), - ","=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_comma.png"), - "-"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_minus.png"), - "."=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_period.png"), - "/"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_slash_forward.png"), - ":"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_colon.png"), - ";"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_semicolon.png"), - "<"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_bracket_less.png"), - # "="=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_equal.png"), - ">"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_bracket_greater.png"), - "?"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_question.png"), - "["=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_bracket_open.png"), - "]"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_bracket_close.png"), - "\\"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_slash_back.png"), - "^"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_caret.png"), - # "_"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_underscore.png"), - # "`"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_tick.png"), - # "{"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_curly_brace_open.png"), - # "}"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_curly_brace_closed.png"), - # "|"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_pipe.png"), - "~"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_tilde.png"), - # "@"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_at.png"), - - "Ctrl"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_ctrl.png"), - # "Scroll Lock"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_ctrl.png"), - "Escape"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_escape.png"), - "Alt"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_alt.png"), - "Tab"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/key_tab.png"), - # "Menu"="M", - "Super"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/key_command.png"), - "Backspace"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_backspace.png"), - "Enter"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_enter.png"), - "Shift"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_shift.png"), - "Print Screen"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_printscreen.png"), - "End"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_end.png"), - "Delete"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_delete.png"), - "Insert"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_insert.png"), - "Home"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_home.png"), - "Caps Lock"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_capslock.png"), - "Page Up"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_page_up.png"), - "Page Down"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_page_down.png"), - "Up"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_arrows_up.png"), - "Down"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_arrows_down.png"), - "Left"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_arrows_left.png"), - "Right"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_arrows_right.png"), - "Space"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_space.png"), - # extras - "f1"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f1.png"), - "f2"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f2.png"), - "f3"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f3.png"), - "f4"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f4.png"), - "f5"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f5.png"), - "f6"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f6.png"), - "f7"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f7.png"), - "f8"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f8.png"), - "f9"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f9.png"), - "f10"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f10.png"), - "f11"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f11.png"), - "f12"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_f12.png"), - # mouse - "Mouse"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/mouse.png"), - "Mouse Left Click"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/mouse_left.png"), - "Mouse Right Click"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/mouse_right.png"), - "Mouse Scroll"=preload("res://assets/kenney-input-prompts/Keyboard & Mouse/Default/mouse_scroll.png"), - # controller buttons - "A Button"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_button_a.png"), - "B Button"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_button_b.png"), - "X Button"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_button_x.png"), - "Y Button"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_button_y.png"), - "Cross Button"=preload("res://assets/kenney-input-prompts/PlayStation 5/Default/playstation_button_cross.png"), - "Square Button"=preload("res://assets/kenney-input-prompts/PlayStation 5/Default/playstation_button_square.png"), - "Triangle Button"=preload("res://assets/kenney-input-prompts/PlayStation 5/Default/playstation_button_triangle.png"), - "Circle Button"=preload("res://assets/kenney-input-prompts/PlayStation 5/Default/playstation_button_circle.png"), - # controller start/pause/select/home/share/whatever - "Steamdeck Options"=preload("res://assets/kenney-input-prompts/Steam Deck/Default/steamdeck_button_options.png"), - "Steamdeck View"=preload("res://assets/kenney-input-prompts/Steam Deck/Default/steamdeck_button_view.png"), - "Steamdeck Home"=preload("res://assets/kenney-input-prompts/Steam Deck/Default/steamdeck_button_quickaccess.png"), - "Xbox Share"=preload("res://assets/kenney-input-prompts/Xbox Series/Default/xbox_button_share.png"), - "Xbox Menu"=preload("res://assets/kenney-input-prompts/Xbox Series/Default/xbox_button_menu.png"), - "Switch Plus"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_button_plus.png"), - "Switch Minus"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_button_minus.png"), - "Switch Home"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_button_home.png"), - "Playstation Options"=preload("res://assets/kenney-input-prompts/PlayStation 4/Default/playstation_button_options.png"), - "Playstation Share"=preload("res://assets/kenney-input-prompts/PlayStation 4/Default/playstation_button_share.png"), - # controller directional - "Dpad"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_dpad.png"), - "Dpad up"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_dpad_up.png"), - "Dpad down"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_dpad_down.png"), - "Dpad left"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_dpad_left.png"), - "Dpad right"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_dpad_right.png"), - # controller shoulder buttons - "Left Button"=preload("res://assets/kenney-input-prompts/Steam Deck/Default/steamdeck_button_l1.png"), - "Right Button"=preload("res://assets/kenney-input-prompts/Steam Deck/Default/steamdeck_button_r1.png"), - "Left Trigger"=preload("res://assets/kenney-input-prompts/Steam Deck/Default/steamdeck_button_l2.png"), - "Right Trigger"=preload("res://assets/kenney-input-prompts/Steam Deck/Default/steamdeck_button_r2.png"), - # arcade stick - # "Arcade stick up left"="q", - # "Arcade stick up"="w", - # "Arcade stick up right"="e", - # "Arcade stick left"="a", - # "Arcade stick neutral"="s", - # "Arcade stick right"="d", - # "Arcade stick down left"="z", - # "Arcade stick down"="x", - # "Arcade stick down right"="c", - # "Arcade stick 'L'"="[", - # "Arcade stick 'R'"="]", - # joystick - # "Joystick up left"="r", - "Joystick up"=preload("res://assets/kenney-input-prompts/Generic/Default/generic_stick_up.png"), - # "Joystick up right"="y", - "Joystick left"=preload("res://assets/kenney-input-prompts/Generic/Default/generic_stick_left.png"), - "Joystick neutral"=preload("res://assets/kenney-input-prompts/Generic/Default/generic_stick.png"), - "Joystick right"=preload("res://assets/kenney-input-prompts/Generic/Default/generic_stick_right.png"), - # "Joystick down left"="v", - "Joystick down"=preload("res://assets/kenney-input-prompts/Generic/Default/generic_stick_down.png"), - # "Joystick down right"="n", - "Joystick 'L'"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_stick_side_l.png"), - "Joystick 'R'"=preload("res://assets/kenney-input-prompts/Nintendo Switch/Default/switch_stick_side_r.png"), - } - -var device_button_idx_input_text = { - "xbox"={ - 0: "A Button", - 1: "B Button", - 2: "X Button", - 3: "Y Button", - 4: "Xbox Share", # back - 5: "Home", - 6: "Xbox Menu", # menu - 7: "Left Stick", - 8: "Right Stick", - 9: "Left Button", - 10: "Right Button", - 11: "Dpad up", - 12: "Dpad down", - 13: "Dpad left", - 14: "Dpad right", - 15: "Share", - }, - "switch"={ - 0: "B Button", - 1: "A Button", - 2: "Y Button", - 3: "X Button", - 4: "Switch Minus", # - - 5: "Switch Home", - 6: "Switch Plus", # + - 7: "Left Stick", - 8: "Right Stick", - 9: "Left Button", - 10: "Right Button", - 11: "Dpad up", - 12: "Dpad down", - 13: "Dpad left", - 14: "Dpad right", - 15: "Capture", - }, - "switch_left_joycon"={}, - "switch_right_joycon"={}, - "playstation"={ - 0: "Cross Button", - 1: "Circle Button", - 2: "Square Button", - 3: "Triangle Button", - 4: "Playstation Share", # Select - 5: "PS", - 6: "Playstation Options", # Start - 7: "Left Stick", - 8: "Right Stick", - 9: "Left Button", - 10: "Right Button", - 11: "Dpad up", - 12: "Dpad down", - 13: "Dpad left", - 14: "Dpad right", - 15: "Microphone", - 20: "Touchpad", - }, - "generic"={ - 0: "A Button", - 1: "B Button", - 2: "X Button", - 3: "Y Button", - 4: "Steamdeck View", # back - 5: "Steamdeck Home", - 6: "Steamdeck Options", # menu - 7: "Left Stick", - 8: "Right Stick", - 9: "Left Button", - 10: "Right Button", - 11: "Dpad up", - 12: "Dpad down", - 13: "Dpad left", - 14: "Dpad right", - 15: "Share", - }, - } diff --git a/src/menus/controls/ActionInputIcon.tscn b/src/menus/controls/ActionInputIcon.tscn deleted file mode 100644 index eb2677fb..00000000 --- a/src/menus/controls/ActionInputIcon.tscn +++ /dev/null @@ -1,15 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://dq1rff2gu3q68"] - -[ext_resource type="Script" path="res://addons/bones/actions/ActionInputIcon.gd" id="2_i2orq"] -[ext_resource type="Texture2D" uid="uid://bteyj072wum1n" path="res://assets/kenney-input-prompts/Keyboard & Mouse/Default/keyboard_0.png" id="2_utdk7"] - -[sub_resource type="Theme" id="Theme_kyaf1"] - -[node name="ActionInputIcon" type="TextureRect"] -visible = false -custom_minimum_size = Vector2(30, 0) -offset_right = 30.0 -offset_bottom = 48.0 -theme = SubResource("Theme_kyaf1") -texture = ExtResource("2_utdk7") -script = ExtResource("2_i2orq") diff --git a/src/menus/worldmap/PuzzleMap.tscn b/src/menus/worldmap/PuzzleMap.tscn index 34f70a3a..9ab12139 100644 --- a/src/menus/worldmap/PuzzleMap.tscn +++ b/src/menus/worldmap/PuzzleMap.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=16 format=3 uid="uid://drnps7gh2v4en"] +[gd_scene load_steps=22 format=3 uid="uid://drnps7gh2v4en"] [ext_resource type="Script" path="res://src/menus/worldmap/PuzzleMap.gd" id="1_4t3eb"] [ext_resource type="Script" path="res://src/menus/worldmap/PuzzleMapMarker.gd" id="2_jhjra"] @@ -34,6 +34,30 @@ _id = "27" script = ExtResource("3_386ps") _id = "17" +[sub_resource type="Resource" id="Resource_qvlne"] +script = ExtResource("3_386ps") +_id = "16" + +[sub_resource type="Resource" id="Resource_an8tn"] +script = ExtResource("3_386ps") +_id = "26" + +[sub_resource type="Resource" id="Resource_cvr6x"] +script = ExtResource("3_386ps") +_id = "25" + +[sub_resource type="Resource" id="Resource_hhmco"] +script = ExtResource("3_386ps") +_id = "18" + +[sub_resource type="Resource" id="Resource_ul2d1"] +script = ExtResource("3_386ps") +_id = "27" + +[sub_resource type="Resource" id="Resource_75s61"] +script = ExtResource("3_386ps") +_id = "17" + [node name="PuzzleMap" type="Node2D"] script = ExtResource("1_4t3eb") @@ -95,6 +119,61 @@ offset_right = 496.0 offset_bottom = 360.0 texture = ExtResource("3_vh7x8") +[node name="@Node2D@18032" type="Node2D" parent="MapSprite" groups=["puzzlemap_generated"]] + +[node name="@TextureRect@18033" type="TextureRect" parent="MapSprite" groups=["puzzlemap_generated"]] +texture = ExtResource("2_uod71") + +[node name="@Node2D@18035" type="Node2D" parent="MapSprite" groups=["puzzlemap_generated"]] +position = Vector2(96, 72) + +[node name="@TextureRect@18036" type="TextureRect" parent="MapSprite" groups=["puzzlemap_generated"]] +offset_left = 96.0 +offset_top = 72.0 +offset_right = 96.0 +offset_bottom = 72.0 +texture = ExtResource("6_h34ua") + +[node name="@Node2D@18038" type="Node2D" parent="MapSprite" groups=["puzzlemap_generated"]] +position = Vector2(192, 144) + +[node name="@TextureRect@18039" type="TextureRect" parent="MapSprite" groups=["puzzlemap_generated"]] +offset_left = 192.0 +offset_top = 144.0 +offset_right = 192.0 +offset_bottom = 144.0 +texture = ExtResource("5_n2dda") + +[node name="@Node2D@18041" type="Node2D" parent="MapSprite" groups=["puzzlemap_generated"]] +position = Vector2(288, 216) + +[node name="@TextureRect@18042" type="TextureRect" parent="MapSprite" groups=["puzzlemap_generated"]] +offset_left = 288.0 +offset_top = 216.0 +offset_right = 288.0 +offset_bottom = 216.0 +texture = ExtResource("4_sxfhr") + +[node name="@Node2D@18044" type="Node2D" parent="MapSprite" groups=["puzzlemap_generated"]] +position = Vector2(384, 288) + +[node name="@TextureRect@18045" type="TextureRect" parent="MapSprite" groups=["puzzlemap_generated"]] +offset_left = 384.0 +offset_top = 288.0 +offset_right = 384.0 +offset_bottom = 288.0 +texture = ExtResource("7_4l06y") + +[node name="@Node2D@18047" type="Node2D" parent="MapSprite" groups=["puzzlemap_generated"]] +position = Vector2(496, 360) + +[node name="@TextureRect@18048" type="TextureRect" parent="MapSprite" groups=["puzzlemap_generated"]] +offset_left = 496.0 +offset_top = 360.0 +offset_right = 496.0 +offset_bottom = 360.0 +texture = ExtResource("3_vh7x8") + [node name="@Marker2D@32942" type="Marker2D" parent="." groups=["puzzlemap_generated"]] position = Vector2(24, 24) script = ExtResource("2_jhjra") @@ -124,3 +203,33 @@ puzzle_set = SubResource("Resource_77ve3") position = Vector2(520, 384) script = ExtResource("2_jhjra") puzzle_set = SubResource("Resource_q45ek") + +[node name="@Marker2D@18034" type="Marker2D" parent="." groups=["puzzlemap_generated"]] +position = Vector2(24, 24) +script = ExtResource("2_jhjra") +puzzle_set = SubResource("Resource_qvlne") + +[node name="@Marker2D@18037" type="Marker2D" parent="." groups=["puzzlemap_generated"]] +position = Vector2(120, 96) +script = ExtResource("2_jhjra") +puzzle_set = SubResource("Resource_an8tn") + +[node name="@Marker2D@18040" type="Marker2D" parent="." groups=["puzzlemap_generated"]] +position = Vector2(216, 168) +script = ExtResource("2_jhjra") +puzzle_set = SubResource("Resource_cvr6x") + +[node name="@Marker2D@18043" type="Marker2D" parent="." groups=["puzzlemap_generated"]] +position = Vector2(312, 240) +script = ExtResource("2_jhjra") +puzzle_set = SubResource("Resource_hhmco") + +[node name="@Marker2D@18046" type="Marker2D" parent="." groups=["puzzlemap_generated"]] +position = Vector2(416, 312) +script = ExtResource("2_jhjra") +puzzle_set = SubResource("Resource_ul2d1") + +[node name="@Marker2D@18049" type="Marker2D" parent="." groups=["puzzlemap_generated"]] +position = Vector2(520, 384) +script = ExtResource("2_jhjra") +puzzle_set = SubResource("Resource_75s61") diff --git a/src/themes/winter/Goal.tscn b/src/themes/winter/Goal.tscn index 30bce41b..3944de9b 100644 --- a/src/themes/winter/Goal.tscn +++ b/src/themes/winter/Goal.tscn @@ -27,6 +27,7 @@ texture_filter = 1 scale = Vector2(2, 2) sprite_frames = SubResource("SpriteFrames_6055a") animation = &"goal" +frame_progress = 0.0848775 metadata/_aseprite_wizard_config_ = { "layer": "", "o_ex_p": "", diff --git a/src/ui/components/Jumbotron.gd b/src/ui/components/Jumbotron.gd index ef6acc27..29390e29 100644 --- a/src/ui/components/Jumbotron.gd +++ b/src/ui/components/Jumbotron.gd @@ -18,7 +18,7 @@ static func jumbo_notif(opts: Dictionary) -> Signal: var hd: String = opts.get("header", "") var bd: String = opts.get("body", "") - var on_close: Callable = opts.get("on_close") + var on_close: Variant = opts.get("on_close") var pause: bool = opts.get("pause", true) # reset data @@ -29,8 +29,8 @@ static func jumbo_notif(opts: Dictionary) -> Signal: jumbotron.set_control_icon() jumbotron.jumbo_closed.connect(func() -> void: - if on_close and is_instance_valid(on_close.get_object()): - on_close.call() + if on_close and on_close is Callable and is_instance_valid((on_close as Callable).get_object()): + (on_close as Callable).call() if pause: Navi.get_tree().paused = false jumbotron.queue_free())