Save.gd 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # Singleton
  2. # If the loading crashes, delete the file in C:\Users\Username\AppData\Roaming\Godot\app_userdata\your_godot_project
  3. # and check if the values loaded match the values saved
  4. extends Node
  5. onready var player = get_tree().get_root().find_node("Player", true, false) # to save the player's position
  6. var saves_path = "user://save.dat"
  7. var flag_path = "user://load_last.dat"
  8. var file = File.new()
  9. func load_game():
  10. if !file.file_exists(saves_path):
  11. return -1
  12. file.open(saves_path, File.READ)
  13. var data = parse_json(file.get_as_text())
  14. file.close()
  15. player = get_tree().get_root().find_node("Player", true, false)
  16. player.global_position = str2var(data["position"])
  17. player.Health = str2var(data["health"])
  18. player.Power = str2var(data["power"])
  19. var hour_save = int(str(data["timestamp"]).split(":")[0])
  20. var minute_save = int(str(data["timestamp"]).split(":")[1])
  21. var date_save = data["date"]
  22. print("Success load game from " + str(hour_save) + ":" + str(minute_save)
  23. + " " + date_save + " timestamp.")
  24. return data
  25. func save_game():
  26. if !file.file_exists(saves_path):
  27. return -1
  28. file.open(saves_path, File.WRITE)
  29. # Edit this line with what you want to save:
  30. print("Scene: " + get_parent().get_filename())
  31. file.store_line(to_json({
  32. "level" : get_parent().get_filename(),
  33. "position" : var2str(player.global_position),
  34. "health" : var2str(player.Health),
  35. "power" : var2str(player.Power),
  36. "timestamp" : str(OS.get_time()["hour"]) + ":" + str(OS.get_time()["minute"]),
  37. "date" : str(OS.get_date()["day"]) +
  38. '/' + str(OS.get_date()["month"]) +
  39. '/' + str(OS.get_date()["year"])
  40. }))
  41. file.close()
  42. print("Success save game!")
  43. return 0
  44. func continue_game():
  45. if file.file_exists(saves_path):
  46. var flag_file = File.new()
  47. flag_file.open(flag_path, File.WRITE)
  48. flag_file.close()
  49. file.open(saves_path, File.READ)
  50. var data = parse_json(file.get_as_text())
  51. file.close()
  52. $Transit.change_scene(data["level"], 0.5, 0.2)
  53. return 0
  54. else:
  55. print("Save don't exist.")
  56. return -1
  57. func _ready():
  58. pause_mode = PAUSE_MODE_PROCESS # This script can't get paused
  59. if file.file_exists(flag_path):
  60. var dir = Directory.new()
  61. dir.remove(flag_path)
  62. load_game()
  63. var can_use = true # To avoid spamming quick save and quick load a boolean with a yield is used
  64. func _input(_event):
  65. if can_use:
  66. if Input.is_action_pressed("ui_save"): # Quick save
  67. save_game()
  68. can_use = false
  69. yield(get_tree().create_timer(0.5), "timeout")
  70. can_use = true
  71. if Input.is_action_pressed("ui_load"): # Quick load
  72. load_game()
  73. can_use = false
  74. yield(get_tree().create_timer(0.5), "timeout")
  75. can_use = true