blob: 710249784f0cc5f6eea4b1b150660277ce9a5933 (
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
41
42
43
44
45
46
47
48
49
50
51
52
|
@tool
class_name Door
extends Area2D
@onready var top: Top = get_tree().root.get_node("Top")
@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:
top.room_transition(self, 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:
warnings.append("target_room is not defined")
elif not ResourceLoader.exists(room_path):
warnings.append("target_room \"%s\" does not exist" % room_path)
if not target_door:
warnings.append("target_door is not defined")
elif target_room:
var packed: PackedScene = ResourceLoader.load(room_path)
var state = packed.get_state()
var found = false
for idx in range(state.get_node_count()):
if state.get_node_name(idx) == target_door:
found = true
break
if not found:
warnings.append("target_door \"%s\" does not exist in the target room" % target_door)
return warnings
func to_room_path(room_name: String):
return "res://room_" + room_name + ".tscn"
|