extends Control onready var paginationButton = preload("res://resources/customControls/GalleryControls/GalleryPaginationButton.tscn") onready var stateButton = preload("res://resources/customControls/GalleryControls/GalleryStateButton.tscn") onready var musicPlayerInstance = preload("res://resources/customControls/GalleryControls/GalleryMusicPlayer.tscn") onready var backgroundInstance = preload("res://resources/customControls/GalleryControls/GalleryBackground.tscn") var menuMusicRestart:bool = false; var backgroundsLoaded:bool = false; var imagesLoaded:bool = false; var dlcLoaded:bool = false; var musics; var backgrounds; var images; var dlcs:Array; var isLoading = false; func _ready(): SetBackground(); GallerySingleton.CheckForGreatCollector(); musics = GallerySingleton.GetMusicSettings(); backgrounds = GallerySingleton.GetBackgroundsSettings(); images = GallerySingleton.GetImagesSettings(); dlcs = GallerySingleton.GetDlcsSettings(); var backbutton = $UIRoot / CenterContainer / BackToMenu; var backRoot = $BigViewBackgroundsImages / BackRoot; backbutton.text = tr("ui_back_to_menu"); backRoot.text = tr("ui_back"); CheckForMusic(); func SetBackground(): var windowSize = SettingsSingleton.GetCurrectScreenResolutionVector2() $Blur.set_polygon(PoolVector2Array([ Vector2(0, 0), Vector2(0, windowSize.y), Vector2(windowSize.x, windowSize.y), Vector2(windowSize.x, 0) ])) var backgroundsSize = Vector2(3840, 2160); var scaleX = 1 / float(backgroundsSize.x / windowSize.x); var scaleY = 1 / float(backgroundsSize.y / windowSize.y); $House.scale = Vector2(scaleX, scaleY); var cloudH = 2160; var cloudScale = windowSize.y * 0.53 / cloudH; $Cloud1.scale = Vector2(cloudScale, cloudScale); $Cloud3.scale = Vector2(cloudScale, cloudScale); $Loading / LoadingLabel.text = tr("ui_loading"); var localization = ["ui_music_tab_name", "ui_background_tab_name", "ui_images_tab_name", "ui_dlc_tab_name"] var container = $UIRoot / TabContainer; for i in localization.size(): container.set_tab_title(i, tr(localization[i])); if not SettingsSingleton.GetDLC(): var dlcTab = $UIRoot / TabContainer / DlcTab container.remove_child(dlcTab) func _on_TabContainer_tab_changed(tab): match tab: 1: if backgroundsLoaded: return CheckForBackgrounds(); backgroundsLoaded = true; 2: if imagesLoaded: return CheckForImages(); imagesLoaded = true; 3: if dlcLoaded: return ; CheckForDlc(); dlcLoaded = true; func CheckForMusic(): var musicSize = musics.size(); if musicSize > 15: var musicPageContainer = $UIRoot / TabContainer / MusicTab / MusicPagination; musicPageContainer.visible = true; var amountOfPages = ceil(musicSize / 15.0); for i in amountOfPages: var pagButton = paginationButton.instance(); pagButton.text = str(i + 1); pagButton.connect("pressed", self, "LoadMusicOnPage", [i]); musicPageContainer.add_child(pagButton); LoadMusicOnPage(0); func LoadMusicOnPage(page:int): var musicContainer = $UIRoot / TabContainer / MusicTab / VBoxContainer; var paginationContainer = $UIRoot / TabContainer / MusicTab / MusicPagination; for i in musicContainer.get_children(): musicContainer.remove_child(i); var temp = musics.slice(page * 15, (page + 1) * 15 - 1, 1, true); var musicSize = temp.size(); var index = page * 15; for i in temp.size(): if i % 3 != 0: continue var hBoxContainer = HBoxContainer.new(); hBoxContainer.set("custom_constants/separation", 488); for j in range(3): if i + j >= musicSize: break; var musicPlayer = musicPlayerInstance.instance(); index += 1; musicPlayer.name = str("MusicPlayer", index); musicPlayer.Init(temp[i + j], index); musicPlayer.connect("PlayerStarted", self, "StartMusicPlayer", [musicPlayer]); hBoxContainer.add_child(musicPlayer); musicContainer.add_child(hBoxContainer); for i in paginationContainer.get_child_count(): var button = paginationContainer.get_child(i); if i == page: button.disabled = true; button._on_Button_mouse_entered(); else : button.disabled = false; button._on_Button_mouse_exited(); func StartMusicPlayer(playerControl): menuMusicRestart = true; get_node("/root/BgmScene").StopMenuMusic() var player = $MusicPlayer; if player.playing and not playerControl.state: player.stop(); return else : player.stop(); var container = $UIRoot / TabContainer / MusicTab / VBoxContainer; for i in container.get_children(): for j in i.get_children(): if j == playerControl: continue; j.state = false; j.DrawButtonIcon(); var stream = playerControl.GetAudioStream(); if stream == null: return ; player.stream = stream; if stream is AudioStreamMP3: stream.loop = true; else : player.stream.set_loop_mode(1); player.play() func CheckForBackgrounds(): var backgroundSize = backgrounds.size(); if backgroundSize > 12: var backgroundPageContainer = $UIRoot / TabContainer / BackgroundsTab / BackgroundPagination; backgroundPageContainer.visible = true; var amountOfPages = ceil(backgroundSize / 12.0); for i in amountOfPages: var pagButton = paginationButton.instance(); pagButton.text = str(i + 1); pagButton.connect("pressed", self, "LoadBackgroundOnPage", [i]); backgroundPageContainer.add_child(pagButton); LoadBackgroundOnPage(0); func LoadBackgroundOnPage(page:int): var backgroundContainer = $UIRoot / TabContainer / BackgroundsTab / VBoxContainer; var paginationContainer = $UIRoot / TabContainer / BackgroundsTab / BackgroundPagination; for i in backgroundContainer.get_children(): backgroundContainer.remove_child(i); var temp = backgrounds.slice(page * 12, (page + 1) * 12 - 1, 1, true); var backgroundSize = temp.size(); for i in temp.size(): if i % 4 != 0: continue var hBoxContainer = HBoxContainer.new(); hBoxContainer.set("custom_constants/separation", 360); for j in range(4): if i + j >= backgroundSize: break; var backgroundControl = backgroundInstance.instance(); backgroundControl.Init(temp[i + j], "background"); backgroundControl.connect("mouse_entered", self, "onButtonHoverOn_background", [backgroundControl]); backgroundControl.connect("mouse_exited", self, "onButtonHoverOff_background", [backgroundControl]); backgroundControl.connect("galleryPressed", self, "onBackgroundPressed", [backgroundControl]); hBoxContainer.add_child(backgroundControl); backgroundContainer.add_child(hBoxContainer); for i in paginationContainer.get_child_count(): var button = paginationContainer.get_child(i); if i == page: button.disabled = true; button._on_Button_mouse_entered(); else : button.disabled = false; button._on_Button_mouse_exited(); func onButtonHoverOn_background(control): control.setShaderOn(); func onButtonHoverOff_background(control): control.setShaderOff(); func onBackgroundPressed(control): if not isLoading: onButtonHoverOff_background(control) LoadToBigView(control); func CheckForImages(): var imagesSize = images.size(); if imagesSize > 12: var imagesPageContainer = $UIRoot / TabContainer / ImagesTab / ImagesPagination; imagesPageContainer.visible = true; var amountOfPages = ceil(imagesSize / 12.0); for i in amountOfPages: var pagButton = paginationButton.instance(); pagButton.text = str(i + 1); pagButton.connect("pressed", self, "LoadImagesOnPage", [i]); imagesPageContainer.add_child(pagButton); LoadImagesOnPage(0); func LoadImagesOnPage(page:int): var imagesContainer = $UIRoot / TabContainer / ImagesTab / VBoxContainer; var paginationContainer = $UIRoot / TabContainer / ImagesTab / ImagesPagination; for i in imagesContainer.get_children(): imagesContainer.remove_child(i); var temp = images.slice(page * 12, (page + 1) * 12 - 1, 1, true); var imagesSize = temp.size(); for i in temp.size(): if i % 4 != 0: continue var hBoxContainer = HBoxContainer.new(); hBoxContainer.set("custom_constants/separation", 360); for j in range(4): if i + j >= imagesSize: break; var imagesControl = backgroundInstance.instance(); imagesControl.Init(temp[i + j], "image"); imagesControl.connect("mouse_entered", self, "onButtonHoverOn_background", [imagesControl]); imagesControl.connect("mouse_exited", self, "onButtonHoverOff_background", [imagesControl]); imagesControl.connect("galleryPressed", self, "onImagePressed", [imagesControl]); hBoxContainer.add_child(imagesControl); imagesContainer.add_child(hBoxContainer); for i in paginationContainer.get_child_count(): var button = paginationContainer.get_child(i); if i == page: button.disabled = true; button._on_Button_mouse_entered(); else : button.disabled = false; button._on_Button_mouse_exited(); func CheckForDlc(): var dlcsSize = dlcs.size(); if dlcsSize > 12: var dlcsPageContainer = $UIRoot / TabContainer / DlcTab / ImagesPagination; dlcsPageContainer.visible = true; var amountOfPages = ceil(dlcsSize / 12.0); for i in amountOfPages: var pagButton = paginationButton.instance(); pagButton.text = str(i + 1); pagButton.connect("pressed", self, "LoadDlcsOnPage", [i]); dlcsPageContainer.add_child(pagButton); LoadDlcsOnPage(0); func LoadDlcsOnPage(page:int): var dlcsContainer = $UIRoot / TabContainer / DlcTab / VBoxContainer; var paginationContainer = $UIRoot / TabContainer / DlcTab / ImagesPagination; for i in dlcsContainer.get_children(): dlcsContainer.remove_child(i); var temp = dlcs.slice(page * 12, (page + 1) * 12 - 1, 1, true); var dlcsSize = temp.size(); for i in temp.size(): if i % 4 != 0: continue var hBoxContainer = HBoxContainer.new(); hBoxContainer.set("custom_constants/separation", 360); for j in range(4): if i + j >= dlcsSize: break; var imagesControl = backgroundInstance.instance(); imagesControl.Init(temp[i + j], "image"); imagesControl.connect("mouse_entered", self, "onButtonHoverOn_background", [imagesControl]); imagesControl.connect("mouse_exited", self, "onButtonHoverOff_background", [imagesControl]); imagesControl.connect("galleryPressed", self, "onImagePressed", [imagesControl]); hBoxContainer.add_child(imagesControl); dlcsContainer.add_child(hBoxContainer); for i in paginationContainer.get_child_count(): var button = paginationContainer.get_child(i); if i == page: button.disabled = true; button._on_Button_mouse_entered(); else : button.disabled = false; button._on_Button_mouse_exited(); func onImagePressed(control): if not isLoading: onButtonHoverOff_background(control) LoadToBigView(control); func _input(ev): if ev is InputEventKey and ev.scancode == KEY_ESCAPE and ev.pressed == false: if $BigViewBackgroundsImages.visible: _on_BackRoot_pressed(); else : _on_BackToMenu_pressed(); func _on_BackToMenu_pressed(): if isLoading: return ; if menuMusicRestart: get_tree().root.get_node("BgmScene").StartMenuMusic(); if not SceneLoader.is_connected("on_scene_loaded", self, "MenuLoaded"): SceneLoader.connect("on_scene_loaded", self, "MenuLoaded"); SceneLoader.load_scene("res://scenes/MainMenu.tscn") func MenuLoaded(obj): if obj.path != "res://scenes/MainMenu.tscn": return ; if obj.instance != null: get_tree().root.add_child(obj.instance); for i in get_tree().root.get_children(): if i.name == "Gallery": get_tree().root.remove_child(i); break; SceneLoader.disconnect("on_scene_loaded", self, "MenuLoaded"); func _on_BackToMenu_mouse_entered(): $UIRoot / CenterContainer / BackToMenu.get("custom_fonts/font").outline_color = Color(213, 55, 29, 255) $UIRoot / CenterContainer / BackToMenu.set("custom_colors/font_color", Color(0, 0, 0, 255)) func _on_BackToMenu_mouse_exited(): $UIRoot / CenterContainer / BackToMenu.get("custom_fonts/font").outline_color = Color(0, 0, 0, 255) $UIRoot / CenterContainer / BackToMenu.set("custom_colors/font_color", Color(213, 55, 29, 255)); var thread:Thread; func LoadToBigView(control): if thread == null: thread = Thread.new(); if thread.is_active(): return var path = str("res://scenes/BackgroundScenes/", control["sceneName"], ".tscn"); SetLoading(true); thread.start(self, "LoadScene", path, Thread.PRIORITY_HIGH); func LoadScene(path:String): var scene = load(path); var instance = scene.instance(); call_deferred("async_scene_loaded"); return instance; func async_scene_loaded(): var scene = thread.wait_to_finish(); $BigViewBackgroundsImages / SceneContainer.add_child(scene); SetLoading(false); var settings = scene.InitForGallery(); var isToggle = false; var toggleScenes = ["Podval", "Garaj", "Pistol", "Scene2_1", "Panorama", "Car", "Room_Agatha", "Room_Dana", "Room_Linda", "Room_Martin"]; if scene.name in toggleScenes: isToggle = true; if settings.size() != 0: for i in settings: var settingsButton = stateButton.instance(); var text = tr(i) settingsButton.text = text; if isToggle: settingsButton.toggle_mode = true; settingsButton.connect("pressed", self, "GalleryToggleSettingsPressed", [scene, settingsButton]); else : settingsButton.connect("pressed", self, "GallerySettingsPressed", [scene, text]); $BigViewBackgroundsImages / SettingsContainer.add_child(settingsButton) elif scene.has_method("IsItDLCScene"): var dlcCount = $BigViewBackgroundsImages / DlcCount; var check = $BigViewBackgroundsImages / DlcAutoCheck; var left = $BigViewBackgroundsImages / DlcLeft; var right = $BigViewBackgroundsImages / DlcRight; scene.AddCountLabel(dlcCount); if check.is_connected("toggled", scene, "AutoPressed"): check.disconnect("toggled", scene, "AutoPressed"); check.connect("toggled", scene, "AutoPressed"); if left.is_connected("pressed", self, "GalleryDlcButtonPressed"): left.disconnect("pressed", self, "GalleryDlcButtonPressed"); if right.is_connected("pressed", self, "GalleryDlcButtonPressed"): right.disconnect("pressed", self, "GalleryDlcButtonPressed"); left.connect("pressed", self, "GalleryDlcButtonPressed", [scene, "previous"]); right.connect("pressed", self, "GalleryDlcButtonPressed", [scene, "next"]); left.visible = true; right.visible = true; dlcCount.visible = true; check.visible = true; $BigViewBackgroundsImages / DLCAutoIcon.visible = true; $BigViewBackgroundsImages.visible = true; $Sky.visible = false; $UIRoot.visible = false; $Cloud1.visible = false; $Cloud3.visible = false; $House.visible = false; $Blur.visible = false; func GallerySettingsPressed(scene, settings): scene.SetSettings(settings); func GalleryToggleSettingsPressed(scene, button): scene.SetToggleSettings(button); func GalleryDlcButtonPressed(scene, direciton): if direciton == "previous": scene.ShowPrevious(); elif direciton == "next": scene.ShowNext(); func SetLoading(value:bool): isLoading = value; if value: $Blur.z_index = 1; $Loading.visible = true; else : $Blur.z_index = 0; $Loading.visible = false; func _on_SettingsContainer_resized(): var settingsContainer = $BigViewBackgroundsImages / SettingsContainer; var width = settingsContainer.rect_size.x; if width != 0: settingsContainer.rect_global_position = Vector2(1920 - settingsContainer.rect_size.x - 50, 540 - settingsContainer.rect_size.y / 2) func _on_BackRoot_pressed(): for i in $BigViewBackgroundsImages / SceneContainer.get_children(): $BigViewBackgroundsImages / SceneContainer.remove_child(i); for i in $BigViewBackgroundsImages / SettingsContainer.get_children(): $BigViewBackgroundsImages / SettingsContainer.remove_child(i) $BigViewBackgroundsImages / SettingsContainer.rect_size = Vector2(0, 0); $BigViewBackgroundsImages.visible = false; $UIRoot.visible = true; $Sky.visible = true; $Cloud1.visible = true; $Cloud3.visible = true; $House.visible = true; $Blur.visible = true; $BigViewBackgroundsImages / DlcCount.visible = false; $BigViewBackgroundsImages / DlcAutoCheck.visible = false; $BigViewBackgroundsImages / DLCAutoIcon.visible = false; $BigViewBackgroundsImages / DlcLeft.visible = false; $BigViewBackgroundsImages / DlcRight.visible = false; _on_BackRoot_mouse_exited(); var iconPressed:bool = false; var iconHover:bool = false; onready var checkIcon = $BigViewBackgroundsImages / DLCAutoIcon as TextureRect; onready var nonHoverNonPressedCheckIcon = preload("res://resources/graphics/GUI/InGameMenu/forward.webp"); onready var hoverNonPressedCheckIcon = preload("res://resources/graphics/GUI/InGameMenu/forward_lighted.webp"); onready var nonHoverPressedCheckIcon = preload("res://resources/graphics/GUI/InGameMenu/forward_pressed.webp"); onready var hoverPressedCheckIcon = preload("res://resources/graphics/GUI/InGameMenu/forward_pressed_lighted.webp"); func _on_DlcAutoCheck_toggled(button_pressed): iconPressed = button_pressed; UpdateCheckIcon() func _on_DlcAutoCheck_mouse_entered(): iconHover = true; UpdateCheckIcon() func _on_DlcAutoCheck_mouse_exited(): iconHover = false; UpdateCheckIcon() func UpdateCheckIcon(): var offsetIcon:bool = true; if iconPressed and iconHover: checkIcon.texture = hoverPressedCheckIcon; elif iconPressed and not iconHover: checkIcon.texture = nonHoverPressedCheckIcon; elif not iconPressed and iconHover: checkIcon.texture = hoverNonPressedCheckIcon; elif not iconPressed and not iconHover: checkIcon.texture = nonHoverNonPressedCheckIcon; offsetIcon = false; if offsetIcon: checkIcon.rect_position = Vector2(1020, 2); else : checkIcon.rect_position = Vector2(1028, 10); func _on_BackRoot_mouse_entered(): $BigViewBackgroundsImages / BackRoot.get("custom_fonts/font").outline_color = Color(213, 55, 29, 255) $BigViewBackgroundsImages / BackRoot.set("custom_colors/font_color", Color(0, 0, 0, 255)) func _on_BackRoot_mouse_exited(): $BigViewBackgroundsImages / BackRoot.get("custom_fonts/font").outline_color = Color(0, 0, 0, 255) $BigViewBackgroundsImages / BackRoot.set("custom_colors/font_color", Color(213, 55, 29, 255)); func _exit_tree(): if thread != null and thread.is_active(): var _temp = thread.wait_to_finish(); var state:int = 0; var controls:Array = []; onready var tween = $BigViewBackgroundsImages / Tween; func _on_TextureButton_mouse_entered(): Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) controls = [ $BigViewBackgroundsImages / FullView, $BigViewBackgroundsImages / BackRoot, $BigViewBackgroundsImages / SettingsContainer, $BigViewBackgroundsImages / DlcCount, $BigViewBackgroundsImages / DlcAutoCheck, $BigViewBackgroundsImages / DLCAutoIcon, $BigViewBackgroundsImages / DlcLeft, $BigViewBackgroundsImages / DlcRight ]; StartTween(1); func _on_TextureButton_mouse_exited(): Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) controls = [ $BigViewBackgroundsImages / FullView, $BigViewBackgroundsImages / BackRoot, $BigViewBackgroundsImages / SettingsContainer, $BigViewBackgroundsImages / DlcCount, $BigViewBackgroundsImages / DlcAutoCheck, $BigViewBackgroundsImages / DLCAutoIcon, $BigViewBackgroundsImages / DlcLeft, $BigViewBackgroundsImages / DlcRight ]; StartTween(2); func StartTween(value): if (state == 1 and value == 2) or (state == 2 and value == 1): tween.remove_all(); state = value; var modulateValue = Color(1, 1, 1, 1); if state == 1: modulateValue = Color(1, 1, 1, 0); for i in controls: tween.interpolate_property(i, "modulate", i.modulate, modulateValue, 0.2, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT, 0) tween.start() func _on_Tween_tween_all_completed(): state = 0;