initial game save implementation using ConfigFile, plus some experimentation with ResourceSaver though nonfunctional
This commit is contained in:
parent
db865e2ab9
commit
249c58af46
@ -30,15 +30,27 @@ layout_mode = 2
|
|||||||
text = "Play
|
text = "Play
|
||||||
"
|
"
|
||||||
|
|
||||||
[node name="TestButton" type="Button" parent="MenuButtons"]
|
[node name="SaveButton" type="Button" parent="MenuButtons"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "Test
|
text = "Save"
|
||||||
|
|
||||||
|
[node name="LoadButton" type="Button" parent="MenuButtons"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Load
|
||||||
"
|
"
|
||||||
|
|
||||||
[node name="ExitButton" type="Button" parent="MenuButtons"]
|
[node name="ExitButton" type="Button" parent="MenuButtons"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "Exit"
|
text = "Exit"
|
||||||
|
|
||||||
|
[node name="TestButton" type="Button" parent="MenuButtons"]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Test
|
||||||
|
"
|
||||||
|
|
||||||
[connection signal="pressed" from="MenuButtons/PlayButton" to="." method="_on_play_button_pressed"]
|
[connection signal="pressed" from="MenuButtons/PlayButton" to="." method="_on_play_button_pressed"]
|
||||||
[connection signal="pressed" from="MenuButtons/TestButton" to="." method="_on_test_button_pressed"]
|
[connection signal="pressed" from="MenuButtons/SaveButton" to="." method="_on_save_button_pressed"]
|
||||||
|
[connection signal="pressed" from="MenuButtons/LoadButton" to="." method="_on_load_button_pressed"]
|
||||||
[connection signal="pressed" from="MenuButtons/ExitButton" to="." method="_on_exit_button_pressed"]
|
[connection signal="pressed" from="MenuButtons/ExitButton" to="." method="_on_exit_button_pressed"]
|
||||||
|
[connection signal="pressed" from="MenuButtons/TestButton" to="." method="_on_test_button_pressed"]
|
||||||
|
@ -3,6 +3,8 @@ extends Node
|
|||||||
|
|
||||||
|
|
||||||
var debugSpeedEnabled: bool
|
var debugSpeedEnabled: bool
|
||||||
|
var player_save := ConfigFile.new()
|
||||||
|
|
||||||
|
|
||||||
class World:
|
class World:
|
||||||
enum Zone {
|
enum Zone {
|
||||||
@ -108,3 +110,33 @@ func _input(event: InputEvent) -> void:
|
|||||||
Engine.time_scale = 10.0
|
Engine.time_scale = 10.0
|
||||||
if event.is_action_pressed("game_speed_normal"):
|
if event.is_action_pressed("game_speed_normal"):
|
||||||
Engine.time_scale = 1.0
|
Engine.time_scale = 1.0
|
||||||
|
|
||||||
|
|
||||||
|
func save_game() -> void:
|
||||||
|
player_save.set_value("player", "player_name", PlayerState.player_name)
|
||||||
|
player_save.set_value("player", "constitution", PlayerState.constitution)
|
||||||
|
player_save.set_value("player", "experience", PlayerState.experience)
|
||||||
|
player_save.set_value("player", "level", PlayerState.level)
|
||||||
|
player_save.set_value("player", "base_health", PlayerState.base_health)
|
||||||
|
player_save.set_value("player", "base_resource", PlayerState.base_resource)
|
||||||
|
player_save.set_value("player", "weapon_type", PlayerState.weapon_type)
|
||||||
|
player_save.set_value("player", "zone_duration", PlayerState.zone_duration)
|
||||||
|
|
||||||
|
player_save.save_encrypted_pass("user://player_save.sav", "test")
|
||||||
|
|
||||||
|
|
||||||
|
func load_game() -> void:
|
||||||
|
var err = player_save.load_encrypted_pass("user://player_save.sav", "test")
|
||||||
|
|
||||||
|
if err != OK:
|
||||||
|
print("Failed to load save file.")
|
||||||
|
return
|
||||||
|
|
||||||
|
PlayerState.player_name = player_save.get_value("player", "player_name")
|
||||||
|
PlayerState.constitution = player_save.get_value("player", "constitution")
|
||||||
|
PlayerState.experience = player_save.get_value("player", "experience")
|
||||||
|
PlayerState.level = player_save.get_value("player", "level")
|
||||||
|
PlayerState.base_health = player_save.get_value("player", "base_health")
|
||||||
|
PlayerState.base_resource = player_save.get_value("player", "base_resource")
|
||||||
|
PlayerState.weapon_type = player_save.get_value("player", "weapon_type")
|
||||||
|
PlayerState.zone_duration = player_save.get_value("player", "zone_duration")
|
||||||
|
@ -7,7 +7,6 @@ const EXP_EXPONENT := 2.4
|
|||||||
|
|
||||||
var area_exp := 0.0
|
var area_exp := 0.0
|
||||||
var current_health: int
|
var current_health: int
|
||||||
var resource_type: String
|
|
||||||
var current_resource: int
|
var current_resource: int
|
||||||
var max_health
|
var max_health
|
||||||
var max_resource
|
var max_resource
|
||||||
@ -17,14 +16,28 @@ func _ready() -> void:
|
|||||||
SignalBus.enemy_died.connect(_on_enemy_died)
|
SignalBus.enemy_died.connect(_on_enemy_died)
|
||||||
SignalBus.quest_completed.connect(_on_quest_completed)
|
SignalBus.quest_completed.connect(_on_quest_completed)
|
||||||
SignalBus.enemy_damaged_player.connect(_on_enemy_damaged_player)
|
SignalBus.enemy_damaged_player.connect(_on_enemy_damaged_player)
|
||||||
max_health = PlayerState.max_health
|
max_health = _set_player_health()
|
||||||
max_resource = PlayerState.max_resource
|
max_resource = _set_player_resource()
|
||||||
_set_player_health_display()
|
_set_player_health_display()
|
||||||
_set_player_resource_display()
|
_set_player_resource_display()
|
||||||
$PlayerExpBar.value = _get_level_progress_percent()
|
$PlayerExpBar.value = _get_level_progress_percent()
|
||||||
$PlayerLabel/PlayerLevel.text = str(floor(PlayerState.level))
|
$PlayerLabel/PlayerLevel.text = str(floor(PlayerState.level))
|
||||||
|
|
||||||
|
|
||||||
|
func _set_player_health() -> int:
|
||||||
|
# modify player health based on stats or temporary buffs
|
||||||
|
return PlayerState.base_health * PlayerState.constitution
|
||||||
|
|
||||||
|
|
||||||
|
func _set_player_resource() -> int:
|
||||||
|
# modify player resources based on weapon and stats or temporary buffs
|
||||||
|
match PlayerState.weapon_type:
|
||||||
|
Globals.Weapon.WeaponType.BOW:
|
||||||
|
return PlayerState.base_resource
|
||||||
|
_:
|
||||||
|
return PlayerState.base_resource
|
||||||
|
|
||||||
|
|
||||||
func _on_enemy_died(enemyDifficulty, enemyTier, _enemyFaction) -> void:
|
func _on_enemy_died(enemyDifficulty, enemyTier, _enemyFaction) -> void:
|
||||||
# var kill_exp = pow(pow(enemyTier + 1, enemyDifficulty), 3)
|
# var kill_exp = pow(pow(enemyTier + 1, enemyDifficulty), 3)
|
||||||
var kill_exp = (enemyTier + 1) * enemyDifficulty
|
var kill_exp = (enemyTier + 1) * enemyDifficulty
|
||||||
@ -84,7 +97,7 @@ func _update_player_resource(change: int) -> void:
|
|||||||
var prev_resource = current_resource
|
var prev_resource = current_resource
|
||||||
var new_resource = prev_resource + change
|
var new_resource = prev_resource + change
|
||||||
current_resource = new_resource
|
current_resource = new_resource
|
||||||
PlayerState.current_resource = current_resource
|
# PlayerState.current_resource = current_resource
|
||||||
if current_resource <= 0:
|
if current_resource <= 0:
|
||||||
$PlayerResourceBar/PlayerResourceCurrent.text = str(0)
|
$PlayerResourceBar/PlayerResourceCurrent.text = str(0)
|
||||||
$PlayerResourceBar.value = 0
|
$PlayerResourceBar.value = 0
|
||||||
|
46
scripts/PlayerData.gd
Normal file
46
scripts/PlayerData.gd
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# player save data resource to use with ResourceSaver
|
||||||
|
class_name PlayerData
|
||||||
|
extends Resource
|
||||||
|
|
||||||
|
|
||||||
|
@export var player_name := "Player"
|
||||||
|
@export var constitution := 1
|
||||||
|
@export var experience := 0.0
|
||||||
|
@export var level := 1.0
|
||||||
|
@export var base_health := 100
|
||||||
|
@export var base_resource := 100
|
||||||
|
@export var weapon_type: Globals.Weapon.WeaponType
|
||||||
|
@export var zone_duration := 0
|
||||||
|
|
||||||
|
|
||||||
|
# Confused on where this all goes...
|
||||||
|
# Let's assume the PlayerState is the node where we save the player data in game
|
||||||
|
var PlayerState: Node
|
||||||
|
|
||||||
|
var save_path := "user://player_data.tres" # <- tres is Text RESource
|
||||||
|
|
||||||
|
func save() -> void:
|
||||||
|
var data := PlayerData.new()
|
||||||
|
data.player_name = PlayerState.player_name
|
||||||
|
data.constitution = PlayerState.constitution
|
||||||
|
data.experience = PlayerState.experience
|
||||||
|
data.level = PlayerState.level
|
||||||
|
data.base_health = PlayerState.base_health
|
||||||
|
data.base_resource = PlayerState.base_resource
|
||||||
|
data.weapon_type = PlayerState.weapon_type
|
||||||
|
data.zone_duration = PlayerState.zone_duration
|
||||||
|
|
||||||
|
var error := ResourceSaver.save(data, save_path)
|
||||||
|
if error:
|
||||||
|
print("An error happened while saving data: ", error)
|
||||||
|
|
||||||
|
func load() -> void:
|
||||||
|
var data: PlayerData = load(save_path)
|
||||||
|
PlayerState.player_name = data.player_name
|
||||||
|
PlayerState.constitution = data.constitution
|
||||||
|
PlayerState.experience = data.experience
|
||||||
|
PlayerState.level = data.level
|
||||||
|
PlayerState.base_health = data.base_health
|
||||||
|
PlayerState.base_resource = data.base_resource
|
||||||
|
PlayerState.weapon_type = data.weapon_type
|
||||||
|
PlayerState.zone_duration = data.zone_duration
|
@ -4,12 +4,11 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
var player_name := "Player"
|
||||||
var constitution := 1
|
var constitution := 1
|
||||||
var experience := 0.0
|
var experience := 0.0
|
||||||
var level := 1.0
|
var level := 1.0
|
||||||
var max_health := constitution * 100
|
var base_health := 100
|
||||||
var max_resource := 100
|
var base_resource := 100
|
||||||
var current_resource := max_resource
|
|
||||||
var weapon_type: Globals.Weapon.WeaponType
|
var weapon_type: Globals.Weapon.WeaponType
|
||||||
|
|
||||||
var zone_duration := 0
|
var zone_duration := 0
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if OS.is_debug_build():
|
||||||
|
$MenuButtons/TestButton.show()
|
||||||
|
|
||||||
|
|
||||||
func _on_play_button_pressed() -> void:
|
func _on_play_button_pressed() -> void:
|
||||||
get_tree().change_scene_to_file("res://scenes/combatUIScene.tscn")
|
get_tree().change_scene_to_file("res://scenes/combatUIScene.tscn")
|
||||||
|
|
||||||
@ -9,5 +14,14 @@ func _on_exit_button_pressed() -> void:
|
|||||||
get_tree().quit()
|
get_tree().quit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_load_button_pressed() -> void:
|
||||||
|
Globals.load_game()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_save_button_pressed() -> void:
|
||||||
|
# ResourceSaver.save(PlayerState, "user://player_state.tres")
|
||||||
|
Globals.save_game()
|
||||||
|
|
||||||
|
|
||||||
func _on_test_button_pressed() -> void:
|
func _on_test_button_pressed() -> void:
|
||||||
pass # Replace with function body.
|
pass # Replace with function body.
|
||||||
|
Loading…
Reference in New Issue
Block a user