extends Node enum States{ INTRO, MAIN_MENU, GAME_OVER, CONTROLS, GAME, PUSE, STATS, CUTSCENE, } var _SAVE_FILE_PATH = "user://data" # Change key in release var _ENCRYPTION_KEY = "fas3uyf076HJsiUDs24dfI9" var _SCENES := { States.MAIN_MENU: "res://src/Menu/MainMenu.tscn", States.GAME: "res://src/GameWorld/GameWorld.tscn", } var GAME_TIMEOUT_MIN = 10 var _data := { "statistics": { "deaths": 0, "clears": 0, "runs": 0, "total_time_played": 0, "orbs": 0, "coins": 0, }, "heigh_score": { "deaths": 0, "score": 0, "cleard": false, "coins": 0, "orbs": 0, "time": 0, } } var _run_data:= { "deaths": 0, "coins": 0, "orbs": 0, "time": 0, "score": 0 } var _state = States.INTRO func _ready() -> void: load_data() print(get_statistics()) func _physics_process(delta: float) -> void: if _state == States.GAME: _run_data.time += delta _data.statistics.total_time_played += delta func load_data(): var data_file = File.new() var e = data_file.open_encrypted_with_pass(_SAVE_FILE_PATH, File.READ, _ENCRYPTION_KEY) if e != 0: data_file.close() save_data() else: _data = data_file.get_var() data_file.close() pass func save_data(): var data_file = File.new() print(data_file.open_encrypted_with_pass(_SAVE_FILE_PATH, File.WRITE, _ENCRYPTION_KEY)) print(data_file.store_var(_data)) data_file.close() pass func start_new_game(): for key in _run_data.keys(): _run_data[key] = 0 _state = States.GAME _data.statistics.runs += 1 save_data() get_tree().change_scene_to(load(_SCENES[_state])) func start_cutscene(): _state = States.CUTSCENE func end_cutscene(): _state = States.GAME func get_heigh_score(): return _data.heigh_score.duplicate() func get_statistics(): return _data.statistics.duplicate() func get_run_data(): return _run_data.duplicate() func get_state(): return int(_state) func go_to_main_menu(): _state = States.MAIN_MENU save_data() get_tree().change_scene_to(load(_SCENES[_state])) func player_died(): _run_data.deaths += 1 _data.statistics.deaths += 1 func coin_collected(): _run_data.coins += 10 _data.statistics.coins += 10