Camera Overhaul (preliminary)

This commit is contained in:
Jakob Feldmann 2023-01-16 21:07:48 +01:00
parent 35b525dff9
commit 9b3676fe2c
9 changed files with 201 additions and 79 deletions

View File

@ -69,6 +69,7 @@ window=false
grav=false
layer=false
viewport=true
physics=false
[importer_defaults]

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=114 format=2]
[gd_scene load_steps=115 format=2]
[ext_resource path="res://assets/blobby/blobby-effects-spritesheet.png" type="Texture" id=1]
[ext_resource path="res://src/Actors/Blobby/BlobbyStateMachine.gd" type="Script" id=3]
@ -254,6 +254,8 @@ priority = 0
[sub_resource type="AnimationNodeStateMachineTransition" id=137]
[sub_resource type="AnimationNodeStateMachineTransition" id=189]
[sub_resource type="AnimationNodeStateMachine" id=47]
states/duckTurn/node = SubResource( 126 )
states/duckTurn/position = Vector2( 1795.54, 241 )
@ -266,7 +268,7 @@ states/idleTurn/position = Vector2( 1375.54, -193.991 )
states/idling/node = SubResource( 116 )
states/idling/position = Vector2( 1375.54, -54 )
states/jumpToFall/node = SubResource( 119 )
states/jumpToFall/position = Vector2( 1795.54, 343.009 )
states/jumpToFall/position = Vector2( 1795.54, 306.009 )
states/jumping/node = SubResource( 125 )
states/jumping/position = Vector2( 1375.54, 117.009 )
states/runToJump/node = SubResource( 146 )
@ -281,9 +283,9 @@ states/wallslideToJump/node = SubResource( 136 )
states/wallslideToJump/position = Vector2( 1375.54, 343.009 )
states/wallsliding/node = SubResource( 96 )
states/wallsliding/position = Vector2( 1795.54, 493.009 )
transitions = [ "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "running", "turnToRun", SubResource( 171 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ), "wallsliding", "falling", SubResource( 137 ) ]
transitions = [ "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "running", "turnToRun", SubResource( 171 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ), "wallsliding", "falling", SubResource( 137 ), "jumping", "wallsliding", SubResource( 189 ) ]
start_node = "idling"
graph_offset = Vector2( 1098.54, -360.991 )
graph_offset = Vector2( 995.54, 69.009 )
[sub_resource type="AnimationNodeStateMachinePlayback" id=48]

View File

@ -2,15 +2,29 @@ extends Camera2D
var horizontal_facing = 0
var vertical_facing = 0
var camera_horizontal_shift = 90
var camera_vertical_shift = 0
var time: float = 0
var move_time: float = 0
var slow_time: float = 0
var original_limit_left: int
var original_limit_right: int
var original_limit_bottom: int
var original_limit_top: int
var camera_is_panning: bool = false
var target_offset: Vector2 = Vector2(0,0)
onready var tween = $ShiftTween
export var camera_horizontal_shift = 80
export var offset_reset_seconds := 1
export var offset_adapt_seconds := 0.8
onready var tween = $OffsetTween
onready var shiftLeft = $CameraAnimationPlayer.get_animation("shiftingLeft")
onready var shiftRight = $CameraAnimationPlayer.get_animation("shiftingRight")
onready var shiftCenter = $CameraAnimationPlayer.get_animation("shiftingCenter")
onready var anim_player = $CameraAnimationPlayer
onready var original_x_zoom = zoom.x
onready var original_y_zoom = zoom.y
onready var blobby = get_node("%Blobby")
onready var prev_camera_pos
onready var screen_rect = Vector2(ProjectSettings.get_setting("display/window/size/width") * zoom.x, ProjectSettings.get_setting("display/window/size/height") * zoom.y )
var image = Image.new()
var texture = ImageTexture.new()
@ -19,17 +33,25 @@ var texture = ImageTexture.new()
# Requires "TileMap" to be a sibling of blobby
func _ready():
_set_boundaries()
print(screen_rect)
self.position = blobby.global_position
prev_camera_pos = get_camera_screen_center()
offset.x = -camera_horizontal_shift if zoom.x == original_x_zoom else 0
image.create(128, 2, false, Image.FORMAT_RGBAH)
_update_lighting_shader()
# TODO Trigger when needed
get_node("LightAnimationPlayer").play("Pulsing")
func _physics_process(delta: float) -> void:
if(!GlobalState.is_dead):
time += delta
_adapt_to_movement()
#print(get_camera_screen_center().x - blobby.global_position.x)
var player_vel = blobby.velocity
if(abs(player_vel.x) >= blobby.max_velocity["walk"]):
move_time += delta
slow_time = 0
else:
slow_time += delta
move_time = 0
_adapt_to_movement(player_vel)
#TODO Do this via a event or let it be to track blobbies movement better
else:
self.position = blobby.global_position
@ -44,11 +66,14 @@ func _set_boundaries():
# New pngs -> completely new tiles and rebuild map
var rect = tilemap.get_used_rect()
var cell_size = tilemap.cell_size
limit_right = rect.end.x * cell_size.x - camera_horizontal_shift
limit_left = rect.position.x * cell_size.x + camera_horizontal_shift
# TODO: When vertical scrolling is fixed
limit_top = rect.position.y * cell_size.y #+ camera_vertical_shift
limit_bottom = rect.end.y * cell_size.y #- camera_vertical_shift
limit_right = rect.end.x * cell_size.x
limit_left = rect.position.x * cell_size.x
limit_top = rect.position.y * cell_size.y
limit_bottom = rect.end.y * cell_size.y
original_limit_left = limit_left
original_limit_right = limit_right
original_limit_top = limit_top
original_limit_bottom = limit_bottom
var screen_size = get_viewport_rect()
var h_pixels = limit_right - limit_left
var v_pixels = limit_bottom - limit_top
@ -61,41 +86,52 @@ func _set_boundaries():
zoom.x = zoom.y
# TODO Smoothing the camera limits in godot ruins this still?
func _adapt_to_movement():
# TODO Adapt this to movement speed
var target_offset: Vector2 = Vector2(0,0)
var tween_v = false
var tween_h = false
# TODO Make smarter
if(time > 0.1):
time = 0.0
var cam_offset = get_camera_screen_center() - prev_camera_pos
var new_h_facing = sign(cam_offset.x)
if new_h_facing != 0 && horizontal_facing != new_h_facing:
horizontal_facing = new_h_facing
target_offset.x = camera_horizontal_shift * horizontal_facing
tween_h = true
# var new_v_facing = sign(cam_offset.y)
# if new_v_facing != 0 && vertical_facing != new_v_facing:
# vertical_facing = new_v_facing
# target_offset.x = offset.x if !new_h_facing else target_offset.x
# target_offset.y = camera_vertical_shift * vertical_facing
# tween_v = true
prev_camera_pos = get_camera_screen_center()
if ((tween_h || tween_v )):
#TODO Motion may be too complex
tween.interpolate_property(
self,
"offset",
offset,
target_offset,
1.2,
Tween.TRANS_SINE,
Tween.EASE_OUT
)
tween.start()
func _adapt_to_movement(velocity: Vector2) -> void:
var offset_track
if(move_time >= offset_adapt_seconds && !anim_player.is_playing()):
target_offset.x = camera_horizontal_shift * sign(velocity.x)
if(sign(velocity.x) < 0):
offset_track = shiftLeft.find_track(".:offset")
shiftLeft.track_set_key_value(offset_track, 0, offset)
shiftLeft.track_set_key_value(offset_track, 1, target_offset)
limit_left = original_limit_left + camera_horizontal_shift
anim_player.play("shiftingLeft")
else:
offset_track = shiftRight.find_track(".:offset")
shiftRight.track_set_key_value(offset_track, 0, offset)
shiftRight.track_set_key_value(offset_track, 1, target_offset)
limit_right = original_limit_right - camera_horizontal_shift
anim_player.play("shiftingRight")
if(slow_time >= offset_reset_seconds):
var center = get_camera_screen_center()
var left_edge_pos = center.x - screen_rect.x/2 + camera_horizontal_shift
var right_edge_pos = center.x + screen_rect.x/2 - camera_horizontal_shift
print("left_edge")
print(left_edge_pos)
print("limit_left")
print(limit_left)
print("right_edge")
print(right_edge_pos)
print("limit_right")
print(limit_right)
if(left_edge_pos > limit_left && limit_right > right_edge_pos && !anim_player.is_playing()):
target_offset.x = 0
offset_track = shiftCenter.find_track(".:offset")
shiftCenter.track_set_key_value(offset_track, 0, offset)
shiftCenter.track_set_key_value(offset_track, 1, target_offset)
var limit_left_track = shiftCenter.find_track(".:limit_left")
var limit_right_track = shiftCenter.find_track(".:limit_right")
var limit_top_track = shiftCenter.find_track(".:limit_top")
var limit_bottom_track = shiftCenter.find_track(".:limit_bottom")
shiftCenter.track_set_key_value(limit_left_track, 0, limit_left)
shiftCenter.track_set_key_value(limit_right_track, 0, limit_right)
shiftCenter.track_set_key_value(limit_top_track, 0, limit_top)
shiftCenter.track_set_key_value(limit_bottom_track, 0, limit_bottom)
shiftCenter.track_set_key_value(limit_left_track, 1, original_limit_left)
shiftCenter.track_set_key_value(limit_right_track, 1,original_limit_right)
shiftCenter.track_set_key_value(limit_top_track, 1, original_limit_top)
shiftCenter.track_set_key_value(limit_bottom_track, 1, original_limit_bottom)
anim_player.play("shiftingCenter")
position = blobby.position
func _death_cam():

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=47 format=2]
[gd_scene load_steps=50 format=2]
[ext_resource path="res://src/Actors/BlobbyCam.gd" type="Script" id=1]
[ext_resource path="res://assets/environment/background/Asteroids-Near.png" type="Texture" id=2]
@ -303,6 +303,102 @@ tracks/9/keys = {
"values": [ false ]
}
[sub_resource type="Animation" id=11]
resource_name = "shiftingCenter"
length = 0.6
tracks/0/type = "value"
tracks/0/path = NodePath(".:offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1.6 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath(".:limit_left")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ -10000000, -10000000 ]
}
tracks/2/type = "value"
tracks/2/path = NodePath(".:limit_top")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ -10000000, -10000000 ]
}
tracks/3/type = "value"
tracks/3/path = NodePath(".:limit_right")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ 10000000, 10000000 ]
}
tracks/4/type = "value"
tracks/4/path = NodePath(".:limit_bottom")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ 10000000, 10000000 ]
}
[sub_resource type="Animation" id=12]
resource_name = "shiftingLeft"
length = 0.6
tracks/0/type = "value"
tracks/0/path = NodePath(".:offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1.6 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ) ]
}
[sub_resource type="Animation" id=13]
resource_name = "shiftingRight"
length = 0.6
tracks/0/type = "value"
tracks/0/path = NodePath(".:offset")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.6 ),
"transitions": PoolRealArray( 1, 1.6 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( 0, 0 ) ]
}
[sub_resource type="Animation" id=9]
resource_name = "Pulsing"
length = 3.33
@ -409,18 +505,20 @@ zoom = Vector2( 0.75, 0.75 )
process_mode = 0
drag_margin_h_enabled = true
drag_margin_v_enabled = true
drag_margin_left = 0.1
drag_margin_left = 0.05
drag_margin_top = 0.0
drag_margin_right = 0.1
drag_margin_bottom = 0.0
editor_draw_screen = false
drag_margin_right = 0.05
editor_draw_drag_margin = true
script = ExtResource( 1 )
[node name="ShiftTween" type="Tween" parent="."]
[node name="OffsetTween" type="Tween" parent="."]
[node name="CameraAnimationPlayer" type="AnimationPlayer" parent="."]
anims/RESET = SubResource( 5 )
anims/deathCam = SubResource( 6 )
anims/shiftingCenter = SubResource( 11 )
anims/shiftingLeft = SubResource( 12 )
anims/shiftingRight = SubResource( 13 )
[node name="LightAnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../ParallaxBackground/ParallaxLayer4")
@ -511,10 +609,10 @@ texture = ExtResource( 8 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
visible = false
frames = SubResource( 7 )
frame = 10
frame = 6
playing = true
[node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"]
frames = SubResource( 8 )
frame = 1
frame = 11
playing = true

View File

@ -23,7 +23,7 @@ func _on_LevelTemplate_ready() -> void:
# Executes on frog death
# The old switchero
func _on_WhatAreFrog_child_exiting_tree(node:Node) -> void:
func _on_WhatAreFrog_child_exiting_tree(_node:Node) -> void:
if(is_first_signal):
var anchor = RopeAnchor.instance()
anchor.mode = 0

View File

@ -54,7 +54,7 @@ cast_to = Vector2( 0, -13 )
collision_mask = 56
[node name="Orientation" type="RayCast2D" parent="."]
cast_to = Vector2( 1, 0 )
cast_to = Vector2( -1, 0 )
collision_mask = 0
collide_with_bodies = false

View File

@ -5,4 +5,3 @@
[node name="Rope" type="Node2D"]
z_index = -1
script = ExtResource( 1 )
rope_tightness = 0.5

View File

@ -29,9 +29,6 @@ wait_time = 20.0
[node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"]
frame = 1
[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"]
frame = 11
[node name="Blobby" parent="." instance=ExtResource( 2 )]
unique_name_in_owner = true
position = Vector2( -70, -1.90735e-06 )

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=15 format=2]
[gd_scene load_steps=13 format=2]
[ext_resource path="res://src/Utilities/GameplaySignalManager.gd" type="Script" id=1]
[ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=2]
@ -11,8 +11,6 @@
[ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=9]
[ext_resource path="res://src/Contraptions/Portal/Portal.tscn" type="PackedScene" id=10]
[ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=11]
[ext_resource path="res://src/Actors/Enemies/Beings/BoundFrog.tscn" type="PackedScene" id=12]
[ext_resource path="res://src/ObstacleObjects/Spikes.tscn" type="PackedScene" id=13]
[sub_resource type="AnimationNodeStateMachinePlayback" id=4]
@ -34,10 +32,7 @@ cell_size = Vector2( 24, 24 )
collision_layer = 8
collision_mask = 8
format = 1
tile_data = PoolIntArray( 131099, -1073741822, 0, 262139, -1610612734, 0, 196635, -1073741822, 0, 327675, -1610612734, 0, 262171, -1073741822, 0, 393211, -1610612734, 0, 327707, -1073741822, 0, 458747, -1610612734, 0, 393243, -1073741822, 0, 524283, -1610612734, 0, 458779, -1073741822, 0, 589819, -1610612734, 0, 524315, -1073741822, 0, 655355, -1610612734, 0, 589851, -1073741822, 0, 720891, -1610612734, 0, 655387, -1073741822, 0, 786427, -1610612734, 0, 720923, -1073741822, 0, 851963, -1610612734, 0, 786459, -1073741822, 0, 917499, -1610612734, 0, 851995, -1073741822, 0, 983036, 2, 0, 983037, 2, 0, 983038, 2, 0, 983039, 2, 0, 917504, 2, 0, 917505, 2, 0, 917506, 2, 0, 917507, 2, 0, 917508, 2, 0, 917509, 2, 0, 917510, 2, 0, 917511, 2, 0, 917512, 2, 0, 917513, 2, 0, 917514, 2, 0, 917515, 2, 0, 917516, 2, 0, 917517, 2, 0, 917518, 2, 0, 917519, 2, 0, 917520, 2, 0, 917521, 2, 0, 917522, 2, 0, 917523, 2, 0, 917524, 2, 0, 917525, 2, 0, 917526, 2, 0, 917527, 2, 0, 917528, 2, 0, 917529, 2, 0, 917530, 2, 0 )
[node name="Spikes" parent="." instance=ExtResource( 13 )]
position = Vector2( 252, 323 )
tile_data = PoolIntArray( 65531, -1610612734, 0, 51, -1073741822, 0, 131067, -1610612734, 0, 65587, -1073741822, 0, 196603, -1610612734, 0, 131123, -1073741822, 0, 262139, -1610612734, 0, 196659, -1073741822, 0, 327675, -1610612734, 0, 262195, -1073741822, 0, 393211, -1610612734, 0, 327731, -1073741822, 0, 458747, -1610612734, 0, 393267, -1073741822, 0, 524283, -1610612734, 0, 458803, -1073741822, 0, 589819, -1610612734, 0, 524339, -1073741822, 0, 655355, -1610612734, 0, 589875, -1073741822, 0, 720891, -1610612734, 0, 655411, -1073741822, 0, 786427, -1610612734, 0, 720947, -1073741822, 0, 851963, -1610612734, 0, 786483, -1073741822, 0, 917499, -1610612734, 0, 852019, -1073741822, 0, 983036, 2, 0, 983037, 2, 0, 983038, 2, 0, 983039, 2, 0, 917504, 2, 0, 917505, 2, 0, 917506, 2, 0, 917507, 2, 0, 917508, 2, 0, 917509, 2, 0, 917510, 2, 0, 917511, 2, 0, 917512, 2, 0, 917513, 2, 0, 917514, 2, 0, 917515, 2, 0, 917516, 2, 0, 917517, 2, 0, 917518, 2, 0, 917519, 2, 0, 917520, 2, 0, 917521, 2, 0, 917522, 2, 0, 917523, 2, 0, 917524, 2, 0, 917525, 2, 0, 917526, 2, 0, 917527, 2, 0, 917528, 2, 0, 917529, 2, 0, 917530, 2, 0, 917531, 2, 0, 917532, 2, 0, 917533, 2, 0, 917534, 2, 0, 917535, 2, 0, 917536, 2, 0, 917537, 2, 0, 917538, 2, 0, 917539, 2, 0, 917540, 2, 0, 917541, 2, 0, 917542, 2, 0, 917543, 2, 0, 917544, 2, 0, 917545, 2, 0, 917546, 2, 0, 917547, 2, 0, 917548, 2, 0, 917549, 2, 0, 917550, 2, 0, 917551, 2, 0, 917552, 2, 0, 917553, 2, 0, 917554, 2, 0 )
[node name="BlobbyCam" parent="." instance=ExtResource( 11 )]
@ -49,9 +44,6 @@ scale = Vector2( 0.878906, 0.936025 )
[node name="AnimationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 4 )
[node name="BoundFrog" parent="." instance=ExtResource( 12 )]
position = Vector2( 200, 323 )
[node name="Collectibles" type="Node2D" parent="."]
visible = false
@ -114,7 +106,6 @@ next_scene = ExtResource( 6 )
[node name="GameplaySignalManager" type="Node2D" parent="."]
script = ExtResource( 1 )
[connection signal="ready" from="." to="BoundFrog" method="_on_LevelTemplate_ready"]
[connection signal="timeout" from="UserInterface/HUD/HUDOverlay/GetBackTimer/Timer" to="GameplaySignalManager" method="_on_Timer_timeout"]
[connection signal="getback_timer_up" from="GameplaySignalManager" to="Blobby" method="_on_GameplaySignalManager_getback_timer_up"]
[connection signal="terminal_activated" from="GameplaySignalManager" to="UserInterface/HUD" method="_on_SignalManager_terminal_activated"]
@ -122,8 +113,6 @@ script = ExtResource( 1 )
[editable path="UserInterface"]
[editable path="UserInterface/HUD"]
[editable path="Blobby"]
[editable path="BoundFrog"]
[editable path="BoundFrog/RopeAnchor"]
[editable path="TreeWhyButtons"]
[editable path="TreeWhyButtons/WhyButton1"]
[editable path="TreeWhyButtons/WhyButton2"]