Save boss and player statuses
This commit is contained in:
parent
b0c5798328
commit
6ea21b3181
9 changed files with 43 additions and 3 deletions
|
@ -11,7 +11,8 @@ func set_door_lock(value):
|
||||||
DoorLock.set_collision_mask_bit(PLAYER_BIT, value)
|
DoorLock.set_collision_mask_bit(PLAYER_BIT, value)
|
||||||
|
|
||||||
func _on_Trigger_triggered():
|
func _on_Trigger_triggered():
|
||||||
set_door_lock(true)
|
if not SaverLoader.custom_data.boss_defeated:
|
||||||
|
set_door_lock(true)
|
||||||
|
|
||||||
func _on_BossEnemy_died():
|
func _on_BossEnemy_died():
|
||||||
set_door_lock(false)
|
set_door_lock(false)
|
||||||
|
|
|
@ -3,12 +3,20 @@ extends Node
|
||||||
const save_path = "user://savegame.save"
|
const save_path = "user://savegame.save"
|
||||||
|
|
||||||
var is_loading = false
|
var is_loading = false
|
||||||
|
var custom_data = { # Defaults
|
||||||
|
"boss_defeated": false,
|
||||||
|
"missiles": 0,
|
||||||
|
"missiles_unlocked": false,
|
||||||
|
"health": 4,
|
||||||
|
}
|
||||||
|
|
||||||
func save_game():
|
func save_game():
|
||||||
print("Saving game")
|
|
||||||
var save_game = File.new()
|
var save_game = File.new()
|
||||||
save_game.open(save_path, File.WRITE)
|
save_game.open(save_path, File.WRITE)
|
||||||
var persistingNodes = get_tree().get_nodes_in_group("Persists")
|
var persistingNodes = get_tree().get_nodes_in_group("Persists")
|
||||||
|
|
||||||
|
save_game.store_line(to_json(custom_data))
|
||||||
|
|
||||||
for node in persistingNodes:
|
for node in persistingNodes:
|
||||||
var nodeData = node.save()
|
var nodeData = node.save()
|
||||||
save_game.store_line(to_json(nodeData))
|
save_game.store_line(to_json(nodeData))
|
||||||
|
@ -25,6 +33,10 @@ func load_game():
|
||||||
node.queue_free()
|
node.queue_free()
|
||||||
|
|
||||||
save_game.open(save_path, File.READ)
|
save_game.open(save_path, File.READ)
|
||||||
|
|
||||||
|
if not save_game.eof_reached():
|
||||||
|
custom_data = parse_json(save_game.get_line())
|
||||||
|
|
||||||
while not save_game.eof_reached():
|
while not save_game.eof_reached():
|
||||||
var current_line = save_game.get_line()
|
var current_line = save_game.get_line()
|
||||||
if current_line == "":
|
if current_line == "":
|
||||||
|
|
|
@ -9,6 +9,11 @@ export (int) var ACCELERATION = 70
|
||||||
onready var rightWallCheck = $RightWallCheck
|
onready var rightWallCheck = $RightWallCheck
|
||||||
onready var leftWallCheck = $LeftWallCheck
|
onready var leftWallCheck = $LeftWallCheck
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
._ready()
|
||||||
|
if SaverLoader.custom_data.boss_defeated:
|
||||||
|
self.queue_free()
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
chase_player(delta)
|
chase_player(delta)
|
||||||
|
|
||||||
|
@ -35,3 +40,8 @@ func fire_bullet() -> void:
|
||||||
|
|
||||||
func _on_Timer_timeout():
|
func _on_Timer_timeout():
|
||||||
fire_bullet()
|
fire_bullet()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_BossEnemy_died():
|
||||||
|
SaverLoader.custom_data.boss_defeated = true
|
||||||
|
self.queue_free()
|
||||||
|
|
|
@ -1023,6 +1023,7 @@ collision_mask = 2
|
||||||
wait_time = 0.3
|
wait_time = 0.3
|
||||||
autostart = true
|
autostart = true
|
||||||
|
|
||||||
|
[connection signal="died" from="." to="." method="_on_BossEnemy_died"]
|
||||||
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
|
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
|
||||||
|
|
||||||
[editable path="Hurtbox"]
|
[editable path="Hurtbox"]
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
extends StaticBody2D
|
extends StaticBody2D
|
||||||
|
|
||||||
|
var PlayerStats = ResourceLoader.PlayerStats
|
||||||
|
|
||||||
onready var animation = $Animation
|
onready var animation = $Animation
|
||||||
|
|
||||||
func _on_SaveArea_body_entered(_body):
|
func _on_SaveArea_body_entered(_body):
|
||||||
print(_body)
|
print(_body)
|
||||||
|
# PlayerStats.set_max_health()
|
||||||
animation.play("Save")
|
animation.play("Save")
|
||||||
SaverLoader.save_game()
|
SaverLoader.save_game()
|
||||||
|
|
|
@ -50,6 +50,9 @@ func set_invincible(value):
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
PlayerStats.connect("player_died", self, "_on_died")
|
PlayerStats.connect("player_died", self, "_on_died")
|
||||||
|
PlayerStats.health = SaverLoader.custom_data.health
|
||||||
|
PlayerStats.missiles_unlocked = SaverLoader.custom_data.missiles_unlocked
|
||||||
|
PlayerStats.missiles = SaverLoader.custom_data.missiles
|
||||||
MainInstances.Player = self
|
MainInstances.Player = self
|
||||||
call_deferred("assign_world_camera")
|
call_deferred("assign_world_camera")
|
||||||
|
|
||||||
|
@ -261,6 +264,7 @@ func _on_Hurtbox_hit(damage):
|
||||||
if not invincible:
|
if not invincible:
|
||||||
PlayerStats.health -= damage
|
PlayerStats.health -= damage
|
||||||
blinkAnimator.play("Blink")
|
blinkAnimator.play("Blink")
|
||||||
|
SaverLoader.custom_data.health = PlayerStats.health
|
||||||
|
|
||||||
func _on_died():
|
func _on_died():
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
|
@ -22,10 +22,15 @@ func set_health(value):
|
||||||
if health == 0:
|
if health == 0:
|
||||||
emit_signal("player_died")
|
emit_signal("player_died")
|
||||||
|
|
||||||
|
func set_max_health():
|
||||||
|
set_health(max_health)
|
||||||
|
|
||||||
func set_missiles(value):
|
func set_missiles(value):
|
||||||
missiles = clamp(value, 0, max_missiles)
|
missiles = clamp(value, 0, max_missiles)
|
||||||
|
SaverLoader.custom_data.missiles = missiles
|
||||||
emit_signal("player_missiles_changed", missiles)
|
emit_signal("player_missiles_changed", missiles)
|
||||||
|
|
||||||
func set_missiles_unlocked(value):
|
func set_missiles_unlocked(value):
|
||||||
missiles_unlocked = value
|
missiles_unlocked = value
|
||||||
|
SaverLoader.custom_data.missiles_unlocked = value
|
||||||
emit_signal("player_missiles_unlocked", value)
|
emit_signal("player_missiles_unlocked", value)
|
||||||
|
|
|
@ -9,7 +9,7 @@ func _ready():
|
||||||
PlayerStats.connect("player_missiles_unlocked", self, "_on_player_missiles_unlocked")
|
PlayerStats.connect("player_missiles_unlocked", self, "_on_player_missiles_unlocked")
|
||||||
|
|
||||||
func _on_player_missiles_changed(value):
|
func _on_player_missiles_changed(value):
|
||||||
label.text = str(value)
|
label.text = str(value) + "/" + str(PlayerStats.max_missiles)
|
||||||
|
|
||||||
func _on_player_missiles_unlocked(value):
|
func _on_player_missiles_unlocked(value):
|
||||||
visible = value
|
visible = value
|
||||||
|
|
|
@ -53,6 +53,10 @@ window/size/test_height=720
|
||||||
window/stretch/mode="2d"
|
window/stretch/mode="2d"
|
||||||
window/stretch/aspect="keep"
|
window/stretch/aspect="keep"
|
||||||
|
|
||||||
|
[global]
|
||||||
|
|
||||||
|
editor=false
|
||||||
|
|
||||||
[importer_defaults]
|
[importer_defaults]
|
||||||
|
|
||||||
texture={
|
texture={
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue