summaryrefslogtreecommitdiffstats
path: root/door.gd
blob: c1b8968599a201d57f88383860500fd3b87d7804 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@tool
class_name Door
extends Area2D

@export var target_room: String:
	set(v):
		target_room = v
		update_configuration_warnings()

@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")
	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"