extends Node var windowSize; signal BackFromSettings; signal ReturnToGame; signal ResolutionChanged; onready var windowResolutions = get_node("VideoSettingsView/WindowResolutions/VBoxContainer"); onready var allSettingsView = get_node("AllSettingsView"); onready var videoSettingsView = get_node("VideoSettingsView"); onready var audioSettingsView = get_node("AudioSettingsView"); onready var textSettingsView = get_node("TextSettingsView"); onready var languageSettingsView = get_node("LanguageSettingsView"); onready var twitchSettingsView = get_node("TwitchSettingsView"); var windowResolutionsArray = [ "640x360", "854x480", "1280x720", "1366x768", "1600x900", "1920x1080", ] onready var generalVolume = get_node("AudioSettingsView/GeneralVolumeSlider"); onready var musicVolume = get_node("AudioSettingsView/MusicVolumeSlider"); onready var dialogueVolume = get_node("AudioSettingsView/DialogueVolumeSlider"); onready var effectsVolume = get_node("AudioSettingsView/EffectsVolumeSlider"); var type; func setType(value:int): type = value; if value == 0: $ReturnToGameButton.visible = false; $VideoSettingsView / ScalingMessage.visible = OS.get_screen_scale() != 1.0; else : $AllSettingsView / VideoButton.disabled = true; $AllSettingsView / LanguageButton.disabled = true; $ReturnToGameButton.rect_global_position = Vector2(461, 692); func _ready(): windowSize = Vector2(1920, 1080) SetButtonsHover(); BackToAllView(); CreateLanguages(); LoadLanguage(); LoadSettings(); func SetButtonsHover(): var nodes = GetNodes(); for i in nodes: var node = get_node(i); if node is Button: if not node.is_connected("mouse_entered", self, "onButtonHoverOn"): node.connect("mouse_entered", self, "onButtonHoverOn", [node]) if not node.is_connected("mouse_exited", self, "onButtonHoverOff"): node.connect("mouse_exited", self, "onButtonHoverOff", [node]) func onButtonHoverOn(button): if not button.disabled: button.get("custom_fonts/font").outline_color = Color(213, 55, 29, 255) func onButtonHoverOff(button): button.get("custom_fonts/font").outline_color = Color(0, 0, 0, 255) func BackToAllView(): allSettingsView.visible = true; videoSettingsView.visible = false; audioSettingsView.visible = false; textSettingsView.visible = false; languageSettingsView.visible = false; twitchSettingsView.visible = false; func CreateLanguages(): var control = load("res://resources/customControls/LanguageSettign.tscn"); var group = load("res://resources/customControls/CheckBoxGroups/LanguageGroup.tres") var langs = LanguageLocalization.GetLanguages(); var lang = $LanguageSettingsView / InterfaceAndText / VBoxContainer; for i in langs: var langControl = control.instance(); langControl.name = i.name; langControl.text = i.name; langControl.group = group langControl.connect("pressed", self, "_on_LanguageOption_item_selected", [i.locale]) lang.add_child(langControl); var voice_group = load("res://resources/customControls/CheckBoxGroups/LanguageVoiceoverGroup.tres") var voice_langs = LanguageLocalization.GetVoiceLanguages(); var voice_lang = $LanguageSettingsView / Voiceover / VBoxContainer; for i in voice_langs: var langControl = control.instance(); langControl.name = i.name; langControl.text = i.name; langControl.group = voice_group; langControl.connect("pressed", self, "_on_VoiceLanguageOption_item_selected", [i.locale]) voice_lang.add_child(langControl); func LoadLanguage(): var selectedLangageOptionIndex = LanguageLocalization.GetLanguageIndex(); $LanguageSettingsView / InterfaceAndText / VBoxContainer.get_child(selectedLangageOptionIndex).pressed = true; var selectedVoiceLangageIndex = LanguageLocalization.GetVoiceLanguageIndex(); $LanguageSettingsView / Voiceover / VBoxContainer.get_child(selectedVoiceLangageIndex).pressed = true; func LoadSettings(): LoadTranlations(); LoadVideoSettings(); LoadAudioSettings(); LoadTextSettings(); LoadTwitchSettings(); func LoadTranlations(): var settingsLocalization = LanguageLocalization.GetLocalization(); for i in settingsLocalization: if "AudioSettingsView" in i: get_node(i).setName(settingsLocalization[i]) elif "TextSettingsView/TextSpeedSlider" in i: get_node(i).setName(settingsLocalization[i]) elif "TwitchSettingsView/TimerSlider" in i: get_node(i).setName(settingsLocalization[i]) else : get_node(i).text = tr(settingsLocalization[i]); func _on_LanguageOption_item_selected(languageLocale): LanguageLocalization.SetLanguages(languageLocale); var voiceContainer = $LanguageSettingsView / Voiceover / VBoxContainer; if languageLocale == "en": voiceContainer.get_child(0).pressed = true; elif languageLocale == "ru": voiceContainer.get_child(1).pressed = true; SettingsSingleton.SetVoiceoverLanguage(languageLocale); LoadTranlations() LoadLanguage(); LoadVideoSettings(); func _on_VoiceLanguageOption_item_selected(languageLocale): SettingsSingleton.SetVoiceoverLanguage(languageLocale); func LoadVideoSettings(): var windowStates = $VideoSettingsView / WindowStates; for i in windowStates.get_child_count(): if not windowStates.get_child(i).is_connected("pressed", self, "_on_WindowState_item_selected"): windowStates.get_child(i).connect("pressed", self, "_on_WindowState_item_selected", [i]); var stateOptionIndex = SettingsSingleton.GetCurrectWindowState(); windowStates.get_child(stateOptionIndex).pressed = true; ChangeWindowResolutionSettings(); ChangeWindowResolution(); ChangeWindowState(); $VideoSettingsView / LowProcessor.pressed = SettingsSingleton.GetCurrectLowProcessor(); $VideoSettingsView / SyncBackground.pressed = SettingsSingleton.GetAsyncBackgroundLoading(); ChangeLowProcessor(); func ChangeWindowResolutionSettings(): var checkBoxGround = load("res://resources/customControls/CheckBoxGroups/WindowResolutionGroup.tres") var noFocus = load("res://resources/Themes/EmptyFocusTheme.tres"); var isFullScreen = OS.is_window_fullscreen(); if is_instance_valid(windowResolutions): for i in windowResolutions.get_children(): windowResolutions.remove_child(i); var font = load("res://resources/fonts/SettingsFont.tres"); var checked = load("res://resources/graphics/GUI/CheckBox/checked-20.webp"); var unchecked = load("res://resources/graphics/GUI/CheckBox/unchecked-20.webp"); font = font.duplicate(true) font.size = 35; var monitorSize = OS.get_screen_size(); var currentWidth = monitorSize.x; var strSize = str(monitorSize.x) + "x" + str(monitorSize.y); if windowResolutionsArray.find(strSize) == - 1: var insertIndex = 0; for i in windowResolutionsArray: var width = int(i.split("x", true)[0]); if currentWidth > width: insertIndex += 1; else :break; windowResolutionsArray.insert(insertIndex, strSize); for i in windowResolutionsArray.size(): var width = int(windowResolutionsArray[i].split("x", true)[0]); if currentWidth < width: continue; var checkBox = CheckBox.new(); checkBox.text = windowResolutionsArray[i]; checkBox.rect_position = Vector2(0, 25 * i); checkBox.set_button_group(checkBoxGround) checkBox.add_font_override("font", font); checkBox.set("custom_styles/focus", noFocus); checkBox.set("custom_icons/radio_checked", checked); checkBox.set("custom_icons/radio_unchecked", unchecked); checkBox.set("custom_icons/radio_checked_disabled", checked); checkBox.set("custom_icons/radio_unchecked_disabled", unchecked); checkBox.connect("pressed", self, "_on_ScreenResolution_item_selected", [i]) checkBox.disabled = isFullScreen; if is_instance_valid(windowResolutions): windowResolutions.add_child(checkBox); strSize = str(OS.get_window_size().x) + "x" + str(OS.get_window_size().y); var index = windowResolutionsArray.find(strSize) if index != - 1 and is_instance_valid(windowResolutions): windowResolutions.get_child(index).pressed = true; func _on_WindowState_item_selected(index): SettingsSingleton.SetCurrectWindowState(index); ChangeWindowState(); ChangeWindowResolutionSettings(); func _on_ScreenResolution_item_selected(index): var value = windowResolutionsArray[index]; SettingsSingleton.SetCurrectScreenResolution(value); ChangeWindowResolution(); ChangeWindowResolutionSettings(); emit_signal("ResolutionChanged") func ChangeWindowState(): var state = SettingsSingleton.GetCurrectWindowState(); if state == 0: if OS.is_window_fullscreen(): OS.set_window_fullscreen(false); if OS.get_borderless_window(): OS.set_borderless_window(false); ChangeWindowResolution(); elif state == 1: if OS.is_window_fullscreen(): OS.set_window_fullscreen(false); OS.set_borderless_window(true); ChangeWindowResolution(); elif state == 2: OS.set_window_fullscreen(true); ChangeWindowResolution(); UpdateResolutionButtons(); else : return func UpdateResolutionButtons(): var monitorSize = OS.get_real_window_size(); var currentWidth = monitorSize.x; var strSize = str(monitorSize.x) + "x" + str(monitorSize.y); if windowResolutionsArray.find(strSize) == - 1: var insertIndex = 0; for i in windowResolutionsArray: var width = int(i.split("x", true)[0]); if currentWidth > width: insertIndex += 1; else :break; windowResolutionsArray.insert(insertIndex, strSize); if strSize in windowResolutionsArray: var index = windowResolutionsArray.find(strSize); if is_instance_valid(windowResolutions): windowResolutions.get_child(index).pressed = true; _on_ScreenResolution_item_selected(index) else : var insertIndex = 0; for i in windowResolutionsArray: var width = int(i.split("x", true)[0]); if currentWidth > width: insertIndex += 1; else :break; if is_instance_valid(windowResolutions): windowResolutions.get_child(insertIndex).pressed = true; _on_ScreenResolution_item_selected(insertIndex) func ChangeWindowResolution(): var resolution = SettingsSingleton.GetCurrectScreenResolution() var width = 0; var height = 0; if resolution != "-": var value = resolution.split("x", false, 1); width = int(value[0]); height = int(value[1]); else : var window = OS.get_real_window_size() width = window.x; height = window.y; OS.set_window_size(Vector2(width, height)); var screen_size = OS.get_screen_size(); var window_size = OS.get_window_size(); OS.set_window_position(screen_size * 0.5 - window_size * 0.5) if SettingsSingleton.GetCurrectWindowState() == 0: if width == screen_size.x and height == screen_size.y: SettingsSingleton.SetCurrectWindowState(1); $VideoSettingsView / WindowStates / BorderlessCheck.pressed = true; OS.set_borderless_window(true); func _on_LowProcessor_pressed(): SettingsSingleton.SetCurrectLowProcessor($VideoSettingsView / LowProcessor.pressed); ChangeLowProcessor(); func ChangeLowProcessor(): var value = SettingsSingleton.GetCurrectLowProcessor(); OS.set_low_processor_usage_mode(value); func _on_SyncBackground_pressed(): SettingsSingleton.SetAsyncBackgroundLoading($VideoSettingsView / SyncBackground.pressed); func SetVideoSettingsForMenu(): ChangeWindowState(); ChangeWindowResolution(); ChangeLowProcessor(); func SetAudioSettingsForMenu(): ChangeGeneralVolume(int(SettingsSingleton.GetGeneralVolumeLevel())) ChangeMusicVolume(int(SettingsSingleton.GetMusicVolumeLevel())) ChangeEffectsVolume(int(SettingsSingleton.GetEffectsVolumeLevel())) ChangeDialogueVolume(int(SettingsSingleton.GetDialogueVolumeLevel())) func LoadAudioSettings(): for i in $AudioSettingsView.get_children(): i.resize(); generalVolume.setValue(SettingsSingleton.GetGeneralVolumeLevel()) generalVolume.connect("value_changed", self, "_on_GeneralVolume_value_changed"); musicVolume.setValue(SettingsSingleton.GetMusicVolumeLevel()); musicVolume.connect("value_changed", self, "_on_MusicVolume_value_changed"); dialogueVolume.setValue(SettingsSingleton.GetDialogueVolumeLevel()); dialogueVolume.connect("value_changed", self, "_on_DialogueVolume_value_changed"); effectsVolume.setValue(SettingsSingleton.GetEffectsVolumeLevel()); effectsVolume.connect("value_changed", self, "_on_EffectsVolume_value_changed"); func _on_GeneralVolume_value_changed(value): SettingsSingleton.SetGeneralVolumeLevel(value); ChangeGeneralVolume(value); func ChangeGeneralVolume(value): value = float(value); if value <= 0: AudioServer.set_bus_mute(AudioServer.get_bus_index("Master"), true); else : if AudioServer.is_bus_mute(AudioServer.get_bus_index("Master")): AudioServer.set_bus_mute(AudioServer.get_bus_index("Master"), false); var dbValue:float = linear2db(value / 100); AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), dbValue); func _on_MusicVolume_value_changed(value): SettingsSingleton.SetMusicVolumeLevel(value); ChangeMusicVolume(value); func ChangeMusicVolume(value): value = float(value); if value <= 0: AudioServer.set_bus_mute(AudioServer.get_bus_index("BGM"), true); else : if AudioServer.is_bus_mute(AudioServer.get_bus_index("BGM")): AudioServer.set_bus_mute(AudioServer.get_bus_index("BGM"), false); var dbValue:float = linear2db(value / 100); AudioServer.set_bus_volume_db(AudioServer.get_bus_index("BGM"), dbValue); func _on_DialogueVolume_value_changed(value): SettingsSingleton.SetDialogueVolumeLevel(value); ChangeDialogueVolume(value); func ChangeDialogueVolume(value): value = float(value); if value <= 0: AudioServer.set_bus_mute(AudioServer.get_bus_index("Dialogue"), true); else : if AudioServer.is_bus_mute(AudioServer.get_bus_index("Dialogue")): AudioServer.set_bus_mute(AudioServer.get_bus_index("Dialogue"), false); var dbValue:float = linear2db(value / 100); AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Dialogue"), dbValue); func _on_EffectsVolume_value_changed(value): SettingsSingleton.SetEffectsVolumeLevel(value); ChangeEffectsVolume(value); func ChangeEffectsVolume(value): value = float(value); if value <= 0: AudioServer.set_bus_mute(AudioServer.get_bus_index("SFX"), true); else : if AudioServer.is_bus_mute(AudioServer.get_bus_index("SFX")): AudioServer.set_bus_mute(AudioServer.get_bus_index("SFX"), false); var dbValue:float = linear2db(value / 100); AudioServer.set_bus_volume_db(AudioServer.get_bus_index("SFX"), dbValue); func LoadTextSettings(): $TextSettingsView / AutoReadCheck.pressed = SettingsSingleton.GetAutoRead(); $TextSettingsView / SkipSeenCheck.pressed = SettingsSingleton.GetSkipSeen(); var slider = $TextSettingsView / TextSpeedSlider; slider.resize(); slider.get_node("TextureProgress").rect_position.x += 50; slider.get_node("TextureProgress").min_value = 1; slider.get_node("TextureProgress").max_value = 10; slider.setValue(SettingsSingleton.GetTextSpeed()) if not slider.is_connected("value_changed", self, "_on_Text_Speed_value_changed"): slider.connect("value_changed", self, "_on_Text_Speed_value_changed"); $TextSettingsView / ThemeCheck.pressed = SettingsSingleton.GetDefaultTheme() var pickers = [$TextSettingsView / CustomTheme / Back / BackPicker, $TextSettingsView / CustomTheme / Text / TextPicker]; for i in pickers: if not i.is_connected("picker_created", self, "ColorPickerCreated"): i.connect("picker_created", self, "ColorPickerCreated", [i]) var bkColor:Color = Color(SettingsSingleton.GetBackgroundColor()); var txColor:Color = Color(SettingsSingleton.GetTextColor()); $TextSettingsView / CustomTheme / Back / BackPicker.color = bkColor; $TextSettingsView / CustomTheme / Text / TextPicker.color = txColor; $TextSettingsView / CustomTheme / Example / TextureRect.modulate = bkColor; $TextSettingsView / CustomTheme / Example / Label.set("custom_colors/font_color", txColor) func _on_AutoPlayCheck_pressed(): var switch = false; if $TextSettingsView / AutoReadCheck.pressed and $TextSettingsView / SkipSeenCheck.pressed: $TextSettingsView / SkipSeenCheck.pressed = false; SettingsSingleton.SetSkipSeen(false); switch = true; SettingsSingleton.SetAutoRead($TextSettingsView / AutoReadCheck.pressed); var menuLayer = get_parent(); if menuLayer.name == "MenuLayer": var backbuttons = menuLayer.get_parent().get_parent().get_node("BackButton"); backbuttons.get_node("AutoReadButton").pressed = $TextSettingsView / AutoReadCheck.pressed; if switch: backbuttons.get_node("FastForwardButton").pressed = false; func _on_SkipSeenCheck_pressed(): var switch = false; if $TextSettingsView / SkipSeenCheck.pressed and $TextSettingsView / AutoReadCheck.pressed: $TextSettingsView / AutoReadCheck.pressed = false; SettingsSingleton.SetAutoRead(false); switch = true; SettingsSingleton.SetSkipSeen($TextSettingsView / SkipSeenCheck.pressed); var menuLayer = get_parent(); if menuLayer.name == "MenuLayer": var backbuttons = menuLayer.get_parent().get_parent().get_node("BackButton"); backbuttons.get_node("FastForwardButton").pressed = $TextSettingsView / SkipSeenCheck.pressed; if switch: backbuttons.get_node("AutoReadButton").pressed = false; func _on_ThemeCheck_toggled(_button_pressed): SettingsSingleton.SetDeafaultTheme($TextSettingsView / ThemeCheck.pressed) var colorBack = Color.black var colorText = Color.white if not ($TextSettingsView / ThemeCheck.pressed): colorText = SettingsSingleton.GetTextColor() colorBack = SettingsSingleton.GetBackgroundColor() else : SettingsSingleton.SetBackgroundColor(colorBack.to_rgba32()); SettingsSingleton.SetTextColor(colorText.to_rgba32()); $TextSettingsView / CustomTheme / Back / BackPicker.color = colorBack; $TextSettingsView / CustomTheme / Text / TextPicker.color = colorText; $TextSettingsView / CustomTheme / Example / TextureRect.modulate = colorBack; var label = $TextSettingsView / CustomTheme / Example / Label; label.set("custom_colors/font_color", colorText) if get_tree().root.has_node("Root/Game"): var game = get_tree().root.get_node("Root/Game"); game.get_child(0).get_node("DialogNode/TextBubble").ThemeColorChanged(); game.get_child(0).get_node("DialogNode").UpdateButtonTheme(); func _on_Text_Speed_value_changed(value): SettingsSingleton.SetTextSpeed(value); var game = get_tree().root.get_node("Root/Game"); if game != null: game.get_child(0).get_node("DialogNode/TextBubble").SetNewTextSpeed(value); func ColorPickerCreated(picker:ColorPickerButton): VisualServer.canvas_item_set_z_index(picker.get_picker().get_canvas_item(), 100); var aa = picker.get_child(0).get_child(0); for i in aa.get_children(): i.visible = false; var mainPicker = aa.get_child(0); mainPicker.visible = true; mainPicker.rect_size = Vector2(300, 300) func _on_BackPicker_color_changed(color:Color): if $TextSettingsView / ThemeCheck.pressed: $TextSettingsView / ThemeCheck.pressed = false; $TextSettingsView / CustomTheme / Example / TextureRect.modulate = color; SettingsSingleton.SetBackgroundColor(color.to_rgba32()); var game = get_tree().root.get_node("Root/Game") if game != null: game.get_child(0).get_node("DialogNode/TextBubble").ThemeColorChanged() game.get_child(0).get_node("DialogNode").UpdateButtonTheme() func _on_TextPicker_color_changed(color): if $TextSettingsView / ThemeCheck.pressed: $TextSettingsView / ThemeCheck.pressed = false; var label = $TextSettingsView / CustomTheme / Example / Label; label.set("custom_colors/font_color", color) SettingsSingleton.SetTextColor(color.to_rgba32()); var game = get_tree().root.get_node("Root/Game"); if game != null: game.get_child(0).get_node("DialogNode/TextBubble").ThemeColorChanged() game.get_child(0).get_node("DialogNode").UpdateButtonTheme() func LoadTwitchSettings(): $TwitchSettingsView / TwitchCheck.pressed = SettingsSingleton.GetTwitchEnabled(); EnableTwitchSettings(); $TwitchSettingsView / ChannelBox.text = SettingsSingleton.GetTwitchChannel(); var slider = $TwitchSettingsView / TimerSlider; slider.resize(); slider.get_node("TextureProgress").min_value = 10; slider.get_node("TextureProgress").max_value = 120; slider.setValue(SettingsSingleton.GetTwitchTimer()) if not slider.is_connected("value_changed", self, "_on_Timer_value_changed"): slider.connect("value_changed", self, "_on_Timer_value_changed"); func _on_TwitchCheck_pressed(): SettingsSingleton.SetTwitchEnabled($TwitchSettingsView / TwitchCheck.pressed); EnableTwitchSettings(); func EnableTwitchSettings(): var value = not $TwitchSettingsView / TwitchCheck.pressed; $TwitchSettingsView / ChannelBox.readonly = value; $TwitchSettingsView / StatusContainer / CheckConnectionButton.disabled = value; func _on_ChannelBox_text_changed(): var entryBox = $TwitchSettingsView / ChannelBox; SettingsSingleton.SetTwitchChannel(entryBox.text.to_lower()); func _on_Timer_value_changed(value): SettingsSingleton.SetTwitchTimer(value); func _on_CheckConnectionButton_pressed(): if $TwitchSettingsView / ChannelBox.text == "": return ; var twicil = $TwitchSettingsView / TwiCIL; var timer:Timer = $TwitchSettingsView / TwitchCheckTimer; if showTwitchTimer == true: twicil.Disconnect(); if twicil.is_connected("message_recieved", self, "_on_test_message_recieved"): twicil.disconnect("message_recieved", self, "_on_test_message_recieved") showTwitchTimer = false; timer.stop() $TwitchSettingsView / StatusContainer / TwitchTimer.text = "?" var rnd = RandomNumberGenerator.new(); rnd.randomize(); var nick = str("justinfan", rnd.randi_range(10000, 99999)); var client_id = "" var oauth = "oauth:" if not twicil.IsConnected(): twicil.connect_to_twitch_chat() yield (twicil, "ConnectedToTwitch"); if twicil.is_connected("DisconnectedFromTwitch", self, "_disconnected_from_twitch"): twicil.disconnect("DisconnectedFromTwitch", self, "_disconnected_from_twitch") twicil.connect("DisconnectedFromTwitch", self, "_disconnected_from_twitch") twicil.connect_to_channel(SettingsSingleton.GetTwitchChannel(), client_id, oauth, nick) if twicil.is_connected("message_recieved", self, "_on_test_message_recieved"): twicil.disconnect("message_recieved", self, "_on_test_message_recieved") twicil.connect("message_recieved", self, "_on_test_message_recieved") timer.start(SettingsSingleton.GetTwitchTimer()); showTwitchTimer = true; $TwitchSettingsView / TwitchStatus.visible = true; $TwitchSettingsView / StatusContainer / TwitchTimer.visible = true; func _on_test_message_recieved(_user_name:String, _text:String, _emotes): var twicil = $TwitchSettingsView / TwiCIL; if twicil.is_connected("DisconnectedFromTwitch", self, "_disconnected_from_twitch"): twicil.disconnect("DisconnectedFromTwitch", self, "_disconnected_from_twitch") showTwitchTimer = false; $TwitchSettingsView / StatusContainer / TwitchTimer.text = tr("ui_ok"); $TwitchSettingsView / TwitchStatus.visible = false; $TwitchSettingsView / TwitchCheckTimer.stop(); twicil.disconnect("message_recieved", self, "_on_test_message_recieved") twicil.Disconnect(); func _disconnected_from_twitch(): $TwitchSettingsView / TwitchCheckTimer.stop(); showTwitchTimer = false; $TwitchSettingsView / StatusContainer / TwitchTimer.text = "error" $TwitchSettingsView / TwitchStatus.visible = false; var twicil = $TwitchSettingsView / TwiCIL; twicil.disconnect("message_recieved", self, "_on_test_message_recieved") twicil.Disconnect(); func _on_TwitchCheckTimer_timeout(): var twicil = $TwitchSettingsView / TwiCIL; if twicil.is_connected("DisconnectedFromTwitch", self, "_disconnected_from_twitch"): twicil.disconnect("DisconnectedFromTwitch", self, "_disconnected_from_twitch") showTwitchTimer = false; $TwitchSettingsView / StatusContainer / TwitchTimer.text = tr("ui_no_connection"); $TwitchSettingsView / TwitchStatus.visible = false; twicil.disconnect("message_recieved", self, "_on_test_message_recieved") twicil.Disconnect(); var showTwitchTimer = false; func _process(_delta): if showTwitchTimer: $TwitchSettingsView / StatusContainer / TwitchTimer.text = "%d" % $TwitchSettingsView / TwitchCheckTimer.time_left; func GetNodes(): var nodes = [ "BackToMenuButton", "ApplyButton", "ReturnToGameButton", "AllSettingsView/VideoButton", "AllSettingsView/AudioButton", "AllSettingsView/TextButton", "AllSettingsView/LanguageButton", "AllSettingsView/TwitchButton", "VideoSettingsView/WindowStates/WindowedCheck", "VideoSettingsView/WindowStates/BorderlessCheck", "VideoSettingsView/WindowStates/FullscreenCheck", "VideoSettingsView/WindowResolutionLabel", "VideoSettingsView/LowProcessor", "VideoSettingsView/SyncBackground", "AudioSettingsView/GeneralVolumeSlider", "AudioSettingsView/MusicVolumeSlider", "AudioSettingsView/DialogueVolumeSlider", "AudioSettingsView/EffectsVolumeSlider", "TextSettingsView/AutoReadCheck", "TextSettingsView/SkipSeenCheck", "TextSettingsView/ThemeCheck", "TwitchSettingsView/TwitchCheck", "TwitchSettingsView/StatusContainer/CheckConnectionButton", ]; return nodes; func _on_Settings_tree_exited(): pass; func RemoveHover(): var nodes = GetNodes(); for i in nodes: var node = get_node(i); if node is Button: onButtonHoverOff(node); func _on_ReturnButton_pressed(): BackToAllView(); func _on_ApplyButton_pressed(): SettingsSingleton.SaveSettings(); func _on_BackToMenuButton_pressed(): RemoveHover() emit_signal("BackFromSettings"); func _on_ReturnToGameButton_pressed(): RemoveHover() emit_signal("ReturnToGame"); func _on_VideoButton_pressed(): videoSettingsView.visible = true; audioSettingsView.visible = false; textSettingsView.visible = false; languageSettingsView.visible = false; twitchSettingsView.visible = false; func _on_AudioButton_pressed(): videoSettingsView.visible = false; audioSettingsView.visible = true; textSettingsView.visible = false; languageSettingsView.visible = false; twitchSettingsView.visible = false; func _on_TextButton_pressed(): videoSettingsView.visible = false; audioSettingsView.visible = false; textSettingsView.visible = true; languageSettingsView.visible = false; twitchSettingsView.visible = false; func _on_LanguageButton_pressed(): videoSettingsView.visible = false; audioSettingsView.visible = false; textSettingsView.visible = false; languageSettingsView.visible = true; twitchSettingsView.visible = false; func _on_TwitchButton_pressed(): videoSettingsView.visible = false; audioSettingsView.visible = false; textSettingsView.visible = false; languageSettingsView.visible = false; twitchSettingsView.visible = true;