extends Resource class_name SettingsData const MASTER_BUS_ID = 0 const MUSIC_BUS_ID = 1 const SFX_BUS_ID = 2 const AMBIANCE_BUS_ID = 3 const DEFAULT_MASTER_VOLUME := 1.0 const DEFAULT_MUSIC_VOLUME := 0.7 const DEFAULT_AMBIANCE_VOLUME := 0.7 const DEFAULT_SFX_VOLUME := 0.5 const DEFAULT_WINDOW_MODE := DisplayServer.WINDOW_MODE_FULLSCREEN const DEFAULT_UI_SIZE := 1.0 const DEFAULT_FOV := 75.0 const DEFAULT_DIFFICULTY := 1 const DEFAULT_AUTO_PICKUP := true const DEFAULT_MOUSE_SENSIVITY := 0.2 const DEFAULT_ZOOM := 1.0 signal language_changed(settings : SettingsData) signal sound_changed(settings : SettingsData) signal video_changed(settings : SettingsData) signal game_changed(settings : SettingsData) signal fov_changed(value : float) signal twitch_changed(settings : SettingsData) func reset_settings() -> void: language = OS.get_locale_language() master_volume = DEFAULT_MASTER_VOLUME music_volume = DEFAULT_MUSIC_VOLUME ambiance_volume = DEFAULT_AMBIANCE_VOLUME sfx_volume = DEFAULT_SFX_VOLUME window_mode = DEFAULT_WINDOW_MODE ui_size = DEFAULT_UI_SIZE fov = DEFAULT_FOV story_mode_difficulty = DEFAULT_DIFFICULTY auto_pickup = DEFAULT_AUTO_PICKUP mouse_sensivity = DEFAULT_MOUSE_SENSIVITY zoom = DEFAULT_ZOOM closed_help_containers = [] activate_twitch_integration = false func reset_controls() -> void: action_remapped = [] input_remapped = [] #region ------------------ Language ------------------ const AVAILABLE_LANGUAGES = [ "en", "fr", ] const AVAILABLE_LANGUAGES_LABEL = [ "English", "Français", ] @export var language : String = OS.get_locale_language() : set(v): language = v language_changed.emit(self) #region ------------------ Sound ------------------ @export var master_volume := DEFAULT_MASTER_VOLUME : set(v): master_volume = v sound_changed.emit(self) @export var music_volume := DEFAULT_MUSIC_VOLUME : set(v): music_volume = v sound_changed.emit(self) @export var ambiance_volume := DEFAULT_AMBIANCE_VOLUME : set(v): ambiance_volume = v sound_changed.emit(self) @export var sfx_volume := DEFAULT_SFX_VOLUME : set(v): sfx_volume = v sound_changed.emit(self) #region ------------------ Video ------------------ @export var window_mode := DEFAULT_WINDOW_MODE : set(v): window_mode = v video_changed.emit(self) @export var window_size := Vector2i(800, 450): set(v): window_size = v video_changed.emit(self) @export var window_pos := Vector2i(50, 50): set(v): window_pos = v video_changed.emit(self) @export var ui_size := DEFAULT_UI_SIZE : set(v): ui_size = v video_changed.emit(self) #region ------------------ Controls ------------------ @export var action_remapped : Array[String] = [] @export var input_remapped : Array[InputEvent] = [] @export var fov := DEFAULT_FOV : set(v): fov = v fov_changed.emit(fov) #region ------------------ Game ------------------ const AVAILABLE_DIFFICULTY = [ "COSY_MODE", "ADVENTURE_MODE", "CHALLENGE_MODE" ] @export var story_mode_difficulty := DEFAULT_DIFFICULTY # Voir AVAILABLE_DIFFICULTY @export var auto_pickup := DEFAULT_AUTO_PICKUP @export var mouse_sensivity := DEFAULT_MOUSE_SENSIVITY const MAX_ZOOM = 2. const MIN_ZOOM = 0.5 # Not in settings pannel @export var zoom := DEFAULT_ZOOM : set(v): zoom = min(MAX_ZOOM,max(MIN_ZOOM,v)) game_changed.emit(self) @export var closed_help_containers = [] func is_help_container_closed(help_container_name : String) -> bool: return help_container_name in closed_help_containers func close_help_container(help_container_name : String): if not help_container_name in closed_help_containers: closed_help_containers.append(help_container_name) game_changed.emit(self) func open_help_container(help_container_name : String): if help_container_name in closed_help_containers: closed_help_containers.erase(help_container_name) game_changed.emit(self) #region ------------------ Twitch ------------------ @export var activate_twitch_integration := false : set(v): activate_twitch_integration = v twitch_changed.emit(self) @export var twitch_channel := "" : set(v): twitch_channel = v twitch_changed.emit(self)