From 7b21cbfa100f871ff7c71fd7a30b6cd791db366c Mon Sep 17 00:00:00 2001 From: betalars Date: Thu, 13 Jul 2023 16:14:40 +0200 Subject: [PATCH] stage management updates --- .../youth_room/Collectable.gd | 19 +++++++++++++++++-- src/singletons/global_state.gd | 18 +++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/base-environments/youth_room/Collectable.gd b/src/base-environments/youth_room/Collectable.gd index b740652..997d54d 100644 --- a/src/base-environments/youth_room/Collectable.gd +++ b/src/base-environments/youth_room/Collectable.gd @@ -1,6 +1,19 @@ extends Area3D @onready var pass_to_actor = $UiWrapper/UiSprite/SubViewport/Collectable_ui +@onready var wrapper = $UiWrapper +@onready var ui = $UiWrapper/UiSprite/SubViewport.get_child(0) + +var revealed: bool = false: + set(on_stage): + revealed = on_stage + if on_stage: + wrapper.show() + ui.show() + else: + wrapper.hide() + ui.hide() + var has_mouse: bool = false # Called when the node enters the scene tree for the first time. @@ -9,9 +22,11 @@ func _ready(): func _on_mouse_entered(): input_ray_pickable = false - $UiWrapper.show() - $UiWrapper/UiSprite/SubViewport/Collectable_ui.show() + ui.collapsed = false has_mouse = true func _on_mouse_exited(): assert(false) + +func reveal(): + revealed = true diff --git a/src/singletons/global_state.gd b/src/singletons/global_state.gd index 3f220f1..483e22f 100644 --- a/src/singletons/global_state.gd +++ b/src/singletons/global_state.gd @@ -26,6 +26,7 @@ func take_stage(actor: Object, reclaim: bool = false) -> bool: if stage_list.has(actor): while stage_list.pop_front() != actor: break actor.has_stage = true + stage_list.push_front(actor) return actor.has_stage push_warning(actor, " wanted to reclaim focus, but was not on list.") return pass_stage_to(actor) @@ -55,10 +56,11 @@ func pass_stage_to(target:Object) -> bool: push_error("Focus instance not valid") elif !"has_stage" in target: push_error(target, " has no has focus method.") - if stage_list.size() > 0: - if stage_list.front() == target: - push_warning(target, " is already target. Abort passing focus.") else: + if stage_list.size() > 0: + if stage_list.front() == target: + push_warning(target, " is already target. Abort passing focus.") + return false if not stage_list.size() == 0: stage_list.front().has_stage = false target.has_stage = true if target.has_stage: @@ -69,7 +71,13 @@ func pass_stage_to(target:Object) -> bool: # Currently focused element loses focus, but remains in stack. func free_focus(): - if not stage_list.front() == null: stage_list.front().has_stage = false + if stage_list.size() > 0: stage_list.front().has_stage = false -func queue_for_stage(target: Object, index: int): +func transition_stage_to(thief: Object): + if stage_list.size() > 0: + if stage_list.front().has_stage: + stage_list.pop_front().has_stage = false + return pass_stage_to(thief) + +func queue_for_stage(target: Object, index: int = 1): stage_list.insert(index, target)