GoSlides/tools/Presentation.gd

104 lines
2 KiB
GDScript3
Raw Normal View History

2024-09-24 10:34:17 +10:00
extends Node
#class_name
#Authored by Tom. Please consult for any modifications or major feature requests.
#region Variables
#Signals
#Enums
#Constants
#Exported Variables
#@export_group("Group")
#@export_subgroup("Subgroup")
@export var slides_node : Control
@export var exit_bar : ProgressBar
2024-09-24 10:34:17 +10:00
#Onready Variables
#Other Variables (please try to separate and organise!)
var slides : Array[Node]
var current_slide : int = 0
var total_slides : int
var exit_clock : float = 0
2024-09-24 10:34:17 +10:00
#endregion
#region Godot methods
func _ready():
slides = slides_node.get_children()
total_slides = slides_node.get_child_count()
for slide in slides:
disable_slide(slide)
enable_slide(slides[current_slide])
2024-09-24 10:34:17 +10:00
pass
func _process(delta):
if(Input.is_action_just_pressed("next")):
if current_slide < total_slides-1:
show_next_slide()
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
2024-09-24 10:34:17 +10:00
#endregion
#region Signal methods
#endregion
#region Other methods (please try to separate and organise!)
func show_next_slide():
disable_slide(slides[current_slide])
2024-09-24 10:34:17 +10:00
current_slide += 1
enable_slide(slides[current_slide])
2024-09-24 10:34:17 +10:00
func show_previous_slide():
disable_slide(slides[current_slide])
2024-09-24 10:34:17 +10:00
current_slide -= 1
enable_slide(slides[current_slide])
func disable_slide(slide : Node):
slide.hide()
reset_videos(slide)
slide.process_mode = Node.PROCESS_MODE_DISABLED
2024-09-24 10:34:17 +10:00
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()
2024-09-24 10:34:17 +10:00
#endregion