progress.gd 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. extends Node
  2. ## Saved level, which drops by one for every Params.LOSE_HOURS the player stays away.
  3. const PATH := "user://progress.cfg"
  4. ## Level the next game scene starts at.
  5. var current_level := 0
  6. func save_level(level: int) -> void:
  7. var config := ConfigFile.new()
  8. config.set_value("progress", "level", level)
  9. config.set_value("progress", "time", Time.get_unix_time_from_system())
  10. config.save(PATH)
  11. ## Applies any decay since the last save and returns [level, hours until the next decay].
  12. func load_level() -> Array:
  13. var config := ConfigFile.new()
  14. config.load(PATH)
  15. var level: int = config.get_value("progress", "level", 0)
  16. var last: float = config.get_value("progress", "time", 0.0)
  17. var now := Time.get_unix_time_from_system()
  18. var period := 3600.0 * Params.LOSE_HOURS
  19. var remaining := period + last - now
  20. while remaining < 0.0 and level > 0:
  21. last += period
  22. level -= 1
  23. remaining = period + last - now
  24. config.set_value("progress", "level", level)
  25. config.set_value("progress", "time", last)
  26. config.save(PATH)
  27. return [level, remaining / 3600.0]