174 lines
4.3 KiB
GDScript
174 lines
4.3 KiB
GDScript
extends Node
|
|
|
|
## SAVE DATA
|
|
#PERSISTENT DATA
|
|
var last_hit_path
|
|
var player_deaths
|
|
var enemies_killed
|
|
|
|
#GAME DATA
|
|
var data_cleared
|
|
var player_loc
|
|
var player_rot
|
|
var player_health
|
|
var player_money
|
|
var held_guns
|
|
var current_gun
|
|
var current_ammo
|
|
var reserve_ammo
|
|
var enemies = []
|
|
|
|
|
|
## SAVE DATA PATHS
|
|
var persistent_save_path = "user://persistent_data.save"
|
|
var game_save_path = "user://game_save_data.save"
|
|
|
|
func _ready() -> void:
|
|
if player_deaths == null:
|
|
player_deaths = 0
|
|
if enemies_killed == null:
|
|
enemies_killed = 0
|
|
|
|
func save_persistent_data():
|
|
var file = FileAccess.open(persistent_save_path, FileAccess.WRITE)
|
|
print("LAST HIT PATH " + str(last_hit_path))
|
|
file.store_var(last_hit_path)
|
|
file.store_var(player_deaths)
|
|
print("SAVING PLAYER DEATHS " + str(player_deaths))
|
|
file.store_var(enemies_killed)
|
|
print("SAVING ENEMIES KILLED " + str(enemies_killed))
|
|
|
|
file.close()
|
|
|
|
func load_persistent_data():
|
|
if FileAccess.file_exists(persistent_save_path):
|
|
var file = FileAccess.open(persistent_save_path, FileAccess.READ)
|
|
last_hit_path = file.get_var()
|
|
print("CROWN PARENT : " + str(last_hit_path))
|
|
player_deaths = file.get_var()
|
|
print("PLAYER DEATHS : " + str(player_deaths))
|
|
enemies_killed = file.get_var()
|
|
print("ENEMIES KILLED : " + str(enemies_killed))
|
|
|
|
file.close()
|
|
else:
|
|
print("no data saved...")
|
|
last_hit_path = null
|
|
player_deaths = null
|
|
enemies_killed = null
|
|
|
|
|
|
func save_game_data():
|
|
var level_control = get_tree().current_scene
|
|
var player = level_control.player
|
|
var file = FileAccess.open(game_save_path, FileAccess.WRITE)
|
|
|
|
#ASSIGN DATA TO VARIABLES
|
|
data_cleared = false
|
|
player_loc = player.global_position
|
|
player_rot = player.global_rotation
|
|
player_health = level_control.health
|
|
player_money = level_control.money
|
|
held_guns = save_resource_path(level_control.held_guns)
|
|
current_gun = level_control.current_gun_index
|
|
current_ammo = level_control.ammo_current
|
|
reserve_ammo = level_control.ammo_reserve
|
|
|
|
#SAVE DATA
|
|
file.store_var(data_cleared)
|
|
file.store_var(player_loc)
|
|
file.store_var(player_rot)
|
|
file.store_var(player_health)
|
|
file.store_var(player_money)
|
|
file.store_var(held_guns)
|
|
file.store_var(current_gun)
|
|
file.store_var(current_ammo)
|
|
file.store_var(reserve_ammo)
|
|
file.store_var(enemies)
|
|
|
|
file.close()
|
|
|
|
func clear_save_game_data():
|
|
var file = FileAccess.open(game_save_path, FileAccess.WRITE)
|
|
data_cleared = true
|
|
file.store_var(data_cleared)
|
|
file.store_var(player_loc)
|
|
file.store_var(player_rot)
|
|
file.store_var(player_health)
|
|
file.store_var(player_money)
|
|
file.store_var(held_guns)
|
|
file.store_var(current_gun)
|
|
file.store_var(current_ammo)
|
|
file.store_var(reserve_ammo)
|
|
file.store_var(enemies)
|
|
|
|
func load_save_game_data():
|
|
var level_control = get_tree().current_scene
|
|
var player = level_control.player
|
|
|
|
if FileAccess.file_exists(game_save_path):
|
|
var file = FileAccess.open(game_save_path, FileAccess.READ)
|
|
|
|
#GET DATA
|
|
data_cleared = file.get_var()
|
|
|
|
if !data_cleared:
|
|
player_loc = file.get_var()
|
|
player_rot = file.get_var()
|
|
player_health = file.get_var()
|
|
player_money = file.get_var()
|
|
var held_guns_encoded = file.get_var()
|
|
held_guns = load_resource_path(held_guns_encoded)
|
|
current_gun = file.get_var()
|
|
current_ammo = file.get_var()
|
|
reserve_ammo = file.get_var()
|
|
enemies = file.get_var()
|
|
|
|
#APPLY DATA
|
|
player.global_position = player_loc
|
|
player.global_rotation = player_rot
|
|
level_control.health = player_health
|
|
level_control.money = player_money
|
|
level_control.held_guns = held_guns
|
|
player.gun.queue_free()
|
|
level_control.gun_spawn(current_gun)
|
|
level_control.ammo_current = current_ammo
|
|
level_control.ammo_reserve = reserve_ammo
|
|
|
|
file.close()
|
|
else:
|
|
print("no data saved...")
|
|
|
|
func data_validate(file,variable):
|
|
if file.get_var(variable):
|
|
return file.get_var(variable)
|
|
else:
|
|
return null
|
|
|
|
func persistent_data_calc(variable,amount):
|
|
if variable == null:
|
|
variable = amount
|
|
print(str(variable) +" "+ str(amount))
|
|
else:
|
|
variable += amount
|
|
|
|
func load_data():
|
|
load_persistent_data()
|
|
load_save_game_data()
|
|
|
|
func save_resource_path(array):
|
|
var final_array = []
|
|
for i in array:
|
|
if i is PackedScene:
|
|
var resource_path = i.resource_path
|
|
if resource_path != "":
|
|
final_array.append(resource_path)
|
|
return final_array
|
|
|
|
func load_resource_path(array):
|
|
var final_array = []
|
|
for i in array:
|
|
var i_loaded = load(i)
|
|
final_array.append(i_loaded)
|
|
return final_array
|