155 lines
3.5 KiB
GDScript
155 lines
3.5 KiB
GDScript
extends Control
|
|
|
|
@export var bg_color : Color = Color.BLACK
|
|
@export var to_scene : PackedScene = null
|
|
@export var title_color := Color.BLUE_VIOLET
|
|
@export var text_color := Color.WHITE
|
|
@export var title_font : FontFile = null
|
|
@export var text_font : FontFile = null
|
|
@export var Music : AudioStream = null
|
|
@export var Use_Video_Audio : bool = false
|
|
@export var Video : VideoStream = null
|
|
|
|
const section_time := 2.0
|
|
const line_time := 0.3
|
|
const base_speed := 70
|
|
const speed_up_multiplier := 10.0
|
|
|
|
var scroll_speed : float = base_speed
|
|
var speed_up := false
|
|
|
|
@onready var colorrect := $ColorRect
|
|
@onready var videoplayer := $VideoPlayer
|
|
@onready var line := $CreditsContainer/Line
|
|
var started := false
|
|
var finished := false
|
|
|
|
var section
|
|
var section_next := true
|
|
var section_timer := 0.0
|
|
var line_timer := 0.0
|
|
var curr_line := 0
|
|
var lines := []
|
|
|
|
var credits = [
|
|
[
|
|
"A game by Dragonfocus"
|
|
],[
|
|
"Programming",
|
|
"JohnVince53",
|
|
"MewTheNekomata",
|
|
"TheSkyWinds"
|
|
],[
|
|
"Art",
|
|
"MewTheNekomata",
|
|
"TheSkyWinds"
|
|
],[
|
|
"Sound Effects",
|
|
"\"Picked Coin Echo\" 1 & 2 by NenadSimic licensed CC-BY 3.0",
|
|
"https://opengameart.org/users/nenadsimic"
|
|
],[
|
|
"Tools used",
|
|
"Developed with Godot Engine",
|
|
"https://godotengine.org/license",
|
|
"",
|
|
"Art created with Pixelorama & Krita",
|
|
"https://orama-interactive.itch.io/pixelorama",
|
|
"https://krita.org/en/"
|
|
],[
|
|
"Special thanks",
|
|
"The Game Smith for tileset",
|
|
"https://smallmak.itch.io/creepy-cave-tileset",
|
|
"",
|
|
"Pixel Sagas for Symtext font",
|
|
"https://www.dafont.com/symtext.font"
|
|
]
|
|
]
|
|
|
|
func _ready():
|
|
colorrect.color = bg_color
|
|
videoplayer.set_stream(Video)
|
|
if !Use_Video_Audio:
|
|
var stream = AudioStreamPlayer.new()
|
|
stream.set_stream(Music)
|
|
add_child(stream)
|
|
videoplayer.set_volume_db(-80)
|
|
stream.play()
|
|
else:
|
|
videoplayer.set_volume_db(0)
|
|
videoplayer.play()
|
|
|
|
|
|
func _process(delta):
|
|
scroll_speed = base_speed * delta
|
|
|
|
if section_next:
|
|
section_timer += delta * speed_up_multiplier if speed_up else delta
|
|
if section_timer >= section_time:
|
|
section_timer -= section_time
|
|
|
|
if credits.size() > 0:
|
|
started = true
|
|
section = credits.pop_front()
|
|
curr_line = 0
|
|
add_line()
|
|
|
|
else:
|
|
line_timer += delta * speed_up_multiplier if speed_up else delta
|
|
if line_timer >= line_time:
|
|
line_timer -= line_time
|
|
add_line()
|
|
|
|
if speed_up:
|
|
scroll_speed *= speed_up_multiplier
|
|
|
|
if lines.size() > 0:
|
|
for l in lines:
|
|
l.set_global_position(l.get_global_position() - Vector2(0, scroll_speed))
|
|
if l.get_global_position().y < l.get_line_height():
|
|
lines.erase(l)
|
|
l.queue_free()
|
|
elif started:
|
|
finish()
|
|
|
|
|
|
func finish():
|
|
if not finished:
|
|
finished = true
|
|
if to_scene != null:
|
|
var path = to_scene.get_path()
|
|
get_tree().change_scene_to_file(path)
|
|
else:
|
|
get_tree().quit()
|
|
|
|
|
|
func add_line():
|
|
var new_line = line.duplicate()
|
|
new_line.text = section.pop_front()
|
|
lines.append(new_line)
|
|
if curr_line == 0:
|
|
if title_font != null:
|
|
new_line.set("theme_override_fonts/font", title_font)
|
|
new_line.set("theme_override_colors/font_color", title_color)
|
|
|
|
else:
|
|
if text_font != null:
|
|
new_line.set("theme_override_fonts/font", text_font)
|
|
new_line.set("theme_override_colors/font_color", text_color)
|
|
|
|
$CreditsContainer.add_child(new_line)
|
|
|
|
if section.size() > 0:
|
|
curr_line += 1
|
|
section_next = false
|
|
else:
|
|
section_next = true
|
|
|
|
|
|
func _unhandled_input(event):
|
|
if event.is_action_pressed("ui_cancel"):
|
|
finish()
|
|
if event.is_action_pressed("ui_down") and !event.is_echo():
|
|
speed_up = true
|
|
if event.is_action_released("ui_down") and !event.is_echo():
|
|
speed_up = false
|