Commit 1bd4ae72 authored by Nathan Lovato's avatar Nathan Lovato

Replace arcade scoreboard with a mobile-friendly design, add flossy dance

parent 204923d0
Pipeline #5224 passed with stage
in 13 minutes and 56 seconds
......@@ -7,7 +7,7 @@ onready var foreground = $Foreground
onready var gnu = $Gnu
onready var score_board = $UI/ScoreBoard
const ScoreLoader = preload("res://ScoreBoard/ScoreLoader.gd")
const ScoreLoader = preload("res://Score/ScoreLoaderMobile.gd")
var waiting_to_restart = false
......@@ -26,17 +26,26 @@ func _unhandled_input(event):
func _on_Gnu_died():
"""Play fade out animations, update the score, and show the scoreboard"""
yield(_fade_gameplay_assets(), "completed")
_show_high_score()
waiting_to_restart = true
func _fade_gameplay_assets():
foreground.fade_out()
yield(get_tree().create_timer(0.3), "timeout")
# Can't use an AnimationPlayer because the pillars are toplevel nodes
get_tree().call_group('pillar', 'fade_out')
# We need to fade the pillars individually because they are toplevel nodes
# They don"t inherit the modulate color from anything
get_tree().call_group("pillar", "fade_out")
yield(get_tree().create_timer(0.3), "timeout")
score_label.fade_out()
yield(get_tree().create_timer(0.6), "timeout")
func _show_high_score():
var loader = ScoreLoader.new()
loader.register(score_label.score)
var scores = loader.get_scores()
score_board.start(scores)
waiting_to_restart = true
var high_score = loader.register(score_label.score)
if high_score == score_label.score:
score_label.show_best_label()
gnu.dance()
gnu.global_position = score_label.gnu_spawn_position
gnu.appear()
score_label.fade_to_opaque()
[gd_scene load_steps=18 format=2]
[gd_scene load_steps=17 format=2]
[ext_resource path="res://Game.gd" type="Script" id=1]
[ext_resource path="res://assets/bg.png" type="Texture" id=2]
[ext_resource path="res://assets/particle_cloud_1.png" type="Texture" id=3]
[ext_resource path="res://ScoreLabel/ScoreLabel.tscn" type="PackedScene" id=4]
[ext_resource path="res://Score/ScoreLabel.tscn" type="PackedScene" id=4]
[ext_resource path="res://Gnu/Gnu.tscn" type="PackedScene" id=5]
[ext_resource path="res://Foreground.gd" type="Script" id=6]
[ext_resource path="res://PillarSpawner/PillarSpawner.tscn" type="PackedScene" id=7]
[ext_resource path="res://SpriteSpawner/SpriteSpawner.gd" type="Script" id=8]
[ext_resource path="res://SpriteSpawner/GroundSprite.tscn" type="PackedScene" id=9]
[ext_resource path="res://SpriteSpawner/Fence.tscn" type="PackedScene" id=10]
[ext_resource path="res://ScoreBoard/ScoreBoard.tscn" type="PackedScene" id=11]
[sub_resource type="Gradient" id=1]
......@@ -94,7 +94,7 @@ tracks/0/keys = {
"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ]
}
[node name="Game" type="Node2D"]
[node name="Game" type="Node2D" index="0"]
script = ExtResource( 1 )
......@@ -137,18 +137,6 @@ v_frames = 1
[node name="ScoreLabel" parent="Background" index="2" instance=ExtResource( 4 )]
anchor_left = 0.0
anchor_top = 0.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="Gnu" parent="." index="1" instance=ExtResource( 5 )]
position = Vector2( 190, 960 )
......@@ -161,6 +149,7 @@ script = ExtResource( 6 )
[node name="PillarSpawner" parent="Foreground" index="0" instance=ExtResource( 7 )]
position = Vector2( 0, 950 )
_sections_unfolded = [ "Z Index" ]
[node name="GroundSpawner" type="Node2D" parent="Foreground" index="1"]
......@@ -168,6 +157,7 @@ editor/display_folded = true
position = Vector2( -180, 1930 )
z_index = 100
script = ExtResource( 8 )
_sections_unfolded = [ "Z Index" ]
sprite_scene = ExtResource( 9 )
[node name="SpawnPosition" type="Position2D" parent="Foreground/GroundSpawner" index="0"]
......@@ -177,6 +167,7 @@ sprite_scene = ExtResource( 9 )
position = Vector2( -180, 1700 )
z_index = 100
script = ExtResource( 8 )
_sections_unfolded = [ "Z Index" ]
sprite_scene = ExtResource( 10 )
[node name="SpawnPosition" type="Position2D" parent="Foreground/FenceSpawner" index="0"]
......@@ -191,16 +182,4 @@ playback_speed = 1.0
anims/fade_out = SubResource( 6 )
blend_times = [ ]
[node name="UI" type="CanvasLayer" parent="." index="3"]
layer = 1
offset = Vector2( 0, 0 )
rotation = 0.0
scale = Vector2( 1, 1 )
transform = Transform2D( 1, 0, 0, 1, 0, 0 )
[node name="ScoreBoard" parent="UI" index="0" instance=ExtResource( 11 )]
visible = false
......@@ -4,8 +4,9 @@ signal died
onready var tween = $Tween
onready var anim_player = $AnimationPlayer
onready var sprite = $Sprite
onready var gnu_skeleton = $GnuSkeleton
onready var collision_shape = $CollisionShape2D
onready var particles = $PurpleMiasma
export var gravity = 4000.0
export var flap_force = 1200.0
......@@ -47,8 +48,8 @@ func flap():
_target_angle = -PI / 5.0
if not tween.is_active():
tween.interpolate_property(
sprite, 'rotation',
sprite.rotation, _target_angle, 0.12,
gnu_skeleton, 'rotation',
gnu_skeleton.rotation, _target_angle, 0.12,
Tween.TRANS_CUBIC, Tween.EASE_OUT)
tween.start()
......@@ -57,10 +58,10 @@ func _physics_process(delta):
_velocity.y += gravity * delta
_velocity.y = min(_velocity.y, max_fall_speed)
if not tween.is_active() and sprite.rotation < PI / 5.0:
if not tween.is_active() and gnu_skeleton.rotation < PI / 5.0:
_angular_velocity += angular_acceleration * delta
_angular_velocity = min(_angular_velocity, max_angular_velocity)
sprite.rotate(_angular_velocity * delta)
gnu_skeleton.rotate(_angular_velocity * delta)
var motion = _velocity * delta
# Prevent the character from moving too high up
......@@ -72,23 +73,37 @@ func _physics_process(delta):
func die():
set_physics_process(false)
set_process_unhandled_input(false)
self._active = false
tween.interpolate_property(
sprite, 'scale',
sprite.scale, Vector2(), 0.4,
gnu_skeleton, 'scale',
gnu_skeleton.scale, Vector2(), 0.4,
Tween.TRANS_QUAD, Tween.EASE_OUT)
tween.start()
yield(tween, "tween_completed")
self._active = false
gnu_skeleton.rotation = 0.0
emit_signal('died')
func _set_active(value):
_active = value
visible = value
set_physics_process(value)
set_process_unhandled_input(value)
particles.emitting = value
collision_shape.disabled = not value
func appear():
tween.stop_all()
tween.interpolate_property(
gnu_skeleton, 'scale',
gnu_skeleton.scale, gnu_skeleton.start_scale, 0.3,
Tween.TRANS_QUAD, Tween.EASE_OUT)
tween.start()
func dance():
gnu_skeleton.dance()
func _on_Tween_tween_completed(object, key):
tween.stop_all()
......@@ -3,7 +3,7 @@
[ext_resource path="res://Gnu/Gnu.gd" type="Script" id=1]
[ext_resource path="res://assets/particle_cloud_2.png" type="Texture" id=2]
[ext_resource path="res://Gnu/Camera2D.gd" type="Script" id=3]
[ext_resource path="res://assets/gnu.png" type="Texture" id=4]
[ext_resource path="res://Gnu/GnuSkeleton.tscn" type="PackedScene" id=4]
[sub_resource type="Gradient" id=1]
......@@ -79,60 +79,12 @@ radius = 55.8274
length = 2.0
loop = true
step = 0.1
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.8, 1.6 ),
"transitions": PoolRealArray( 0.435275, 0.965936, 1.36604 ),
"update": 0,
"values": [ Vector2( -66.5, 1 ), Vector2( -69.5, -30 ), Vector2( -68, 20 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:rotation_degrees")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0.5, 1.1, 1.7, 1.8, 1.9 ),
"transitions": PoolRealArray( 1, 1.23114, 1, 1, 1 ),
"update": 0,
"values": [ 4.3, -7.0, 1.92708, 2.88061, 2.73285 ]
}
[sub_resource type="Animation" id=8]
length = 0.001
loop = false
step = 0.1
tracks/0/type = "value"
tracks/0/path = NodePath("Sprite:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.001 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( -68.9759, -24.584 ), Vector2( -61.4759, -3.58407 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Sprite:rotation_degrees")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.001 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ 4.10578, 0.0 ]
}
[node name="Gnu" type="KinematicBody2D"]
......@@ -151,6 +103,7 @@ speed_horizontal = 280.0
[node name="PurpleMiasma" type="Particles2D" parent="." index="0"]
position = Vector2( -44.9996, 4.58978 )
z_index = -1
emitting = true
amount = 10
lifetime = 1.0
......@@ -169,6 +122,7 @@ texture = ExtResource( 2 )
normal_map = null
h_frames = 1
v_frames = 1
_sections_unfolded = [ "Z Index" ]
[node name="Camera2D" type="Camera2D" parent="." index="1"]
......@@ -197,14 +151,11 @@ editor_draw_limits = false
editor_draw_drag_margin = false
script = ExtResource( 3 )
[node name="Sprite" type="Sprite" parent="." index="2"]
[node name="GnuSkeleton" parent="." index="2" instance=ExtResource( 4 )]
editor/display_folded = true
position = Vector2( -66.5, 1 )
rotation = 0.0522559
scale = Vector2( 0.786026, 0.786026 )
texture = ExtResource( 4 )
offset = Vector2( 84.6028, -31.3285 )
position = Vector2( -36, 11.9999 )
scale = Vector2( 0.765628, 0.765628 )
_sections_unfolded = [ "Transform", "Visibility" ]
[node name="CollisionShape2D" type="CollisionShape2D" parent="." index="3"]
......
extends Node2D
onready var anim_player = $AnimationPlayer
var start_scale = Vector2()
func _ready():
start_scale = scale
func dance():
anim_player.play("dance")
[gd_scene load_steps=13 format=2]
[gd_scene load_steps=14 format=2]
[ext_resource path="res://assets/gnu/body.png" type="Texture" id=1]
[ext_resource path="res://assets/gnu/tail.png" type="Texture" id=2]
[ext_resource path="res://assets/gnu/foot_back_rear.png" type="Texture" id=3]
[ext_resource path="res://assets/gnu/foot_back_front.png" type="Texture" id=4]
[ext_resource path="res://assets/gnu/foot_front.png" type="Texture" id=5]
[ext_resource path="res://assets/gnu/foot_rear.png" type="Texture" id=6]
[ext_resource path="res://assets/gnu/head_smile.png" type="Texture" id=7]
[ext_resource path="res://assets/gnu/ear_back.png" type="Texture" id=8]
[ext_resource path="res://assets/gnu/ear.png" type="Texture" id=9]
[ext_resource path="res://assets/gnu/head.png" type="Texture" id=10]
[ext_resource path="res://Gnu/GnuSkeleton.gd" type="Script" id=1]
[ext_resource path="res://assets/gnu/body.png" type="Texture" id=2]
[ext_resource path="res://assets/gnu/tail.png" type="Texture" id=3]
[ext_resource path="res://assets/gnu/foot_back_rear.png" type="Texture" id=4]
[ext_resource path="res://assets/gnu/foot_back_front.png" type="Texture" id=5]
[ext_resource path="res://assets/gnu/foot_front.png" type="Texture" id=6]
[ext_resource path="res://assets/gnu/foot_rear.png" type="Texture" id=7]
[ext_resource path="res://assets/gnu/head.png" type="Texture" id=8]
[ext_resource path="res://assets/gnu/ear_back.png" type="Texture" id=9]
[ext_resource path="res://assets/gnu/ear.png" type="Texture" id=10]
[ext_resource path="res://assets/gnu/head_smile.png" type="Texture" id=11]
[sub_resource type="Animation" id=1]
......@@ -387,7 +388,7 @@ tracks/30/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ ExtResource( 10 ) ]
"values": [ ExtResource( 8 ) ]
}
tracks/31/type = "value"
tracks/31/path = NodePath("Pivot/body:z_index")
......@@ -514,7 +515,7 @@ tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ ExtResource( 7 ) ]
"values": [ ExtResource( 11 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Pivot/body/tail:position")
......@@ -864,32 +865,11 @@ tracks/29/keys = {
"update": 0,
"values": [ 0.0 ]
}
tracks/30/type = "value"
tracks/30/path = NodePath(".:position")
tracks/30/interp = 1
tracks/30/loop_wrap = true
tracks/30/imported = false
tracks/30/enabled = true
tracks/30/keys = {
"times": PoolRealArray( 1.5 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Vector2( 0, 0 ) ]
}
tracks/31/type = "value"
tracks/31/path = NodePath(".:rotation_degrees")
tracks/31/interp = 1
tracks/31/loop_wrap = true
tracks/31/imported = false
tracks/31/enabled = true
tracks/31/keys = {
"times": PoolRealArray( 1.5 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ 0.0 ]
}
[node name="Node2D" type="Node2D"]
[node name="GnuSkeleton" type="Node2D"]
script = ExtResource( 1 )
_sections_unfolded = [ "Transform" ]
[node name="Pivot" type="Position2D" parent="." index="0"]
......@@ -897,66 +877,59 @@ _sections_unfolded = [ "Visibility" ]
[node name="body" type="Sprite" parent="Pivot" index="0"]
position = Vector2( 2.27021, -0.74084 )
rotation = -1.27251
z_as_relative = false
texture = ExtResource( 1 )
texture = ExtResource( 2 )
offset = Vector2( 23.406, -19.1561 )
_sections_unfolded = [ "Transform", "Visibility", "Z Index" ]
_sections_unfolded = [ "Visibility", "Z Index" ]
[node name="tail" type="Sprite" parent="Pivot/body" index="0"]
show_behind_parent = true
position = Vector2( -40.5001, -14.0625 )
rotation = -0.0686197
position = Vector2( -39.7186, -12.6564 )
z_as_relative = false
texture = ExtResource( 2 )
texture = ExtResource( 3 )
offset = Vector2( -37.125, -2.81253 )
_sections_unfolded = [ "Transform", "Visibility", "Z Index" ]
[node name="foot_back_rear" type="Sprite" parent="Pivot/body" index="1"]
show_behind_parent = true
position = Vector2( -23.6205, 28.5217 )
position = Vector2( -7.09358, 26.1561 )
z_as_relative = false
texture = ExtResource( 3 )
texture = ExtResource( 4 )
offset = Vector2( -4.15627, 4.28125 )
_sections_unfolded = [ "Z Index" ]
[node name="foot_back_front" type="Sprite" parent="Pivot/body" index="2"]
show_behind_parent = true
position = Vector2( 21.8343, 42.3101 )
rotation = 0.916846
position = Vector2( 64.9065, 30.6561 )
z_as_relative = false
texture = ExtResource( 4 )
texture = ExtResource( 5 )
offset = Vector2( -5.2813, 3.15625 )
_sections_unfolded = [ "Z Index" ]
[node name="foot_front" type="Sprite" parent="Pivot/body" index="3"]
position = Vector2( 25.3957, 46.434 )
rotation = -0.47691
position = Vector2( 27.7814, 32.3436 )
z_as_relative = false
texture = ExtResource( 5 )
texture = ExtResource( 6 )
offset = Vector2( -4.71878, 5.40623 )
_sections_unfolded = [ "Z Index" ]
[node name="foot_rear" type="Sprite" parent="Pivot/body" index="4"]
position = Vector2( -41.7361, -1.05226 )
position = Vector2( -34.0936, 19.4061 )
z_as_relative = false
texture = ExtResource( 6 )
texture = ExtResource( 7 )
offset = Vector2( -5.2813, 4.28123 )
_sections_unfolded = [ "Z Index" ]
[node name="head" type="Sprite" parent="Pivot/body" index="5"]
position = Vector2( 72.2135, -17.6458 )
rotation = 1.20236
z_index = 1
position = Vector2( 68.844, -19.9689 )
z_as_relative = false
texture = ExtResource( 7 )
texture = ExtResource( 8 )
offset = Vector2( 19.4687, -26.0938 )
_sections_unfolded = [ "Offset", "Z Index" ]
......@@ -964,25 +937,24 @@ _sections_unfolded = [ "Offset", "Z Index" ]
show_behind_parent = true
position = Vector2( 86.6251, -37.6875 )
z_index = 1
rotation = 0.00242953
z_as_relative = false
texture = ExtResource( 8 )
texture = ExtResource( 9 )
offset = Vector2( 49.8438, -2.46877 )
_sections_unfolded = [ "Z Index" ]
[node name="ear" type="Sprite" parent="Pivot/body/head" index="1"]
position = Vector2( -14.0625, -40.5 )
z_index = 1
z_as_relative = false
texture = ExtResource( 9 )
texture = ExtResource( 10 )
offset = Vector2( -50.2813, -3.03128 )
_sections_unfolded = [ "Z Index" ]
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="1"]
root_node = NodePath("..")
autoplay = ""
autoplay = "SETUP"
playback_process_mode = 1
playback_default_blend_time = 0.0
playback_speed = 1.0
......
......@@ -5,11 +5,16 @@
[ext_resource path="res://assets/pillar_bottom.png" type="Texture" id=3]
[sub_resource type="RectangleShape2D" id=1]
custom_solver_bias = 0.0
extents = Vector2( 20, 240 )
[sub_resource type="Animation" id=2]
resource_name = "fade_out"
length = 0.6
loop = false
step = 0.1
tracks/0/type = "value"
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
......@@ -26,41 +31,74 @@ tracks/0/keys = {
[node name="Pillar" type="StaticBody2D" groups=[
"pillar",
]]
input_pickable = false
collision_layer = 2
collision_mask = 0
constant_linear_velocity = Vector2( 0, 0 )
constant_angular_velocity = 0.0
friction = 1.0
bounce = 0.0
script = ExtResource( 1 )
__meta__ = {
"_edit_vertical_guides_": [ ]
}
[node name="PillarTop" type="Sprite" parent="."]
[node name="PillarTop" type="Sprite" parent="." index="0"]
position = Vector2( -10, -750 )
z_index = 5
z_index = 10
texture = ExtResource( 2 )
_sections_unfolded = [ "Z Index" ]
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="." index="1"]
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
position = Vector2( 0, 50 )
build_mode = 0
polygon = PoolVector2Array( -120, -240, 100, -240, 100, -1510, -120, -1510 )
[node name="PillarBottom" type="Sprite" parent="."]
[node name="PillarBottom" type="Sprite" parent="." index="2"]
position = Vector2( 0, 650 )
z_index = -10
texture = ExtResource( 3 )
_sections_unfolded = [ "Z Index" ]
[node name="CollisionPolygon2D2" type="CollisionPolygon2D" parent="." index="3"]
[node name="CollisionPolygon2D2" type="CollisionPolygon2D" parent="."]
position = Vector2( 0, 1226 )
build_mode = 0
polygon = PoolVector2Array( -120, -240, 100, -240, 100, -1060, -120, -1060 )
[node name="Checkpoint" type="Area2D" parent="."]
[node name="Checkpoint" type="Area2D" parent="." index="4"]
position = Vector2( 0, -20 )
input_pickable = true
gravity_vec = Vector2( 0, 1 )
gravity = 98.0
linear_damp = 0.1
angular_damp = 1.0
collision_layer = 4
audio_bus_override = false
audio_bus_name = "Master"
[node name="CollisionShape2D" type="CollisionShape2D" parent="Checkpoint" index="0"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Checkpoint"]
shape = SubResource( 1 )
[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."]
[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="." index="5"]
position = Vector2( 140, 0 )
rect = Rect2( -20, -20, 40, 40 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="6"]
root_node = NodePath("..")
autoplay = ""
playback_process_mode = 1
playback_default_blend_time = 0.0
playback_speed = 1.0
anims/fade_out = SubResource( 2 )
blend_times = [ ]
extends Label
onready var tween = $Tween
onready var new_best_label = $Pivot/NewBestLabel
onready var gnu_spawn_position = $GnuPivot.global_position
const WHITE_OPAQUE = Color('aaffffff')
const WHITE_SEMI_TRANSPARENT = Color('44ffffff')
......@@ -23,15 +25,19 @@ func set_score(value):
tween.start()
func fade_out():
func fade_to_opaque():
tween.stop_all()
tween.interpolate_property(
self, 'modulate',
modulate, WHITE_TRANSPARENT, 0.6,
modulate, WHITE_OPAQUE, 0.3,
Tween.TRANS_QUAD, Tween.EASE_IN)
tween.start()
func show_best_label():
new_best_label.appear()
func _ready():
modulate = WHITE_SEMI_TRANSPARENT
......
[gd_scene load_steps=8 format=2]
[ext_resource path="res://assets/fonts/Cabin-SemiBold.otf" type="DynamicFontData" id=1]
[ext_resource path="res://Score/ScoreLabel.gd" type="Script" id=2]
[ext_resource path="res://assets/fonts/ScoreRow.tres" type="DynamicFont" id=3]
[sub_resource type="DynamicFont" id=1]
size = 300
use_mipmaps = false
use_filter = true
font_data = ExtResource( 1 )
[sub_resource type="GDScript" id=2]
script/source = "extends Label
onready var anim_player = $AnimationPlayer
func appear():
anim_player.play(\"appear\")
"
[sub_resource type="Animation" id=3]
length = 0.01
loop = false
step = 0.1
tracks/0/type = "value"
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 0 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath(".:rect_position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 0,
"values": [ Vector2( 0, 0 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath(".:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ false ]
}
[sub_resource type="Animation" id=4]
length = 0.3
loop = false
step = 0.05
tracks/0/type = "value"
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.3 ),
"transitions": PoolRealArray( 0.415353, 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath(".:rect_position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.3 ),
"transitions": PoolRealArray( 1, 1 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( 0, -59 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath(".:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0 ),
"transitions": PoolRealArray( 1 ),
"update": 1,
"values": [ true ]
}
tracks/3/type = "value"
tracks/3/path = NodePath(".:rect_rotation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/keys = {
"times": PoolRealArray( 0.3 ),
"transitions": PoolRealArray( 1 ),
"update": 0,