diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2026-02-05 22:02:42 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2026-02-05 23:11:06 +0200 |
| commit | 8967f6bb6e8ecb3b5b4073424692ce0ddfec61cb (patch) | |
| tree | 5961c0b5226d077c6b1e97c02c1f5fcc1d6a729f /cinematic.gd | |
| parent | f53d1d99707c5063a35c0c68890e0947077108ad (diff) | |
Diffstat (limited to 'cinematic.gd')
| -rw-r--r-- | cinematic.gd | 48 |
1 files changed, 48 insertions, 0 deletions
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) |
