From 8967f6bb6e8ecb3b5b4073424692ce0ddfec61cb Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Thu, 5 Feb 2026 22:02:42 +0200 Subject: Rework cinematics --- cinematic.gd | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 cinematic.gd (limited to 'cinematic.gd') diff --git a/cinematic.gd b/cinematic.gd new file mode 100644 index 0000000..dbc29ea --- /dev/null +++ b/cinematic.gd @@ -0,0 +1,48 @@ +class_name Cinematic +extends Node + +signal next(arg: Variant) + +@onready var top: Top = get_tree().root.get_node("Top") + +enum Type { SAY, ASK } +var type: Type + +func say(who: Object, text: String): + var tb: TextBubble = preload("res://text_bubble.tscn").instantiate() + tb.text = text + if who is Node2D: + tb.global_position = who.global_position + Vector2(0, -20) + else: + var room = top.get_active_room() + tb.global_position = room.get_node("GameCamera").global_position + + tb.add_to_group("text_bubbles") + top.add_child(tb) + type = Type.SAY + await next + +func ask(who: Object, text: String, options: Array[String]) -> String: + var tb: TextBubble = preload("res://text_bubble.tscn").instantiate() + tb.text = text + tb.options = options + tb.connect("answered", _on_answered) + if who is Node2D: + tb.global_position = who.global_position + Vector2(0, -20) + else: + var room = top.get_active_room() + tb.global_position = room.get_node("GameCamera").global_position + + tb.add_to_group("text_bubbles") + top.add_child(tb) + type = Type.ASK + return await next + +func _process(_delta: float): + if type == Type.SAY and (Input.is_action_just_pressed("action") or Input.is_action_just_pressed("jump")): + get_tree().call_group("text_bubbles", "queue_free") + next.emit() + +func _on_answered(answer: String): + get_tree().call_group("text_bubbles", "queue_free") + next.emit(answer) -- cgit v1.3