SaveStation, save & load properly
This commit is contained in:
parent
d4acde846c
commit
847670821d
16 changed files with 129 additions and 13 deletions
7
metroidvania/Scenes/Objects/SaveStation.gd
Normal file
7
metroidvania/Scenes/Objects/SaveStation.gd
Normal file
|
@ -0,0 +1,7 @@
|
|||
extends StaticBody2D
|
||||
|
||||
onready var animation = $Animation
|
||||
|
||||
func _on_SaveArea_body_entered(body):
|
||||
animation.play("Save")
|
||||
SaverLoader.save_game()
|
64
metroidvania/Scenes/Objects/SaveStation.tscn
Normal file
64
metroidvania/Scenes/Objects/SaveStation.tscn
Normal file
|
@ -0,0 +1,64 @@
|
|||
[gd_scene load_steps=6 format=2]
|
||||
|
||||
[ext_resource path="res://Assets/World/SaveStation.png" type="Texture" id=1]
|
||||
[ext_resource path="res://Scenes/Objects/SaveStation.gd" type="Script" id=2]
|
||||
[ext_resource path="res://Assets/UI/WhiteSquare.png" type="Texture" id=3]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=1]
|
||||
extents = Vector2( 8, 10 )
|
||||
|
||||
[sub_resource type="Animation" id=2]
|
||||
resource_name = "Save"
|
||||
length = 0.5
|
||||
step = 0.05
|
||||
tracks/0/type = "value"
|
||||
tracks/0/path = NodePath("WhiteSpaceSprite:scale")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = false
|
||||
tracks/0/keys = {
|
||||
"times": PoolRealArray( 0, 0.25, 0.5 ),
|
||||
"transitions": PoolRealArray( 1, 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 1e-05, 1.25 ), Vector2( 1, 1.25 ), Vector2( 1e-05, 1.25 ) ]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/path = NodePath("WhiteSpaceSprite: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.5 ),
|
||||
"transitions": PoolRealArray( 1, 1 ),
|
||||
"update": 0,
|
||||
"values": [ Vector2( 0, -25 ), Vector2( 0, -3 ) ]
|
||||
}
|
||||
|
||||
[node name="SaveStation" type="StaticBody2D"]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="WhiteSpaceSprite" type="Sprite" parent="."]
|
||||
position = Vector2( 0, -25 )
|
||||
scale = Vector2( 1, 0.0625 )
|
||||
texture = ExtResource( 3 )
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
position = Vector2( 0, -24 )
|
||||
texture = ExtResource( 1 )
|
||||
|
||||
[node name="Collider" type="CollisionPolygon2D" parent="."]
|
||||
polygon = PoolVector2Array( -13, 0, -9, -4, 9, -4, 13, 0 )
|
||||
|
||||
[node name="SaveArea" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
|
||||
[node name="Collider" type="CollisionShape2D" parent="SaveArea"]
|
||||
position = Vector2( 0, -14 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="Animation" type="AnimationPlayer" parent="."]
|
||||
anims/Save = SubResource( 2 )
|
||||
|
||||
[connection signal="body_entered" from="SaveArea" to="." method="_on_SaveArea_body_entered"]
|
|
@ -9,6 +9,7 @@ extents = Vector2( 8, 8 )
|
|||
[node name="Spikes" type="Node2D"]
|
||||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
z_index = 20
|
||||
texture = ExtResource( 1 )
|
||||
centered = false
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@ onready var muzzle = $Sprite/PlayerGun/Sprite/Muzzle
|
|||
onready var fireBulletTimer = $FireBulletTimer
|
||||
onready var blinkAnimator = $BlinkAnimator
|
||||
onready var powerupDetector = $PowerupDetector
|
||||
onready var cameraFollow = $CameraFollow
|
||||
|
||||
signal hit_door(door)
|
||||
|
||||
|
@ -50,6 +51,10 @@ func set_invincible(value):
|
|||
func _ready():
|
||||
PlayerStats.connect("player_died", self, "_on_died")
|
||||
MainInstances.Player = self
|
||||
call_deferred("assign_world_camera")
|
||||
|
||||
func assign_world_camera():
|
||||
cameraFollow.remote_path = MainInstances.WorldCamera.get_path()
|
||||
|
||||
func _exit_tree():
|
||||
MainInstances.Player = null
|
||||
|
@ -87,7 +92,7 @@ func _physics_process(delta):
|
|||
|
||||
if Input.is_action_pressed("fire_missile") and fireBulletTimer.time_left == 0 and PlayerStats.missiles > 0 and PlayerStats.missiles_unlocked:
|
||||
fire_missile()
|
||||
|
||||
|
||||
func fire_bullet():
|
||||
var bullet = Utils.instance_scene_on_main(PlayerBullet, muzzle.global_position)
|
||||
bullet.velocity = Vector2.RIGHT.rotated(playerGun.rotation) * bullet_speed
|
||||
|
|
|
@ -130,6 +130,7 @@ script = ExtResource( 2 )
|
|||
|
||||
[node name="Sprite" type="Sprite" parent="."]
|
||||
position = Vector2( 0, -12 )
|
||||
z_index = 10
|
||||
texture = ExtResource( 1 )
|
||||
hframes = 12
|
||||
frame = 11
|
||||
|
|
|
@ -41,6 +41,7 @@ margin_right = 56.0
|
|||
margin_bottom = 56.0
|
||||
rect_min_size = Vector2( 56, 16 )
|
||||
text = "Quit"
|
||||
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/StartButton" to="." method="_on_StartButton_pressed"]
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/LoadButton" to="." method="_on_LoadButton_pressed"]
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/QuitButton" to="." method="_on_QuitButton_pressed"]
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
extends Camera2D
|
||||
|
||||
var MainInstances = ResourceLoader.MainInstances
|
||||
|
||||
var shake = 0
|
||||
|
||||
onready var timer = $Timer
|
||||
|
||||
func _ready():
|
||||
Events.connect("add_screenshake", self, "_on_Events_add_screenshake")
|
||||
MainInstances.WorldCamera = self
|
||||
|
||||
func _exit_tree():
|
||||
MainInstances.WorldCamera = null
|
||||
|
||||
func _process(delta):
|
||||
offset_h = rand_range(-shake, shake)
|
||||
|
|
|
@ -6,6 +6,11 @@ onready var currentLevel = $Level_00
|
|||
|
||||
func _ready():
|
||||
VisualServer.set_default_clear_color(Color.black)
|
||||
|
||||
if SaverLoader.is_loading:
|
||||
SaverLoader.load_game()
|
||||
SaverLoader.is_loading = false
|
||||
|
||||
MainInstances.Player.connect("hit_door", self, "_on_Player_hit_door")
|
||||
|
||||
func _on_Player_hit_door(door):
|
||||
|
|
|
@ -9,19 +9,19 @@
|
|||
[node name="World" type="Node"]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="Camera" parent="." instance=ExtResource( 6 )]
|
||||
position = Vector2( 9, 88 )
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 2 )]
|
||||
position = Vector2( 9, 96 )
|
||||
|
||||
[node name="CameraFollow" parent="Player" index="5"]
|
||||
remote_path = NodePath("../../Camera")
|
||||
|
||||
[node name="Camera" parent="." instance=ExtResource( 6 )]
|
||||
position = Vector2( 9, 88 )
|
||||
|
||||
[node name="UI" parent="." instance=ExtResource( 7 )]
|
||||
|
||||
[node name="Level_00" parent="." instance=ExtResource( 1 )]
|
||||
position = Vector2( -132, -35 )
|
||||
position = Vector2( -132, -32 )
|
||||
|
||||
[editable path="Player"]
|
||||
[editable path="Player/Hurtbox"]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue