59 lines
1.9 KiB
GDScript
59 lines
1.9 KiB
GDScript
extends Reference
|
|
|
|
# Score list. A map level_name -> value
|
|
var scores = {}
|
|
# Path to score file
|
|
const score_file = "user://highscores.json"
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready():
|
|
pass # Replace with function body.
|
|
|
|
# Return the score or null if unset
|
|
func get_score(level_name: String):
|
|
return scores.get(level_name, null)
|
|
|
|
# Set score, return true if a new high score was set, false otherwise
|
|
func set_score(level_name: String, new_score: int):
|
|
var old_score = get_score(level_name)
|
|
if (old_score == null) or (new_score > old_score):
|
|
scores[level_name] = new_score
|
|
save_scores()
|
|
return true
|
|
else:
|
|
return false
|
|
|
|
func save_scores():
|
|
# Serialize the scores in JSON
|
|
var serialized = JSON.print(scores)
|
|
# Write them to score file
|
|
var file = File.new()
|
|
var err = file.open(score_file, File.WRITE)
|
|
if err == OK:
|
|
file.store_string(serialized)
|
|
file.close()
|
|
else:
|
|
print("Error opening file " + score_file + " - Unable to save scores")
|
|
|
|
func load_scores():
|
|
# Clear scores
|
|
scores.clear()
|
|
# Read score file, if it exists
|
|
var file = File.new()
|
|
if file.file_exists(score_file):
|
|
var err = file.open(score_file, File.READ)
|
|
if err == OK:
|
|
var serialized = file.get_as_text()
|
|
file.close()
|
|
# Parse JSON
|
|
var parsed = JSON.parse(serialized)
|
|
# Check if OK
|
|
if (parsed.error == OK) && (typeof(parsed.result) == TYPE_DICTIONARY):
|
|
# Numeric values read from JSON are float type : must be converted to int
|
|
for k in parsed.result.keys():
|
|
scores[k] = int(parsed.result[k])
|
|
else:
|
|
print("Error reading file " + score_file + " - Unexpected format")
|
|
else:
|
|
print("Error opening existing file " + score_file)
|