summaryrefslogtreecommitdiffstats
path: root/door.gd
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-11-19 21:33:12 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-11-20 23:08:30 +0200
commit74494315303723b6cdac5198d9fc90f334ced778 (patch)
treef044924bde75be5701200f3bc795b7ea02be8ac3 /door.gd
parentcb1655c3e3958845ec6b2b6ab634149cede152a8 (diff)
Improve transitions
Diffstat (limited to 'door.gd')
-rw-r--r--door.gd39
1 files changed, 36 insertions, 3 deletions
diff --git a/door.gd b/door.gd
index 9e03186..c1b8968 100644
--- a/door.gd
+++ b/door.gd
@@ -1,7 +1,40 @@
+@tool
+class_name Door
extends Area2D
-@export var target_room: String
+@export var target_room: String:
+ set(v):
+ target_room = v
+ update_configuration_warnings()
-func _on_body_entered(_body: Node2D) -> void:
+@export var target_door: String:
+ set(v):
+ target_door = v
+ update_configuration_warnings()
+
+@export_enum("LEFT", "RIGHT", "JUMP_LEFT", "JUMP_RIGHT", "DROP") var exit_towards: String
+@export_enum("LEFT", "RIGHT", "JUMP", "DROP") var enter_towards: String
+
+func _ready():
+ update_configuration_warnings()
+
+func _on_body_entered(player: Player) -> void:
var top: Top = get_tree().root.get_node("Top")
- top.transition_to_room(target_room)
+ if not top.is_transitioning():
+ player.set_forced_input(enter_towards)
+ top.transition_to_room(to_room_path(target_room), target_door)
+
+func _get_configuration_warnings() -> PackedStringArray:
+ var warnings: PackedStringArray = []
+ var room_path: String
+ if target_room:
+ room_path = to_room_path(target_room)
+ if not target_room or not ResourceLoader.exists(room_path):
+ warnings.append("target_room is not valid (%s does not exist)" % room_path)
+ if not target_door:
+ warnings.append("target_door is not valid")
+
+ return warnings
+
+func to_room_path(room_name: String):
+ return "res://room_" + room_name + ".tscn"