Files
yagigreg 8bb2c5c840
ci/woodpecker/push/woodpecker Pipeline was successful
Add ability to have two images in a slide.
2026-10-18 08:11:58 -05:00

58 lines
1.7 KiB
GDScript

class_name Slideshower
extends Control
signal finished_playing
var slides = []
var slide = 0
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
func play_slideshow(new_slides) -> void:
slides = new_slides
play_slide(0)
func _make_image_path(image_name: String) -> String:
if image_name.begins_with("res://"):
return image_name
return "res://art/slides/%s.png" % image_name
func play_slide(index) -> bool:
if index < 0 or index >= len(slides):
return false
slide = index
var slide_object = slides[index]
$VSplitContainer/TextFrame/SlideText.text = slide_object.text
if "image" in slides[index]:
$VSplitContainer/ImageFrame/SlideContainer/SlideImage.texture = load(_make_image_path(slide_object.image))
$VSplitContainer/ImageFrame/SlideContainer/SlideImage2.visible = false
else:
$VSplitContainer/ImageFrame/SlideContainer/SlideImage.texture = load(_make_image_path(slide_object.images[0]))
$VSplitContainer/ImageFrame/SlideContainer/SlideImage2.visible = true
$VSplitContainer/ImageFrame/SlideContainer/SlideImage2.texture = load(_make_image_path(slide_object.images[1]))
return true
func next_slide() -> bool:
var success = play_slide(slide + 1)
if not success:
finished_playing.emit()
return success
func prev_slide() -> bool:
return play_slide(slide - 1)
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
if Input.is_action_just_released("interact") or Input.is_action_just_released("jump") or Input.is_action_just_released("move_right"):
next_slide()
if Input.is_action_just_released("move_left"):
prev_slide()
func _on_continue_button_pressed() -> void:
next_slide()