extends Node const SAVE_GAME_LOCATION = "user://stw_demo_save.tres" const SAVE_SETTINGS_LOCATION = "user://stw_settings.tres" var game_loaded = false signal game_data_updated(g : GameData) var game_data : GameData : set(v): game_data = v game_data_updated.emit(v) var settings_data : SettingsData var current_dialog_path : String func load_game_data() -> GameData: if ResourceLoader.exists(SAVE_GAME_LOCATION): game_loaded = true game_data = ResourceLoader.load(SAVE_GAME_LOCATION).duplicate_deep() else : game_data = GameData.new() save_game_data() return game_data func save_game_data(): if game_data: ResourceSaver.save(game_data, SAVE_GAME_LOCATION) func load_settings_data() -> SettingsData: if ResourceLoader.exists(SAVE_SETTINGS_LOCATION): settings_data = ResourceLoader.load(SAVE_SETTINGS_LOCATION).duplicate_deep() else : settings_data = SettingsData.new() save_settings() return settings_data func save_settings(): if settings_data: ResourceSaver.save(settings_data, SAVE_SETTINGS_LOCATION) func restart_game_data(): game_data = GameData.new() save_game_data() func _init(): load_game_data() load_settings_data() update_language_settings() update_video_settings() settings_data.language_changed.connect(_on_settings_language_changed) settings_data.video_changed.connect(_on_settings_video_changed) settings_data.sound_changed.connect(_on_settings_sound_changed) func _ready(): Dialogic.timeline_started.connect(_on_timeline_started) Dialogic.timeline_ended.connect(_on_timeline_ended) func _on_settings_video_changed(s : SettingsData): update_video_settings(s) func _on_settings_language_changed(s : SettingsData): update_language_settings(s) func _on_settings_sound_changed(s : SettingsData): AudioServer.set_bus_volume_db(SettingsData.MUSIC_BUS_ID, linear_to_db(s.music_volume)) AudioServer.set_bus_volume_db(SettingsData.SFX_BUS_ID, linear_to_db(s.sfx_volume)) AudioServer.set_bus_volume_db(SettingsData.AMBIANCE_BUS_ID, linear_to_db(s.ambiance_volume)) func _on_timeline_started(): current_dialog_path = Dialogic.current_timeline.resource_path func _on_timeline_ended(): if not current_dialog_path in game_data.dialogs_done: game_data.dialogs_done.append(current_dialog_path) save_game_data() func update_language_settings(s : SettingsData = settings_data): TranslationServer.set_locale(s.language) func update_video_settings(s : SettingsData = settings_data): DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN if s.full_screen else DisplayServer.WINDOW_MODE_WINDOWED) func update_inputs(s : SettingsData = settings_data): for i in range(len(s.input_remapped)): InputMap.action_erase_events(s.action_remapped[i]) InputMap.action_add_event(s.action_remapped[i], s.input_remapped[i])