diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2025-11-21 09:37:32 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2025-11-21 09:37:32 +0200 |
| commit | 691d9967bd9fac6c3b0e272d3c91f60ba077104a (patch) | |
| tree | c5582ae0f33f2da9dd4293d20c7f6c85dba8236d | |
| parent | a2ed86861122d25f0d4fe1ce7a8ec31429a134b2 (diff) | |
Refactor transitions
| -rw-r--r-- | door.gd | 7 | ||||
| -rw-r--r-- | esc_listener.gd | 2 | ||||
| -rw-r--r-- | player.gd | 1 | ||||
| -rw-r--r-- | room_main_menu.gd | 2 | ||||
| -rw-r--r-- | top.gd | 24 |
5 files changed, 19 insertions, 17 deletions
@@ -2,6 +2,8 @@ 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 @@ -19,10 +21,7 @@ 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) + top.room_transition(self, to_room_path(target_room), target_door) func _get_configuration_warnings() -> PackedStringArray: var warnings: PackedStringArray = [] diff --git a/esc_listener.gd b/esc_listener.gd index c0b276a..a10d9d6 100644 --- a/esc_listener.gd +++ b/esc_listener.gd @@ -4,4 +4,4 @@ extends Node func _process(_delta: float) -> void: if Input.is_action_just_pressed("menu"): - top.transition_to_room("res://room_main_menu.tscn", null) + top.room_transition(null, "res://room_main_menu.tscn", null) @@ -85,7 +85,6 @@ func _physics_process(delta: float): move_and_slide() -## dir: String or null func set_forced_input(dir: Variant): var jump_coef = 1.3 if dir == null: diff --git a/room_main_menu.gd b/room_main_menu.gd index cba6d69..fd595a5 100644 --- a/room_main_menu.gd +++ b/room_main_menu.gd @@ -7,4 +7,4 @@ func _ready() -> void: func _test_room_button_pressed(): var top: Top = get_tree().root.get_node("Top") - top.transition_to_room("res://room_test1.tscn", null) + top.room_transition(null, "res://room_test1.tscn", null) @@ -11,7 +11,7 @@ var _transition_door_name: Variant # String or null # Called when the node enters the scene tree for the first time. func _ready() -> void: var room = initial_room.instantiate() - room.name = "active_room" + room.name = "ActiveRoom" room.process_mode = Node.PROCESS_MODE_PAUSABLE add_child(room) @@ -25,23 +25,27 @@ func _ready() -> void: func is_transitioning() -> bool: return _transition_room != null -func transition_to_room(room_path: String, door_name: Variant): +func room_transition(from_door: Door, to_room_path: String, door_name: Variant): # Do not transition if there is already a transition in process if _transition_room != null: #print_debug("Tried to transition to ", room_name, " but a transition was already in process") return + if from_door: + var player: Player = get_node("ActiveRoom").find_child("Player") + player.set_forced_input(from_door.enter_towards) + # Start animation # The animation calls _change_room at a specific time $TransitionCanvas/AnimationPlayer.play("room_trans_start") - var room = ResourceLoader.load(room_path) + var room = ResourceLoader.load(to_room_path) _transition_room = room.instantiate() _transition_door_name = door_name func _transition_start(): - print_debug("_transition_start") - var current_room = get_node("active_room") + #print_debug("_transition_start") + var current_room = get_node("ActiveRoom") remove_child(current_room) current_room.queue_free() @@ -50,15 +54,15 @@ func _transition_start(): await get_tree().create_timer(0.1).timeout var next_room: Node = _transition_room - next_room.name = "active_room" + next_room.name = "ActiveRoom" #next_room.connect("ready", _on_room_changed) next_room.connect("tree_entered", _on_room_changed) next_room.process_mode = Node.PROCESS_MODE_PAUSABLE add_child(next_room) func _on_room_changed(): - print_debug("_on_room_changed") - var room = get_node("active_room") + #print_debug("_on_room_changed") + var room = get_node("ActiveRoom") var player: Player = room.find_child("Player") if _transition_door_name: var door: Door = room.find_child(_transition_door_name) @@ -68,11 +72,11 @@ func _on_room_changed(): $TransitionCanvas/AnimationPlayer.play("room_trans_end") func _transition_end(): - print_debug("_transition_end") + #print_debug("_transition_end") _transition_room = null _transition_door_name = null - var room = get_node("active_room") + var room = get_node("ActiveRoom") var player: Player = room.find_child("Player") if player: player.set_forced_input(null) |
