From 91e0659b8c1ed122b749facbe197b6ebbe0fface Mon Sep 17 00:00:00 2001 From: JPCard Date: Thu, 30 Apr 2020 20:08:51 -0300 Subject: [PATCH] Add animated transition beetween levels --- game/assets/UI/loading_icon.png | Bin 0 -> 1872 bytes game/assets/UI/loading_icon.png.import | 34 ++++ game/assets/UI/player_art.png | Bin 0 -> 47569 bytes game/assets/UI/player_art.png.import | 34 ++++ game/assets/tilesets/prototype.tres | 18 ++ game/assets/tilesets/valley.tres | 5 + game/src/Autoload/LevelLoader.gd | 33 ++-- game/src/Main/Game.tscn | 70 +------ game/src/UI/Transition.gd | 34 +++- game/src/UI/Transition.tscn | 243 +++++++++++++++++++++++++ 10 files changed, 392 insertions(+), 79 deletions(-) create mode 100644 game/assets/UI/loading_icon.png create mode 100644 game/assets/UI/loading_icon.png.import create mode 100644 game/assets/UI/player_art.png create mode 100644 game/assets/UI/player_art.png.import create mode 100644 game/src/UI/Transition.tscn diff --git a/game/assets/UI/loading_icon.png b/game/assets/UI/loading_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..000602dffdea85745b020ba18f92db6f271d45aa GIT binary patch literal 1872 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 pr~Tr7`d?s>ZK z0i$a{w5~BghU=nUI$7}_k!e53Qa^7S6_I-bP2Qb8#j97=vQE^3Xyd&t!&Bl3F~}y) z)n|{}k#4JJh;M`b5atumDt_@fK`R8)R%-f%*>AC+spV)*^V(6Ns+czD2JHb?bcc-Z z0C)lybg(2K>)coUKcQ{2=p>ytwNs!-9%Uw6ZPk6$)Sl?8nwgeQTN(*(Mql zdz;xXk)*Ss+URgU)IbB)KL z{QqY1D>fJ21$K`t6hT`EiX}spOAU}_CIz1FB;cw-I8HpPj&}@P&b}Mg`IWH5D_=~J aCx5s)R^H{tW~Y8Q@FNFRma2i61pN;J`Y*Qt literal 0 HcmV?d00001 diff --git a/game/assets/UI/player_art.png.import b/game/assets/UI/player_art.png.import new file mode 100644 index 0000000..124df27 --- /dev/null +++ b/game/assets/UI/player_art.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/player_art.png-7b84e8940437deef8a50bb0d84c732ca.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/UI/player_art.png" +dest_files=[ "res://.import/player_art.png-7b84e8940437deef8a50bb0d84c732ca.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/game/assets/tilesets/prototype.tres b/game/assets/tilesets/prototype.tres index 2435077..73723cf 100644 --- a/game/assets/tilesets/prototype.tres +++ b/game/assets/tilesets/prototype.tres @@ -17,6 +17,11 @@ points = PoolVector2Array( 0, 0, 40, 0, 40, 40, 0, 40 ) 0/tile_mode = 0 0/occluder_offset = Vector2( 0, 0 ) 0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape = SubResource( 1 ) +0/shape_one_way = false +0/shape_one_way_margin = 1.0 0/shapes = [ { "autotile_coord": Vector2( 0, 0 ), "one_way": false, @@ -33,6 +38,11 @@ points = PoolVector2Array( 0, 0, 40, 0, 40, 40, 0, 40 ) 1/tile_mode = 0 1/occluder_offset = Vector2( 0, 0 ) 1/navigation_offset = Vector2( 0, 0 ) +1/shape_offset = Vector2( 0, 0 ) +1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +1/shape = SubResource( 2 ) +1/shape_one_way = true +1/shape_one_way_margin = 1.0 1/shapes = [ { "autotile_coord": Vector2( 0, 0 ), "one_way": true, @@ -49,6 +59,10 @@ points = PoolVector2Array( 0, 0, 40, 0, 40, 40, 0, 40 ) 2/tile_mode = 0 2/occluder_offset = Vector2( 0, 0 ) 2/navigation_offset = Vector2( 0, 0 ) +2/shape_offset = Vector2( 0, 0 ) +2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +2/shape_one_way = false +2/shape_one_way_margin = 0.0 2/shapes = [ ] 2/z_index = 0 3/name = "purple" @@ -59,5 +73,9 @@ points = PoolVector2Array( 0, 0, 40, 0, 40, 40, 0, 40 ) 3/tile_mode = 0 3/occluder_offset = Vector2( 0, 0 ) 3/navigation_offset = Vector2( 0, 0 ) +3/shape_offset = Vector2( 0, 0 ) +3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +3/shape_one_way = false +3/shape_one_way_margin = 0.0 3/shapes = [ ] 3/z_index = 0 diff --git a/game/assets/tilesets/valley.tres b/game/assets/tilesets/valley.tres index 4d9f6c4..a9a41d1 100644 --- a/game/assets/tilesets/valley.tres +++ b/game/assets/tilesets/valley.tres @@ -59,6 +59,11 @@ points = PoolVector2Array( 0, 0, 80, 0, 80, 80, 0, 80 ) 3/autotile/z_index_map = [ ] 3/occluder_offset = Vector2( 0, 0 ) 3/navigation_offset = Vector2( 0, 0 ) +3/shape_offset = Vector2( 0, 0 ) +3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +3/shape = SubResource( 1 ) +3/shape_one_way = false +3/shape_one_way_margin = 1.0 3/shapes = [ { "autotile_coord": Vector2( 0, 1 ), "one_way": false, diff --git a/game/src/Autoload/LevelLoader.gd b/game/src/Autoload/LevelLoader.gd index 90efc74..1792486 100644 --- a/game/src/Autoload/LevelLoader.gd +++ b/game/src/Autoload/LevelLoader.gd @@ -1,12 +1,14 @@ extends Node # Loads and unloads levels -onready var scene_tree := get_tree() - var _game: Node = null var _player: Player = null var _level: Node2D = null +onready var scene_tree := get_tree() + + + func setup(game: Node, player: Player, Level: PackedScene) -> void: _game = game @@ -15,32 +17,35 @@ func setup(game: Node, player: Player, Level: PackedScene) -> void: func trigger(NewLevel: PackedScene, portal_name: String = "") -> void: - _game.remove_child(_player) - if _level: scene_tree.paused = true -# _game.transition.animation_player.play("transition") + _game.transition.start_transition_animation() + # Covers the screen before changing the level to avoid visual discrepancies + yield(_game.transition, "screen_covered") _level.queue_free() yield(_level, "tree_exited") - + + # The player is removed after the transition is covering the screen + _game.remove_child(_player) _level = NewLevel.instance() - + var player_position_node: Node2D = ( _level.get_node("Checkpoints").get_child(0) if portal_name.empty() - else _level.get_node("Portals/%s" % portal_name)) + else _level.get_node("Portals/%s" % portal_name) + ) _player.global_position = player_position_node.global_position _player.has_teleported = not portal_name.empty() - + for checkpoint_name in _game.visited_checkpoints.get(_level.name, []): var checkpoint: Area2D = _level.get_node("Checkpoints/%s" % checkpoint_name) checkpoint.is_visited = true - -# if _game.transition.animation_player.current_animation == "transition": -# yield(_game.transition, "peaked") - + _game.level = _level _game.add_child(_level) _game.add_child(_player) - + + # The loading is done + _game.transition.finish_transition_animation() + scene_tree.paused = false diff --git a/game/src/Main/Game.tscn b/game/src/Main/Game.tscn index 5aad24e..f2111bf 100644 --- a/game/src/Main/Game.tscn +++ b/game/src/Main/Game.tscn @@ -1,57 +1,12 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://src/Main/Game.gd" type="Script" id=1] [ext_resource path="res://assets/theme/gdquest.theme" type="Theme" id=2] [ext_resource path="res://src/UI/debug/DebugDock.gd" type="Script" id=3] [ext_resource path="res://src/UI/debug/DebugPanel.tscn" type="PackedScene" id=4] -[ext_resource path="res://src/Player/Player.tscn" type="PackedScene" id=5] -[ext_resource path="res://src/Levels/SkyParallaxBackground.tscn" type="PackedScene" id=6] - -[sub_resource type="Animation" id=1] -resource_name = "" -length = 0.001 -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 ) ] -} - -[sub_resource type="Animation" id=2] -resource_name = "transition" -length = 0.6 -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.4, 0.6 ), -"transitions": PoolRealArray( 0.732043, 1.51572, 1 ), -"update": 0, -"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] -} -tracks/1/type = "method" -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0.4 ), -"transitions": PoolRealArray( 1 ), -"values": [ { -"args": [ "peaked" ], -"method": "emit_signal" -} ] -} +[ext_resource path="res://src/UI/Transition.tscn" type="PackedScene" id=5] +[ext_resource path="res://src/Player/Player.tscn" type="PackedScene" id=8] +[ext_resource path="res://src/Levels/SkyParallaxBackground.tscn" type="PackedScene" id=9] [node name="Game" type="Node"] script = ExtResource( 1 ) @@ -92,21 +47,10 @@ mouse_filter = 2 reference_path = NodePath("../../../../../Game/Player/StateMachine") properties = PoolStringArray( "_state_name" ) -[node name="Transition" type="ColorRect" parent="UI"] -pause_mode = 2 -modulate = Color( 1, 1, 1, 0 ) -margin_right = 1920.0 -margin_bottom = 1080.0 -mouse_filter = 2 -color = Color( 0, 0, 0, 1 ) +[node name="Transition" parent="UI" instance=ExtResource( 5 )] -[node name="AnimationPlayer" type="AnimationPlayer" parent="UI/Transition"] -autoplay = "" -anims/ = SubResource( 1 ) -anims/transition = SubResource( 2 ) +[node name="Player" parent="." instance=ExtResource( 8 )] -[node name="Player" parent="." instance=ExtResource( 5 )] - -[node name="SkyParallaxBackground" parent="." instance=ExtResource( 6 )] +[node name="SkyParallaxBackground" parent="." instance=ExtResource( 9 )] [editable path="Player"] diff --git a/game/src/UI/Transition.gd b/game/src/UI/Transition.gd index 805c81c..38d0e2a 100644 --- a/game/src/UI/Transition.gd +++ b/game/src/UI/Transition.gd @@ -1,6 +1,36 @@ extends ColorRect +signal screen_covered -signal peaked +var _loading_anim_started := false -onready var animation_player: AnimationPlayer = $AnimationPlayer +onready var _animation_player: AnimationPlayer = $AnimationPlayer + + +# The level transition animations will be fade_outin->[fade_in_extras-> +# loading->fade_out_extras->]fade_out +# [fade_in_extras->loading->fade_out_extras->] is optional and its +# length depends on the extra time the LevelLoader takes to load the next level + + +func start_transition_animation() -> void: + _animation_player.play("fade_in") + + +func finish_transition_animation() -> void: + if _loading_anim_started: + _animation_player.play("fade_out_extras") + _loading_anim_started = false + else: + _animation_player.play("fade_out") + + +func _on_AnimationPlayer_animation_finished(anim_name: String) -> void: + if anim_name == "fade_in": + emit_signal("screen_covered") + _animation_player.play("fade_in_extras") + elif anim_name == "fade_in_extras": + _loading_anim_started = true + _animation_player.play("loading") + elif anim_name == "fade_out_extras": + _animation_player.play("fade_out") diff --git a/game/src/UI/Transition.tscn b/game/src/UI/Transition.tscn new file mode 100644 index 0000000..c3bab2b --- /dev/null +++ b/game/src/UI/Transition.tscn @@ -0,0 +1,243 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://assets/UI/loading_icon.png" type="Texture" id=1] +[ext_resource path="res://assets/UI/player_art.png" type="Texture" id=2] +[ext_resource path="res://src/UI/Transition.gd" type="Script" id=3] + +[sub_resource type="Animation" id=1] +resource_name = "" +length = 0.001 +loop = true +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 ) ] +} + +[sub_resource type="Animation" id=2] +resource_name = "fade_in" +length = 0.6 +tracks/0/type = "value" +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = false +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.5, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("LoadingSprite:modulate") +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": [ Color( 1, 1, 1, 0 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("PlayerArtSprite:modulate") +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": 0, +"values": [ Color( 1, 1, 1, 0 ) ] +} + +[sub_resource type="Animation" id=3] +resource_name = "fade_in_extras" +length = 0.3 +tracks/0/type = "value" +tracks/0/path = NodePath("LoadingSprite:frame") +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": 1, +"values": [ 0 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("LoadingSprite:modulate") +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": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("PlayerArtSprite:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("PlayerArtSprite:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 350, 862 ) ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("PlayerArtSprite:flip_h") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="Animation" id=4] +length = 0.6 +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.1, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} + +[sub_resource type="Animation" id=5] +resource_name = "fade_out_extras" +length = 0.3 +tracks/0/type = "value" +tracks/0/path = NodePath("LoadingSprite: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( 1, 1 ), +"update": 0, +"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("PlayerArtSprite:modulate") +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": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] +} + +[sub_resource type="Animation" id=6] +length = 3.6 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath("LoadingSprite:frame") +tracks/0/interp = 0 +tracks/0/loop_wrap = false +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05, 1.2, 1.35, 1.5, 1.65, 1.8, 1.95, 2.1, 2.25, 2.4, 2.55, 2.7, 2.85, 3, 3.15, 3.3, 3.45 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("PlayerArtSprite: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.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6, 2.8, 3, 3.2, 3.4 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 350, 862 ), Vector2( 450, 832 ), Vector2( 550, 862 ), Vector2( 650, 832 ), Vector2( 750, 862 ), Vector2( 850, 832 ), Vector2( 950, 862 ), Vector2( 1050, 832 ), Vector2( 1150, 862 ), Vector2( 1250, 832 ), Vector2( 1150, 862 ), Vector2( 1050, 832 ), Vector2( 950, 862 ), Vector2( 850, 832 ), Vector2( 750, 862 ), Vector2( 650, 832 ), Vector2( 550, 862 ), Vector2( 450, 832 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("PlayerArtSprite:flip_h") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 1.8 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ false, true ] +} + +[node name="Transition" type="ColorRect"] +pause_mode = 2 +modulate = Color( 1, 1, 1, 0 ) +margin_right = 1920.0 +margin_bottom = 1080.0 +mouse_filter = 2 +color = Color( 0, 0, 0, 1 ) +script = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +autoplay = "" +anims/ = SubResource( 1 ) +anims/fade_in = SubResource( 2 ) +anims/fade_in_extras = SubResource( 3 ) +anims/fade_out = SubResource( 4 ) +anims/fade_out_extras = SubResource( 5 ) +anims/loading = SubResource( 6 ) + +[node name="LoadingSprite" type="Sprite" parent="."] +modulate = Color( 1, 1, 1, 0 ) +position = Vector2( 1809.7, 975.4 ) +scale = Vector2( 2, 2 ) +texture = ExtResource( 1 ) +hframes = 8 + +[node name="PlayerArtSprite" type="Sprite" parent="."] +modulate = Color( 1, 1, 1, 0 ) +position = Vector2( 350, 862 ) +texture = ExtResource( 2 ) +[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_AnimationPlayer_animation_finished"]