summaryrefslogtreecommitdiffstats
path: root/door.gd
blob: 632ffd9d3cb1750b633e211b04735b21a7e8f640 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
@tool
class_name Door
extends Area2D

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 _set(property, val):
	if property == "target_room":
		_target_room = val
		if not _target_room or 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:
	if not Engine.is_editor_hint():
		var top: Top = get_tree().root.get_node("Top")
		top.get_transition_player().room_transition(self, _target_room, _target_door)

		if enter_towards == "LEFT" or enter_towards == "RIGHT":
			$TransitionAudio.play()
	
func _get_property_list() -> Array[Dictionary]:
	var rooms: PackedStringArray = []
	for res_name in ResourceLoader.list_directory("./rooms"):
		if res_name.ends_with(".tscn"):
			rooms.append("res://rooms/" + 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 = []

	if not _target_room:
		warnings.append("target_room is not defined")
	
	if not _target_door:
		warnings.append("target_door is not defined")

	return warnings