From b3a25ef423932af1aff2cfc06a4fbc39f2697482 Mon Sep 17 00:00:00 2001 From: TinyTakinTeller <155020210+TinyTakinTeller@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:31:24 +0200 Subject: [PATCH] ADF-29 | misc. settings (#17) --- .github/workflows/gdlint.yml | 15 ++- global/autoload/resources.gd | 2 +- global/autoload/save_file/save_file.gd | 64 +++++++---- global/autoload/signal_bus/signal_bus.gd | 8 +- global/const/game.gd | 2 +- global/const/locale/locale_en.gd | 6 +- global/utils/file_system_utils.gd | 4 +- project.godot | 2 +- .../resource_generator/resource_generator.gd | 6 +- .../game_data/worker_role/worker_role.gd | 2 +- resources/shader/wiggle/wiggle.gdshader | 4 +- .../theme/dark/OpenSans-Regular.ttf.import | 8 +- resources/theme/dark/dark.tres | 38 ++++++- scenes/autostart/main/main.gd | 11 +- scenes/autostart/main/main.tscn | 50 ++++----- .../save_file_picker/save_file_picker.gd | 6 +- .../label/label_shake/label_shake.tscn | 7 ++ .../label/label_typing/label_typing.gd | 80 ++++++++++++++ .../label/label_typing/label_typing.tscn | 15 +++ .../texture_pixel_explosion.gd | 0 .../texture_pixel_explosion.tscn | 2 +- .../texture_rgb_offset/texture_rgb_offset.gd | 0 .../texture_rgb_offset.tscn | 2 +- .../texture/texture_shake/texture_shake.tscn | 9 ++ .../shake_shader_component.gd | 61 +++++++++++ .../shake_shader_component.tscn | 15 +++ .../typing_text_tween/typing_text_tween.gd | 26 +++-- .../enemy_controller/enemy_controller.gd | 2 +- .../event_controller/event_controller.gd | 2 +- .../offline_controller/offline_controller.gd | 4 +- .../progress_button_controller.gd | 2 +- .../setting_controller/setting_controller.gd | 28 +++++ .../unlock_controller/unlock_controller.gd | 4 +- .../worker_controller/worker_controller.gd | 4 +- .../setting_manager/setting_manager.gd | 16 +++ .../ui/enemy/enemy_texture/enemy_texture.tscn | 24 ++--- scenes/ui/event_tracker/event_tracker.gd | 6 +- .../event_tracker_item/event_tracker_item.gd | 9 +- .../event_tracker_item.tscn | 12 +-- scenes/ui/info_container/info_container.gd | 25 ++++- scenes/ui/info_container/info_container.tscn | 32 +++--- scenes/ui/npc_dialog/npc_dialog.gd | 13 ++- scenes/ui/npc_dialog/npc_dialog.tscn | 24 ++--- scenes/ui/progress_button/progress_button.gd | 2 +- .../resource_tracker_item.gd | 2 +- .../save_file_item/save_file_item.gd | 4 +- .../save_file_item_section.gd | 2 +- .../screen/darkness_screen/darkness_screen.gd | 10 +- .../darkness_screen/darkness_screen.tscn | 8 +- .../managment_screen/managment_screen.gd | 2 +- .../screen/settings_screen/settings_screen.gd | 102 ++++++++++++++++-- .../settings_screen/settings_screen.tscn | 93 ++++++++++------ scenes/ui/settings_slider/settings_slider.gd | 11 +- .../ui/settings_slider/settings_slider.tscn | 8 +- 54 files changed, 671 insertions(+), 225 deletions(-) create mode 100644 scenes/component/control/label/label_shake/label_shake.tscn create mode 100644 scenes/component/control/label/label_typing/label_typing.gd create mode 100644 scenes/component/control/label/label_typing/label_typing.tscn rename scenes/component/{ => control}/texture/texture_pixel_explosion/texture_pixel_explosion.gd (100%) rename scenes/component/{ => control}/texture/texture_pixel_explosion/texture_pixel_explosion.tscn (92%) rename scenes/component/{ => control}/texture/texture_rgb_offset/texture_rgb_offset.gd (100%) rename scenes/component/{ => control}/texture/texture_rgb_offset/texture_rgb_offset.tscn (88%) create mode 100644 scenes/component/control/texture/texture_shake/texture_shake.tscn create mode 100644 scenes/component/shake_shader_component/shake_shader_component.gd create mode 100644 scenes/component/shake_shader_component/shake_shader_component.tscn diff --git a/.github/workflows/gdlint.yml b/.github/workflows/gdlint.yml index 4e4a413..fe7f1a2 100644 --- a/.github/workflows/gdlint.yml +++ b/.github/workflows/gdlint.yml @@ -9,19 +9,27 @@ jobs: name: gdlint code runs-on: ubuntu-latest + # workaround for locally running 'act -j gdlint' : https://github.com/nektos/act/issues/1856#issuecomment-1679427871 + #container: + # image: ghcr.io/catthehacker/ubuntu:act-latest + + # The allowed amount of linter problems env: - PROBLEMS_THRESHOLD: 88 # The allowed amount of linter problems + PROBLEMS_THRESHOLD: 0 steps: # Check out the repository - name: Checkout uses: actions/checkout@v4 + #- name: LSB + # run: apt-get update && apt-get install -y lsb-release && apt-get clean all + # Ensure python is installed - name: Set up Python uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: "3.10" # Install gdtoolkit - name: Install Dependencies @@ -40,8 +48,9 @@ jobs: - name: Check linter results run: | PROBLEMS=$(grep -oP 'Failure: \K\d+' gdlint_output.txt || echo "0") + echo "Problems found: $PROBLEMS" echo "Problems found: $PROBLEMS, threshold is: $PROBLEMS_THRESHOLD" if [ "$PROBLEMS" -gt "$PROBLEMS_THRESHOLD" ]; then - echo "Too many linter problems" + echo "Too many linter problems!" exit 1 fi diff --git a/global/autoload/resources.gd b/global/autoload/resources.gd index bac22b2..ee6c1d3 100644 --- a/global/autoload/resources.gd +++ b/global/autoload/resources.gd @@ -21,5 +21,5 @@ var enemy_image: Dictionary = FileSystemUtils.get_image_resources("enemy", true) func _ready() -> void: - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("_AUTOLOAD _READY: " + self.get_name()) diff --git a/global/autoload/save_file/save_file.gd b/global/autoload/save_file/save_file.gd index 4420371..4ad4f5c 100644 --- a/global/autoload/save_file/save_file.gd +++ b/global/autoload/save_file/save_file.gd @@ -2,7 +2,7 @@ extends Node const SIGNATURE = "$$$" const SAVE_FILE_EXTENSION = ".json" -const AUTOSAVE_SECONDS: int = Game.params["autosave_seconds"] +const AUTOSAVE_SECONDS: int = Game.PARAMS["autosave_seconds"] var active_file_name: String = "default" var save_datas: Dictionary = {} @@ -15,12 +15,17 @@ var resource_generator_unlocks: Array = ["land"] var worker_role_unlocks: Array = [] var tab_unlocks: Array = ["world", "settings"] var tab_levels: Dictionary = {"world": 0} -var settings: Dictionary = {"theme": "dark"} +var settings: Dictionary = { + "theme": "dark", "display_mode": "windowed", "display_resolution": [960, 540] +} var audio_settings: Dictionary = { "master": {"value": 1.00, "toggle": true}, "music": {"value": 0.80, "toggle": true}, "sfx": {"value": 0.50, "toggle": true} } +var effect_settings: Dictionary = { + "shake": {"value": 0.20, "toggle": true}, "typing": {"value": 0.40, "toggle": true} +} var npc_events: Dictionary = {} var enemy: Dictionary = {"level": "rabbit", "rabbit": {"damage": 0}} var metadata: Dictionary = {} @@ -37,7 +42,7 @@ func _ready() -> void: _load_save_files() _connect_signals() - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("_AUTOLOAD _READY: " + self.get_name()) @@ -76,7 +81,7 @@ func get_enemy_damage(enemy_id: String = "") -> int: func get_settings_theme(save_file_name: String) -> Resource: - var theme_id: String = Game.params["default_theme"] + var theme_id: String = Game.PARAMS["default_theme"] if !save_datas.has(save_file_name): return Resources.theme.get(theme_id, null) @@ -90,6 +95,13 @@ func get_settings_population_scale() -> int: return settings.get("population_scale", 1) +func is_typing_effect_enabled() -> bool: + return ( + effect_settings.get("typing", {}).get("toggle", false) + and effect_settings.get("typing", {}).get("value", 0.0) > 0.0 + ) + + ############# ## setters ## ############# @@ -142,7 +154,7 @@ func set_metadata_name(save_file_name: String, value: String) -> void: func initialize(save_file_name: String, metadata_name: String) -> void: - if !Game.params["save_system_enabled"]: + if !Game.PARAMS["save_system_enabled"]: return var file_name: String = save_file_name + SAVE_FILE_EXTENSION @@ -161,7 +173,7 @@ func initialize(save_file_name: String, metadata_name: String) -> void: func delete(save_file_name: String) -> void: var file_name: String = save_file_name + SAVE_FILE_EXTENSION var error: Error = DirAccess.remove_absolute(FileSystemUtils.USER_PATH + file_name) - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("Delete save file '" + save_file_name + "' response: " + str(error)) save_datas.erase(save_file_name) @@ -212,7 +224,7 @@ func _get_seconds_since_last_autosave() -> int: func _load_save_files() -> void: - if !Game.params["save_system_enabled"]: + if !Game.PARAMS["save_system_enabled"]: return for file_name: String in FileSystemUtils.get_user_files(): @@ -220,7 +232,7 @@ func _load_save_files() -> void: continue var save_data: Dictionary = _read(file_name) _check_backward_compatibility(save_data) - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("__LOAD_SAVE_DATA: " + file_name) print(save_data) if save_data == null or save_data.is_empty(): @@ -241,6 +253,7 @@ func _export_save_data() -> Dictionary: save_data["tab_levels"] = tab_levels save_data["settings"] = settings save_data["audio_settings"] = audio_settings + save_data["effect_settings"] = effect_settings save_data["npc_events"] = npc_events save_data["enemy"] = enemy save_data["metadata"] = metadata @@ -259,6 +272,7 @@ func _import_save_data(save_data: Dictionary) -> void: tab_levels = _get_tab_levels(save_data) settings = _get_settings(save_data) audio_settings = _get_audio_settings(save_data) + effect_settings = _get_effect_settings(save_data) npc_events = _get_npc_events(save_data) enemy = _get_enemy(save_data) metadata = _get_metadata(save_data) @@ -305,6 +319,10 @@ func _get_audio_settings(save_data: Dictionary) -> Dictionary: return save_data.get("audio_settings", audio_settings) +func _get_effect_settings(save_data: Dictionary) -> Dictionary: + return save_data.get("effect_settings", effect_settings) + + func _get_npc_events(save_data: Dictionary) -> Dictionary: return save_data.get("npc_events", npc_events) @@ -353,6 +371,14 @@ func _check_backward_compatibility(save_data: Dictionary) -> void: _check_backward_week_7(save_data) _check_backward_week_10(save_data) _check_backward_corrupt_worker_role(save_data) + _check_backward_week_11(save_data) + + +func _check_backward_week_11(save_data: Dictionary) -> void: + if !save_data["settings"].has("display_mode"): + save_data["settings"]["display_mode"] = settings["display_mode"] + if !save_data["settings"].has("display_resolution"): + save_data["settings"]["display_resolution"] = settings["display_resolution"] ## [WORKAROUND] for #ADF-27 | https://trello.com/c/7VNXK6xW @@ -373,7 +399,7 @@ func _check_backward_corrupt_worker_role(save_data: Dictionary) -> void: var worker_resources: int = save_data["resources"].get(Game.WORKER_RESOURCE_ID, 0) var error: int = worker_resources - total_roles if error != 0: - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print( ( "[WORKAROUND] workers error: " @@ -434,7 +460,7 @@ func _connect_signals() -> void: func _connect_autosave_timer() -> void: - if Game.params["autosave_enabled"]: + if Game.PARAMS["autosave_enabled"]: autosave_timer.wait_time = 0.1 autosave_timer.timeout.connect(_on_timeout) autosave_timer.start() @@ -452,7 +478,9 @@ func _on_offline_progress_processed( _seconds_delta: int, _worker_progress: Dictionary, _enemy_progress: Dictionary, _factor: float ) -> void: _autosave(true, true) - SignalBus.worker_updated.emit(Game.WORKER_RESOURCE_ID, workers[Game.WORKER_RESOURCE_ID], 0) + SignalBus.worker_updated.emit( + Game.WORKER_RESOURCE_ID, workers.get(Game.WORKER_RESOURCE_ID, 0), 0 + ) ############## @@ -476,13 +504,13 @@ func _write(file_name: String) -> void: func _read(file_name: String) -> Dictionary: var path: String = FileSystemUtils.USER_PATH + file_name - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print() print("__READ_FILE: " + file_name) var save_file: FileAccess = FileAccess.open(path, FileAccess.READ) if save_file == null: - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("__READ_NULL") return {} var content: String = save_file.get_as_text() @@ -490,17 +518,17 @@ func _read(file_name: String) -> Dictionary: content = _handle_corrupt_end_of_file(content) content = content.replace(SIGNATURE, "") - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("__READ_CONTENT: " + content) var json_object: JSON = _parse(content) if json_object == null: - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("__READ_PARSE_FAILED") return {} var save_data: Dictionary = json_object.get_data() - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("__READ_DONE") return save_data @@ -510,11 +538,11 @@ func _parse(content: String, retry: bool = true) -> JSON: var json_object: JSON = JSON.new() var parse_err: Error = json_object.parse(content) if parse_err != Error.OK: - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("__READ_PARSE_ERROR: " + str(parse_err)) if retry: var retry_content: String = StringUtils.sanitize_text(content, StringUtils.ASCII) - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("__READ_RETRY_PARSE_WITH_FORCE_ASCII_CONTENT: " + retry_content) return _parse(retry_content, false) return null diff --git a/global/autoload/signal_bus/signal_bus.gd b/global/autoload/signal_bus/signal_bus.gd index 52ea221..64e5cbf 100644 --- a/global/autoload/signal_bus/signal_bus.gd +++ b/global/autoload/signal_bus/signal_bus.gd @@ -25,6 +25,9 @@ signal resource_storage_unhover(resource: ResourceGenerator) signal deaths_door_open(enemy_data: EnemyData) signal deaths_door(enemy_data: EnemyData, option: int) signal audio_settings_update(toggle: bool, value: float, id: String) +signal effect_settings_update(toggle: bool, value: float, id: String) +signal display_mode_settings_toggle +signal display_resolution_settings_toggle ## CONTROLLER signal main_ready @@ -52,6 +55,9 @@ signal offline_progress_processed( seconds_delta: int, worker_progress: Dictionary, enemy_progress: Dictionary, factor: float ) signal audio_settings_updated(toggle: bool, value: float, id: String) +signal effect_settings_updated(toggle: bool, value: float, id: String) +signal display_mode_settings_updated(display_mode: String) +signal display_resolution_settings_updated(width: int, height: int) ## MANAGER signal resource_updated(id: String, total: int, amount: int, source_id: String) @@ -69,5 +75,5 @@ signal deaths_door_resolved(enemy_data: EnemyData, new_enemy_data: EnemyData, op func _ready() -> void: - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("_AUTOLOAD _READY: " + self.get_name()) diff --git a/global/const/game.gd b/global/const/game.gd index e1db6ec..394f644 100644 --- a/global/const/game.gd +++ b/global/const/game.gd @@ -6,7 +6,7 @@ const WORKER_ROLE_RESOURCE: Array[String] = [WORKER_RESOURCE_ID, "swordsman"] const VERSION_MAJOR: String = "prototype" const VERSION_MINOR: String = "week 11" -const params: Dictionary = PARAMS_PROD #PARAMS_PROD #PARAMS_DEBUG +const PARAMS: Dictionary = PARAMS_PROD #PARAMS_PROD #PARAMS_DEBUG const PARAMS_DEBUG: Dictionary = { "cycle_seconds": 2, diff --git a/global/const/locale/locale_en.gd b/global/const/locale/locale_en.gd index a46c9bb..e55019f 100644 --- a/global/const/locale/locale_en.gd +++ b/global/const/locale/locale_en.gd @@ -56,7 +56,11 @@ const UI_LABEL: Dictionary = { "offline_4": "Since your last activity, population generated: ", "master": "Master", "music": "Music", - "sfx": "SFX" + "sfx": "SFX", + "shake": "Shake", + "typing": " Typing ", + "windowed": "Windowed", + "fullscreen": "Fullscreen" } const NPC_HOVER_TITLE: Dictionary = {} diff --git a/global/utils/file_system_utils.gd b/global/utils/file_system_utils.gd index 64770ed..7269ef4 100644 --- a/global/utils/file_system_utils.gd +++ b/global/utils/file_system_utils.gd @@ -7,7 +7,7 @@ const IMAGE_RESOURCES_PATH: String = "res://assets/image/" static func get_files_at(path: String) -> PackedStringArray: var files: PackedStringArray = DirAccess.get_files_at(path) - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("CALL get_files: " + path) print(files) return files @@ -65,7 +65,7 @@ static func fix_web_build_file_extension(file: String, force_one_extension: bool if force_one_extension: var file_split: PackedStringArray = file.split(".") if file_split.size() > 2: - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("!! FORCE ONE EXTENSION: " + file) file = file_split[0] + "." + file_split[1] return file diff --git a/project.godot b/project.godot index 7b39e0e..a06c4a8 100644 --- a/project.godot +++ b/project.godot @@ -50,7 +50,7 @@ window/size/viewport_width=960 window/size/viewport_height=540 window/size/window_width_override=960 window/size/window_height_override=540 -window/stretch/mode="viewport" +window/stretch/mode="canvas_items" [dotnet] diff --git a/resources/game_data/resource_generator/resource_generator.gd b/resources/game_data/resource_generator/resource_generator.gd index f8a1ae4..8561de3 100644 --- a/resources/game_data/resource_generator/resource_generator.gd +++ b/resources/game_data/resource_generator/resource_generator.gd @@ -55,7 +55,7 @@ func get_display_name() -> String: func get_display_info(total: String, eff: String) -> String: return "{total}, {eff} / {seconds} seconds".format( - {"total": total, "eff": eff, "seconds": Game.params["cycle_seconds"]} + {"total": total, "eff": eff, "seconds": Game.PARAMS["cycle_seconds"]} ) @@ -90,8 +90,8 @@ func get_amount() -> int: func get_cooldown() -> float: - if Game.params["debug_cooldown"] != 0: - return Game.params["debug_cooldown"] + if Game.PARAMS["debug_cooldown"] != 0: + return Game.PARAMS["debug_cooldown"] return cooldown diff --git a/resources/game_data/worker_role/worker_role.gd b/resources/game_data/worker_role/worker_role.gd index 995c1f3..4ad396a 100644 --- a/resources/game_data/worker_role/worker_role.gd +++ b/resources/game_data/worker_role/worker_role.gd @@ -49,7 +49,7 @@ func get_info() -> String: var worker_names: Array = WorkerRole.get_display_names_of(worker_consume.keys()) info += (", -%s " + (", -%s ".join(worker_names))) % worker_consume.values() - info += " / %s seconds" % Game.params["cycle_seconds"] + info += " / %s seconds" % Game.PARAMS["cycle_seconds"] if StringUtils.is_not_empty(flavor): info += " - " + flavor return info diff --git a/resources/shader/wiggle/wiggle.gdshader b/resources/shader/wiggle/wiggle.gdshader index cbf166f..1e01961 100644 --- a/resources/shader/wiggle/wiggle.gdshader +++ b/resources/shader/wiggle/wiggle.gdshader @@ -18,14 +18,14 @@ void vertex() VERTEX_OFFSET.x += ( random( ( trunc( VERTEX_OFFSET.y)) - + TIME + + mod(TIME, 60.0) ) - offset ) * Strength ; VERTEX_OFFSET.y += ( random( ( trunc( VERTEX_OFFSET.x)) - + TIME + + mod(TIME, 60.0) ) - offset ) * Strength; diff --git a/resources/theme/dark/OpenSans-Regular.ttf.import b/resources/theme/dark/OpenSans-Regular.ttf.import index 50dba35..b6692bf 100644 --- a/resources/theme/dark/OpenSans-Regular.ttf.import +++ b/resources/theme/dark/OpenSans-Regular.ttf.import @@ -16,12 +16,12 @@ Rendering=null antialiasing=1 generate_mipmaps=false multichannel_signed_distance_field=false -msdf_pixel_range=8 -msdf_size=48 +msdf_pixel_range=32 +msdf_size=32 allow_system_fallback=true force_autohinter=false -hinting=1 -subpixel_positioning=1 +hinting=0 +subpixel_positioning=0 oversampling=0.0 Fallbacks=null fallbacks=[] diff --git a/resources/theme/dark/dark.tres b/resources/theme/dark/dark.tres index ff5d8c1..0e7fa68 100644 --- a/resources/theme/dark/dark.tres +++ b/resources/theme/dark/dark.tres @@ -52,6 +52,9 @@ cache/0/16/0/underline_thickness = 0.0 cache/0/16/0/scale = 1.0 cache/0/16/0/kerning_overrides/16/0 = Vector2(0, 0) cache/0/16/0/kerning_overrides/8/0 = Vector2(0, 0) +cache/0/16/0/kerning_overrides/32/0 = Vector2(0, 0) +cache/0/16/0/kerning_overrides/24/0 = Vector2(0, 0) +cache/0/16/0/kerning_overrides/64/0 = Vector2(0, 0) cache/0/8/0/ascent = 0.0 cache/0/8/0/descent = 0.0 cache/0/8/0/underline_position = 0.0 @@ -59,6 +62,39 @@ cache/0/8/0/underline_thickness = 0.0 cache/0/8/0/scale = 1.0 cache/0/8/0/kerning_overrides/16/0 = Vector2(0, 0) cache/0/8/0/kerning_overrides/8/0 = Vector2(0, 0) +cache/0/8/0/kerning_overrides/32/0 = Vector2(0, 0) +cache/0/8/0/kerning_overrides/24/0 = Vector2(0, 0) +cache/0/8/0/kerning_overrides/64/0 = Vector2(0, 0) +cache/0/32/0/ascent = 0.0 +cache/0/32/0/descent = 0.0 +cache/0/32/0/underline_position = 0.0 +cache/0/32/0/underline_thickness = 0.0 +cache/0/32/0/scale = 1.0 +cache/0/32/0/kerning_overrides/16/0 = Vector2(0, 0) +cache/0/32/0/kerning_overrides/8/0 = Vector2(0, 0) +cache/0/32/0/kerning_overrides/32/0 = Vector2(0, 0) +cache/0/32/0/kerning_overrides/24/0 = Vector2(0, 0) +cache/0/32/0/kerning_overrides/64/0 = Vector2(0, 0) +cache/0/24/0/ascent = 0.0 +cache/0/24/0/descent = 0.0 +cache/0/24/0/underline_position = 0.0 +cache/0/24/0/underline_thickness = 0.0 +cache/0/24/0/scale = 1.0 +cache/0/24/0/kerning_overrides/16/0 = Vector2(0, 0) +cache/0/24/0/kerning_overrides/8/0 = Vector2(0, 0) +cache/0/24/0/kerning_overrides/32/0 = Vector2(0, 0) +cache/0/24/0/kerning_overrides/24/0 = Vector2(0, 0) +cache/0/24/0/kerning_overrides/64/0 = Vector2(0, 0) +cache/0/64/0/ascent = 0.0 +cache/0/64/0/descent = 0.0 +cache/0/64/0/underline_position = 0.0 +cache/0/64/0/underline_thickness = 0.0 +cache/0/64/0/scale = 1.0 +cache/0/64/0/kerning_overrides/16/0 = Vector2(0, 0) +cache/0/64/0/kerning_overrides/8/0 = Vector2(0, 0) +cache/0/64/0/kerning_overrides/32/0 = Vector2(0, 0) +cache/0/64/0/kerning_overrides/24/0 = Vector2(0, 0) +cache/0/64/0/kerning_overrides/64/0 = Vector2(0, 0) [sub_resource type="AtlasTexture" id="22"] atlas = ExtResource("2_plspm") @@ -563,7 +599,6 @@ Button/colors/font_color_disabled = Color(0.9, 0.9, 0.9, 0.2) Button/colors/font_color_hover = Color(0.94, 0.94, 0.94, 1) Button/colors/font_color_pressed = Color(1, 1, 1, 1) Button/constants/hseparation = 2 -Button/fonts/font = ExtResource("1_cnjs4") Button/styles/disabled = SubResource("StyleBoxFlat_1ymaf") Button/styles/focus = SubResource("StyleBoxFlat_r5gq2") Button/styles/hover = SubResource("StyleBoxFlat_5c4s2") @@ -672,7 +707,6 @@ ProgressBar/styles/fill = SubResource("StyleBoxFlat_75tr5") ProgressButton/base_type = &"Button" ProgressButton/constants/h_separation = 4 ProgressButton/constants/hseparation = 2 -ProgressButton/fonts/font = ExtResource("1_cnjs4") ProgressButton/styles/disabled = SubResource("StyleBoxFlat_njrop") ProgressButton/styles/focus = SubResource("StyleBoxFlat_0jagi") ProgressButton/styles/hover = SubResource("StyleBoxFlat_hxxig") diff --git a/scenes/autostart/main/main.gd b/scenes/autostart/main/main.gd index 0b56a91..2942667 100644 --- a/scenes/autostart/main/main.gd +++ b/scenes/autostart/main/main.gd @@ -12,7 +12,7 @@ func _ready() -> void: _initialize() _connect_signals() - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("_READY: " + self.get_name()) @@ -24,6 +24,13 @@ func _ready() -> void: func _initialize() -> void: tab_tracker.change_tab(0) + var display_mode: String = SaveFile.settings["display_mode"] + if display_mode == "fullscreen": + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) + else: + DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false) + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + ############# ## signals ## @@ -34,8 +41,10 @@ func _connect_signals() -> void: SignalBus.set_ui_theme.connect(_on_set_ui_theme) self.ready.connect(_on_ready) + func _on_set_ui_theme(theme: Resource) -> void: ui.theme = theme + func _on_ready() -> void: SignalBus.main_ready.emit() diff --git a/scenes/autostart/main/main.tscn b/scenes/autostart/main/main.tscn index d762c01..d282f35 100644 --- a/scenes/autostart/main/main.tscn +++ b/scenes/autostart/main/main.tscn @@ -82,7 +82,9 @@ enemy_controller = NodePath("../EnemyController") [node name="EnemyManager" parent="Managers" instance=ExtResource("16_6q8rb")] -[node name="UI" type="Control" parent="."] +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="UI" type="Control" parent="CanvasLayer"] unique_name_in_owner = true layout_mode = 3 anchors_preset = 15 @@ -93,7 +95,7 @@ grow_vertical = 2 mouse_filter = 2 theme = ExtResource("14_45bu4") -[node name="MarginContainer" type="MarginContainer" parent="UI"] +[node name="MarginContainer" type="MarginContainer" parent="CanvasLayer/UI"] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -101,85 +103,85 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="ScrollContainer" type="ScrollContainer" parent="UI/MarginContainer"] +[node name="ScrollContainer" type="ScrollContainer" parent="CanvasLayer/UI/MarginContainer"] unique_name_in_owner = true layout_mode = 2 -[node name="VBoxContainer" type="VBoxContainer" parent="UI/MarginContainer/ScrollContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="TabTracker" parent="UI/MarginContainer/ScrollContainer/VBoxContainer" instance=ExtResource("8_vxtq8")] +[node name="TabTracker" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer" instance=ExtResource("8_vxtq8")] unique_name_in_owner = true layout_mode = 2 -[node name="BodyMarginContainer" type="MarginContainer" parent="UI/MarginContainer/ScrollContainer/VBoxContainer"] +[node name="BodyMarginContainer" type="MarginContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer"] layout_mode = 2 size_flags_vertical = 3 -[node name="HBoxContainer" type="HBoxContainer" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer"] layout_mode = 2 -[node name="BorderMarginContainer" type="MarginContainer" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer"] +[node name="BorderMarginContainer" type="MarginContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer"] layout_mode = 2 -[node name="EventTracker" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer" instance=ExtResource("4_cyhi7")] +[node name="EventTracker" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer" instance=ExtResource("4_cyhi7")] layout_mode = 2 size_flags_horizontal = 0 -[node name="ScreenMarginContainer" type="MarginContainer" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer"] +[node name="ScreenMarginContainer" type="MarginContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 -[node name="UnknownScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("6_1rr1e")] +[node name="UnknownScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("6_1rr1e")] layout_mode = 2 -[node name="WorldScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("4_xbehd")] +[node name="WorldScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("4_xbehd")] layout_mode = 2 -[node name="ManagmentScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" node_paths=PackedStringArray("worker_controller") instance=ExtResource("5_oa073")] +[node name="ManagmentScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" node_paths=PackedStringArray("worker_controller") instance=ExtResource("5_oa073")] visible = false layout_mode = 2 -worker_controller = NodePath("../../../../../../../../Controllers/WorkerController") +worker_controller = NodePath("../../../../../../../../../Controllers/WorkerController") -[node name="DarknessScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("21_324w1")] +[node name="DarknessScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("21_324w1")] visible = false layout_mode = 2 -[node name="SoulScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("26_pehc6")] +[node name="SoulScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("26_pehc6")] visible = false layout_mode = 2 -[node name="StarwayScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("27_d2ak1")] +[node name="StarwayScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("27_d2ak1")] visible = false layout_mode = 2 -[node name="OfflineScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("29_mta8x")] +[node name="OfflineScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("29_mta8x")] layout_mode = 2 -[node name="SettingsScreen" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("31_y1j6b")] +[node name="SettingsScreen" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer/ScreenMarginContainer" instance=ExtResource("31_y1j6b")] layout_mode = 2 -[node name="ResourceTracker" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer" instance=ExtResource("5_y2bgo")] +[node name="ResourceTracker" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/BodyMarginContainer/HBoxContainer" instance=ExtResource("5_y2bgo")] layout_mode = 2 size_flags_horizontal = 8 theme_override_constants/margin_right = 4 -[node name="HBoxContainer" type="HBoxContainer" parent="UI/MarginContainer/ScrollContainer/VBoxContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer"] layout_mode = 2 -[node name="InfoContainer" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/HBoxContainer" instance=ExtResource("10_unxkl")] +[node name="InfoContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/HBoxContainer" instance=ExtResource("10_unxkl")] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 1 theme_override_constants/margin_right = 0 -[node name="SettingsContainer" parent="UI/MarginContainer/ScrollContainer/VBoxContainer/HBoxContainer" instance=ExtResource("20_ynkq3")] +[node name="SettingsContainer" parent="CanvasLayer/UI/MarginContainer/ScrollContainer/VBoxContainer/HBoxContainer" instance=ExtResource("20_ynkq3")] layout_mode = 2 theme_override_constants/margin_left = 0 -[node name="DeveloperConsole" parent="UI" instance=ExtResource("20_yijsf")] +[node name="DeveloperConsole" parent="CanvasLayer/UI" instance=ExtResource("20_yijsf")] visible = false layout_mode = 1 buffer_size = 16 diff --git a/scenes/autostart/save_file_picker/save_file_picker.gd b/scenes/autostart/save_file_picker/save_file_picker.gd index 266ed9b..61b0c20 100644 --- a/scenes/autostart/save_file_picker/save_file_picker.gd +++ b/scenes/autostart/save_file_picker/save_file_picker.gd @@ -14,7 +14,7 @@ func _ready() -> void: _initialize() _connect_signals() - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: print("_READY: " + self.get_name()) @@ -48,7 +48,7 @@ func _force_unique_save_file_name(save_file_name: String) -> String: func _handle_on_new_save_file(save_file_name: String) -> void: - var max_length: int = Game.params["max_file_name_length"] + var max_length: int = Game.PARAMS["max_file_name_length"] var metadata_name: String = StringUtils.sanitize_text( save_file_name, StringUtils.ASCII, max_length, "0" @@ -61,7 +61,7 @@ func _handle_on_new_save_file(save_file_name: String) -> void: func _handle_on_new_input_set(save_file_name: String, new_text: String, old_text: String) -> void: - var max_length: int = Game.params["max_file_name_length"] + var max_length: int = Game.PARAMS["max_file_name_length"] var metadata_name: String = StringUtils.sanitize_text( new_text, StringUtils.ASCII, max_length, "0" diff --git a/scenes/component/control/label/label_shake/label_shake.tscn b/scenes/component/control/label/label_shake/label_shake.tscn new file mode 100644 index 0000000..3ca5367 --- /dev/null +++ b/scenes/component/control/label/label_shake/label_shake.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=3 uid="uid://ccpod48fjrcy1"] + +[ext_resource type="PackedScene" uid="uid://bpq246h5ihhck" path="res://scenes/component/shake_shader_component/shake_shader_component.tscn" id="1_3e364"] + +[node name="LabelShake" type="Label"] + +[node name="ShakeShaderComponent" parent="." instance=ExtResource("1_3e364")] diff --git a/scenes/component/control/label/label_typing/label_typing.gd b/scenes/component/control/label/label_typing/label_typing.gd new file mode 100644 index 0000000..7851c2c --- /dev/null +++ b/scenes/component/control/label/label_typing/label_typing.gd @@ -0,0 +1,80 @@ +class_name LabelTyping extends Label + +signal typing_animation_end + +var _typing_delay: float +var _loop: bool = false + +@onready var typing_text_tween: Node = %TypingTextTween + +############### +## overrides ## +############### + + +func _ready() -> void: + _initialize() + _load_from_save_file() + _connect_signals() + + +############# +## helpers ## +############# + + +func _initialize() -> void: + pass + + +func _load_from_save_file() -> void: + var value: float = SaveFile.effect_settings["typing"]["value"] + var toggle: float = SaveFile.effect_settings["typing"]["toggle"] + update_typing_effect(toggle, value) + + +func _normalize_typing_effect(value: float) -> float: + return value / 4.0 + + +############# +## methods ## +############# + + +func play_typing_animation(loop: bool = false) -> void: + _loop = loop + var animation_length: float = self.text.length() * _typing_delay + typing_text_tween.play_animation(animation_length, _loop) + + +func update_typing_effect(toggle: bool, value: float) -> void: + if toggle: + _typing_delay = _normalize_typing_effect(value) + else: + _typing_delay = 0.0 + self.visible_ratio = 1.0 + + if is_inside_tree(): + if _loop: + play_typing_animation(true) + + +############# +## signals ## +############# + + +func _connect_signals() -> void: + typing_text_tween.animation_end.connect(_on_typing_text_tween_animation_end) + + SignalBus.effect_settings_updated.connect(_on_effect_settings_updated) + + +func _on_typing_text_tween_animation_end() -> void: + typing_animation_end.emit() + + +func _on_effect_settings_updated(toggle: bool, value: float, id: String) -> void: + if id == "typing": + update_typing_effect(toggle, value) diff --git a/scenes/component/control/label/label_typing/label_typing.tscn b/scenes/component/control/label/label_typing/label_typing.tscn new file mode 100644 index 0000000..9567499 --- /dev/null +++ b/scenes/component/control/label/label_typing/label_typing.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=3 format=3 uid="uid://ccm0lefdpacby"] + +[ext_resource type="PackedScene" uid="uid://cn8u84h8wjtm8" path="res://scenes/component/tween/typing_text_tween/typing_text_tween.tscn" id="1_fxbux"] +[ext_resource type="Script" path="res://scenes/component/control/label/label_typing/label_typing.gd" id="1_sms58"] + +[node name="LabelTyping" type="Label"] +custom_minimum_size = Vector2(196, 0) +size_flags_horizontal = 3 +text = "The world is dark and empty..." +autowrap_mode = 2 +script = ExtResource("1_sms58") + +[node name="TypingTextTween" parent="." node_paths=PackedStringArray("target") instance=ExtResource("1_fxbux")] +unique_name_in_owner = true +target = NodePath("..") diff --git a/scenes/component/texture/texture_pixel_explosion/texture_pixel_explosion.gd b/scenes/component/control/texture/texture_pixel_explosion/texture_pixel_explosion.gd similarity index 100% rename from scenes/component/texture/texture_pixel_explosion/texture_pixel_explosion.gd rename to scenes/component/control/texture/texture_pixel_explosion/texture_pixel_explosion.gd diff --git a/scenes/component/texture/texture_pixel_explosion/texture_pixel_explosion.tscn b/scenes/component/control/texture/texture_pixel_explosion/texture_pixel_explosion.tscn similarity index 92% rename from scenes/component/texture/texture_pixel_explosion/texture_pixel_explosion.tscn rename to scenes/component/control/texture/texture_pixel_explosion/texture_pixel_explosion.tscn index 91384a1..a44938b 100644 --- a/scenes/component/texture/texture_pixel_explosion/texture_pixel_explosion.tscn +++ b/scenes/component/control/texture/texture_pixel_explosion/texture_pixel_explosion.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=7 format=3 uid="uid://crps6q62tt20h"] [ext_resource type="Shader" path="res://resources/shader/pixelate/pixelate.gdshader" id="1_84y1t"] -[ext_resource type="Script" path="res://scenes/component/texture/texture_pixel_explosion/texture_pixel_explosion.gd" id="2_1fsl4"] +[ext_resource type="Script" path="res://scenes/component/control/texture/texture_pixel_explosion/texture_pixel_explosion.gd" id="2_1fsl4"] [ext_resource type="PackedScene" uid="uid://b3awft3ugc6q3" path="res://scenes/component/tween/simple_tween/simple_tween.tscn" id="3_1n0lx"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_0ilrp"] diff --git a/scenes/component/texture/texture_rgb_offset/texture_rgb_offset.gd b/scenes/component/control/texture/texture_rgb_offset/texture_rgb_offset.gd similarity index 100% rename from scenes/component/texture/texture_rgb_offset/texture_rgb_offset.gd rename to scenes/component/control/texture/texture_rgb_offset/texture_rgb_offset.gd diff --git a/scenes/component/texture/texture_rgb_offset/texture_rgb_offset.tscn b/scenes/component/control/texture/texture_rgb_offset/texture_rgb_offset.tscn similarity index 88% rename from scenes/component/texture/texture_rgb_offset/texture_rgb_offset.tscn rename to scenes/component/control/texture/texture_rgb_offset/texture_rgb_offset.tscn index a051531..720098e 100644 --- a/scenes/component/texture/texture_rgb_offset/texture_rgb_offset.tscn +++ b/scenes/component/control/texture/texture_rgb_offset/texture_rgb_offset.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=3 uid="uid://3aw0ib2j5hx5"] [ext_resource type="Shader" path="res://resources/shader/chromatic_vignette/chromatic_vignette.gdshader" id="1_h7emd"] -[ext_resource type="Script" path="res://scenes/component/texture/texture_rgb_offset/texture_rgb_offset.gd" id="2_iyg7k"] +[ext_resource type="Script" path="res://scenes/component/control/texture/texture_rgb_offset/texture_rgb_offset.gd" id="2_iyg7k"] [ext_resource type="PackedScene" uid="uid://b3awft3ugc6q3" path="res://scenes/component/tween/simple_tween/simple_tween.tscn" id="3_0gxpb"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_i0aj7"] diff --git a/scenes/component/control/texture/texture_shake/texture_shake.tscn b/scenes/component/control/texture/texture_shake/texture_shake.tscn new file mode 100644 index 0000000..e41bcd8 --- /dev/null +++ b/scenes/component/control/texture/texture_shake/texture_shake.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=2 format=3 uid="uid://dfvvkc01me6hk"] + +[ext_resource type="PackedScene" uid="uid://bpq246h5ihhck" path="res://scenes/component/shake_shader_component/shake_shader_component.tscn" id="1_8t7ox"] + +[node name="TextureShake" type="TextureRect"] +size_flags_horizontal = 4 +size_flags_vertical = 4 + +[node name="ShakeShaderComponent" parent="." instance=ExtResource("1_8t7ox")] diff --git a/scenes/component/shake_shader_component/shake_shader_component.gd b/scenes/component/shake_shader_component/shake_shader_component.gd new file mode 100644 index 0000000..e1c5e90 --- /dev/null +++ b/scenes/component/shake_shader_component/shake_shader_component.gd @@ -0,0 +1,61 @@ +class_name ShakeShaderComponent extends Node + +@export var max_shake_strength: float = 4.0 +@export var offset_shake_strength: float = 0.1 +@export var shake_shader: ShaderMaterial + +############### +## overrides ## +############### + + +func _ready() -> void: + _initialize() + _load_from_save_file() + _connect_signals() + + +############# +## helpers ## +############# + + +func _initialize() -> void: + get_parent().material = shake_shader + + +func _load_from_save_file() -> void: + var value: float = SaveFile.effect_settings["shake"]["value"] + var toggle: float = SaveFile.effect_settings["shake"]["toggle"] + update_shake_effect(toggle, value) + + +func _normalize_shake_effect(value: float) -> float: + return max_shake_strength * (value + offset_shake_strength) + + +############# +## methods ## +############# + + +func update_shake_effect(toggle: bool, value: float) -> void: + if shake_shader != null: + if toggle: + shake_shader.set_shader_parameter("Strength", _normalize_shake_effect(value)) + else: + shake_shader.set_shader_parameter("Strength", 0.0) + + +############# +## signals ## +############# + + +func _connect_signals() -> void: + SignalBus.effect_settings_updated.connect(_on_effect_settings_updated) + + +func _on_effect_settings_updated(toggle: bool, value: float, id: String) -> void: + if id == "shake": + update_shake_effect(toggle, value) diff --git a/scenes/component/shake_shader_component/shake_shader_component.tscn b/scenes/component/shake_shader_component/shake_shader_component.tscn new file mode 100644 index 0000000..b7251f3 --- /dev/null +++ b/scenes/component/shake_shader_component/shake_shader_component.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=4 format=3 uid="uid://bpq246h5ihhck"] + +[ext_resource type="Script" path="res://scenes/component/shake_shader_component/shake_shader_component.gd" id="1_h2d22"] +[ext_resource type="Shader" path="res://resources/shader/wiggle/wiggle.gdshader" id="2_ww0lg"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_d8k38"] +shader = ExtResource("2_ww0lg") +shader_parameter/Strength = 5.0 +shader_parameter/RandomOffset = 1.0 +shader_parameter/offset = 0.0 +shader_parameter/enabled = 1 + +[node name="ShakeShaderComponent" type="Node"] +script = ExtResource("1_h2d22") +shake_shader = SubResource("ShaderMaterial_d8k38") diff --git a/scenes/component/tween/typing_text_tween/typing_text_tween.gd b/scenes/component/tween/typing_text_tween/typing_text_tween.gd index 7c50958..bc55829 100644 --- a/scenes/component/tween/typing_text_tween/typing_text_tween.gd +++ b/scenes/component/tween/typing_text_tween/typing_text_tween.gd @@ -5,21 +5,35 @@ signal animation_end @export var target: Node var _tween: Tween +var _duration: float +var _loop: bool = false -func play_animation(duration: float) -> void: - target.visible_ratio = 0 +func play_animation(duration: float, loop: bool = false) -> void: + if duration == 0.0: + if _tween != null: + _tween.kill() + target.visible_ratio = 1.0 + animation_end.emit() + return + + _loop = loop + _duration = duration + target.visible_ratio = 0.0 if _tween != null: _tween.kill() _tween = create_tween() - _tween.tween_method(tween_method, 0.0, 1.0, duration) + _tween.tween_method(tween_method, 0.0, 1.0, _duration) _tween.tween_callback(on_animation_end) func tween_method(animation_percent: float) -> void: - target.visible_ratio = animation_percent + target.visible_ratio = min(animation_percent, 1.0) func on_animation_end() -> void: - target.visible_ratio = 1 - animation_end.emit() + if _loop: + play_animation(_duration, _loop) + else: + target.visible_ratio = 1.0 + animation_end.emit() diff --git a/scenes/controller/enemy_controller/enemy_controller.gd b/scenes/controller/enemy_controller/enemy_controller.gd index 18da479..a968759 100644 --- a/scenes/controller/enemy_controller/enemy_controller.gd +++ b/scenes/controller/enemy_controller/enemy_controller.gd @@ -1,7 +1,7 @@ class_name EnemyController extends Node -const ENEMY_CYCLE_SECONDS: float = Game.params["enemy_cycle_seconds"] +const ENEMY_CYCLE_SECONDS: float = Game.PARAMS["enemy_cycle_seconds"] @onready var timer: Timer = $Timer diff --git a/scenes/controller/event_controller/event_controller.gd b/scenes/controller/event_controller/event_controller.gd index 49787ab..0124bb4 100644 --- a/scenes/controller/event_controller/event_controller.gd +++ b/scenes/controller/event_controller/event_controller.gd @@ -43,7 +43,7 @@ func _retrigger_resource_generated_event(resource_generator: ResourceGenerator) func _handle_on_progress_button_paid(resource_generator: ResourceGenerator) -> void: - if Game.params["debug_resource_generated_event"]: + if Game.PARAMS["debug_resource_generated_event"]: _retrigger_resource_generated_event(resource_generator) diff --git a/scenes/controller/offline_controller/offline_controller.gd b/scenes/controller/offline_controller/offline_controller.gd index 5dded5e..2bc26f7 100644 --- a/scenes/controller/offline_controller/offline_controller.gd +++ b/scenes/controller/offline_controller/offline_controller.gd @@ -25,7 +25,7 @@ func _progress_worker_controller(efficiencies: Dictionary, cycles: int) -> Dicti # normalize "house -> worker" production if total_efficiency.has("house"): var worker_inc: int = Limits.safe_mult( - Game.params["house_workers"], total_efficiency.get("house", 0) + Game.PARAMS["house_workers"], total_efficiency.get("house", 0) ) total_efficiency["worker"] = worker_inc else: @@ -138,7 +138,7 @@ func _handle_on_game_resumed( seconds_delta, worker_progress, enemy_progress, factor ) - if Game.params["debug_logs"]: + if Game.PARAMS["debug_logs"]: prints("_handle_on_game_resumed", seconds_delta, seconds_delta_expected) prints("_generate_resources", worker_controller_cycles, worker_progress) prints("_trigger_enemy_controller", enemy_controller_cycles, enemy_progress) diff --git a/scenes/controller/progress_button_controller/progress_button_controller.gd b/scenes/controller/progress_button_controller/progress_button_controller.gd index 6d97f2e..3d56574 100644 --- a/scenes/controller/progress_button_controller/progress_button_controller.gd +++ b/scenes/controller/progress_button_controller/progress_button_controller.gd @@ -53,7 +53,7 @@ func _handle_progress_button_pressed(resource_generator: ResourceGenerator) -> v var resource_cost: Dictionary = resource_generator.get_scaled_costs(resource_amount) var worker_cost: Dictionary = resource_generator.get_worker_costs() - if !Game.params["debug_free_resource_buttons"]: + if !Game.PARAMS["debug_free_resource_buttons"]: if !_can_pay(resource_cost) or !_can_pay_worker(worker_cost): SignalBus.progress_button_unpaid.emit(resource_generator) return diff --git a/scenes/controller/setting_controller/setting_controller.gd b/scenes/controller/setting_controller/setting_controller.gd index 2b0151e..450bdda 100644 --- a/scenes/controller/setting_controller/setting_controller.gd +++ b/scenes/controller/setting_controller/setting_controller.gd @@ -38,6 +38,9 @@ func _connect_signals() -> void: SignalBus.toggle_button_pressed.connect(_on_toggle_button_pressed) SignalBus.toggle_scale_pressed.connect(_on_toggle_scale_pressed) SignalBus.audio_settings_update.connect(_on_audio_settings_update) + SignalBus.effect_settings_update.connect(_on_effect_settings_update) + SignalBus.display_mode_settings_toggle.connect(_on_display_mode_settings_toggle) + SignalBus.display_resolution_settings_toggle.connect(_on_display_resolution_settings_toggle) func _on_toggle_button_pressed(id: String, toggle_id: String) -> void: @@ -56,3 +59,28 @@ func _on_audio_settings_update(toggle: bool, value: float, id: String) -> void: AudioServer.set_bus_mute(bus_index, not toggle) SignalBus.audio_settings_updated.emit(toggle, value, id) + + +func _on_effect_settings_update(toggle: bool, value: float, id: String) -> void: + SignalBus.effect_settings_updated.emit(toggle, value, id) + + +func _on_display_mode_settings_toggle() -> void: + var display_mode: String = SaveFile.settings["display_mode"] + if display_mode == "windowed": + display_mode = "fullscreen" + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) + else: + display_mode = "windowed" + DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false) + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + + SignalBus.display_mode_settings_updated.emit(display_mode) + + +func _on_display_resolution_settings_toggle() -> void: + var width: int = SaveFile.settings["display_resolution"][0] + var height: int = SaveFile.settings["display_resolution"][1] + ## TODO: replace resolution setting with a different one + + SignalBus.display_resolution_settings_updated.emit(width, height) diff --git a/scenes/controller/unlock_controller/unlock_controller.gd b/scenes/controller/unlock_controller/unlock_controller.gd index 42849c9..8f28ae5 100644 --- a/scenes/controller/unlock_controller/unlock_controller.gd +++ b/scenes/controller/unlock_controller/unlock_controller.gd @@ -218,7 +218,7 @@ func _deaths_door_lore(level: int) -> void: func _load_timers() -> void: - cat_intro_timer.wait_time = Game.params["timer_cat_intro_seconds"] + cat_intro_timer.wait_time = Game.PARAMS["timer_cat_intro_seconds"] cat_intro_timer.one_shot = true if SaveFile.events.get("cat_watching", 0) == 1: cat_intro_timer.start() @@ -286,7 +286,7 @@ func _gift_resource(gen_id: String, amount: int, source_id: String) -> void: func _gift_debug() -> void: - if Game.params["debug_gift"]: + if Game.PARAMS["debug_gift"]: if _trigger_unique_unlock_event("land_debug"): _gift_resource("food", 1000, name) _gift_resource("wood", 1000, name) diff --git a/scenes/controller/worker_controller/worker_controller.gd b/scenes/controller/worker_controller/worker_controller.gd index 4c8a3a2..3ee8aee 100644 --- a/scenes/controller/worker_controller/worker_controller.gd +++ b/scenes/controller/worker_controller/worker_controller.gd @@ -2,7 +2,7 @@ class_name WorkerController extends Node signal none -const CYCLE_SECONDS: int = Game.params["cycle_seconds"] +const CYCLE_SECONDS: int = Game.PARAMS["cycle_seconds"] @onready var timer: Timer = $Timer @@ -53,7 +53,7 @@ func _generate(generate: bool = true) -> void: func _calculate_generated_worker_resource_from_houses(resources: Dictionary) -> int: - var per_house: int = Game.params["house_workers"] + var per_house: int = Game.PARAMS["house_workers"] var resource_id: String = Game.WORKER_RESOURCE_ID var max_workers: int = per_house * resources.get("house", 0) + resources.get("firepit", 0) var current_workers: int = resources.get(resource_id, 0) diff --git a/scenes/manager/setting_manager/setting_manager.gd b/scenes/manager/setting_manager/setting_manager.gd index 60179ab..3e6ea58 100644 --- a/scenes/manager/setting_manager/setting_manager.gd +++ b/scenes/manager/setting_manager/setting_manager.gd @@ -18,6 +18,9 @@ func _connect_signals() -> void: SignalBus.toggle_button.connect(_on_toggle_button) SignalBus.toggle_scale.connect(_on_toggle_scale) SignalBus.audio_settings_updated.connect(_on_audio_settings_updated) + SignalBus.effect_settings_updated.connect(_on_effect_settings_updated) + SignalBus.display_mode_settings_updated.connect(_on_display_mode_settings_updated) + SignalBus.display_resolution_settings_updated.connect(_on_display_resolution_settings_updated) func _on_toggle_button(id: String, toggle_id: String) -> void: @@ -31,3 +34,16 @@ func _on_toggle_scale(scale: int) -> void: func _on_audio_settings_updated(toggle: bool, value: float, id: String) -> void: SaveFile.audio_settings[id]["toggle"] = toggle SaveFile.audio_settings[id]["value"] = value + + +func _on_effect_settings_updated(toggle: bool, value: float, id: String) -> void: + SaveFile.effect_settings[id]["toggle"] = toggle + SaveFile.effect_settings[id]["value"] = value + + +func _on_display_mode_settings_updated(display_mode: String) -> void: + SaveFile.settings["display_mode"] = display_mode + + +func _on_display_resolution_settings_updated(width: int, height: int) -> void: + SaveFile.settings["display_resolution"] = [width, height] diff --git a/scenes/ui/enemy/enemy_texture/enemy_texture.tscn b/scenes/ui/enemy/enemy_texture/enemy_texture.tscn index c2c6188..736a705 100644 --- a/scenes/ui/enemy/enemy_texture/enemy_texture.tscn +++ b/scenes/ui/enemy/enemy_texture/enemy_texture.tscn @@ -1,34 +1,24 @@ -[gd_scene load_steps=6 format=3 uid="uid://d02um03stnk8y"] +[gd_scene load_steps=5 format=3 uid="uid://d02um03stnk8y"] -[ext_resource type="Shader" path="res://resources/shader/wiggle/wiggle.gdshader" id="1_lwimw"] [ext_resource type="Script" path="res://scenes/ui/enemy/enemy_texture/enemy_texture.gd" id="1_odbx0"] -[ext_resource type="PackedScene" uid="uid://3aw0ib2j5hx5" path="res://scenes/component/texture/texture_rgb_offset/texture_rgb_offset.tscn" id="2_re61i"] -[ext_resource type="PackedScene" uid="uid://crps6q62tt20h" path="res://scenes/component/texture/texture_pixel_explosion/texture_pixel_explosion.tscn" id="3_856ww"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_e7iv2"] -shader = ExtResource("1_lwimw") -shader_parameter/Strength = 1.55 -shader_parameter/RandomOffset = 1.0 -shader_parameter/offset = 0.69 -shader_parameter/enabled = 1 +[ext_resource type="PackedScene" uid="uid://dfvvkc01me6hk" path="res://scenes/component/control/texture/texture_shake/texture_shake.tscn" id="2_4vkcw"] +[ext_resource type="PackedScene" uid="uid://3aw0ib2j5hx5" path="res://scenes/component/control/texture/texture_rgb_offset/texture_rgb_offset.tscn" id="3_mnpv7"] +[ext_resource type="PackedScene" uid="uid://crps6q62tt20h" path="res://scenes/component/control/texture/texture_pixel_explosion/texture_pixel_explosion.tscn" id="4_7rtxw"] [node name="EnemyTexture" type="MarginContainer"] size_flags_horizontal = 6 size_flags_vertical = 6 script = ExtResource("1_odbx0") -[node name="TextureRect" type="TextureRect" parent="."] +[node name="TextureRect" parent="." instance=ExtResource("2_4vkcw")] unique_name_in_owner = true -material = SubResource("ShaderMaterial_e7iv2") layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -[node name="TextureRgbOffset" parent="." instance=ExtResource("2_re61i")] +[node name="TextureRgbOffset" parent="." instance=ExtResource("3_mnpv7")] unique_name_in_owner = true layout_mode = 2 -[node name="TexturePixelExplosion" parent="." instance=ExtResource("3_856ww")] +[node name="TexturePixelExplosion" parent="." instance=ExtResource("4_7rtxw")] unique_name_in_owner = true layout_mode = 2 diff --git a/scenes/ui/event_tracker/event_tracker.gd b/scenes/ui/event_tracker/event_tracker.gd index c6f4dc4..6cc6d94 100644 --- a/scenes/ui/event_tracker/event_tracker.gd +++ b/scenes/ui/event_tracker/event_tracker.gd @@ -19,7 +19,7 @@ func _ready() -> void: _connect_signals() _load_from_save_file() - if Game.params["debug_no_scrollbar"]: + if Game.PARAMS["debug_no_scrollbar"]: ScrollContainerUtils.disable_scrollbars(scroll_container) @@ -37,7 +37,7 @@ func _load_from_save_file() -> void: _clear_items() var next_index: int = SaveFile.event_log.size() var load_range: int = next_index - if Game.params["debug_no_scrollbar"]: + if Game.PARAMS["debug_no_scrollbar"]: load_range = min(page_size, next_index) for index: int in range(load_range): var event_log_index: int = index + 1 @@ -52,7 +52,7 @@ func _add_event(event_data: EventData, vals: Array, index: int, new: bool) -> vo var event_item: EventTrackerItem = _add_item() event_item.set_content(event_data, vals, index, new) _total_lines += 1 - if Game.params["debug_no_scrollbar"]: + if Game.PARAMS["debug_no_scrollbar"]: while _total_lines > page_size: NodeUtils.remove_oldest(event_v_box_container) _total_lines -= 1 diff --git a/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.gd b/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.gd index da20736..6ae5bd0 100644 --- a/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.gd +++ b/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.gd @@ -1,13 +1,11 @@ -class_name EventTrackerItem -extends MarginContainer +class_name EventTrackerItem extends MarginContainer var _event_data: EventData var _vals: Array var _index: int @onready var line_label: Label = %LineLabel -@onready var event_label: Label = %EventLabel -@onready var typing_text_tween: Node = %TypingTextTween +@onready var event_label: LabelTyping = %EventLabel func _ready() -> void: @@ -31,5 +29,4 @@ func _refresh_content() -> void: func play_typing_animation() -> void: - var animation_length: float = event_label.text.length() * Game.params["animation_speed_diary"] - typing_text_tween.play_animation(animation_length) + event_label.play_typing_animation() diff --git a/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.tscn b/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.tscn index 08b6dea..71128aa 100644 --- a/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.tscn +++ b/scenes/ui/event_tracker/event_tracker_item/event_tracker_item.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://d362a3u5u0np5"] [ext_resource type="Script" path="res://scenes/ui/event_tracker/event_tracker_item/event_tracker_item.gd" id="1_5qgqd"] -[ext_resource type="PackedScene" uid="uid://cn8u84h8wjtm8" path="res://scenes/component/tween/typing_text_tween/typing_text_tween.tscn" id="2_x1nui"] +[ext_resource type="PackedScene" uid="uid://ccm0lefdpacby" path="res://scenes/component/control/label/label_typing/label_typing.tscn" id="2_h3nnf"] [node name="EventTrackerItem" type="MarginContainer"] anchors_preset = 15 @@ -27,15 +27,7 @@ size_flags_vertical = 0 theme_override_font_sizes/font_size = 10 text = "[001]" -[node name="EventLabel" type="Label" parent="HBoxContainer"] +[node name="EventLabel" parent="HBoxContainer" instance=ExtResource("2_h3nnf")] unique_name_in_owner = true -custom_minimum_size = Vector2(196, 0) layout_mode = 2 -size_flags_horizontal = 3 theme_override_font_sizes/font_size = 12 -text = "The world is dark and empty..." -autowrap_mode = 2 - -[node name="TypingTextTween" parent="." node_paths=PackedStringArray("target") instance=ExtResource("2_x1nui")] -unique_name_in_owner = true -target = NodePath("../HBoxContainer/EventLabel") diff --git a/scenes/ui/info_container/info_container.gd b/scenes/ui/info_container/info_container.gd index f9fca3a..3d5654b 100644 --- a/scenes/ui/info_container/info_container.gd +++ b/scenes/ui/info_container/info_container.gd @@ -3,6 +3,8 @@ extends MarginContainer var info_id: String var info_type: String +@onready var title_label_shake: Label = %TitleLabelShake +@onready var info_label_shake: Label = %InfoLabelShake @onready var title_label: Label = %TitleLabel @onready var info_label: Label = %InfoLabel @@ -22,8 +24,23 @@ func _ready() -> void: func _toggle_wiggle_shader(enabled: bool) -> void: - title_label.material.set_shader_parameter("enabled", enabled) - info_label.material.set_shader_parameter("enabled", enabled) + if enabled: + title_label_shake.visible = true + info_label_shake.visible = true + title_label.visible = false + info_label.visible = false + else: + title_label_shake.visible = false + info_label_shake.visible = false + title_label.visible = true + info_label.visible = true + + +func _set_text(title: String, info: String) -> void: + title_label_shake.text = title + info_label_shake.text = info + title_label.text = title + info_label.text = info ############## @@ -33,13 +50,13 @@ func _toggle_wiggle_shader(enabled: bool) -> void: func _initialize() -> void: _handle_on_hover(" ", " ") + _toggle_wiggle_shader(false) func _handle_on_hover(title: String, info: String) -> void: if title.length() < 2 or info.length() < 2: return - title_label.text = title - info_label.text = info + _set_text(title, info) ############# diff --git a/scenes/ui/info_container/info_container.tscn b/scenes/ui/info_container/info_container.tscn index 7b51c76..3145ac6 100644 --- a/scenes/ui/info_container/info_container.tscn +++ b/scenes/ui/info_container/info_container.tscn @@ -1,21 +1,7 @@ -[gd_scene load_steps=5 format=3 uid="uid://bauwua6x5pgjh"] +[gd_scene load_steps=3 format=3 uid="uid://bauwua6x5pgjh"] [ext_resource type="Script" path="res://scenes/ui/info_container/info_container.gd" id="1_6ywel"] -[ext_resource type="Shader" path="res://resources/shader/wiggle/wiggle.gdshader" id="2_84ui8"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_u84p6"] -shader = ExtResource("2_84ui8") -shader_parameter/Strength = 0.8 -shader_parameter/RandomOffset = 8.0 -shader_parameter/offset = 0.0 -shader_parameter/enabled = 0 - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_t1fki"] -shader = ExtResource("2_84ui8") -shader_parameter/Strength = 0.8 -shader_parameter/RandomOffset = 7.0 -shader_parameter/offset = 0.0 -shader_parameter/enabled = 0 +[ext_resource type="PackedScene" uid="uid://ccpod48fjrcy1" path="res://scenes/component/control/label/label_shake/label_shake.tscn" id="2_rsr25"] [node name="InfoContainer" type="MarginContainer"] size_flags_vertical = 8 @@ -36,9 +22,20 @@ theme_override_constants/margin_bottom = 4 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] layout_mode = 2 +[node name="TitleLabelShake" parent="MarginContainer/VBoxContainer" instance=ExtResource("2_rsr25")] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 2 +theme_override_constants/outline_size = 1 +text = "Rare Title" + +[node name="InfoLabelShake" parent="MarginContainer/VBoxContainer" instance=ExtResource("2_rsr25")] +unique_name_in_owner = true +layout_mode = 2 +text = "Venture on a hunt for some rare resources!" + [node name="TitleLabel" type="Label" parent="MarginContainer/VBoxContainer"] unique_name_in_owner = true -material = SubResource("ShaderMaterial_u84p6") layout_mode = 2 size_flags_horizontal = 2 theme_override_constants/outline_size = 1 @@ -46,6 +43,5 @@ text = "Rare Title" [node name="InfoLabel" type="Label" parent="MarginContainer/VBoxContainer"] unique_name_in_owner = true -material = SubResource("ShaderMaterial_t1fki") layout_mode = 2 text = "Venture on a hunt for some rare resources!" diff --git a/scenes/ui/npc_dialog/npc_dialog.gd b/scenes/ui/npc_dialog/npc_dialog.gd index 9145984..c72f91e 100644 --- a/scenes/ui/npc_dialog/npc_dialog.gd +++ b/scenes/ui/npc_dialog/npc_dialog.gd @@ -8,13 +8,12 @@ var _peek_state: int = 0 var _next_text: String = "" var _target_id: String = "" -@onready var dialog_label: Label = %DialogLabel +@onready var dialog_label: LabelTyping = %DialogLabel @onready var yes_button: Button = %YesButton @onready var no_button: Button = %NoButton @onready var npc_margin_container: MarginContainer = %NpcMarginContainer @onready var npc_texture_rect: TextureRect = %NpcTextureRect @onready var npc_button: Button = %NpcButton -@onready var typing_text_tween: Node = %TypingTextTween @onready var enter_simple_tween: SimpleTween = %EnterSimpleTween ############### @@ -60,10 +59,10 @@ func play_typing_animation(on_load: bool = false) -> void: if !on_load: yes_button.disabled = true no_button.disabled = true - var duration: float = dialog_label.text.length() * Game.params["animation_speed_diary"] - typing_text_tween.play_animation(duration) + dialog_label.play_typing_animation() - Audio.play_sfx_id("cat_talking", 0.0) + if SaveFile.is_typing_effect_enabled(): + Audio.play_sfx_id("cat_talking", 0.0) else: peek(2) _show_and_enable_buttons() @@ -143,7 +142,7 @@ func _show_and_enable_buttons() -> void: func _connect_signals() -> void: - typing_text_tween.animation_end.connect(_on_typing_text_tween_animation_end) + dialog_label.typing_animation_end.connect(_on_typing_animation_end) enter_simple_tween.animation_end.connect(_on_enter_simple_tween_animation_end) yes_button.button_down.connect(_on_yes_button_down) no_button.button_down.connect(_on_no_button_down) @@ -153,7 +152,7 @@ func _connect_signals() -> void: npc_button.pressed.connect(_on_npc_button_pressed) -func _on_typing_text_tween_animation_end() -> void: +func _on_typing_animation_end() -> void: _show_and_enable_buttons() Audio.stop_sfx_id("cat_talking") diff --git a/scenes/ui/npc_dialog/npc_dialog.tscn b/scenes/ui/npc_dialog/npc_dialog.tscn index 0722edc..9aa3a84 100644 --- a/scenes/ui/npc_dialog/npc_dialog.tscn +++ b/scenes/ui/npc_dialog/npc_dialog.tscn @@ -1,17 +1,10 @@ -[gd_scene load_steps=9 format=3 uid="uid://bn70fimjb1ac0"] +[gd_scene load_steps=8 format=3 uid="uid://bn70fimjb1ac0"] [ext_resource type="Script" path="res://scenes/ui/npc_dialog/npc_dialog.gd" id="1_urym8"] -[ext_resource type="Shader" path="res://resources/shader/wiggle/wiggle.gdshader" id="2_3tdww"] [ext_resource type="Texture2D" uid="uid://cpwmy667e4xpa" path="res://assets/image/npc/cat/cat_90_100.png" id="2_8yoqs"] +[ext_resource type="PackedScene" uid="uid://ccm0lefdpacby" path="res://scenes/component/control/label/label_typing/label_typing.tscn" id="2_55et7"] +[ext_resource type="PackedScene" uid="uid://bpq246h5ihhck" path="res://scenes/component/shake_shader_component/shake_shader_component.tscn" id="3_uxbm3"] [ext_resource type="PackedScene" uid="uid://b3awft3ugc6q3" path="res://scenes/component/tween/simple_tween/simple_tween.tscn" id="4_v2a86"] -[ext_resource type="PackedScene" uid="uid://cn8u84h8wjtm8" path="res://scenes/component/tween/typing_text_tween/typing_text_tween.tscn" id="5_2mmuw"] - -[sub_resource type="ShaderMaterial" id="ShaderMaterial_4lkeg"] -shader = ExtResource("2_3tdww") -shader_parameter/Strength = 0.75 -shader_parameter/RandomOffset = 0.0 -shader_parameter/offset = 0.0 -shader_parameter/enabled = 1 [sub_resource type="ShaderMaterial" id="ShaderMaterial_32d3w"] @@ -47,13 +40,14 @@ theme_override_constants/margin_top = 8 theme_override_constants/margin_right = 8 theme_override_constants/margin_bottom = 8 -[node name="DialogLabel" type="Label" parent="MarginContainer/VBoxContainer/DialogMarginContainer"] +[node name="DialogLabel" parent="MarginContainer/VBoxContainer/DialogMarginContainer" instance=ExtResource("2_55et7")] unique_name_in_owner = true -material = SubResource("ShaderMaterial_4lkeg") custom_minimum_size = Vector2(1, 1) layout_mode = 2 +size_flags_horizontal = 1 text = "I smelled you from a far. You look lost... " -autowrap_mode = 2 + +[node name="ShakeShaderComponent" parent="MarginContainer/VBoxContainer/DialogMarginContainer/DialogLabel" instance=ExtResource("3_uxbm3")] [node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] layout_mode = 2 @@ -115,10 +109,6 @@ layout_mode = 2 [node name="Tween" type="Node" parent="."] -[node name="TypingTextTween" parent="Tween" node_paths=PackedStringArray("target") instance=ExtResource("5_2mmuw")] -unique_name_in_owner = true -target = NodePath("../../MarginContainer/VBoxContainer/DialogMarginContainer/DialogLabel") - [node name="EnterSimpleTween" parent="Tween" node_paths=PackedStringArray("target") instance=ExtResource("4_v2a86")] unique_name_in_owner = true target = NodePath("../..") diff --git a/scenes/ui/progress_button/progress_button.gd b/scenes/ui/progress_button/progress_button.gd index db9bbc6..f0df023 100644 --- a/scenes/ui/progress_button/progress_button.gd +++ b/scenes/ui/progress_button/progress_button.gd @@ -118,7 +118,7 @@ func _handle_button_down() -> void: func _handle_resource_ui_updated(resource_tracker_item: ResourceTrackerItem, amount: int) -> void: - if Game.params["debug_line_effect"]: + if Game.PARAMS["debug_line_effect"]: line_effect.duration = _resource_generator.get_cooldown() line_effect.target_a = self line_effect.target_b = resource_tracker_item diff --git a/scenes/ui/resource_tracker/resource_tracker_item/resource_tracker_item.gd b/scenes/ui/resource_tracker/resource_tracker_item/resource_tracker_item.gd index 3dd96e8..9dd88b7 100644 --- a/scenes/ui/resource_tracker/resource_tracker_item/resource_tracker_item.gd +++ b/scenes/ui/resource_tracker/resource_tracker_item/resource_tracker_item.gd @@ -137,7 +137,7 @@ func _on_worker_updated(_id: String, _total: int, _amount: int) -> void: func _on_mouse_entered() -> void: SignalBus.resource_storage_hover.emit(_resource_generator) - if Game.params["resource_storage_info"]: + if Game.PARAMS["resource_storage_info"]: SignalBus.info_hover.emit( _resource_generator.get_display_name(), _resource_generator.get_display_info(amount_label.text, income_label.text) diff --git a/scenes/ui/save_file_tracker/save_file_item/save_file_item.gd b/scenes/ui/save_file_tracker/save_file_item/save_file_item.gd index d088ce2..0bea079 100644 --- a/scenes/ui/save_file_tracker/save_file_item/save_file_item.gd +++ b/scenes/ui/save_file_tracker/save_file_item/save_file_item.gd @@ -136,7 +136,7 @@ func _display_delete_counter() -> void: if _delete_counter == 0: delete_button.text = ui_delete else: - delete_button.text = "(" + str(Game.params["delete_counter"] + 1 - _delete_counter) + ")" + delete_button.text = "(" + str(Game.PARAMS["delete_counter"] + 1 - _delete_counter) + ")" ############## @@ -145,7 +145,7 @@ func _display_delete_counter() -> void: func _handle_on_delete_button() -> void: - if _delete_counter >= Game.params["delete_counter"]: + if _delete_counter >= Game.PARAMS["delete_counter"]: delete_button_click.emit(_save_file_name) queue_free() else: diff --git a/scenes/ui/save_file_tracker/save_file_item/save_file_item_section/save_file_item_section.gd b/scenes/ui/save_file_tracker/save_file_item/save_file_item_section/save_file_item_section.gd index f91a126..9913040 100644 --- a/scenes/ui/save_file_tracker/save_file_item/save_file_item_section/save_file_item_section.gd +++ b/scenes/ui/save_file_tracker/save_file_item/save_file_item_section/save_file_item_section.gd @@ -47,7 +47,7 @@ func _initialize() -> void: set_focus_mode(FOCUS_CLICK) _set_input_label("Title") _set_value_label("value") - line_edit.max_length = Game.params["max_file_name_length"] + line_edit.max_length = Game.PARAMS["max_file_name_length"] ScrollContainerUtils.disable_scrollbars(scroll_container) diff --git a/scenes/ui/screen/darkness_screen/darkness_screen.gd b/scenes/ui/screen/darkness_screen/darkness_screen.gd index c27f15b..6388992 100644 --- a/scenes/ui/screen/darkness_screen/darkness_screen.gd +++ b/scenes/ui/screen/darkness_screen/darkness_screen.gd @@ -202,10 +202,10 @@ func _handle_on_texture_button_down() -> void: return var damage: int = SaveFile.resources.get("experience", 0) - if Game.params["enemy_click_damage"] > 0: - damage = Game.params["enemy_click_damage"] - elif Game.params["enemy_click_damage"] < 0: - damage = _enemy_data.health_points / (Game.params["enemy_click_damage"] * -1) + if Game.PARAMS["enemy_click_damage"] > 0: + damage = Game.PARAMS["enemy_click_damage"] + elif Game.PARAMS["enemy_click_damage"] < 0: + damage = _enemy_data.health_points / (Game.PARAMS["enemy_click_damage"] * -1) else: var essence_count: int = SaveFile.get_enemy_ids_for_option(1).size() var swordsman_count: int = SaveFile.workers.get("swordsman", 0) @@ -313,7 +313,7 @@ func _on_tab_changed(tab_data: TabData) -> void: func _on_mouse_entered() -> void: - if !Game.params["deaths_door_no_info"] and _health == 0: + if !Game.PARAMS["deaths_door_no_info"] and _health == 0: SignalBus.info_hover_shader.emit( Locale.get_ui_label("deaths_door_title"), Locale.get_ui_label("deaths_door_info") ) diff --git a/scenes/ui/screen/darkness_screen/darkness_screen.tscn b/scenes/ui/screen/darkness_screen/darkness_screen.tscn index 0c88868..d2b2ec8 100644 --- a/scenes/ui/screen/darkness_screen/darkness_screen.tscn +++ b/scenes/ui/screen/darkness_screen/darkness_screen.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=7 format=3 uid="uid://ch7uxqklej1h6"] +[gd_scene load_steps=8 format=3 uid="uid://ch7uxqklej1h6"] [ext_resource type="Script" path="res://scenes/ui/screen/darkness_screen/darkness_screen.gd" id="1_1yww0"] +[ext_resource type="PackedScene" uid="uid://cveqixklho80c" path="res://scenes/component/control/label/label_shake/label_shake.tscn" id="2_juuhi"] [ext_resource type="Shader" path="res://resources/shader/wiggle/wiggle.gdshader" id="2_pwkjq"] [ext_resource type="PackedScene" uid="uid://d02um03stnk8y" path="res://scenes/ui/enemy/enemy_texture/enemy_texture.tscn" id="3_hlysm"] [ext_resource type="PackedScene" uid="uid://j5lcc7v7q03g" path="res://scenes/ui/enemy/enemy_progress_bar/enemy_progress_bar.tscn" id="4_jk10o"] @@ -40,9 +41,8 @@ theme_override_constants/margin_top = 16 [node name="VBoxContainer" type="VBoxContainer" parent="ScreenMarginContainer/TitleMarginContainer"] layout_mode = 2 -[node name="TitleLabel" type="Label" parent="ScreenMarginContainer/TitleMarginContainer/VBoxContainer"] +[node name="TitleLabel" parent="ScreenMarginContainer/TitleMarginContainer/VBoxContainer" instance=ExtResource("2_juuhi")] unique_name_in_owner = true -material = SubResource("ShaderMaterial_6dwjo") layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 0 @@ -50,7 +50,7 @@ theme_override_colors/font_outline_color = Color(0, 0, 0, 1) theme_override_constants/outline_size = 8 text = "The Ambassador Of Darkness" -[node name="LevelLabel" type="Label" parent="ScreenMarginContainer/TitleMarginContainer/VBoxContainer"] +[node name="LevelLabel" parent="ScreenMarginContainer/TitleMarginContainer/VBoxContainer" instance=ExtResource("2_juuhi")] unique_name_in_owner = true visible = false material = SubResource("ShaderMaterial_6dwjo") diff --git a/scenes/ui/screen/managment_screen/managment_screen.gd b/scenes/ui/screen/managment_screen/managment_screen.gd index c6fbb64..fe65c56 100644 --- a/scenes/ui/screen/managment_screen/managment_screen.gd +++ b/scenes/ui/screen/managment_screen/managment_screen.gd @@ -17,7 +17,7 @@ var grid_containers: Array[GridContainer] = [] func _process(_delta: float) -> void: if worker_controller != null: - progress_bar.value = worker_controller.timer.time_left / Game.params["cycle_seconds"] + progress_bar.value = worker_controller.timer.time_left / Game.PARAMS["cycle_seconds"] func _ready() -> void: diff --git a/scenes/ui/screen/settings_screen/settings_screen.gd b/scenes/ui/screen/settings_screen/settings_screen.gd index 7b3a78b..a83ea60 100644 --- a/scenes/ui/screen/settings_screen/settings_screen.gd +++ b/scenes/ui/screen/settings_screen/settings_screen.gd @@ -2,9 +2,17 @@ extends MarginContainer const TAB_DATA_ID: String = "settings" +@export var shake_shader_component_scene: PackedScene +@export var label_typing_scene: PackedScene + @onready var master_settings_slider: SettingsSlider = %MasterSettingsSlider @onready var music_settings_slider: SettingsSlider = %MusicSettingsSlider @onready var sfx_settings_slider: SettingsSlider = %SFXSettingsSlider +@onready var shake_settings_slider: SettingsSlider = %ShakeSettingsSlider +@onready var typing_settings_slider: SettingsSlider = %TypingSettingsSlider +@onready var display_mode_button: Button = %DisplayModeButton +@onready var display_resolution_button: Button = %DisplayResolutionButton +@onready var display_language_button: Button = %DisplayLanguageButton ############### ## overrides ## @@ -23,9 +31,35 @@ func _ready() -> void: func _initialize() -> void: - master_settings_slider.title_label.text = Locale.get_ui_label("master") - music_settings_slider.title_label.text = Locale.get_ui_label("music") - sfx_settings_slider.title_label.text = Locale.get_ui_label("sfx") + _apply_effects() + _set_ui_labels() + + +func _set_ui_labels() -> void: + master_settings_slider.get_title_label().text = Locale.get_ui_label("master") + music_settings_slider.get_title_label().text = Locale.get_ui_label("music") + sfx_settings_slider.get_title_label().text = Locale.get_ui_label("sfx") + + shake_settings_slider.get_title_label().text = Locale.get_ui_label("shake") + typing_settings_slider.get_title_label().text = Locale.get_ui_label("typing") + + display_mode_button.text = "?" + display_resolution_button.text = "?" + ## TODO: replace resolution setting with a different one + display_resolution_button.disabled = true + + display_language_button.text = Locale.LOCALE_NAME[SaveFile.locale] + ## TODO: ADF-24 | Localization + display_language_button.disabled = true + + +func _apply_effects() -> void: + var shake_shader_component: ShakeShaderComponent = ( + shake_shader_component_scene.instantiate() as ShakeShaderComponent + ) + shake_settings_slider.get_title_label().add_child(shake_shader_component) + + typing_settings_slider.get_title_label().play_typing_animation(true) func _load_from_save_file() -> void: @@ -39,6 +73,18 @@ func _load_from_save_file() -> void: SaveFile.audio_settings["sfx"]["toggle"], SaveFile.audio_settings["sfx"]["value"] ) + shake_settings_slider.set_data( + SaveFile.effect_settings["shake"]["toggle"], SaveFile.effect_settings["shake"]["value"] + ) + typing_settings_slider.set_data( + SaveFile.effect_settings["typing"]["toggle"], SaveFile.effect_settings["typing"]["value"] + ) + + display_mode_button.text = Locale.get_ui_label(SaveFile.settings["display_mode"]) + var width: int = SaveFile.settings["display_resolution"][0] + var height: int = SaveFile.settings["display_resolution"][1] + display_resolution_button.text = "{a} x {b}".format({"a": width, "b": height}) + ############# ## signals ## @@ -47,9 +93,20 @@ func _load_from_save_file() -> void: func _connect_signals() -> void: SignalBus.tab_changed.connect(_on_tab_changed) - master_settings_slider.data_changed.connect(_on_data_changed.bind("master")) - music_settings_slider.data_changed.connect(_on_data_changed.bind("music")) - sfx_settings_slider.data_changed.connect(_on_data_changed.bind("sfx")) + + master_settings_slider.data_changed.connect(_on_audio_data_changed.bind("master")) + music_settings_slider.data_changed.connect(_on_audio_data_changed.bind("music")) + sfx_settings_slider.data_changed.connect(_on_audio_data_changed.bind("sfx")) + + shake_settings_slider.data_changed.connect(_on_effect_data_changed.bind("shake")) + typing_settings_slider.data_changed.connect(_on_effect_data_changed.bind("typing")) + + display_mode_button.button_up.connect(_on_display_mode_button_up) + display_resolution_button.button_up.connect(_on_display_resolution_button_up) + display_language_button.button_up.connect(_on_display_language_button_up) + + SignalBus.display_mode_settings_updated.connect(_on_display_mode_settings_updated) + SignalBus.display_resolution_settings_updated.connect(_on_display_resolution_settings_updated) func _on_tab_changed(tab_data: TabData) -> void: @@ -59,5 +116,36 @@ func _on_tab_changed(tab_data: TabData) -> void: visible = false -func _on_data_changed(toggle: bool, value: float, id: String) -> void: +func _on_audio_data_changed(toggle: bool, value: float, id: String) -> void: SignalBus.audio_settings_update.emit(toggle, value, id) + + +func _on_effect_data_changed(toggle: bool, value: float, id: String) -> void: + SignalBus.effect_settings_update.emit(toggle, value, id) + + +func _on_display_mode_button_up() -> void: + SignalBus.display_mode_settings_toggle.emit() + display_mode_button.release_focus() + + +func _on_display_resolution_button_up() -> void: + SignalBus.display_resolution_settings_toggle.emit() + display_resolution_button.release_focus() + + +func _on_display_language_button_up() -> void: + pass ## TODO: ADF-24 | Localization + + +func _on_display_mode_settings_updated(display_mode: String) -> void: + display_mode_button.text = Locale.get_ui_label(display_mode) + + +func _on_display_resolution_settings_updated(width: int, height: int) -> void: + ## TODO: replace resolution setting with a different one + display_resolution_button.text = "{a} x {b}".format({"a": width, "b": height}) + + +func _on_display_language_updated() -> void: + pass ## TODO: ADF-24 | Localization diff --git a/scenes/ui/screen/settings_screen/settings_screen.tscn b/scenes/ui/screen/settings_screen/settings_screen.tscn index 9eb42e8..f586c68 100644 --- a/scenes/ui/screen/settings_screen/settings_screen.tscn +++ b/scenes/ui/screen/settings_screen/settings_screen.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=3 format=3 uid="uid://w5y4su4adpf4"] +[gd_scene load_steps=5 format=3 uid="uid://w5y4su4adpf4"] [ext_resource type="Script" path="res://scenes/ui/screen/settings_screen/settings_screen.gd" id="1_xqlsa"] +[ext_resource type="PackedScene" uid="uid://bpq246h5ihhck" path="res://scenes/component/shake_shader_component/shake_shader_component.tscn" id="2_1nimh"] [ext_resource type="PackedScene" uid="uid://cshtvp7cn4ns1" path="res://scenes/ui/settings_slider/settings_slider.tscn" id="2_usuby"] +[ext_resource type="PackedScene" uid="uid://ccm0lefdpacby" path="res://scenes/component/control/label/label_typing/label_typing.tscn" id="3_yfyqn"] [node name="SettingsScreen" type="MarginContainer"] anchors_preset = 15 @@ -10,6 +12,8 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_xqlsa") +shake_shader_component_scene = ExtResource("2_1nimh") +label_typing_scene = ExtResource("3_yfyqn") [node name="Panel" type="Panel" parent="."] layout_mode = 2 @@ -24,17 +28,16 @@ theme_override_constants/margin_bottom = 4 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] layout_mode = 2 -[node name="TitleMarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"] +[node name="TitleMarginContainerAudio" type="MarginContainer" parent="MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 theme_override_constants/margin_top = 16 -theme_override_constants/margin_bottom = 16 +theme_override_constants/margin_bottom = 8 -[node name="TitleLabel" type="Label" parent="MarginContainer/VBoxContainer/TitleMarginContainer"] -visible = false +[node name="TitleLabel" type="Label" parent="MarginContainer/VBoxContainer/TitleMarginContainerAudio"] layout_mode = 2 -text = "Settings" +text = "Audio" [node name="MasterSettingsSlider" parent="MarginContainer/VBoxContainer" instance=ExtResource("2_usuby")] unique_name_in_owner = true @@ -48,59 +51,83 @@ layout_mode = 2 unique_name_in_owner = true layout_mode = 2 -[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"] +[node name="TODOMusicTracksMarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"] +visible = false layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 -theme_override_constants/margin_top = 16 -theme_override_constants/margin_bottom = 16 -[node name="MarginContainer5" type="MarginContainer" parent="MarginContainer/VBoxContainer"] -visible = false +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/TODOMusicTracksMarginContainer"] layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/MarginContainer5"] +[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/TODOMusicTracksMarginContainer/HBoxContainer"] layout_mode = 2 -text = "Language [ HR ] [ EN ] [ DE ] [ XY ] " +text = "Music Tracks" -[node name="MarginContainer6" type="MarginContainer" parent="MarginContainer/VBoxContainer"] -visible = false +[node name="Button1" type="Button" parent="MarginContainer/VBoxContainer/TODOMusicTracksMarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(32, 32) layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 +text = "A" -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/MarginContainer6"] +[node name="Button2" type="Button" parent="MarginContainer/VBoxContainer/TODOMusicTracksMarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(32, 32) layout_mode = 2 -text = "Text Typing Speed 0.1 [+] [-]" +text = "B" -[node name="MarginContainer7" type="MarginContainer" parent="MarginContainer/VBoxContainer"] -visible = false +[node name="TitleMarginContainerEffects" type="MarginContainer" parent="MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_bottom = 8 -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/MarginContainer7"] +[node name="TitleLabel" type="Label" parent="MarginContainer/VBoxContainer/TitleMarginContainerEffects"] layout_mode = 2 -text = "Enemy Shake Effect 0.1 [+] [-]" +text = "Effects" -[node name="MarginContainer8" type="MarginContainer" parent="MarginContainer/VBoxContainer"] -visible = false +[node name="ShakeSettingsSlider" parent="MarginContainer/VBoxContainer" instance=ExtResource("2_usuby")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="TypingSettingsSlider" parent="MarginContainer/VBoxContainer" instance=ExtResource("2_usuby")] +unique_name_in_owner = true +layout_mode = 2 + +[node name="TitleMarginContainerDisplay" type="MarginContainer" parent="MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_bottom = 8 -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/MarginContainer8"] +[node name="TitleLabel" type="Label" parent="MarginContainer/VBoxContainer/TitleMarginContainerDisplay"] layout_mode = 2 -text = "Text Shake Effect 0.1 [+] [-]" +text = "Display" -[node name="MarginContainer9" type="MarginContainer" parent="MarginContainer/VBoxContainer"] -visible = false +[node name="DisplaySettingsMarginContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_bottom = 8 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/DisplaySettingsMarginContainer"] +layout_mode = 2 -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/MarginContainer9"] +[node name="DisplayModeButton" type="Button" parent="MarginContainer/VBoxContainer/DisplaySettingsMarginContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(128, 36) +layout_mode = 2 +text = "Windowed" + +[node name="DisplayResolutionButton" type="Button" parent="MarginContainer/VBoxContainer/DisplaySettingsMarginContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(128, 36) +layout_mode = 2 +text = "960 x 540" + +[node name="DisplayLanguageButton" type="Button" parent="MarginContainer/VBoxContainer/DisplaySettingsMarginContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(128, 36) layout_mode = 2 -text = "Enemy RGB Effect 0.1 [+] [-]" +text = "English" diff --git a/scenes/ui/settings_slider/settings_slider.gd b/scenes/ui/settings_slider/settings_slider.gd index 94d8f04..67ce460 100644 --- a/scenes/ui/settings_slider/settings_slider.gd +++ b/scenes/ui/settings_slider/settings_slider.gd @@ -2,11 +2,13 @@ class_name SettingsSlider extends MarginContainer signal data_changed(toggle: bool, value: float) +@export var toggle_button_ui: bool = true + var _toggle: bool var _value: float @onready var toggle_button: Button = %ToggleButton -@onready var title_label: Label = %TitleLabel +@onready var title_label: LabelTyping = %TitleLabel @onready var value_label: Label = %ValueLabel @onready var dec_button: Button = %DecButton @onready var h_slider: HSlider = %HSlider @@ -33,6 +35,10 @@ func set_data(toggle: bool, value: float) -> void: _update_ui() +func get_title_label() -> LabelTyping: + return title_label + + ############# ## helpers ## ############# @@ -43,6 +49,9 @@ func _initialize() -> void: _value = 1.0 _update_ui(false) + if !toggle_button_ui: + toggle_button.visible = false + func _update_toggle_ui(user_input: bool = true) -> void: toggle_button.text = "On" if _toggle else "Off" diff --git a/scenes/ui/settings_slider/settings_slider.tscn b/scenes/ui/settings_slider/settings_slider.tscn index 4a75503..b1eee7b 100644 --- a/scenes/ui/settings_slider/settings_slider.tscn +++ b/scenes/ui/settings_slider/settings_slider.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://cshtvp7cn4ns1"] +[gd_scene load_steps=3 format=3 uid="uid://cshtvp7cn4ns1"] [ext_resource type="Script" path="res://scenes/ui/settings_slider/settings_slider.gd" id="1_k8bx2"] +[ext_resource type="PackedScene" uid="uid://ccm0lefdpacby" path="res://scenes/component/control/label/label_typing/label_typing.tscn" id="2_vnjch"] [node name="SettingsSlider" type="MarginContainer"] size_flags_horizontal = 4 @@ -20,14 +21,17 @@ layout_mode = 2 text = "On" [node name="TitleMarginContainer" type="MarginContainer" parent="HBoxContainer"] +unique_name_in_owner = true custom_minimum_size = Vector2(64, 0) layout_mode = 2 -[node name="TitleLabel" type="Label" parent="HBoxContainer/TitleMarginContainer"] +[node name="TitleLabel" parent="HBoxContainer/TitleMarginContainer" instance=ExtResource("2_vnjch")] unique_name_in_owner = true +custom_minimum_size = Vector2(0, 0) layout_mode = 2 size_flags_horizontal = 4 text = "Audio" +autowrap_mode = 0 [node name="ValueMarginContainer" type="MarginContainer" parent="HBoxContainer"] custom_minimum_size = Vector2(32, 0)