stage management updates

This commit is contained in:
betalars 2023-07-13 16:14:40 +02:00
parent 5484c47904
commit 7b21cbfa10
2 changed files with 30 additions and 7 deletions

View File

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

View File

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