Files
scrap-signal/levels/credits.gd
Kellan KOZUME 35a1c3ab47 feat(credits): add credits scene with scrolling text and fade effect
feat(outro): implement outro scene with branching endings and transition to credits
feat(cour): add HUD and dialogue box nodes to the courtyard scene
2026-04-25 17:43:49 -04:00

70 lines
1.6 KiB
GDScript

extends Control
const SCROLL_SPEED := 20.0
const CREDITS: Array[String] = [
"SCRAP SINGAL",
"",
"Un jeu réalisé pour la Gamedev.js Jam 2026",
"",
"",
"DÉVELOPPEMENT",
"kodzukye",
"",
"",
"MUSIQUES D'AMBIANCE",
"MAC Senjah",
"",
"",
"OUTILS",
"Godot 4.6 • Aseprite • Bandlab • Pixel Studio",
"",
"",
"Merci d'avoir joué.",
]
@onready var scroll := $ScrollContainer
@onready var credits_lbl := $ScrollContainer/CreditsLabel
@onready var fade_rect := $FadeRect
var _scrolling := false
func _ready() -> void:
credits_lbl.text = "\n".join(CREDITS)
credits_lbl.add_theme_constant_override("line_spacing", 12)
# Démarre sous l'écran
scroll.scroll_vertical = 0
credits_lbl.position.y = get_viewport_rect().size.y
fade_rect.modulate.a = 1.0
var tween := create_tween()
tween.tween_property(fade_rect, "modulate:a", 0.0, 1.2)
tween.tween_callback(func(): _scrolling = true)
func _process(delta: float) -> void:
if not _scrolling:
return
credits_lbl.position.y -= SCROLL_SPEED * delta
# Fin du scroll — tout le texte est passé
if credits_lbl.position.y + credits_lbl.size.y < 0:
_end_credits()
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventKey and event.pressed and not event.echo:
_end_credits()
if event is InputEventJoypadButton and event.pressed:
_end_credits()
func _end_credits() -> void:
if not _scrolling:
return
_scrolling = false
var tween := create_tween()
tween.tween_property(fade_rect, "modulate:a", 1.0, 1.0)
tween.tween_callback(func():
get_tree().change_scene_to_file("res://levels/main_menu.tscn")
)