image slide & video slide with caption, ability to exit presentation by holding esc

This commit is contained in:
Clevertop 2024-09-25 18:34:55 +10:00
parent df75283c99
commit 6025b8c28f
10 changed files with 333 additions and 15 deletions

View file

@ -13,6 +13,7 @@ extends Node
#@export_group("Group")
#@export_subgroup("Subgroup")
@export var slides_node : Control
@export var exit_bar : ProgressBar
#Onready Variables
@ -21,6 +22,8 @@ var slides : Array[Node]
var current_slide : int = 0
var total_slides : int
var exit_clock : float = 0
#endregion
#region Godot methods
@ -28,8 +31,8 @@ func _ready():
slides = slides_node.get_children()
total_slides = slides_node.get_child_count()
for slide in slides:
slide.hide()
slides[current_slide].show()
disable_slide(slide)
enable_slide(slides[current_slide])
pass
func _process(delta):
@ -39,6 +42,18 @@ func _process(delta):
elif(Input.is_action_just_pressed("previous")):
if current_slide > 0:
show_previous_slide()
if Input.is_action_pressed("exit"):
exit_clock += delta
if exit_clock > 2:
get_tree().quit()
else:
exit_clock -= delta*3.5
exit_clock = clamp(exit_clock, 0, 2)
exit_bar.visible = exit_clock > 0
exit_bar.value = exit_clock/2
#endregion
#region Signal methods
@ -48,15 +63,41 @@ func _process(delta):
#region Other methods (please try to separate and organise!)
func show_next_slide():
slides[current_slide].hide()
disable_slide(slides[current_slide])
current_slide += 1
slides[current_slide].show()
enable_slide(slides[current_slide])
func show_previous_slide():
slides[current_slide].hide()
disable_slide(slides[current_slide])
current_slide -= 1
slides[current_slide].show()
enable_slide(slides[current_slide])
func disable_slide(slide : Node):
slide.hide()
reset_videos(slide)
slide.process_mode = Node.PROCESS_MODE_DISABLED
func enable_slide(slide : Node):
slide.process_mode = Node.PROCESS_MODE_INHERIT
slide.show()
play_videos(slide)
func reset_videos(node : Node):
for N in node.get_children():
if N.get_child_count() > 0:
reset_videos(N)
if N is VideoStreamPlayer:
N.stop()
func play_videos(node : Node):
for N in node.get_children():
if N.get_child_count() > 0:
play_videos(N)
if N is VideoStreamPlayer:
N.play()
#endregion