summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--door.gd90
-rw-r--r--room_test1.tscn8
-rw-r--r--room_test2.tscn4
-rw-r--r--room_test3.tscn4
4 files changed, 65 insertions, 41 deletions
diff --git a/door.gd b/door.gd
index 7102497..e8dc59d 100644
--- a/door.gd
+++ b/door.gd
@@ -4,49 +4,73 @@ 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()
+var _target_room: Variant
+var _target_door: Variant
@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 _set(property, val):
+ if property == "target_room":
+ _target_room = val
+ if not ResourceLoader.exists(_target_room):
+ _target_door = null
+ update_configuration_warnings()
+ notify_property_list_changed()
+ elif property == "target_door":
+ _target_door = val
+ update_configuration_warnings()
+ notify_property_list_changed()
+
+func _get(property):
+ if property == "target_room":
+ return _target_room
+ elif property == "target_door":
+ return _target_door
func _on_body_entered(_player: Player) -> void:
- top.room_transition(self, to_room_path(target_room), target_door)
+ if not Engine.is_editor_hint():
+ top.room_transition(self, _target_room, _target_door)
+
+func _get_property_list() -> Array[Dictionary]:
+ var rooms: PackedStringArray = []
+ for res_name in ResourceLoader.list_directory("."):
+ if res_name.begins_with("room_") and res_name.ends_with(".tscn"):
+ rooms.append("res://" + res_name)
+
+ var props: Array[Dictionary] = [{
+ "name": "target_room",
+ "type": TYPE_STRING,
+ "hint": PROPERTY_HINT_ENUM,
+ "hint_string": ",".join(rooms)
+ }]
+ if _target_room and _target_room != "":
+ var options: PackedStringArray = []
+ if not ResourceLoader.exists(_target_room): return props
+ var packed: PackedScene = ResourceLoader.load(_target_room)
+ var state = packed.get_state()
+ for idx in range(state.get_node_count()):
+ var node_name = state.get_node_name(idx)
+ if node_name.begins_with("Door"):
+ options.append(node_name)
+
+ #print(options)
+ props.append({
+ "name": "target_door",
+ "type": TYPE_STRING,
+ "hint": PROPERTY_HINT_ENUM,
+ "hint_string": ",".join(options)
+ })
+
+ return props
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:
+ if not _target_room:
+ warnings.append("target_room is not defined")
+
+ 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"
diff --git a/room_test1.tscn b/room_test1.tscn
index 551ad6d..5c06f1a 100644
--- a/room_test1.tscn
+++ b/room_test1.tscn
@@ -471,15 +471,15 @@ script = ExtResource("4_8b75i")
[node name="DoorMiddle" parent="." instance=ExtResource("6_lfjh7")]
position = Vector2(430, 170)
scale = Vector2(1, 4)
-target_room = "test2"
-target_door = "DoorLeft"
exit_towards = "LEFT"
enter_towards = "RIGHT"
+target_room = "res://room_test2.tscn"
+target_door = "DoorLeft"
[node name="DoorLeft" parent="." instance=ExtResource("6_lfjh7")]
position = Vector2(-16, 111)
scale = Vector2(4, 1)
-target_room = "test3"
-target_door = "DoorUp"
exit_towards = "JUMP_RIGHT"
enter_towards = "DROP"
+target_room = "res://room_test3.tscn"
+target_door = "DoorUp"
diff --git a/room_test2.tscn b/room_test2.tscn
index b6bb018..8192db1 100644
--- a/room_test2.tscn
+++ b/room_test2.tscn
@@ -468,7 +468,7 @@ script = ExtResource("4_gyred")
[node name="DoorLeft" parent="." instance=ExtResource("6_0kik6")]
position = Vector2(-28, 88)
scale = Vector2(1, 4)
-target_room = "test1"
-target_door = "DoorMiddle"
exit_towards = "RIGHT"
enter_towards = "LEFT"
+target_room = "res://room_test1.tscn"
+target_door = "DoorMiddle"
diff --git a/room_test3.tscn b/room_test3.tscn
index 3174c59..21c1a81 100644
--- a/room_test3.tscn
+++ b/room_test3.tscn
@@ -468,7 +468,7 @@ script = ExtResource("4_bplq6")
[node name="DoorUp" parent="." instance=ExtResource("6_i21us")]
position = Vector2(96, 20)
scale = Vector2(4, 1)
-target_room = "test1"
-target_door = "DoorLeft"
exit_towards = "DROP"
enter_towards = "JUMP"
+target_room = "res://room_test1.tscn"
+target_door = "DoorLeft"