diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2025-11-19 20:06:53 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2025-11-19 20:06:53 +0200 |
| commit | cb1655c3e3958845ec6b2b6ab634149cede152a8 (patch) | |
| tree | 504040e814e74b00ec6302a40b5543e23f2ccf4d | |
| parent | d61ad72495dd1514ad1833a31df3f63208160fe6 (diff) | |
Improve room change
| -rw-r--r-- | player.gd | 4 | ||||
| -rw-r--r-- | player.tscn | 2 | ||||
| -rw-r--r-- | top.gd | 33 | ||||
| -rw-r--r-- | top.tscn | 69 |
4 files changed, 76 insertions, 32 deletions
@@ -1,6 +1,8 @@ class_name Player extends CharacterBody2D +@onready var top: Top = get_tree().root.get_node("Top") + @export var speed: float @export var jump_strength: float @export var coyote_max: int @@ -39,6 +41,8 @@ func _process(_delta: float) -> void: $AnimatedSprite2D.set_animation("idle") func _physics_process(delta: float): + if not top.objects_active: return + var grav_coef = 1.0 if velocity.y < 0 and Input.is_action_pressed("jump"): grav_coef = 1.0 + (jump_held_coef * velocity.y / jump_strength) diff --git a/player.tscn b/player.tscn index 851952d..40e2720 100644 --- a/player.tscn +++ b/player.tscn @@ -109,7 +109,7 @@ position = Vector2(0, -1) sprite_frames = SubResource("SpriteFrames_rj586") animation = &"idle" autoplay = "idle" -frame_progress = 0.90102535 +frame_progress = 0.4343156 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, 3) @@ -5,6 +5,11 @@ extends Node2D var save_state_path = "user://save_state.cfg" var save_state = ConfigFile.new() +## Should objects like the Player react to input, and enemies move +var objects_active = true + +var _transition_room: Node + # Called when the node enters the scene tree for the first time. func _ready() -> void: var room = initial_room.instantiate() @@ -19,33 +24,43 @@ func _ready() -> void: save_state.save(save_state_path) print(OS.get_data_dir()) -var _transition_room: Node - func transition_to_room(room_name: String): + # 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 + # Start animation # The animation calls _change_room at a specific time - $TransitionCanvas/AnimationPlayer.play("room_transition") + $TransitionCanvas/AnimationPlayer.play("room_trans_start") + objects_active = false var room = ResourceLoader.load("res://room_" + room_name + ".tscn") _transition_room = room.instantiate() -func _change_room(): +func _transition_start(): + print_debug("_transition_start") var current_room = get_node("active_room") remove_child(current_room) + current_room.queue_free() - # If the room hasn't loaded yet, busy loop until it is + # If the room hasn't loaded yet, loop until it is while _transition_room == null: await get_tree().create_timer(0.1).timeout var next_room: Node = _transition_room next_room.name = "active_room" - next_room.process_mode = Node.PROCESS_MODE_PAUSABLE + next_room.connect("ready", _on_room_changed) add_child(next_room) - _transition_room = null +func _on_room_changed(): + print_debug("_on_room_changed") + $TransitionCanvas/AnimationPlayer.play("room_trans_end") -func set_paused(paused: bool): - get_tree().paused = paused +func _transition_end(): + print_debug("_transition_end") + objects_active = true + _transition_room = null func save(): save_state.save("user://save_state.cfg") @@ -1,11 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://cey3jxnpmommt"] +[gd_scene load_steps=7 format=3 uid="uid://cey3jxnpmommt"] [ext_resource type="Script" uid="uid://dxbspy72bg0db" path="res://top.gd" id="1_on2c2"] [ext_resource type="PackedScene" uid="uid://cjdhfl70fgt6m" path="res://room_main_menu.tscn" id="2_58ij3"] -[sub_resource type="Animation" id="Animation_on2c2"] -resource_name = "room_transition" -length = 4.0 +[sub_resource type="Animation" id="Animation_58ij3"] +length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true @@ -13,10 +12,26 @@ tracks/0/path = NodePath(".:color") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0, 2, 4), -"transitions": PackedFloat32Array(1, 1, 1), +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), "update": 0, -"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1), Color(0, 0, 0, 0)] +"values": [Color(0, 0, 0, 0)] +} + +[sub_resource type="Animation" id="Animation_2exal"] +resource_name = "room_trans_start" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)] } tracks/1/type = "method" tracks/1/imported = false @@ -25,22 +40,17 @@ tracks/1/path = NodePath("../..") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"times": PackedFloat32Array(0, 2, 4), -"transitions": PackedFloat32Array(1, 1, 1), +"times": PackedFloat32Array(2), +"transitions": PackedFloat32Array(1), "values": [{ -"args": [true], -"method": &"set_paused" -}, { "args": [], -"method": &"_change_room" -}, { -"args": [false], -"method": &"set_paused" +"method": &"_transition_start" }] } -[sub_resource type="Animation" id="Animation_58ij3"] -length = 0.001 +[sub_resource type="Animation" id="Animation_edsjh"] +resource_name = "room_trans_end" +length = 2.0 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true @@ -48,16 +58,31 @@ tracks/0/path = NodePath(".:color") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), "update": 0, -"values": [Color(0, 0, 0, 0)] +"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("../..") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(2), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"_transition_end" +}] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_2exal"] _data = { &"RESET": SubResource("Animation_58ij3"), -&"room_transition": SubResource("Animation_on2c2") +&"room_trans_end": SubResource("Animation_edsjh"), +&"room_trans_start": SubResource("Animation_2exal") } [node name="Top" type="Node2D"] |
