58 lines
1.7 KiB
GDScript
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()
|