98 lines
2.7 KiB
GDScript
98 lines
2.7 KiB
GDScript
extends WindowDialog
|
|
|
|
var save_path = "user://saves"
|
|
|
|
var next_save_id = 0
|
|
var nosave = false
|
|
func _ready():
|
|
print("save/load ready")
|
|
$v/quit.connect("pressed", self, "exit_game")
|
|
$v/return.connect("pressed", self, "close")
|
|
$v/save/new_save.connect("pressed", self, "save_game")
|
|
connect("about_to_show", self, "about_to_show")
|
|
connect("popup_hide", self, "popup_hide")
|
|
func exit_game():
|
|
controls.is_gui = false
|
|
get_tree().quit()
|
|
func close():
|
|
controls.is_gui = false
|
|
hide()
|
|
func save_game():
|
|
scenario.prepare_save_data()
|
|
print("next_save_id: ", next_save_id)
|
|
var filename = save_path + "/" + str(next_save_id) + ".sav"
|
|
var f = File.new()
|
|
if f.open(filename, File.WRITE) == OK:
|
|
print("saving to ", filename)
|
|
f.store_string(JSON.print(scenario.save_data, "\t", false))
|
|
f.close()
|
|
print("userdata = ", OS.get_user_data_dir())
|
|
controls.is_gui = false
|
|
hide()
|
|
|
|
func load_game(file_name):
|
|
controls.is_gui = false
|
|
nosave = false
|
|
var f = File.new()
|
|
if f.open(save_path + "/" + file_name, File.READ) == OK:
|
|
var s = f.get_as_text()
|
|
var result = JSON.parse(s)
|
|
scenario.save_data = result.result
|
|
scenario.restart_scene()
|
|
else:
|
|
print("Can't open ", file_name)
|
|
hide()
|
|
func popup_hide():
|
|
yield(get_tree().create_timer(0.5), "timeout")
|
|
controls.is_gui = false
|
|
hide()
|
|
|
|
func about_to_show():
|
|
print("save/load about to show")
|
|
if nosave:
|
|
if $v/save/new_save.visible:
|
|
$v/save/new_save.hide()
|
|
else:
|
|
if !$v/save/new_save.visible:
|
|
$v/save/new_save.show()
|
|
var d: = Directory.new()
|
|
var f: = File.new()
|
|
var theme = Theme.new()
|
|
var font: DynamicFont = preload("res://fonts/DefaultFont.tres")
|
|
theme.default_font = font
|
|
for e in $v/save/s/v.get_children():
|
|
e.queue_free()
|
|
if d.dir_exists(save_path):
|
|
if d.open(save_path) == OK:
|
|
d.list_dir_begin()
|
|
var file_name = d.get_next()
|
|
while file_name != "":
|
|
if file_name in [".", ".."]:
|
|
file_name = d.get_next()
|
|
continue
|
|
var fid = file_name.replace(".sav", "")
|
|
if fid.is_valid_integer():
|
|
next_save_id = max(next_save_id, int(fid) + 1)
|
|
print(file_name)
|
|
var t = f.get_modified_time(save_path + "/" + file_name)
|
|
var ts = OS.get_datetime_from_unix_time(t)
|
|
var b = Button.new()
|
|
b.theme = theme
|
|
b.text = "Load " + str(ts.year) + "." + str(ts.month) + "." + str(ts.day)
|
|
b.text += " " + str(ts.hour) + ":" + str(ts.minute) + ":" + str(ts.second)
|
|
print(b.text)
|
|
$v/save/s/v.add_child(b)
|
|
b.connect("pressed", self, "load_game", [file_name])
|
|
$v/save/s/v.update()
|
|
$v/save/s.update()
|
|
$v/save.update()
|
|
$v.update()
|
|
update()
|
|
$v/quit.update()
|
|
file_name = d.get_next()
|
|
d.list_dir_end()
|
|
else:
|
|
d.make_dir_recursive(save_path)
|
|
print("next_save_id: ", next_save_id)
|
|
update()
|