From dcf5d28248e0c0a4aac6c8fd6653f2de7b9b2ea4 Mon Sep 17 00:00:00 2001 From: "m.cirafisi" Date: Mon, 1 Jun 2026 09:03:31 +0000 Subject: [PATCH] refactoring UI --- addons/TweenFX/TweenFX.gd | 1096 +++++++++++++++++ addons/TweenFX/TweenFX.gd.uid | 1 + addons/TweenFX/TweenManager.gd | 43 + addons/TweenFX/TweenManager.gd.uid | 1 + addons/TweenFX/icon.png | Bin 0 -> 9399 bytes addons/TweenFX/icon.png.import | 40 + addons/TweenFX/plugin.cfg | 7 + addons/TweenFX/plugin.gd | 10 + addons/TweenFX/plugin.gd.uid | 1 + core/game_menu/arrow_button.gd | 22 +- core/game_menu/arrow_button.tscn | 53 +- core/game_menu/audio_option.tscn | 1 + core/game_menu/biome_picker.gd | 12 +- core/game_menu/biome_picker.tscn | 91 +- core/game_menu/biome_selector.tscn | 48 +- core/game_menu/collectible_gallery.tscn | 4 + core/game_menu/color_picker.gd | 27 +- core/game_menu/color_picker.tscn | 92 +- core/game_menu/game_menu.gd | 10 +- core/game_menu/game_menu.tscn | 11 +- core/game_menu/game_menu_tab.gd | 2 + core/game_menu/highlighted_photo.gd | 5 + core/game_menu/highlighted_photo.tscn | 6 - core/game_menu/hoover_tween.gd | 44 - core/game_menu/hoover_tween.tscn | 6 - core/game_menu/option_menu.gd | 19 +- core/game_menu/option_menu.tscn | 6 +- core/game_menu/option_menu_button.gd | 23 +- core/game_menu/option_menu_button.tscn | 57 +- core/game_menu/page.gd | 14 + core/game_menu/page.gd.uid | 1 + core/game_menu/page.tscn | 2 + core/game_menu/page_1.tscn | 31 +- core/game_menu/page_2.tscn | 5 +- core/game_menu/photo.gd | 22 +- core/game_menu/photo.tscn | 37 +- core/game_menu/photo_gallery.tscn | 36 +- core/game_menu/settings_menu.tscn | 25 +- core/game_menu/train_selector.gd | 46 +- core/game_menu/train_selector.tscn | 45 +- core/main_menu/main_menu.gd | 14 +- core/main_menu/main_menu.tscn | 44 +- core/main_scene_ui/audio_player.gd | 24 +- core/main_scene_ui/audio_player.tscn | 8 +- core/main_scene_ui/icon_button.gd | 21 +- core/main_scene_ui/icon_button.tscn | 80 +- core/main_scene_ui/icon_buttons_row.gd | 43 +- core/main_scene_ui/icon_buttons_row.tscn | 13 + core/main_scene_ui/main_menu_ui.gd | 49 - core/main_scene_ui/main_scene_ui.gd | 78 ++ ...in_menu_ui.gd.uid => main_scene_ui.gd.uid} | 0 .../{main_menu_ui.tscn => main_scene_ui.tscn} | 100 +- core/scene_manager/scene_manager.tscn | 1 + core/tween/container_tween.gd | 86 ++ .../container_tween.gd.uid} | 0 core/tween/container_tween.tscn | 7 + project.godot | 3 +- tgcc/chunk/prop/fields/carrot/carrot.res | Bin 23089 -> 35706 bytes tgcc/chunk/prop/fields/potato/potato.res | Bin 26547 -> 39483 bytes tgcc/chunk/prop/tree/bambù/Bambu.res | Bin 87812 -> 131844 bytes tgcc/main_scene.tscn | 4 +- tgcc/train/rail/rail.res | Bin 42520 -> 42513 bytes 62 files changed, 2088 insertions(+), 489 deletions(-) create mode 100644 addons/TweenFX/TweenFX.gd create mode 100644 addons/TweenFX/TweenFX.gd.uid create mode 100644 addons/TweenFX/TweenManager.gd create mode 100644 addons/TweenFX/TweenManager.gd.uid create mode 100644 addons/TweenFX/icon.png create mode 100644 addons/TweenFX/icon.png.import create mode 100644 addons/TweenFX/plugin.cfg create mode 100644 addons/TweenFX/plugin.gd create mode 100644 addons/TweenFX/plugin.gd.uid delete mode 100644 core/game_menu/hoover_tween.gd delete mode 100644 core/game_menu/hoover_tween.tscn create mode 100644 core/game_menu/page.gd create mode 100644 core/game_menu/page.gd.uid delete mode 100644 core/main_scene_ui/main_menu_ui.gd create mode 100644 core/main_scene_ui/main_scene_ui.gd rename core/main_scene_ui/{main_menu_ui.gd.uid => main_scene_ui.gd.uid} (100%) rename core/main_scene_ui/{main_menu_ui.tscn => main_scene_ui.tscn} (52%) create mode 100644 core/tween/container_tween.gd rename core/{game_menu/hoover_tween.gd.uid => tween/container_tween.gd.uid} (100%) create mode 100644 core/tween/container_tween.tscn diff --git a/addons/TweenFX/TweenFX.gd b/addons/TweenFX/TweenFX.gd new file mode 100644 index 0000000..f2a5213 --- /dev/null +++ b/addons/TweenFX/TweenFX.gd @@ -0,0 +1,1096 @@ +@icon("res://addons/TweenFX/icon.png") +## TweenFX — A juicy tween animation library for Godot 4. +## [br][br] +## Provides one-shot and looping animations for CanvasItem nodes. +## Call any animation directly, stop it explicitly, or await its completion. +## [br][br] +## All animations are tracked automatically. Use [method stop] and [method stop_all] +## to interrupt running animations, and [method is_playing] to check their state. +## [br][br] +## [b]Basic usage:[/b] +## [codeblock] +## TweenFX.shake(node) +## TweenFX.shake(node, 0.5, 20.0, 8) +## await TweenFX.shake(node).finished +## [/codeblock] +extends Node +const TweenManager = preload("res://addons/TweenFX/TweenManager.gd") + +#region ENUM +## Some animations support [b]PlayState[/b] for interactive use. +## [b]ENTER[/b] and [b]EXIT[/b] are designed as pairs.[br] +## [i]Pass the target property explicitly so TweenFX always knows where to go regardless of the node's current state. +enum PlayState { + FULL, # play complete animation + ENTER, # animate to target state and hold + EXIT # animate back to original +} + +enum Animations { + POP_IN, + POP_OUT, + PUNCH_IN, + PUNCH_OUT, + FADE_IN, + FADE_OUT, + DROP_IN, + DROP_OUT, + JUMP_SCARE, + SPIN, + SKEW, + VANISH, + SHAKE, + PULSATE, + JITTER, + JELLY, + FLIP, + HOP, + BLINK, + SQUASH, + STRETCH, + SNAP, + COLOR_CYCLE, + HEARTBEAT, + SWING, + CHARGE_UP, + RICOCHET, + GLITCH, + SPOTLIGHT, + WAVE_DISTORT, + WIGGLE, + FLOAT_BOB, + GLOW_PULSE, + TWIST, + ROTATE_HOP, + EXPLODE, + BLACK_HOLE, + MELT, + TV_SHUTDOWN, + MAD_HELICO, + SPIN_BOUNCE, + IDLE_RUBBER, + BUBBLE_ASCEND, + CREEP_OUT, + RUBBER_BAND, + FIDGET, + DEFLATE, + DRUNK, + IMPACT_LAND, + BREATHE, + SWAY, + FLICKER, + CRITICAL_HIT, + UPGRADE, + FOLD_IN, + FOLD_OUT, + ALARM, + POINT, + TADA, + GHOST, + ATTRACT, + ORBIT, + PRESS, + PRESS_ROTATE, + MAGNETIC_PULL, + HEADSHAKE +} + +enum AnimationType { + ONE_SHOT, + LOOPING +} + +enum NodeRequirement { + CANVAS_ITEM, + NODE_2D +} + +#endregion + +#region DICT +const ANIMATION_TYPES: Dictionary = { + Animations.POP_IN: AnimationType.ONE_SHOT, + Animations.POP_OUT: AnimationType.ONE_SHOT, + Animations.PUNCH_IN: AnimationType.ONE_SHOT, + Animations.PUNCH_OUT: AnimationType.ONE_SHOT, + Animations.FADE_IN: AnimationType.ONE_SHOT, + Animations.FADE_OUT: AnimationType.ONE_SHOT, + Animations.DROP_IN: AnimationType.ONE_SHOT, + Animations.DROP_OUT: AnimationType.ONE_SHOT, + Animations.JUMP_SCARE: AnimationType.ONE_SHOT, + Animations.SPIN: AnimationType.ONE_SHOT, + Animations.SKEW: AnimationType.ONE_SHOT, + Animations.VANISH: AnimationType.ONE_SHOT, + Animations.SHAKE: AnimationType.ONE_SHOT, + Animations.PULSATE: AnimationType.ONE_SHOT, + Animations.JITTER: AnimationType.ONE_SHOT, + Animations.JELLY: AnimationType.ONE_SHOT, + Animations.FLIP: AnimationType.ONE_SHOT, + Animations.HOP: AnimationType.ONE_SHOT, + Animations.BLINK: AnimationType.ONE_SHOT, + Animations.SQUASH: AnimationType.ONE_SHOT, + Animations.STRETCH: AnimationType.ONE_SHOT, + Animations.SNAP: AnimationType.ONE_SHOT, + Animations.CHARGE_UP: AnimationType.ONE_SHOT, + Animations.RICOCHET: AnimationType.ONE_SHOT, + Animations.GLITCH: AnimationType.ONE_SHOT, + Animations.SPOTLIGHT: AnimationType.ONE_SHOT, + Animations.TWIST: AnimationType.ONE_SHOT, + Animations.EXPLODE: AnimationType.ONE_SHOT, + Animations.BLACK_HOLE: AnimationType.ONE_SHOT, + Animations.TV_SHUTDOWN: AnimationType.ONE_SHOT, + Animations.CREEP_OUT: AnimationType.ONE_SHOT, + Animations.RUBBER_BAND: AnimationType.ONE_SHOT, + Animations.FIDGET: AnimationType.ONE_SHOT, + Animations.DEFLATE: AnimationType.ONE_SHOT, + Animations.DRUNK: AnimationType.ONE_SHOT, + Animations.IMPACT_LAND: AnimationType.ONE_SHOT, + Animations.CRITICAL_HIT: AnimationType.ONE_SHOT, + Animations.UPGRADE: AnimationType.ONE_SHOT, + Animations.FOLD_IN: AnimationType.ONE_SHOT, + Animations.FOLD_OUT: AnimationType.ONE_SHOT, + Animations.POINT: AnimationType.ONE_SHOT, + Animations.TADA: AnimationType.ONE_SHOT, + Animations.PRESS: AnimationType.ONE_SHOT, + Animations.PRESS_ROTATE: AnimationType.ONE_SHOT, + Animations.MAGNETIC_PULL: AnimationType.ONE_SHOT, + Animations.HEADSHAKE: AnimationType.ONE_SHOT, + + Animations.COLOR_CYCLE: AnimationType.LOOPING, + Animations.HEARTBEAT: AnimationType.LOOPING, + Animations.SWING: AnimationType.LOOPING, + Animations.WAVE_DISTORT: AnimationType.LOOPING, + Animations.WIGGLE: AnimationType.LOOPING, + Animations.FLOAT_BOB: AnimationType.LOOPING, + Animations.GLOW_PULSE: AnimationType.LOOPING, + Animations.ROTATE_HOP: AnimationType.LOOPING, + Animations.SPIN_BOUNCE: AnimationType.LOOPING, + Animations.MAD_HELICO: AnimationType.LOOPING, + Animations.MELT: AnimationType.LOOPING, + Animations.IDLE_RUBBER: AnimationType.LOOPING, + Animations.BUBBLE_ASCEND: AnimationType.LOOPING, + Animations.BREATHE: AnimationType.LOOPING, + Animations.SWAY: AnimationType.LOOPING, + Animations.FLICKER: AnimationType.LOOPING, + Animations.ALARM: AnimationType.LOOPING, + Animations.GHOST: AnimationType.LOOPING, + Animations.ATTRACT: AnimationType.LOOPING, + Animations.ORBIT: AnimationType.LOOPING, +} + +const ANIMATION_REQUIREMENTS: Dictionary = { + Animations.WAVE_DISTORT: NodeRequirement.NODE_2D, + Animations.SKEW: NodeRequirement.NODE_2D, +} +#endregion + +#region LOGIC +## Stops a specific animation running on the node. +func stop(node: CanvasItem, anim: Animations) -> void: + TweenManager.stop(node, anim) + +## Stops all animations currently running on the node. +func stop_all(node: CanvasItem) -> void: + TweenManager.stop_all(node) + +## Returns true if the given animation is currently playing on the node. +func is_playing(node: CanvasItem, anim: Animations) -> bool: + return TweenManager.is_playing(node, anim) + +## Returns true if the animation loops indefinitely until stopped. +func is_looping_type(anim: Animations) -> bool: + return ANIMATION_TYPES.get(anim, AnimationType.ONE_SHOT) == AnimationType.LOOPING + +## Returns true if the animation requires a Node2D target instead of CanvasItem. +func requires_node2d(anim: Animations) -> bool: + return ANIMATION_REQUIREMENTS.get(anim, NodeRequirement.CANVAS_ITEM) == NodeRequirement.NODE_2D +#endregion + +#region TWEEN ANIMATIONS + + #region Looping +## Goes through the colors. +func color_cycle(node: CanvasItem, duration: float = 3.0, saturation: float = 1.0, value: float = 1.0) -> Tween: + TweenManager.stop(node, Animations.COLOR_CYCLE) + var tween := node.create_tween() + tween.set_loops() + tween.set_ease(Tween.EASE_IN_OUT) + tween.set_trans(Tween.TRANS_SINE) + var colors = [ + Color.from_hsv(0.0, saturation, value), + Color.from_hsv(0.17, saturation, value), + Color.from_hsv(0.33, saturation, value), + Color.from_hsv(0.5, saturation, value), + Color.from_hsv(0.67, saturation, value), + Color.from_hsv(0.83, saturation, value), + Color.from_hsv(1.0, saturation, value), + ] + for color in colors: + tween.tween_property(node, "modulate", color, duration / colors.size()) + TweenManager.track(node, Animations.COLOR_CYCLE, tween) + return tween + +## Simulates a heartbeat with two rhythmic pulses. +func heartbeat(node: CanvasItem, duration: float = 1.0, strength: float = 0.2) -> Tween: + TweenManager.stop(node, Animations.HEARTBEAT) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "scale", original_scale * (1 + strength), 0.15).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, 0.15).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN) + tween.tween_property(node, "scale", original_scale, 0.1) + tween.tween_property(node, "scale", original_scale * (1 + strength * 0.6), 0.1).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, 0.1).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN) + tween.tween_property(node, "scale", original_scale, duration - 0.6) + TweenManager.track(node, Animations.HEARTBEAT, tween) + return tween + +## Rotates the node back and forth like a pendulum. +func swing(node: CanvasItem, duration: float = 1.0, angle: float = 30.0) -> Tween: + TweenManager.stop(node, Animations.SWING) + var original_rotation : float = node.rotation_degrees + var tween := node.create_tween() + tween.set_loops() + tween.set_ease(Tween.EASE_IN_OUT) + tween.set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "rotation_degrees", original_rotation + angle, duration * 0.5) + tween.tween_property(node, "rotation_degrees", original_rotation - angle, duration) + tween.tween_property(node, "rotation_degrees", original_rotation, duration * 0.5) + TweenManager.track(node, Animations.SWING, tween) + return tween + +## Applies a wave-like distortion effect to the node. +func wave_distort(node: Node2D, duration: float = 1.0, amplitude: float = 0.1) -> Tween: + TweenManager.stop(node, Animations.WAVE_DISTORT) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.set_ease(Tween.EASE_IN_OUT) + tween.set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "scale:x", original_scale.x * (1 + amplitude), duration * 0.25) + tween.parallel().tween_property(node, "scale:y", original_scale.y * (1 - amplitude/2), duration * 0.25) + tween.parallel().tween_property(node, "skew", amplitude/2, duration * 0.25) + tween.tween_property(node, "scale:x", original_scale.x * (1 - amplitude/2), duration * 0.25) + tween.parallel().tween_property(node, "scale:y", original_scale.y * (1 + amplitude), duration * 0.25) + tween.parallel().tween_property(node, "skew", -amplitude/2, duration * 0.25) + tween.tween_property(node, "scale:x", original_scale.x * (1 - amplitude), duration * 0.25) + tween.parallel().tween_property(node, "scale:y", original_scale.y * (1 - amplitude/2), duration * 0.25) + tween.parallel().tween_property(node, "skew", amplitude/2, duration * 0.25) + tween.tween_property(node, "scale:x", original_scale.x, duration * 0.25) + tween.parallel().tween_property(node, "scale:y", original_scale.y, duration * 0.25) + tween.parallel().tween_property(node, "skew", 0.0, duration * 0.25) + TweenManager.track(node, Animations.WAVE_DISTORT, tween) + return tween + +## Slightly rotates the node back and forth. +func wiggle(node: CanvasItem, duration: float = 1.2) -> Tween: + TweenManager.stop(node, Animations.WIGGLE) + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "rotation_degrees", 5.0, duration * 0.25).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "rotation_degrees", -5.0, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "rotation_degrees", 0.0, duration * 0.25).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + TweenManager.track(node, Animations.WIGGLE, tween) + return tween + +## Makes the node float up and down in a looping motion. +func float_bob(node: CanvasItem, duration: float = 2.0, height: float = 5.0) -> Tween: + TweenManager.stop(node, Animations.FLOAT_BOB) + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "position:y", original_pos.y - height, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "position:y", original_pos.y + height, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + TweenManager.track(node, Animations.FLOAT_BOB, tween) + return tween + +## Gently pulses the node's scale and opacity in a loop. +func glow_pulse(node: CanvasItem, duration: float = 1.2, scale_amt: float = 0.05, alpha_amt: float = 0.3) -> Tween: + TweenManager.stop(node, Animations.GLOW_PULSE) + var original_scale: Vector2 = node.scale + var original_alpha: float = node.modulate.a + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "scale", original_scale * (1.0 + scale_amt), duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.parallel().tween_property(node, "modulate:a", original_alpha * (1.0 - alpha_amt), duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.parallel().tween_property(node, "modulate:a", original_alpha, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + TweenManager.track(node, Animations.GLOW_PULSE, tween) + return tween + +## Rotates a bit while doing a mini-hop. Good for idle feedback. +func rotate_hop(node: CanvasItem, duration: float = 0.4, angle: float = 15.0, height: float = 10.0) -> Tween: + TweenManager.stop(node, Animations.ROTATE_HOP) + var start_pos = node.position + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "rotation_degrees", angle, duration * 0.25) + tween.parallel().tween_property(node, "position:y", start_pos.y - height, duration * 0.25) + tween.tween_property(node, "rotation_degrees", -angle, duration * 0.25) + tween.parallel().tween_property(node, "position:y", start_pos.y + height, duration * 0.25) + tween.tween_property(node, "rotation_degrees", 0, duration * 0.25) + tween.parallel().tween_property(node, "position:y", start_pos.y, duration * 0.25) + TweenManager.track(node, Animations.ROTATE_HOP, tween) + return tween + +## Pure entropy: spin, random jitter, squash-stretch bounce. +func spin_bounce(node: CanvasItem, duration: float = 0.6, bounce_scale: float = 0.2, spin_speed: float = 180.0) -> Tween: + TweenManager.stop(node, Animations.SPIN_BOUNCE) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.parallel().tween_property(node, "rotation_degrees", node.rotation_degrees + spin_speed, duration).set_trans(Tween.TRANS_LINEAR) + tween.parallel().tween_property(node, "scale", original_scale * Vector2(1.0 + randf_range(-bounce_scale, bounce_scale), 1.0 + randf_range(-bounce_scale, bounce_scale)), duration * 0.5) + tween.tween_property(node, "scale", original_scale, duration * 0.5) + TweenManager.track(node, Animations.SPIN_BOUNCE, tween) + return tween + +## Makes the object look like it's trying to fly off in a panic. +func mad_helico(node: CanvasItem, duration: float = 0.6, spin_speed: float = 1080.0, bob_height: float = 5.0) -> Tween: + TweenManager.stop(node, Animations.MAD_HELICO) + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.set_loops() + tween.parallel().tween_property(node, "rotation_degrees", node.rotation_degrees + spin_speed, duration).set_trans(Tween.TRANS_LINEAR) + tween.tween_property(node, "position:y", original_pos.y - bob_height, duration * 0.3).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "position:y", original_pos.y + bob_height, duration * 0.3).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "position:y", original_pos.y, duration * 0.3).set_trans(Tween.TRANS_SINE) + TweenManager.track(node, Animations.MAD_HELICO, tween) + return tween + +## Makes objects drip down slowly and squash — like they're melting. +func melt(node: CanvasItem, duration: float = 2.0, melt_distance: float = 20.0) -> Tween: + TweenManager.stop(node, Animations.MELT) + var original_pos: Vector2 = node.position + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.parallel().tween_property(node, "position:y", original_pos.y + melt_distance, duration * 0.5).set_trans(Tween.TRANS_LINEAR) + tween.parallel().tween_property(node, "scale:y", original_scale.y * 1.3, duration * 0.5) + tween.tween_property(node, "position:y", original_pos.y, duration * 0.5) + tween.tween_property(node, "scale:y", original_scale.y, duration * 0.5) + TweenManager.track(node, Animations.MELT, tween) + return tween + +## Gives the object rubbery springy movement. +func idle_rubber(node: CanvasItem, duration: float = 0.6, strength: float = 0.1) -> Tween: + TweenManager.stop(node, Animations.IDLE_RUBBER) + var original_pos: Vector2 = node.position + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "position:x", original_pos.x + 6, duration * 0.3) + tween.parallel().tween_property(node, "scale", original_scale * Vector2(1.1, 0.9), duration * 0.3) + tween.tween_property(node, "position:x", original_pos.x - 6, duration * 0.3) + tween.parallel().tween_property(node, "scale", original_scale * Vector2(0.9, 1.1), duration * 0.3) + tween.tween_property(node, "position:x", original_pos.x, duration * 0.3) + tween.parallel().tween_property(node, "scale", original_scale, duration * 0.3) + TweenManager.track(node, Animations.IDLE_RUBBER, tween) + return tween + +## Floats upward with a bit of distortion. +func bubble_ascend(node: CanvasItem, duration: float = 2.0, height: float = 15.0) -> Tween: + TweenManager.stop(node, Animations.BUBBLE_ASCEND) + var original_pos: Vector2 = node.position + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "position:y", original_pos.y - height, duration * 0.6).set_trans(Tween.TRANS_SINE) + tween.parallel().tween_property(node, "scale:y", original_scale.y * 0.95, duration * 0.3) + tween.tween_property(node, "position:y", original_pos.y, duration * 0.4).set_trans(Tween.TRANS_SINE) + tween.parallel().tween_property(node, "scale", original_scale, duration * 0.2) + TweenManager.track(node, Animations.BUBBLE_ASCEND, tween) + return tween + +## Very subtle slow scale pulse. Good for alive/idle state. +func breathe(node: CanvasItem, duration: float = 3.0, strength: float = 0.1) -> Tween: + TweenManager.stop(node, Animations.BREATHE) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "scale", original_scale * (1.0 + strength), duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + TweenManager.track(node, Animations.BREATHE, tween) + return tween + +## Slowly fades to low alpha and back, ethereal feel. +func ghost(node: CanvasItem, duration: float = 2.0, min_alpha: float = 0.2) -> Tween: + TweenManager.stop(node, Animations.GHOST) + var original_alpha: float = node.modulate.a + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "modulate:a", min_alpha, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "modulate:a", original_alpha, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + TweenManager.track(node, Animations.GHOST, tween) + return tween + +## Grows slightly then pulses to draw attention. +func attract(node: CanvasItem, duration: float = 1.2, strength: float = 0.12) -> Tween: + TweenManager.stop(node, Animations.ATTRACT) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "scale", original_scale * (1.0 + strength), duration * 0.3).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale * (1.0 + strength * 0.5), duration * 0.2).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale * (1.0 + strength), duration * 0.2).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.3).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.ATTRACT, tween) + return tween + +## Orbits the node in a circle around its original position. +func orbit(node: CanvasItem, duration: float = 2.0, radius: float = 30.0, start_angle: float = 0.0) -> Tween: + TweenManager.stop(node, Animations.ORBIT) + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.set_loops() + var steps = 60 + for i in range(steps + 1): + var angle = start_angle + (float(i) / steps) * TAU + var offset = Vector2(cos(angle), sin(angle)) * radius + tween.tween_property(node, "position", original_pos + offset, duration / steps).set_trans(Tween.TRANS_LINEAR) + TweenManager.track(node, Animations.ORBIT, tween) + return tween + +## Gentle organic sway like a plant in wind. +func sway(node: CanvasItem, duration: float = 2.0, angle: float = 8.0) -> Tween: + TweenManager.stop(node, Animations.SWAY) + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "rotation_degrees", angle, duration * 0.4).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "rotation_degrees", -angle * 0.6, duration * 0.4).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "rotation_degrees", angle * 0.3, duration * 0.1).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "rotation_degrees", 0.0, duration * 0.1).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + TweenManager.track(node, Animations.SWAY, tween) + return tween + +## Random opacity flicker like a candle or broken light. +func flicker(node: CanvasItem, duration: float = 0.08, min_alpha: float = 0.4, steps: int = 8) -> Tween: + TweenManager.stop(node, Animations.FLICKER) + var original_alpha: float = node.modulate.a + var tween := node.create_tween() + tween.set_loops() + for i in range(steps): + var alpha = randf_range(min_alpha, original_alpha) + tween.tween_property(node, "modulate:a", alpha, duration * randf_range(0.5, 1.5)) + TweenManager.track(node, Animations.FLICKER, tween) + return tween + +## Rapid red flash loop, urgent warning. +func alarm(node: CanvasItem, duration: float = 0.3, color : Color = Color(2.0, 0.2, 0.2, 1.0)) -> Tween: + TweenManager.stop(node, Animations.ALARM) + var original_color: Color = node.modulate + var tween := node.create_tween() + tween.set_loops() + tween.tween_property(node, "modulate", color, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + tween.tween_property(node, "modulate", original_color, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.ALARM, tween) + return tween + #endregion + + #region One-Shot +## Object fades into the dark and shrinks away. +func creep_out(node: CanvasItem, duration: float = 1.0) -> Tween: + TweenManager.stop(node, Animations.CREEP_OUT) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "modulate", Color(0.2, 0.2, 0.2, 1), duration * 0.5) + tween.tween_property(node, "scale", original_scale * 0.8, duration * 0.5) + tween.tween_property(node, "modulate:a", 0.0, duration * 0.3) + TweenManager.track(node, Animations.CREEP_OUT, tween) + return tween + +## Makes the object look like it's being shut down like a cartoon TV. +func tv_shutdown(node: CanvasItem, duration: float = 0.5) -> Tween: + TweenManager.stop(node, Animations.TV_SHUTDOWN) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * Vector2(1.3, 0.7), duration * 0.25).set_trans(Tween.TRANS_ELASTIC) + tween.tween_property(node, "scale", original_scale * Vector2(0.7, 1.3), duration * 0.25).set_trans(Tween.TRANS_ELASTIC) + tween.tween_property(node, "scale", Vector2.ZERO, duration * 0.2).set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.TV_SHUTDOWN, tween) + return tween + +## Spins and collapses into nothingness. +func black_hole(node: CanvasItem, duration: float = 0.8) -> Tween: + TweenManager.stop(node, Animations.BLACK_HOLE) + var tween := node.create_tween() + tween.parallel().tween_property(node, "scale", Vector2.ZERO, duration).set_trans(Tween.TRANS_EXPO).set_ease(Tween.EASE_IN) + tween.parallel().tween_property(node, "modulate:a", 0.0, duration) + tween.parallel().tween_property(node, "rotation_degrees", node.rotation_degrees + 720, duration) + TweenManager.track(node, Animations.BLACK_HOLE, tween) + return tween + +## Boom! +func explode(node: CanvasItem, duration: float = 0.4, scale_amt: float = 1.8) -> Tween: + TweenManager.stop(node, Animations.EXPLODE) + var tween := node.create_tween() + tween.tween_property(node, "scale", Vector2.ONE * scale_amt, duration * 0.3).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "rotation_degrees", randf_range(-10, 10), duration * 0.2) + tween.tween_property(node, "scale", Vector2.ONE * 0.5, duration * 0.4).set_trans(Tween.TRANS_EXPO).set_ease(Tween.EASE_IN) + tween.parallel().tween_property(node, "modulate:a", 0.0, duration * 0.4).set_trans(Tween.TRANS_LINEAR) + TweenManager.track(node, Animations.EXPLODE, tween) + return tween + +## Builds up energy visually before a release. +func charge_up(node: CanvasItem, duration: float = 1.0) -> Tween: + TweenManager.stop(node, Animations.CHARGE_UP) + var original_scale: Vector2 = node.scale + var original_color: Color = node.modulate + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * 0.8, duration * 0.4).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + tween.parallel().tween_property(node, "modulate", Color(1.5, 1.5, 0.5, 1.0), duration * 0.4).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + for i in range(3): + var pulse_scale = 0.05 * (i + 1) + tween.tween_property(node, "scale", original_scale * (0.8 + pulse_scale), duration * 0.1) + tween.tween_property(node, "scale", original_scale * 0.8, duration * 0.1) + tween.tween_property(node, "scale", original_scale * 1.5, duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "modulate", Color(2.0, 2.0, 1.0, 1.0), duration * 0.2) + tween.tween_property(node, "scale", original_scale, duration * 0.2).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "modulate", original_color, duration * 0.2).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.CHARGE_UP, tween) + return tween + +## Shrinks and wobbles like it took a hit. +func punch_out(node: CanvasItem, duration: float = 0.5, min_scale: float = 0.5) -> Tween: + TweenManager.stop(node, Animations.PUNCH_OUT) + var original_scale: Vector2 = node.scale + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * min_scale, duration * 0.2).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + for i in range(3): + var jitter = Vector2(randf_range(-1, 1), randf_range(-1, 1)) * 5.0 + tween.tween_property(node, "position", original_pos + jitter, duration * 0.1) + tween.tween_property(node, "scale", original_scale, duration * 0.5).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "position", original_pos, duration * 0.1) + TweenManager.track(node, Animations.PUNCH_OUT, tween) + return tween + +## Bounces around as if hitting walls. +func ricochet(node: CanvasItem, duration: float = 0.8, strength: float = 30.0, bounces: int = 4) -> Tween: + TweenManager.stop(node, Animations.RICOCHET) + var original_pos: Vector2 = node.position + var tween := node.create_tween() + for i in range(bounces): + var random_dir = Vector2(randf_range(-1, 1), randf_range(-1, 1)).normalized() + var target_pos = original_pos + random_dir * strength + tween.tween_property(node, "position", target_pos, (duration / bounces) * 0.8).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "position", original_pos, duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.RICOCHET, tween) + return tween + +## Simulates a digital glitch with color and position jitter. +func glitch(node: CanvasItem, duration: float = 1.0, intensity: float = 10.0, frames: int = 12) -> Tween: + TweenManager.stop(node, Animations.GLITCH) + var original_pos: Vector2 = node.position + var original_color: Color = node.modulate + var tween := node.create_tween() + for i in range(frames): + var offset = Vector2(randf_range(-1, 1), randf_range(-1, 1)) * intensity + var color_shift = Color(randf_range(0.8, 1.2), randf_range(0.8, 1.2), randf_range(0.8, 1.2), 1.0) + var glitch_time = duration / frames * 0.5 + tween.tween_property(node, "position", original_pos + offset, glitch_time) + tween.parallel().tween_property(node, "modulate", color_shift, glitch_time) + tween.tween_property(node, "position", original_pos, glitch_time) + tween.parallel().tween_property(node, "modulate", original_color, glitch_time) + tween.tween_property(node, "position", original_pos, 0.1) + tween.parallel().tween_property(node, "modulate", original_color, 0.1) + TweenManager.track(node, Animations.GLITCH, tween) + return tween + +## A fast zoom and shake for a startling impact. +func jump_scare(node: CanvasItem, duration: float = 0.4, intensity: float = 1.3) -> Tween: + TweenManager.stop(node, Animations.JUMP_SCARE) + var original_scale: Vector2 = node.scale + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * intensity, duration * 0.3).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + for i in range(6): + var shake_offset = Vector2(randf_range(-1, 1), randf_range(-1, 1)).normalized() * 10.0 + tween.parallel().tween_property(node, "position", original_pos + shake_offset, duration * 0.05) + tween.tween_property(node, "position", original_pos, duration * 0.05) + tween.parallel().tween_property(node, "scale", original_scale, duration * 0.7).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.JUMP_SCARE, tween) + return tween + +## Highlights the node with a glowing effect. Supports PlayState for hold/release. +func spotlight(node: CanvasItem, duration: float = 1.0, glow: Color = Color(1.5, 1.5, 1.5, 1.0), state: PlayState = PlayState.FULL, use_self_modulate : bool = false) -> Tween: + TweenManager.stop(node, Animations.SPOTLIGHT) + var original_color: Color = node.modulate if not use_self_modulate else node.self_modulate + var node_modulate_property: String = "modulate" if not use_self_modulate else "self_modulate" + var tween := node.create_tween() + match state: + PlayState.ENTER: + tween.tween_property(node, node_modulate_property, glow, duration * 0.3).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + PlayState.EXIT: + tween.tween_property(node, node_modulate_property, glow, duration * 0.3).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + PlayState.FULL: + tween.tween_property(node, node_modulate_property, glow, duration * 0.3).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + tween.tween_property(node, node_modulate_property, glow, duration * 0.4) + tween.tween_property(node, node_modulate_property, original_color, duration * 0.3).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.SPOTLIGHT, tween) + return tween + +## Flips the node along the given axis. +func flip(node: CanvasItem, duration: float = 0.4, axis: String = "x", flips: int = 1) -> Tween: + TweenManager.stop(node, Animations.FLIP) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + for i in range(flips): + tween.tween_property(node, "scale:" + axis, -original_scale[axis], duration * 0.5 / flips).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + tween.tween_property(node, "scale:" + axis, original_scale[axis], duration * 0.5 / flips).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.FLIP, tween) + return tween + +## Makes the node hop in a given direction and land back. +func hop(node: CanvasItem, duration: float = 0.4, height: float = 20.0, direction: Vector2 = Vector2.UP) -> Tween: + TweenManager.stop(node, Animations.HOP) + var original_pos: Vector2 = node.position + var offset = direction.normalized() * height + var tween := node.create_tween() + tween.tween_property(node, "position", original_pos + offset, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "position", original_pos, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.HOP, tween) + return tween + +## Rapidly blinks the node's opacity. +func blink(node: CanvasItem, duration: float = 0.1, times: int = 3, from: float = 0.0, to: float = 1.0) -> Tween: + TweenManager.stop(node, Animations.BLINK) + var tween := node.create_tween() + for i in range(times): + tween.tween_property(node, "modulate:a", from, duration) + tween.tween_property(node, "modulate:a", to, duration) + TweenManager.track(node, Animations.BLINK, tween) + return tween + +## Squashes the node along one axis and stretches the other, then returns. +func squash(node: CanvasItem, duration: float = 0.2, amount: float = 0.3, horizontal: bool = true) -> Tween: + TweenManager.stop(node, Animations.SQUASH) + var original_scale: Vector2 = node.scale + var target = Vector2(original_scale.x * (1 + amount), original_scale.y * (1 - amount)) if horizontal else Vector2(original_scale.x * (1 - amount), original_scale.y * (1 + amount)) + var tween := node.create_tween() + tween.tween_property(node, "scale", target, duration * 0.5).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "scale", original_scale, duration * 0.5).set_trans(Tween.TRANS_SINE) + TweenManager.track(node, Animations.SQUASH, tween) + return tween + +## Stretches the node vertically, then returns to original scale. +func stretch(node: CanvasItem, duration: float = 0.2, amount: float = 0.3) -> Tween: + TweenManager.stop(node, Animations.STRETCH) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", Vector2(original_scale.x * (1 - amount), original_scale.y * (1 + amount)), duration * 0.5).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "scale", original_scale, duration * 0.5).set_trans(Tween.TRANS_SINE) + TweenManager.track(node, Animations.STRETCH, tween) + return tween + +## Scales the node up quickly, then resets. Supports PlayState for hold/release. +func snap(node: CanvasItem, duration: float = 0.1, scale: Vector2 = Vector2(1.3, 1.3), state: PlayState = PlayState.FULL) -> Tween: + TweenManager.stop(node, Animations.SNAP) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + match state: + PlayState.ENTER: + tween.tween_property(node, "scale", scale, duration).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + PlayState.EXIT: + tween.tween_property(node, "scale", scale, duration).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN) + PlayState.FULL: + tween.tween_property(node, "scale", scale, duration).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, duration).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.SNAP, tween) + return tween + +## Quickly flashes the node's opacity. +func flash(node: CanvasItem, duration: float = 0.1, flashes: int = 3) -> Tween: + TweenManager.stop(node, Animations.BLINK) + var tween := node.create_tween() + for i in range(flashes): + tween.tween_property(node, "modulate", Color(1, 1, 1, 0), duration) + tween.tween_property(node, "modulate", Color(1, 1, 1, 1), duration) + TweenManager.track(node, Animations.BLINK, tween) + return tween + +## Fades the node in from transparent. +func fade_in(node: CanvasItem, duration: float = 0.5) -> Tween: + TweenManager.stop(node, Animations.FADE_IN) + node.modulate.a = 0.0 + var tween := node.create_tween() + tween.tween_property(node, "modulate:a", 1.0, duration).set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.FADE_IN, tween) + return tween + +## Fades the node out to transparent. +func fade_out(node: CanvasItem, duration: float = 0.5) -> Tween: + TweenManager.stop(node, Animations.FADE_OUT) + var tween := node.create_tween() + tween.tween_property(node, "modulate:a", 0.0, duration).set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.FADE_OUT, tween) + return tween + +## Twists the node in place with a quick rotation. +func twist(node: CanvasItem, duration: float = 0.4, angle: float = 30.0) -> Tween: + TweenManager.stop(node, Animations.TWIST) + var start = node.rotation_degrees + var tween := node.create_tween() + tween.tween_property(node, "rotation_degrees", start + angle, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "rotation_degrees", start, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.TWIST, tween) + return tween + +## Expands and contracts the node once. +func pulsate(node: CanvasItem, duration: float = 0.5, scale_factor: float = 1.2) -> Tween: + TweenManager.stop(node, Animations.PULSATE) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * scale_factor, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.5).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + TweenManager.track(node, Animations.PULSATE, tween) + return tween + +## Rapid nervous jitter with rotation and scale micro-variations. +func jitter(node: CanvasItem, duration: float = 0.5, amount: float = 5.0, times: int = 8) -> Tween: + TweenManager.stop(node, Animations.JITTER) + var original_position : Vector2 = node.position + var original_rotation : float = node.rotation_degrees + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + for i in range(times): + var offset = Vector2(randf_range(-amount, amount), randf_range(-amount, amount)) + var rot = randf_range(-3.0, 3.0) + var scl = original_scale * Vector2(randf_range(0.95, 1.05), randf_range(0.95, 1.05)) + tween.tween_property(node, "position", original_position + offset, duration / times) + tween.parallel().tween_property(node, "rotation_degrees", original_rotation + rot, duration / times) + tween.parallel().tween_property(node, "scale", scl, duration / times) + tween.tween_property(node, "position", original_position, 0.05) + tween.parallel().tween_property(node, "rotation_degrees", original_rotation, 0.05) + tween.parallel().tween_property(node, "scale", original_scale, 0.05) + TweenManager.track(node, Animations.JITTER, tween) + return tween + +## Alternates between squash and stretch repeatedly, like jelly wobbling. +func jelly(node: CanvasItem, duration: float = 0.6, amount: float = 0.3, cycles: int = 2) -> Tween: + TweenManager.stop(node, Animations.JELLY) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + for i in range(cycles): + tween.tween_property(node, "scale", original_scale * Vector2(1.0 + amount, 1.0 - amount), duration * 0.25 / cycles).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale * Vector2(1.0 - amount, 1.0 + amount), duration * 0.25 / cycles).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.2).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.JELLY, tween) + return tween + +## Rotates the node one or more full revolutions. +func spin(node: CanvasItem, duration: float = 0.5, revolutions: float = 1.0, clockwise: bool = true) -> Tween: + TweenManager.stop(node, Animations.SPIN) + var original_rotation : float = node.rotation_degrees + var direction = 1.0 if clockwise else -1.0 + var tween := node.create_tween() + tween.tween_property(node, "rotation_degrees", original_rotation + 360.0 * revolutions * direction, duration).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "rotation_degrees", original_rotation, 0.0) + TweenManager.track(node, Animations.SPIN, tween) + return tween + +## Scales in from zero with a slight overshoot. +func pop_in(node: CanvasItem, duration: float = 0.3, overshoot: float = 0.1) -> Tween: + TweenManager.stop(node, Animations.POP_IN) + var original_scale: Vector2 = node.scale + var original_alpha := node.modulate.a + node.scale = Vector2.ZERO + node.modulate.a = 0.0 + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * (1.0 + overshoot), duration).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.33) + tween.parallel().tween_property(node, "modulate:a", original_alpha, duration * 0.66) + TweenManager.track(node, Animations.POP_IN, tween) + return tween + +## Scales out to zero with a slight pull in before vanishing. +func pop_out(node: CanvasItem, duration: float = 0.3, overshoot: float = 0.1) -> Tween: + TweenManager.stop(node, Animations.POP_OUT) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * (1.0 + overshoot), duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", Vector2.ZERO, duration * 0.8).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN) + tween.parallel().tween_property(node, "modulate:a", 0.0, duration * 0.8) + TweenManager.track(node, Animations.POP_OUT, tween) + return tween + +## Skews the node along X and Y axes temporarily. +func skew(node: Node2D, duration: float = 0.3, skew_x: float = 0.5, skew_y: float = 0.5) -> Tween: + TweenManager.stop(node, Animations.SKEW) + var original_scale: Vector2 = node.scale + var target_scale := original_scale * Vector2(1.0 + skew_x, 1.0 + skew_y) + var tween := node.create_tween() + tween.tween_property(node, "scale", target_scale, duration).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "scale", original_scale, duration).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN_OUT).set_delay(duration) + TweenManager.track(node, Animations.SKEW, tween) + return tween + +## Fades out and scales down the node. +func vanish(node: CanvasItem, duration: float = 0.4) -> Tween: + TweenManager.stop(node, Animations.VANISH) + var tween := node.create_tween() + tween.tween_property(node, "modulate:a", 0.0, duration) + tween.parallel().tween_property(node, "scale", Vector2(0.0, 0.0), duration).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.VANISH, tween) + return tween + +## Quickly scales the node in with a slight bounce. +func punch_in(node: CanvasItem, duration: float = 0.15, strength: float = 0.3) -> Tween: + TweenManager.stop(node, Animations.PUNCH_IN) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * (1 + strength), duration).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, duration).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.PUNCH_IN, tween) + return tween + +## Moves the node back and forth rapidly. +## axis: Vector2.RIGHT for horizontal only, Vector2.DOWN for vertical only, Vector2.ONE for both. +func shake(node: CanvasItem, duration: float = 0.3, amount: float = 10.0, shakes: int = 5, axis: Vector2 = Vector2.ONE) -> Tween: + TweenManager.stop(node, Animations.SHAKE) + var original_pos: Vector2 = node.position + var tween := node.create_tween() + for i in range(shakes): + var offset = Vector2( + randf_range(-amount, amount) * axis.x, + randf_range(-amount, amount) * axis.y + ) + tween.tween_property(node, "position", original_pos + offset, duration / (shakes * 2)) + tween.tween_property(node, "position", original_pos, duration / (shakes * 2)) + TweenManager.track(node, Animations.SHAKE, tween) + return tween + +## Drops the node from above into its position. +func drop_in(node: CanvasItem, duration: float = 0.5, drop_height: float = 100.0, scale_distort: Vector2 = Vector2(1.2, 0.8)) -> Tween: + TweenManager.stop(node, Animations.DROP_IN) + var original_pos: Vector2 = node.position + var original_scale: Vector2 = node.scale + var original_alpha: float = node.modulate.a + node.position = original_pos - Vector2(0, drop_height) + node.scale = scale_distort + node.modulate.a = 0.0 + var tween := node.create_tween() + tween.tween_property(node, "position", original_pos, duration).set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "scale", original_scale, duration * 0.6).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "modulate:a", original_alpha, duration * 0.4) + TweenManager.track(node, Animations.DROP_IN, tween) + return tween + +## Drops the node downward and fades out. +func drop_out(node: CanvasItem, duration: float = 0.5, drop_height: float = 100.0) -> Tween: + TweenManager.stop(node, Animations.DROP_OUT) + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.tween_property(node, "position", original_pos + Vector2(0, drop_height), duration).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN) + tween.parallel().tween_property(node, "modulate:a", 0.0, duration * 0.6) + TweenManager.track(node, Animations.DROP_OUT, tween) + return tween + +## Stretches in one direction then snaps back with overshoot. +func rubber_band(node: CanvasItem, duration: float = 0.5, strength: float = 0.4) -> Tween: + TweenManager.stop(node, Animations.RUBBER_BAND) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * Vector2(1.0 + strength, 1.0 - strength * 0.5), duration * 0.3).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale * Vector2(0.9, 1.1), duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale * Vector2(1.05, 0.97), duration * 0.2).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "scale", original_scale, duration * 0.3).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.RUBBER_BAND, tween) + return tween + +## Rapidly cycles random rotations then snaps to original. Good for randomness feedback. +func fidget(node: CanvasItem, duration: float = 0.8, spins: int = 6) -> Tween: + TweenManager.stop(node, Animations.FIDGET) + var original_rotation : float = node.rotation_degrees + var tween := node.create_tween() + for i in range(spins): + var random_rot = randf_range(-25.0, 25.0) + tween.tween_property(node, "rotation_degrees", original_rotation + random_rot, duration / spins).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "rotation_degrees", original_rotation, duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.FIDGET, tween) + return tween + +## Slowly shrinks Y while expanding X, like air leaving a balloon. +func deflate(node: CanvasItem, duration: float = 0.6) -> Tween: + TweenManager.stop(node, Animations.DEFLATE) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * Vector2(1.3, 0.2), duration * 0.6).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN) + tween.tween_property(node, "scale", original_scale * Vector2(1.1, 0.15), duration * 0.2).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "scale", original_scale, duration * 0.4).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.DEFLATE, tween) + return tween + +## Slow random wobble on position and rotation. Good for status effects. +func drunk(node: CanvasItem, duration: float = 0.8) -> Tween: + TweenManager.stop(node, Animations.DRUNK) + var original_pos: Vector2 = node.position + var original_rot = node.rotation_degrees + var tween := node.create_tween() + for i in range(4): + var offset = Vector2(randf_range(-8, 8), randf_range(-5, 5)) + var rot = randf_range(-8, 8) + tween.tween_property(node, "position", original_pos + offset, duration * 0.25).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.parallel().tween_property(node, "rotation_degrees", original_rot + rot, duration * 0.25).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "position", original_pos, duration * 0.2).set_trans(Tween.TRANS_SINE) + tween.parallel().tween_property(node, "rotation_degrees", original_rot, duration * 0.2).set_trans(Tween.TRANS_SINE) + TweenManager.track(node, Animations.DRUNK, tween) + return tween + +## Squash on hit, bounce up, then settle. Classic landing feel. +func impact_land(node: CanvasItem, duration: float = 0.5) -> Tween: + TweenManager.stop(node, Animations.IMPACT_LAND) + var original_scale: Vector2 = node.scale + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * Vector2(1.4, 0.6), duration * 0.15).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale * Vector2(0.85, 1.2), duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "position:y", original_pos.y - 12, duration * 0.2) + tween.tween_property(node, "scale", original_scale * Vector2(1.05, 0.97), duration * 0.15).set_trans(Tween.TRANS_SINE) + tween.parallel().tween_property(node, "position:y", original_pos.y, duration * 0.15) + tween.tween_property(node, "scale", original_scale, duration * 0.2).set_trans(Tween.TRANS_SINE) + TweenManager.track(node, Animations.IMPACT_LAND, tween) + return tween + +## Big scale punch with chromatic color shift. Classic critical hit feedback. +func critical_hit(node: CanvasItem, duration: float = 0.5, color: Color = Color(2.0, 0.3, 0.3, 1.0), scale_amount: float = 1.6) -> Tween: + TweenManager.stop(node, Animations.CRITICAL_HIT) + var original_scale: Vector2 = node.scale + var original_color: Color = node.modulate + var secondary_color = Color(color.r, clampf(color.g + 0.8, 0.0, 2.0), 0.2, 1.0) + var tween := node.create_tween() + if scale_amount != 1.0: + tween.tween_property(node, "scale", original_scale * scale_amount, duration * 0.1).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "modulate", color, duration * 0.1) + tween.tween_property(node, "scale", original_scale * 0.85, duration * 0.15).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN) + tween.parallel().tween_property(node, "modulate", secondary_color, duration * 0.15) + tween.tween_property(node, "scale", original_scale * scale_amount * 0.69, duration * 0.1).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.3).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "modulate", original_color, duration * 0.3) + else: + tween.tween_property(node, "modulate", color, duration * 0.1) + tween.tween_property(node, "modulate", secondary_color, duration * 0.15) + tween.tween_property(node, "modulate", original_color, duration * 0.3) + TweenManager.track(node, Animations.CRITICAL_HIT, tween) + return tween + +## Scale up, glow, then settle. Celebratory upgrade feedback. +func upgrade(node: CanvasItem, duration: float = 0.8, glow: Color = Color(2.0, 1.8, 0.2, 1.0), scale_amount: float = 1.5) -> Tween: + TweenManager.stop(node, Animations.UPGRADE) + var original_scale: Vector2 = node.scale + var original_color: Color = node.modulate + var secondary_color : Color = Color(glow.r * 0.9, glow.g * 0.9, glow.b + 0.3, 1.0) + var tween := node.create_tween() + if scale_amount != 1.0: + tween.tween_property(node, "scale", original_scale * 0.8, duration * 0.1).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + tween.tween_property(node, "scale", original_scale * scale_amount, duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "modulate", glow, duration * 0.2) + tween.tween_property(node, "scale", original_scale * (scale_amount * 0.8), duration * 0.15).set_trans(Tween.TRANS_SINE) + tween.parallel().tween_property(node, "modulate", secondary_color, duration * 0.15) + tween.tween_property(node, "scale", original_scale * (scale_amount * 0.9), duration * 0.1).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "scale", original_scale, duration * 0.3).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "modulate", original_color, duration * 0.3) + else: + tween.tween_property(node, "modulate", glow, duration * 0.2) + tween.tween_property(node, "modulate", secondary_color, duration * 0.15) + tween.tween_property(node, "modulate", original_color, duration * 0.3) + TweenManager.track(node, Animations.UPGRADE, tween) + return tween + +## Unfolds the node by scaling Y from 0 to full size. +func fold_in(node: CanvasItem, duration: float = 0.3) -> Tween: + TweenManager.stop(node, Animations.FOLD_IN) + var original_scale: Vector2 = node.scale + node.scale.y = 0.0 + var tween := node.create_tween() + tween.tween_property(node, "scale:y", original_scale.y, duration).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.FOLD_IN, tween) + return tween + +## Folds the node away by scaling Y to 0. +func fold_out(node: CanvasItem, duration: float = 0.3) -> Tween: + TweenManager.stop(node, Animations.FOLD_OUT) + var tween := node.create_tween() + tween.tween_property(node, "scale:y", 0.0, duration).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN) + TweenManager.track(node, Animations.FOLD_OUT, tween) + return tween + +## Quick nudge in one direction then back, like pointing at something. +func point(node: CanvasItem, duration: float = 0.5, direction: Vector2 = Vector2.RIGHT, amount: float = 24.0) -> Tween: + TweenManager.stop(node, Animations.POINT) + var original_pos: Vector2 = node.position + var tween := node.create_tween() + tween.tween_property(node, "position", original_pos + direction.normalized() * amount, duration * 0.3).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "position", original_pos, duration * 0.7).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.POINT, tween) + return tween + +## Scale up, slight rotation, then settle. Celebratory reveal. +func tada(node: CanvasItem, duration: float = 0.6) -> Tween: + TweenManager.stop(node, Animations.TADA) + var original_scale: Vector2 = node.scale + var original_rotation : float = node.rotation_degrees + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * 0.8, duration * 0.1).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN) + tween.tween_property(node, "scale", original_scale * 1.4, duration * 0.2).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.parallel().tween_property(node, "rotation_degrees", original_rotation - 8.0, duration * 0.2) + tween.tween_property(node, "rotation_degrees", original_rotation + 8.0, duration * 0.15).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "rotation_degrees", original_rotation, duration * 0.15).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "scale", original_scale, duration * 0.3).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.TADA, tween) + return tween + + #endregion + + #region NEW +## Squash on press, bounce back with overshoot, then settle. +func press(node: CanvasItem, duration: float = 0.3) -> Tween: + TweenManager.stop(node, Animations.PRESS) + var original_scale: Vector2 = node.scale + var tween := node.create_tween() + tween.tween_property(node, "scale", original_scale * 0.8, duration * 0.24).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale * 1.1, duration * 0.45).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.30).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.PRESS, tween) + return tween + +## Scale + rotation wiggle on press. +func press_rotate(node: CanvasItem, duration: float = 0.3) -> Tween: + TweenManager.stop(node, Animations.PRESS_ROTATE) + var original_scale: Vector2 = node.scale + var original_rotation : float = node.rotation + var tween := node.create_tween() + tween.set_parallel(true) + tween.tween_property(node, "scale", original_scale * 0.85, duration * 0.33).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + tween.tween_property(node, "scale", original_scale, duration * 0.66).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT).set_delay(duration * 0.33) + tween.tween_property(node, "rotation", original_rotation + deg_to_rad(5), duration * 0.33).set_trans(Tween.TRANS_SINE) + tween.tween_property(node, "rotation", original_rotation - deg_to_rad(5), duration * 0.33).set_trans(Tween.TRANS_SINE).set_delay(duration * 0.33) + tween.tween_property(node, "rotation", original_rotation, duration * 0.33).set_trans(Tween.TRANS_SINE).set_delay(duration * 0.66) + TweenManager.track(node, Animations.PRESS_ROTATE, tween) + return tween + +## Moves toward a target point and snaps back. Magnetic pull feel. +func magnetic_pull(node: CanvasItem, duration: float = 0.5, target: Vector2 = Vector2.ZERO, strength: float = 0.4) -> Tween: + TweenManager.stop(node, Animations.MAGNETIC_PULL) + var original_pos: Vector2 = node.position + var pull_pos = original_pos.lerp(target, strength) + var tween := node.create_tween() + tween.tween_property(node, "position", pull_pos, duration * 0.4).set_trans(Tween.TRANS_CUBIC).set_ease(Tween.EASE_IN) + tween.tween_property(node, "position", original_pos, duration * 0.6).set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.MAGNETIC_PULL, tween) + return tween + +## Shake left-right — denial, wrong answer, access refused, refusal/no gesture. +func headshake(node: CanvasItem, duration: float = 0.5, amount: float = 8.0, times: int = 3) -> Tween: + TweenManager.stop(node, Animations.HEADSHAKE) + var original_rotation : float = node.rotation_degrees + var tween := node.create_tween() + for i in range(times): + var dir = 1.0 if i % 2 == 0 else -1.0 + tween.tween_property(node, "rotation_degrees", original_rotation + amount * dir, duration * 0.3 / times).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN_OUT) + tween.tween_property(node, "rotation_degrees", original_rotation, duration * 0.25).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) + TweenManager.track(node, Animations.HEADSHAKE, tween) + return tween + #endregion + +#endregion diff --git a/addons/TweenFX/TweenFX.gd.uid b/addons/TweenFX/TweenFX.gd.uid new file mode 100644 index 0000000..0eaf7cf --- /dev/null +++ b/addons/TweenFX/TweenFX.gd.uid @@ -0,0 +1 @@ +uid://d2n10rw2dnx8o diff --git a/addons/TweenFX/TweenManager.gd b/addons/TweenFX/TweenManager.gd new file mode 100644 index 0000000..fba4725 --- /dev/null +++ b/addons/TweenFX/TweenManager.gd @@ -0,0 +1,43 @@ +## Internal tracking system for TweenFX. +## [br][br] +## Manages active tweens per node, handles cleanup when nodes are freed, +## and provides stop/query methods. Not intended for direct use — +## access through [TweenFX] instead. + +static var _active: Dictionary = {} # { node: { TweenFX.Animations.X: tween } } + +static func track(node: CanvasItem, anim: TweenFX.Animations, tween: Tween) -> void: + if not _active.has(node): + _active[node] = {} + if not node.tree_exiting.is_connected(_on_node_exiting): + node.tree_exiting.connect(_on_node_exiting.bind(node), CONNECT_ONE_SHOT) + _active[node][anim] = tween + tween.finished.connect(_on_tween_finished.bind(node, anim), CONNECT_ONE_SHOT) + +static func stop(node: CanvasItem, anim: TweenFX.Animations) -> void: + if not _active.has(node) or not _active[node].has(anim): + return + _active[node][anim].kill() + _active[node].erase(anim) + if _active[node].is_empty(): + _active.erase(node) + +static func stop_all(node: CanvasItem) -> void: + if not _active.has(node): + return + for tween in _active[node].values(): + tween.kill() + _active.erase(node) + +static func is_playing(node: CanvasItem, anim: TweenFX.Animations) -> bool: + return _active.has(node) and _active[node].has(anim) + +static func _on_tween_finished(node: CanvasItem, anim: TweenFX.Animations) -> void: + if not _active.has(node): + return + _active[node].erase(anim) + if _active[node].is_empty(): + _active.erase(node) + +static func _on_node_exiting(node: CanvasItem) -> void: + _active.erase(node) diff --git a/addons/TweenFX/TweenManager.gd.uid b/addons/TweenFX/TweenManager.gd.uid new file mode 100644 index 0000000..d1a6a86 --- /dev/null +++ b/addons/TweenFX/TweenManager.gd.uid @@ -0,0 +1 @@ +uid://bc8i1qm1d8hrv diff --git a/addons/TweenFX/icon.png b/addons/TweenFX/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f24cdb82eb53c84f93fc62db33f24a896440874c GIT binary patch literal 9399 zcmV;oBuLwdP)>Dx0l&_uRp)N&zb3+x!;|+b2_U% zbI$qh_wRgb?X`aE&t98FL}(A`nYaHsahiyyRNqsYh*Bb&%KJ>jiKuMjcnL8PB_iVb z*}j+e?4OhWP5gU;?`2}cauK$eRdFQ?vuD$CTGVDX$d3L|%ePn(i$xD3%QXfNm zFCTbeB3XzgASxlUQoW<>cbMuqN$<36Yg-bHRJQN004xhF&J6pf40L5YOXG0) zCkgp8(rrDHlL`_t#r`hJ=*IewnOl)UQE{u)cT$yjIH!&zj zFM4mu#Y565o2Yi z?S1f*Fj3wp9^iOJRR~B~V2o>{+|;vdJ=6?mH-R7@o$W|*W@XR^)G?Et&8CTxpQ)*C z(L2b)HOMtX0wIX=a3@}Ae+7U zd|ZXVD!0#B$Khxq7G=E&>ZJRNiGXB-Cf;_z1DgL}}BQnM@0)ncxXThg>6wkNgD~Pdl(df20XTj8XP+8G3F9T`d73@r`UO@=SUYmeS%*6y`MP6JrLLE5;3uLZ1us$x{5X%HSoO+z+ z=D-9eJJUIQ3@`)uki$eU?87ihWngz$@8noMgKB30j_k%^0k}yW1Vtky9hBT-6Hp&& z`9BGz+z@|uCN$=kP=Kf%a7Y`~0Yt%EGXXj4Lnv-u zW*_<0hD+dr<{}P^gcu5|IS>!qz<&N<3E~Ih%pnNP7?To=VuO#SrFu9QR(){=Z?VGU z!WD)icgL!@J30^*`~CF-a?=1k-YXAvsS)A46!51WAFBW;KbgTRP*m3o536w%s~3ihNzle=&bcQHo{WN~NPBH%51?FEqO`epFaQrldg zPekAvZzE{x!6E|wxiBqN6NqmVSM>zy7}0hfv;{&)3>ooGuOO+FpPbp~Tw)|}1dOp4 z#wOao%RXZOl3dk1D^n}i$>JYeQFA30%2@+4i9A}k6+Oq`fqrg6klis1miF-ian+7N zm<(`_I!zE>0Szo&^gRqoA3j3B7|y4CGaZ6{#r_IFwf#+DvN=Bm2(*|9~o12JBS~Ww9!Y7E=-Lx^-@EF+lcWy^8LaKRbFT-rl-7T%@;T?RU=ejNZ`n^#|WfD@;Le> zgmf!tvp^QHPXLDqVen|tcvBw_sBj53kclhT=AAR&h z?0?gn-b62X$xBZ4T)6#8wELLw03!E4xi(-hL8cv=iNNr%YLn;F01rR>Fn#J%pSreR zPeh;p{O6rHcrM(2E%fA*Ptv{j-s?x=&tT?jK5wBXo_NBA^R&)|+pk2sj(Pgsf6|TO zzAg~!2hC;VPGe-)_jxtIefQl*?|=XMx3)j~?6dT_&wb9n@7kx(i(mZWt9V@N(>ve! zPP+Z}+pp@pFM837c5YwuTqhw6UttAchWG~}g?2}c@I0j*byTh=@m;)&wwnbterxiW;5xQjnV@h7H{qEy}DfmYGH_X2P^ zrk-K&EN&R?QL(XFWM2` z*hNuUC|$y+uP$WxFSgK7s=D_Au#d!=Cy=i2BPM{6Pb^!M`Bq%MU6guD0L~Z{4fA|a z&8QQKqz?voMT3`q-hn~$N7~{LTlwb#wJY)j%&FTgo{`Sj= z7O9mxva~us$>i^{aBTvTv(61!m~!U&y_SXRXUVDly}ffS6s>ayq`iyi0~D*;;dtj# zMVyFPUnx#VcKwvK@H6*y^lbHEP{Z2_3^`^L>E2tZ0wKew0dCv|(`GNU-xdcwr*d*NvLUPlyX7*PvJ&JBd-g+$tS zs@pQEz5# zsr3hn?^%T**H>Y5FC0=wFso1$<|E>c1`&|t02_Rxe7t;Pq66c6{tu5%OD7S z4>1&m(Q`}I2y0o4p97={~gBsO7K znim4vpxFPc!mtj72|`S=TLUcJcj}@B%l-%exjA4r2cjl{bk=W&{;Niy+DMA09NP>d zaA1P+J+Wzm+`I*2ym|^|4r)D~ph*z-5Z1x~BSU+0Fk%AP(gHm;*fT0FVqv_v7Et>? zjov|d~Gq@{+1X4qPVN*W})*AR0|+J$e|HdAwB;#lSd$k+m{{KU=IbL(1oH2 zYGdfo0F03^QVRd3=raHf*3)YJ}j;Q%sVJdCyNnSoL~*AW@Z^o zf$TI5J>VP7#GaV|qzh;c+$^9Lhyak82n!UsXTSy?a~D4#Hz)dF%{xF~=o-LW#HIyS zp}e>dL>O2)-@gwE^;JY+E@*!RpwNX9F?1|IohGOzLBU}H^-rT$pjyFAfJF=~Mv&A! z^nemX3?-{3&;WZKAfvy1l>1n#0D z1dYkO6A+qRrxao0q%NR)32F{P8$cex03w(GjL@}w^-84|#{Bx)>@){4MZCu)W5VbK zBLL*Vq9z190rQ8|V{G&@xRS}uL57$@2ns_O*@Z)M3ewr=708PnwoQQvLChc?a|V6< z-~}ZB1PP?k6rd+SIO@5jkqs;+)d0;!45r(@#E~#!2p)xJaB`|);P z0Ep%dyx?jA4?lbt(X4Z0Io{d&`EdjGU7=jrwg_ckLxPD*p~s{}C$-;D(xy_{jU3vz zNo`J@S97{7sl?oMm+RWswH+oX8qs6BIzguSyWjjNnmN(by{6h^th^`vp7g)=3Fn+> zmCN0Kzsiq0O*;JDm$y-09>^4pn`DP=whm%07!@A0ishnxYooE+Y>KOSFKWM5l+`~L zhNtEL)O=KFTA5bU042SQ9q+39ifdPF2>~vDgJok(^F{(W!gK`x)IA!lyAl-ydpvzp z#Is3>pZ8D zRjj!V=tfvE%>vBFD35Cb8k$)X&5O8_QuPpRC(8ZK)@9M}Jprh&87F7Ew(Rf^?x`cb z{^&*TbWvb7DP|UHEf)=-cMS*=imZ=5reU-q)jH7aNXfNLeVBvwOhD^xC{ce%c6#e@ z4(lJ0HMq7RD=xmXJ%?h)DzlSxgJJPAYY`;;z~l`G)=G1(PltbeUod}Ys)E8?M`-5G z_(wkt#qrEmi>f&QJd02+RlubpIcWe`yG<6efRnUON^LD9Z7ZGFo0s-FftqXMmt0g6 zm~c0doHuX`dsoFJDr^b$OnZ)OAv7&NZcWP0AoD-@>dJg!0Wg$Zn0rbMtqZwP6Jx%u z8X}?{#iarL&TIhCQ&r5QZDvUYYo$O?!5-GVw8se zThSIKv3eP-;P9j^=lo8K2JmjRvZdSV{Y@M{cL0X$YanHsH$*!|g9QpGqSv|kxQjJN z7X9Jg9`)?d;h(;~soqK9X}Q@=Rw1CFj-H!8-L-HX$F_Y|OD<+bHQ3AIn837#&&AE! z-J6q|&y!OrGq3AfWzngjXy5>nCo=`qzmuWH0s?c-zaIZ*myO16u1O8YIBqh}jsP6~ z*&9hFo%$ha#~6_RoCXIPmwmHGXf4Erc`LCpJE$g(|v zaR3ndQRXH>%N3E%_Yd_)A#C9;P|C6JW0NT}LwPl4xy&|Vn~Ijrp@U^1xe0_}`fkyS zKHQ;k0E>$ZxwYHX)czwV6>_C8SMSUVIt~|)+;_K z;@9e*jc5?37lP!AO^7cx(YyhzL(JicwYi5YEwR9pF z(9E5{&PO#85`_u^3c+@2qrYXm7DPq5Amfd+07rlOfCgV!12H;cVeKClbnjD5h`u6%!{?ae${c%&R%8|kd z)@YomV^dRQ`r$s8uS`dzeK%!UP+v~$c|M+pe36M+Rx(8-})0+ey<6G0z|fTl=aT5D%cb^@LZ?Ls+eH$;vfV8`a=k= zYf-^hAJi}_w^5hGwN=Ax;0^&$4HRz~K`;khs@4_{%yjU3Pwl*gQdv~Y0crw?qpP|% zMC~yGSutm-gS4caGi#(XWVTrab5@FpTsAFOFSe`{yE&*DU}r2xfuV!naTl>j(^x%m ziuCmdW2kxbL+1i6+L6Ol*Ay6_F$1Mn6S)kFInD4CS?J)yPh9bLRCDmbm$?VjXAr|L z>O!=uxy%-%lUOZGKxJpk5$LZgF^Gk=0>G-2+tKqSK3@+GEin4Ydh-&iYP#9Cf3AlK z_~wH><54ILvk1rEvf_dIlNuIqwy=8k^^eH|xI8J~d*oZkx}{QHW|+VPZR=6!GfEVT zm!6!4_@A_8;%do~>39OaPCeN(~|yCa~wK_JwT}dQ9Y$HNdxk z`F1H(@43wdtgf&-=eizT`JT1*&li)lAWk_>r-P~R9K7!vS9NO@6BO?NR_i2q(D-33 zZ@FbHTVYOkX=&RdgH_X$X7s&)MdJhWB{_gl5gsdat}=Vm`JDEH1V`X$(zhSnie7bs z0I{4J11QxvUZ80vfCiPp>iVh;SO5IrxBlgten>M17bEg!zB=4u{N?0y$5*dTNUucc z5+BedIZwqD6m4*c&eM^cEBKH$G|`dFbR<)am24CqE?Ov3Qpxr@6?y_}zG(o=Y}w2I zW;Opf@k5zy+k6tBRR&i_`I?!JLJ*Cs$mb$r#c}B4vqSTdoQDCTqrnRd23;mgsD2da z(@+CXKG>gsh|hE`I|MiURx*S=C({NrxQA`OgJ1i~Dz_Y%fB~syeN}T%-;=9-GzDwX(Nhn&gX4r|fQIjA z9^l>P|F`*ms*bs-{2Di(hz@>rUFI7Vb0F5PrZY{~m$}EGxnO`GalgOkX*~I6E*5pX zb>Ed#+y6cFCRi>xY4VD<&COWq1Th@DC)-t8W+X;p35QNZ=YRPh*SYD-P??MPqem{P zDJYlbzUbnNP{jbA2eyJpzt_<9zRWuM8Hfo^NY6d_3w3e|shDNus3$NSUhlvjD1d2j z5vc`>JU38Q%6jXUuglZF(3u0FR!?`fXud=T0RR;QurgW32d>mbgIAdI{_K;lp{a!8 z{8~|HnsgQ$kM}Ypt9ELIK?v$B-nV|~x-!5MNDHkqQdXw-9wKje=Q|p-}~lIQ?dlPX(02|z%3=s-v`d)@$%6W<8oNw^=E(L z>W!j#L+2X{-S0=n+sF^j3j%=A4j+^L?HdCys$!e`rBY`xkc>gH6I0K%H!``?i zXcPA9s`%&bKAo)IwNi1>MwI^OqmOQ(`6r%uVrx12U7pHmuI)Lu$z`mpiGl!U0HAEs z25nJA`}_9Ied6)A&^b8|C>`tuXae^tF$2jq-4*Jb>)X^#^ESwH9_k3If&I$tx4#&dBlx3`Vg<@+fz^++Cspj)gFQ^6$kWA}dj zL`?d@4}Ng0#hrJl>NV);r=MQ^oL5V2`Y2Cc-@oW44*+zi9m2$nOl#YJ=ds_Qb0x6U zje7L&wHn7JpA12quF$m81Onfis`&9&eEY;d{zD)7(6RR0rK+!%inlSU@`oROm>zoQ zq1CT-H8cmviga3e&Kt|Q*sK?@2_C&O3_wI5c>H~I-ik}iLx4`49%pb(KyCF+3p(b0 z`o5poA6j-{`H5Gqza;w$m1ds{PXac&Ei1e!INPQkZ-ISryDeBm3e`m7|1#Q(w$*L^ z5=zEg#GPQY&9VB)SN+EeooB0(b}rJ)l#257Q`SxCpD>a5zZ&-zErVUR~V+bYZ8-kic?eA13L|=UMcUS%KB|cv@ z-1EHFP|3v$r~?UJ?|ILAwys^gfN{Umq}ltwSrWbAfvT=s^I2;MVR<4Mh9~#M&#{OS zCUEdK2>ZD#)7Z3p?(o9s2HyMHvzbr7*-1g*Fr!^KK69c)W=|3>8l17|VS)vu0`}gr zi#7)j6Zp`;fxx%Nx@mMUUi)*mn15Q7+`;!3)>o@ZD40N++Aii`v668)Po*Y6i}#?g5-2jz86&A>UjRA(K{{$5JYyBSEOmgDDdKIRwKa+ew()%`BhvdbKe z=PKUAS~NGCZ=>EEZR(KLC!AkxUD=UoF}bjc%x;YpBX2UQb1_=Z~} z|FmfiAJ5uLgz6`=%{JMdnh-2lEHuo$j49Y44CeZwU>Kf&axl05ywI<_ab3W7i+0l- zewP3cGbXA@U`XNBQmt86*I(_)J(>QczgT?XOsEF(K$GI*NNt?3df^= zDN=pBK&NQ-eOm9uC=L-wTG+w}jIFd3V~96XpfEdbQkZ`8{^K=gxJB#G>>S#WaAI8@ z#7#oyA*d$6sUg@qT4X!EPng?>;FIp~zWe|A7F(|~%{~jnftoSd*10j`zEeV4D%tA- zEM{+zf@4krD*2%sNudwl|AkZi#;gA&6N7!fsMNdjIE7?FZhXD-(DDMwXm!t6v2(mHFNfAax^o;kip5V)S1Kf=7Cc z3H2Y{|Cw7Xx`8zJd00;YHfHAxgB^r~0W3;P!9o`icV(M!TIU^hjdbV(kG-GH^C6w5 zAGJ`C9BQMQOLUIQ_wv4}T?)?8qMzG>ho#mKUz7GMEL~sfcjh|vY%X2$k}ij*%j1>* zW?K%AV?n$`tpDn?G`YG$)0@yOOu#6U~X;tJ?p1_zg7~l z3Y3KV0Qm-J4&iwS2o}}z_5BG5HO=UH4mk$fEUB&WBOMkAX->M%=2>j(vL?;;jJm)) zVL^uiLDvQ;OoVF*Ys=9NS!`YbgcPu*k04ddu3a!9i1YvYyn#WK_NTsQ5w@@EQpp50 zhC(j9i_dPhb6W(IKm=}vRS~b9w9D&Q!TJ{a000DXNklO$}CyCCQL)6hv?2jP%wgiFkeWjT-IMcVz+K%(K zXOD|3WH1rKq6x<~$|@H2WqzC83-NP?PM9|TcdRqdRfOmqz_#tH~+JsfigD<(?2Ea^!@tUI@gX`nYm`ZOJ z7_^0%67M9+wxm^8Pf*Lt2xJB|3%HLs`UJi=#bB-3aVJst(IOBUCs4eKBiSuo(v-9= zgNLqT=}B_R^_XXZW`CGIz(D#1obGO9a5Qi*m7R78gG9hc`+b->SghTQ3qoKIo0jgO zW(n=kR`53eJxo*E?Z_8&LLqQi;xa75t2O)wh6O>8rg1+&53C8R4Q3$5dgEG=9FkwUw*IA_1Snt)8j?=TlJ zlk=OW?YW72N^`8Hf~W_FN^T+B&NJvsyE+~14;Mnm{&@!`pibVx1Tca^5C&N0K9+-t z>j%4FAuI@BjS46B))i76`^w%kpEREm9a*@ob;liZ9fE;h1uoxCkfnc!^=F}&1O$zT zRPqqaiFeU#qI51`w?czygf8%e6J2vJ-{XW-GH{S>IYhuR`%AO+1h#?>Uq*>-d049e z<)O0&3@HSPou3!;4eMgYY!O6Ttu%!YK!1Wbk6p=>Jj@~Yz(2qYkeXf|xizVv5CXyX zt$WV_jQ5;8i64R>HUYPPQmA&(8?Xo8xrq$k0JTMpEL3csfv#U~*Iy*k5?i4LLnjs= z=&G1dfZ?9C>-@no*x&>cQ2Q_}X#$C@ZOv93%A3~# xNCVAep^L$7?W~o18_}9>OS3rbaU6h%{vQ-#15Aa-YO(+T002ovPDHLkV1hMj#O441 literal 0 HcmV?d00001 diff --git a/addons/TweenFX/icon.png.import b/addons/TweenFX/icon.png.import new file mode 100644 index 0000000..919c393 --- /dev/null +++ b/addons/TweenFX/icon.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chf2ss61jydw3" +path="res://.godot/imported/icon.png-1df28cd6ae5654ad60ac96bf24b7c782.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/TweenFX/icon.png" +dest_files=["res://.godot/imported/icon.png-1df28cd6ae5654ad60ac96bf24b7c782.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/addons/TweenFX/plugin.cfg b/addons/TweenFX/plugin.cfg new file mode 100644 index 0000000..8a0edd8 --- /dev/null +++ b/addons/TweenFX/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] +name="TweenFX"+ +icon="res://addons/TweenFX/icon.png" +description= "A simple, juicy tween animation library for Godot" +author="EvilBunnyMan" +version="1.2" +script="plugin.gd" diff --git a/addons/TweenFX/plugin.gd b/addons/TweenFX/plugin.gd new file mode 100644 index 0000000..3e05128 --- /dev/null +++ b/addons/TweenFX/plugin.gd @@ -0,0 +1,10 @@ +@tool +extends EditorPlugin + +func _enable_plugin(): + add_autoload_singleton("TweenFX", "res://addons/TweenFX/TweenFX.gd") + print("[TweenFX] Enabled") + +func _disable_plugin(): + remove_autoload_singleton("TweenFX") + print("[TweenFX] Disabled") diff --git a/addons/TweenFX/plugin.gd.uid b/addons/TweenFX/plugin.gd.uid new file mode 100644 index 0000000..8523b4a --- /dev/null +++ b/addons/TweenFX/plugin.gd.uid @@ -0,0 +1 @@ +uid://wu3r36bvv8u diff --git a/core/game_menu/arrow_button.gd b/core/game_menu/arrow_button.gd index ee19c1f..96a47d9 100644 --- a/core/game_menu/arrow_button.gd +++ b/core/game_menu/arrow_button.gd @@ -1,10 +1,8 @@ @tool -extends Control +extends Button class_name ArrowButton -signal on_pressed - @export var image: Texture: set(value): image = value @@ -24,6 +22,18 @@ func _ready(): $%Texture.flip_h = flip_h -func _on_gui_input(event: InputEvent) -> void: - if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: - on_pressed.emit() +func _on_pressed() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.PUNCH_IN): + return + TweenFX.punch_in(self) + + +func _on_mouse_entered() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.BREATHE): + return + TweenFX.breathe(self, 1) + + +func _on_mouse_exited() -> void: + TweenFX.stop(self, TweenFX.Animations.BREATHE) + scale = Vector2(1, 1) diff --git a/core/game_menu/arrow_button.tscn b/core/game_menu/arrow_button.tscn index cb46358..d843c36 100644 --- a/core/game_menu/arrow_button.tscn +++ b/core/game_menu/arrow_button.tscn @@ -2,37 +2,44 @@ [ext_resource type="Texture2D" uid="uid://cm7fok7lhrano" path="res://core/game_menu/assets/page_1/freccetta.png" id="1_vbu0v"] [ext_resource type="Script" uid="uid://3uxuhvua1036" path="res://core/game_menu/arrow_button.gd" id="2_xq7pl"] -[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/game_menu/hoover_tween.tscn" id="3_hu4cn"] -[node name="ArrowButton" type="Control" unique_id=1696751730] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_xq7pl"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_hu4cn"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_fttf3"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_05bm2"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_kc324"] + +[node name="ArrowButton" type="Button" unique_id=579258112] custom_minimum_size = Vector2(101, 124) -layout_mode = 3 +anchors_preset = -1 +anchor_right = 0.052604165 +anchor_bottom = 0.11481482 +pivot_offset_ratio = Vector2(0.5, 0.5) +theme_override_styles/normal = SubResource("StyleBoxEmpty_xq7pl") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_hu4cn") +theme_override_styles/hover = SubResource("StyleBoxEmpty_fttf3") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_05bm2") +theme_override_styles/focus = SubResource("StyleBoxEmpty_kc324") +script = ExtResource("2_xq7pl") +image = ExtResource("1_vbu0v") +metadata/_edit_use_anchors_ = true + +[node name="Texture" type="TextureRect" parent="." unique_id=91599097] +unique_name_in_owner = true +layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -pivot_offset = Vector2(0.5, 0.5) -script = ExtResource("2_xq7pl") -image = ExtResource("1_vbu0v") - -[node name="Texture" type="TextureRect" parent="." unique_id=91599097] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.47369793 -anchor_top = 0.4425926 -anchor_right = 0.5263021 -anchor_bottom = 0.5574074 -grow_horizontal = 2 -grow_vertical = 2 pivot_offset_ratio = Vector2(0.5, 0.5) mouse_filter = 2 texture = ExtResource("1_vbu0v") -metadata/_edit_use_anchors_ = true -[node name="HooverTween" parent="." unique_id=2115829120 node_paths=PackedStringArray("detector_node", "visual_node") instance=ExtResource("3_hu4cn")] -detector_node = NodePath("..") -visual_node = NodePath("../Texture") - -[connection signal="gui_input" from="." to="." method="_on_gui_input"] +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/core/game_menu/audio_option.tscn b/core/game_menu/audio_option.tscn index e3a3953..c6140cd 100644 --- a/core/game_menu/audio_option.tscn +++ b/core/game_menu/audio_option.tscn @@ -32,6 +32,7 @@ texture = ExtResource("2_vudub") stretch_mode = 5 [node name="HSlider" type="HSlider" parent="." unique_id=1286896253] +process_mode = 3 layout_mode = 2 theme_override_icons/grabber = ExtResource("3_vf41c") theme_override_icons/grabber_highlight = ExtResource("3_vf41c") diff --git a/core/game_menu/biome_picker.gd b/core/game_menu/biome_picker.gd index 1a9c42f..a6abcd4 100644 --- a/core/game_menu/biome_picker.gd +++ b/core/game_menu/biome_picker.gd @@ -1,5 +1,5 @@ @tool -extends Control +extends Button @export var locked: bool = true @export var image: Texture: @@ -13,10 +13,16 @@ extends Control func _ready(): if image != null and has_node("%Texture"): $%Texture.texture = image - if has_node("%TextureRect") and has_node("%HooverTween"): + if has_node("%TextureRect"): if locked: $%TextureRect.show() - $%HooverTween.queue_free() else: $%TextureRect.hide() + TweenFX.breathe(self, 1) + + +func _on_pressed() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.PRESS_ROTATE): + return + TweenFX.press_rotate(self) diff --git a/core/game_menu/biome_picker.tscn b/core/game_menu/biome_picker.tscn index 9f0752d..100bfb5 100644 --- a/core/game_menu/biome_picker.tscn +++ b/core/game_menu/biome_picker.tscn @@ -1,51 +1,82 @@ [gd_scene format=3 uid="uid://wckwvvnk8bt4"] [ext_resource type="Script" uid="uid://c7q3d823b1v1h" path="res://core/game_menu/biome_picker.gd" id="1_jqji0"] +[ext_resource type="Texture2D" uid="uid://dc0sl04wem136" path="res://core/game_menu/assets/page_1/color_main_biome.png" id="2_8s4h5"] [ext_resource type="Texture2D" uid="uid://dj6pt25w5i4jq" path="res://core/game_menu/assets/page_1/lucchetto.png" id="2_jqji0"] -[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/game_menu/hoover_tween.tscn" id="4_8s4h5"] -[node name="BiomePicker" type="Control" unique_id=52821564] -layout_mode = 3 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_jqji0"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8s4h5"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ntcky"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_aj0ly"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_sqe3j"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0slqm"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_idpud"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_7dp31"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_le5rt"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rs8ck"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6gubq"] + +[node name="BiomePicker" type="Button" unique_id=913478047] +custom_minimum_size = Vector2(161, 343) +anchors_preset = -1 +anchor_right = 0.08385417 +anchor_bottom = 0.3175926 +offset_right = -153.0 +offset_bottom = -335.0 +pivot_offset_ratio = Vector2(0.5, 0.5) +theme_override_styles/normal = SubResource("StyleBoxEmpty_jqji0") +theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_8s4h5") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_ntcky") +theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_aj0ly") +theme_override_styles/hover = SubResource("StyleBoxEmpty_sqe3j") +theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_0slqm") +theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_idpud") +theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_7dp31") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_le5rt") +theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_rs8ck") +theme_override_styles/focus = SubResource("StyleBoxEmpty_6gubq") +script = ExtResource("1_jqji0") +image = ExtResource("2_8s4h5") +metadata/_edit_use_anchors_ = true + +[node name="Texture" type="TextureRect" parent="." unique_id=606844933] +unique_name_in_owner = true +custom_minimum_size = Vector2(161, 343) +layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("1_jqji0") - -[node name="Texture" type="TextureRect" parent="." unique_id=606844933] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.47161457 -anchor_top = 0.39027777 -anchor_right = 0.5283854 -anchor_bottom = 0.6097222 -grow_horizontal = 2 -grow_vertical = 2 pivot_offset_ratio = Vector2(0.5, 0.5) +texture = ExtResource("2_8s4h5") stretch_mode = 3 -metadata/_edit_use_anchors_ = true [node name="TextureRect" type="TextureRect" parent="Texture" unique_id=288045010] unique_name_in_owner = true layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -20.0 -offset_top = -20.0 -offset_right = 20.0 -offset_bottom = 20.0 +anchors_preset = -1 +anchor_left = 0.36645964 +anchor_top = 0.41690964 +anchor_right = 0.6335404 +anchor_bottom = 0.58309036 +offset_left = 1.5 +offset_top = 8.5 +offset_right = -1.5 +offset_bottom = -8.5 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 texture = ExtResource("2_jqji0") -[node name="HooverTween" parent="." unique_id=160227524 node_paths=PackedStringArray("detector_node", "visual_node") instance=ExtResource("4_8s4h5")] -unique_name_in_owner = true -detector_node = NodePath("..") -visual_node = NodePath("../Texture") -scale_amount = Vector2(1.05, 1.05) +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/core/game_menu/biome_selector.tscn b/core/game_menu/biome_selector.tscn index 40c1288..e6936ad 100644 --- a/core/game_menu/biome_selector.tscn +++ b/core/game_menu/biome_selector.tscn @@ -1,56 +1,60 @@ [gd_scene format=3 uid="uid://bc60gon7fmvbr"] [ext_resource type="PackedScene" uid="uid://dm3skv22c60tm" path="res://core/game_menu/arrow_button.tscn" id="1_16l2d"] +[ext_resource type="Texture2D" uid="uid://dqqnfnero7ckl" path="res://core/game_menu/assets/page_1/chooseyourbiome_text.png" id="1_wyms5"] [ext_resource type="PackedScene" uid="uid://wckwvvnk8bt4" path="res://core/game_menu/biome_picker.tscn" id="2_q1k23"] [ext_resource type="Texture2D" uid="uid://cin3kt42e6w3u" path="res://core/game_menu/assets/page_1/color_sx_biome.png" id="2_xjika"] -[ext_resource type="Texture2D" uid="uid://dc0sl04wem136" path="res://core/game_menu/assets/page_1/color_main_biome.png" id="3_0noye"] [ext_resource type="Texture2D" uid="uid://c3qcivnwuisju" path="res://core/game_menu/assets/page_1/color_dx_biome.png" id="4_0noye"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="6_hjy5b"] -[node name="BiomeSelector" type="HBoxContainer" unique_id=291322067] -offset_right = 700.0 -offset_bottom = 400.0 +[node name="VBoxContainer" type="VBoxContainer" unique_id=1692688717] +offset_right = 685.0 +offset_bottom = 418.0 + +[node name="ChooseYourBiomeTexture" type="TextureRect" parent="." unique_id=1769445385] +layout_mode = 2 +texture = ExtResource("1_wyms5") +stretch_mode = 3 + +[node name="Spacer" type="Control" parent="." unique_id=1648681786] +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 + +[node name="BiomeSelector" type="HBoxContainer" parent="." unique_id=291322067] +layout_mode = 2 theme_override_constants/separation = 0 alignment = 1 -[node name="ArrowButtonLeft" parent="." unique_id=1696751730 instance=ExtResource("1_16l2d")] +[node name="ArrowButtonLeft" parent="BiomeSelector" unique_id=1696751730 instance=ExtResource("1_16l2d")] layout_mode = 2 size_flags_vertical = 4 flip_h = true -[node name="HBoxContainer2" type="HBoxContainer" parent="." unique_id=1117886768] +[node name="HBoxContainer2" type="HBoxContainer" parent="BiomeSelector" unique_id=1117886768] layout_mode = 2 size_flags_horizontal = 3 theme_override_constants/separation = 0 alignment = 1 -[node name="BiomePicker1" parent="HBoxContainer2" unique_id=477354740 instance=ExtResource("2_q1k23")] +[node name="BiomePicker1" parent="BiomeSelector/HBoxContainer2" unique_id=477354740 instance=ExtResource("2_q1k23")] layout_mode = 2 size_flags_horizontal = 3 image = ExtResource("2_xjika") -[node name="BiomePicker2" parent="HBoxContainer2" unique_id=52821564 instance=ExtResource("2_q1k23")] -custom_minimum_size = Vector2(200, 400) +[node name="BiomePicker2" parent="BiomeSelector/HBoxContainer2" unique_id=52821564 instance=ExtResource("2_q1k23")] layout_mode = 2 size_flags_horizontal = 3 locked = false -image = ExtResource("3_0noye") -[node name="Texture" parent="HBoxContainer2/BiomePicker2" index="0" unique_id=606844933] -texture = ExtResource("3_0noye") - -[node name="TextureRect" parent="HBoxContainer2/BiomePicker2/Texture" index="0" unique_id=288045010] -visible = false - -[node name="HooverTween" parent="HBoxContainer2/BiomePicker2" index="1" unique_id=160227524] -always_active = true - -[node name="BiomePicker3" parent="HBoxContainer2" unique_id=1567545303 instance=ExtResource("2_q1k23")] +[node name="BiomePicker3" parent="BiomeSelector/HBoxContainer2" unique_id=1567545303 instance=ExtResource("2_q1k23")] layout_mode = 2 size_flags_horizontal = 3 image = ExtResource("4_0noye") -[node name="ArrowButtonRight" parent="." unique_id=1741162553 instance=ExtResource("1_16l2d")] +[node name="ArrowButtonRight" parent="BiomeSelector" unique_id=1741162553 instance=ExtResource("1_16l2d")] layout_mode = 2 size_flags_vertical = 4 -[editable path="HBoxContainer2/BiomePicker2"] +[node name="ContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("targets") instance=ExtResource("6_hjy5b")] +unique_name_in_owner = true +targets = [NodePath("../BiomeSelector/ArrowButtonLeft"), NodePath("../BiomeSelector/HBoxContainer2/BiomePicker1"), NodePath("../BiomeSelector/HBoxContainer2/BiomePicker2"), NodePath("../BiomeSelector/HBoxContainer2/BiomePicker3"), NodePath("../BiomeSelector/ArrowButtonRight")] diff --git a/core/game_menu/collectible_gallery.tscn b/core/game_menu/collectible_gallery.tscn index d3fe77c..764b721 100644 --- a/core/game_menu/collectible_gallery.tscn +++ b/core/game_menu/collectible_gallery.tscn @@ -2,6 +2,7 @@ [ext_resource type="Script" uid="uid://dq3qtcrdnikl7" path="res://core/game_menu/collectible_gallery.gd" id="1_67tug"] [ext_resource type="PackedScene" uid="uid://dp7dvfauh5rpx" path="res://core/game_menu/collectible_ui.tscn" id="2_or234"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="3_cvqb8"] [node name="CollectibleGallery" type="Control" unique_id=354419843] layout_mode = 3 @@ -46,3 +47,6 @@ layout_mode = 2 [node name="CollectibleUI6" parent="ScrollContainer/CollectibleGrid" unique_id=1566830281 instance=ExtResource("2_or234")] layout_mode = 2 + +[node name="ContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("runtime_target_parent") instance=ExtResource("3_cvqb8")] +runtime_target_parent = NodePath("../ScrollContainer/CollectibleGrid") diff --git a/core/game_menu/color_picker.gd b/core/game_menu/color_picker.gd index 78481a2..7de5759 100644 --- a/core/game_menu/color_picker.gd +++ b/core/game_menu/color_picker.gd @@ -1,10 +1,8 @@ @tool -extends Control +extends Button class_name TrainColorPicker -signal on_color_selected(color_picker: TrainColorPicker) - @export var image: Texture: set(value): image = value @@ -23,18 +21,31 @@ func _ready(): color = img.get_pixel(0, 0) else: color = Color.BLACK - - -func _on_gui_input(event: InputEvent) -> void: - if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: - on_color_selected.emit(self) + $%Border.color.a = 0 func select() -> void: + if selected: + return selected = true $%Border.color.a = 1 + TweenFX.press_rotate(self) func deselect() -> void: + if !selected: + return selected = false $%Border.color.a = 0 + + +func _on_mouse_entered() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.BREATHE): + return + TweenFX.breathe(self, 1) + + +func _on_mouse_exited() -> void: + TweenFX.stop(self, TweenFX.Animations.BREATHE) + scale = Vector2(1, 1) + diff --git a/core/game_menu/color_picker.tscn b/core/game_menu/color_picker.tscn index ac772ff..3abdb12 100644 --- a/core/game_menu/color_picker.tscn +++ b/core/game_menu/color_picker.tscn @@ -2,56 +2,74 @@ [ext_resource type="Texture2D" uid="uid://cdjwvwst3f10a" path="res://core/game_menu/assets/page_1/customizecolor-1.png" id="1_us0rx"] [ext_resource type="Script" uid="uid://crfw5whcjs0du" path="res://core/game_menu/color_picker.gd" id="2_323rd"] -[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/game_menu/hoover_tween.tscn" id="3_264kt"] -[node name="ColorPicker" type="Control" unique_id=409505029] -custom_minimum_size = Vector2(53, 53) -layout_mode = 3 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_323rd"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_264kt"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1folt"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_tcqrg"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_kbu6n"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_dk0pr"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_f16cj"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_s4jbd"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_2ocph"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_5386i"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6pmjh"] + +[node name="ColorPicker" type="Button" unique_id=1664685328] +custom_minimum_size = Vector2(60, 60) +anchors_preset = -1 +anchor_right = 0.03125 +anchor_bottom = 0.055555556 +pivot_offset_ratio = Vector2(0.5, 0.5) +theme_override_styles/normal = SubResource("StyleBoxEmpty_323rd") +theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_264kt") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_1folt") +theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_tcqrg") +theme_override_styles/hover = SubResource("StyleBoxEmpty_kbu6n") +theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_dk0pr") +theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_f16cj") +theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_s4jbd") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_2ocph") +theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_5386i") +theme_override_styles/focus = SubResource("StyleBoxEmpty_6pmjh") +script = ExtResource("2_323rd") +image = ExtResource("1_us0rx") +metadata/_edit_use_anchors_ = true + +[node name="Border" type="ColorRect" parent="." unique_id=1774696864] +unique_name_in_owner = true +layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("2_323rd") -image = ExtResource("1_us0rx") - -[node name="Border" type="ColorRect" parent="." unique_id=1774696864] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -30.0 -offset_top = -30.0 -offset_right = 30.0 -offset_bottom = 30.0 -grow_horizontal = 2 -grow_vertical = 2 -pivot_offset_ratio = Vector2(0.5, 0.5) mouse_filter = 2 [node name="Texture" type="TextureRect" parent="Border" unique_id=329703623] unique_name_in_owner = true layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -26.5 -offset_top = -26.5 -offset_right = 26.5 -offset_bottom = 26.5 +anchors_preset = -1 +anchor_left = 0.058333334 +anchor_top = 0.058333334 +anchor_right = 0.94166666 +anchor_bottom = 0.94166666 grow_horizontal = 2 grow_vertical = 2 -pivot_offset_ratio = Vector2(0.5, 0.5) mouse_filter = 2 texture = ExtResource("1_us0rx") +metadata/_edit_use_anchors_ = true -[node name="HooverTween" parent="." unique_id=160227524 node_paths=PackedStringArray("detector_node", "visual_node") instance=ExtResource("3_264kt")] -detector_node = NodePath("..") -visual_node = NodePath("../Border") - -[connection signal="gui_input" from="." to="." method="_on_gui_input"] +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/core/game_menu/game_menu.gd b/core/game_menu/game_menu.gd index e3e47af..34b9df0 100644 --- a/core/game_menu/game_menu.gd +++ b/core/game_menu/game_menu.gd @@ -1,7 +1,8 @@ extends Control @onready var tabs: Array[GameMenuTab] = [$%Tab1, $%Tab2, $%Tab3] -@onready var pages: Array[Control] = [$%Page1, $%Page2, $%Page3] +@onready var pages: Array[GameMenuPage] = [$%Page1, $%Page2, $%Page3] + func _ready() -> void: for tab: GameMenuTab in tabs: @@ -11,7 +12,7 @@ func _ready() -> void: func on_tab_pressed(index: int, disable_animation: bool = false) -> void: for page in pages: - page.hide() + page.hide_page() for tab in tabs: if tab.index == index: @@ -25,7 +26,4 @@ func on_tab_pressed(index: int, disable_animation: bool = false) -> void: else: tab.deselect() - pages[index].show() - -func _on_resume_button_on_button_pressed() -> void: - hide() + pages[index].show_page() diff --git a/core/game_menu/game_menu.tscn b/core/game_menu/game_menu.tscn index 1f94771..c4c3faa 100644 --- a/core/game_menu/game_menu.tscn +++ b/core/game_menu/game_menu.tscn @@ -17,17 +17,10 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +pivot_offset_ratio = Vector2(0.5, 0.5) mouse_filter = 2 script = ExtResource("1_57vaj") -[node name="Panel" type="Panel" parent="." unique_id=992567199] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - [node name="Tabs" type="HBoxContainer" parent="." unique_id=1745270897] layout_mode = 1 offset_left = 1138.0 @@ -84,7 +77,5 @@ unique_name_in_owner = true visible = false layout_mode = 1 -[connection signal="on_button_pressed" from="Pages/Page3/OptionMenu/VBoxContainer/ResumeButton" to="." method="_on_resume_button_on_button_pressed"] - [editable path="Pages/Page3"] [editable path="Pages/Page3/OptionMenu"] diff --git a/core/game_menu/game_menu_tab.gd b/core/game_menu/game_menu_tab.gd index b1b8dd2..0f6de57 100644 --- a/core/game_menu/game_menu_tab.gd +++ b/core/game_menu/game_menu_tab.gd @@ -25,6 +25,8 @@ func _ready(): func _on_gui_input(event: InputEvent) -> void: if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: + if is_selected: + return on_tab_selected.emit(index) func select(): diff --git a/core/game_menu/highlighted_photo.gd b/core/game_menu/highlighted_photo.gd index ac75b98..11d1258 100644 --- a/core/game_menu/highlighted_photo.gd +++ b/core/game_menu/highlighted_photo.gd @@ -3,16 +3,21 @@ extends Control @onready var photo: Photo = $%Photo @onready var panel: Panel = $%Panel + + func _ready() -> void: GameState.on_photo_highlighted.connect(_on_photo_highlighted) func _on_photo_highlighted(texture: Texture) -> void: if texture != photo.texture_rect.texture: show() + photo.scale = Vector2.ONE + TweenFX.fold_in(photo) photo.setup(texture) func _on_panel_gui_input(event: InputEvent) -> void: if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: + await TweenFX.fold_out(photo).finished photo.texture_rect.texture = null hide() diff --git a/core/game_menu/highlighted_photo.tscn b/core/game_menu/highlighted_photo.tscn index 6a8a9ce..7deb519 100644 --- a/core/game_menu/highlighted_photo.tscn +++ b/core/game_menu/highlighted_photo.tscn @@ -24,20 +24,14 @@ grow_vertical = 2 [node name="Photo" parent="." unique_id=201865221 instance=ExtResource("1_x7ou0")] unique_name_in_owner = true layout_mode = 1 -anchors_preset = -1 anchor_left = 0.3625 anchor_top = 0.14351852 anchor_right = 0.6375 anchor_bottom = 0.8564815 mouse_filter = 2 -metadata/_edit_use_anchors_ = true [node name="ColorRect" parent="Photo" index="0" unique_id=1208008621] anchors_preset = 15 -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 1.0 -anchor_bottom = 1.0 offset_left = 0.0 offset_top = 0.0 offset_right = 0.0 diff --git a/core/game_menu/hoover_tween.gd b/core/game_menu/hoover_tween.gd deleted file mode 100644 index 61449c9..0000000 --- a/core/game_menu/hoover_tween.gd +++ /dev/null @@ -1,44 +0,0 @@ -extends Node - - -@export_group("Settings") -@export var always_active: bool = false -@export var detector_node: Control -@export var visual_node: Control -@export var scale_amount: Vector2 = Vector2(1.1, 1.1) -@export var duration: float = 0.5 - -var hover_tween: Tween - -func _ready(): - if not detector_node or not visual_node: - return - - if always_active: - _start_tween() - return - - detector_node.mouse_entered.connect(_on_mouse_entered) - detector_node.mouse_exited.connect(_on_mouse_exited) - - -func _on_mouse_entered(): - if hover_tween: hover_tween.kill() - - _start_tween() - -func _on_mouse_exited(): - if hover_tween: hover_tween.kill() - - _stop_tween() - - -func _start_tween() -> void: - hover_tween = create_tween().set_loops() - hover_tween.tween_property(visual_node, "scale", scale_amount, duration).set_trans(Tween.TRANS_SINE) - hover_tween.tween_property(visual_node, "scale", Vector2.ONE, duration).set_trans(Tween.TRANS_SINE) - -func _stop_tween() -> void: - var exit_tween = create_tween() - exit_tween.tween_property(visual_node, "scale", Vector2.ONE, 0.2).set_trans(Tween.TRANS_QUAD) - diff --git a/core/game_menu/hoover_tween.tscn b/core/game_menu/hoover_tween.tscn deleted file mode 100644 index 4abaa61..0000000 --- a/core/game_menu/hoover_tween.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene format=3 uid="uid://dxun0jk5t0n6"] - -[ext_resource type="Script" uid="uid://ryxh3nm7ayvf" path="res://core/game_menu/hoover_tween.gd" id="1_gmaf4"] - -[node name="HooverTween" type="Node" unique_id=160227524] -script = ExtResource("1_gmaf4") diff --git a/core/game_menu/option_menu.gd b/core/game_menu/option_menu.gd index 23bf26c..983483f 100644 --- a/core/game_menu/option_menu.gd +++ b/core/game_menu/option_menu.gd @@ -1,16 +1,23 @@ extends Control -@onready var play_button: Control = $%PlayButton -@onready var resume_button: Control = $%ResumeButton +@onready var play_button: Button = $%PlayButton +@onready var resume_button: Button = $%ResumeButton +@onready var settings_button: Button = $%SettingsButton +@onready var save_button: Button = $%SaveButton +@onready var quit_button: Button = $%QuitButton -func _on_resume_button_on_button_pressed() -> void: - GameState.resume_game() +func _ready() -> void: + play_button.pressed.connect(_on_play_button_pressed) + save_button.pressed.connect(_on_save_button_pressed) + quit_button.pressed.connect(_on_quit_button_pressed) +func _on_play_button_pressed() -> void: + SceneManager.change_scene(SceneConfig.SceneName.GAME) -func _on_save_button_on_button_pressed() -> void: +func _on_save_button_pressed() -> void: GameState.save_game() -func _on_quit_button_on_button_pressed() -> void: +func _on_quit_button_pressed() -> void: GameState.quit_game() diff --git a/core/game_menu/option_menu.tscn b/core/game_menu/option_menu.tscn index 88ee16a..556dee3 100644 --- a/core/game_menu/option_menu.tscn +++ b/core/game_menu/option_menu.tscn @@ -6,6 +6,7 @@ [ext_resource type="Texture2D" uid="uid://cmhx3mscwrwft" path="res://core/game_menu/assets/page_3/save_button.png" id="3_vwpol"] [ext_resource type="Texture2D" uid="uid://cu8e7pl0y4owq" path="res://core/game_menu/assets/page_3/settings_button.png" id="4_8w45m"] [ext_resource type="Texture2D" uid="uid://v7e7467fkdec" path="res://core/game_menu/assets/page_3/quit_button.png" id="4_cd2sv"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="7_n7rb8"] [node name="OptionMenu" type="Control" unique_id=1055457221] layout_mode = 3 @@ -61,6 +62,5 @@ custom_minimum_size = Vector2(310, 100) layout_mode = 2 image = ExtResource("4_cd2sv") -[connection signal="on_button_pressed" from="VBoxContainer/ResumeButton" to="." method="_on_resume_button_on_button_pressed"] -[connection signal="on_button_pressed" from="VBoxContainer/SaveButton" to="." method="_on_save_button_on_button_pressed"] -[connection signal="on_button_pressed" from="VBoxContainer/QuitButton" to="." method="_on_quit_button_on_button_pressed"] +[node name="ContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("targets") instance=ExtResource("7_n7rb8")] +targets = [NodePath("../VBoxContainer/PlayButton"), NodePath("../VBoxContainer/ResumeButton"), NodePath("../VBoxContainer/SettingsButton"), NodePath("../VBoxContainer/SaveButton"), NodePath("../VBoxContainer/QuitButton")] diff --git a/core/game_menu/option_menu_button.gd b/core/game_menu/option_menu_button.gd index 7dcf811..064df73 100644 --- a/core/game_menu/option_menu_button.gd +++ b/core/game_menu/option_menu_button.gd @@ -1,7 +1,5 @@ @tool -extends Control - -signal on_button_pressed +extends Button @export var image: Texture: set(value): @@ -13,6 +11,19 @@ func _ready(): if image != null and has_node("%Texture"): $%Texture.texture = image -func _on_gui_input(event: InputEvent) -> void: - if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: - on_button_pressed.emit() + +func _on_pressed() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.PUNCH_IN): + return + TweenFX.punch_in(self) + + +func _on_mouse_entered() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.BREATHE): + return + TweenFX.breathe(self, 1) + + +func _on_mouse_exited() -> void: + TweenFX.stop(self, TweenFX.Animations.BREATHE) + scale = Vector2(1, 1) diff --git a/core/game_menu/option_menu_button.tscn b/core/game_menu/option_menu_button.tscn index 08bf5a9..0022b4a 100644 --- a/core/game_menu/option_menu_button.tscn +++ b/core/game_menu/option_menu_button.tscn @@ -2,17 +2,50 @@ [ext_resource type="Texture2D" uid="uid://b4nymq3n3468g" path="res://core/game_menu/assets/page_3/play_button.png" id="1_movd1"] [ext_resource type="Script" uid="uid://bbhe65f3517m8" path="res://core/game_menu/option_menu_button.gd" id="2_nghpi"] -[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/game_menu/hoover_tween.tscn" id="3_am666"] -[node name="OptionMenuButton" type="Control" unique_id=635721927] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_nghpi"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_am666"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_nxt2x"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_r4tfe"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1kmlt"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_51x11"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8eh6p"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_w4k7x"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_wra0p"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8dgkg"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ev2fk"] + +[node name="OptionMenuButton" type="Button" unique_id=600844315] +process_mode = 3 +custom_minimum_size = Vector2(302, 90) +anchors_preset = -1 +anchor_right = 0.15729167 +anchor_bottom = 0.083333336 +pivot_offset_ratio = Vector2(0.5, 0.5) +theme_override_styles/normal = SubResource("StyleBoxEmpty_nghpi") +theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_am666") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_nxt2x") +theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_r4tfe") +theme_override_styles/hover = SubResource("StyleBoxEmpty_1kmlt") +theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_51x11") +theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_8eh6p") +theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_w4k7x") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_wra0p") +theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_8dgkg") +theme_override_styles/focus = SubResource("StyleBoxEmpty_ev2fk") script = ExtResource("2_nghpi") image = ExtResource("1_movd1") +metadata/_edit_use_anchors_ = true [node name="Texture" type="TextureRect" parent="." unique_id=1177880405] unique_name_in_owner = true @@ -29,8 +62,6 @@ mouse_filter = 2 texture = ExtResource("1_movd1") metadata/_edit_use_anchors_ = true -[node name="HooverTween" parent="." unique_id=160227524 node_paths=PackedStringArray("detector_node", "visual_node") instance=ExtResource("3_am666")] -detector_node = NodePath("..") -visual_node = NodePath("../Texture") - -[connection signal="gui_input" from="." to="." method="_on_gui_input"] +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/core/game_menu/page.gd b/core/game_menu/page.gd new file mode 100644 index 0000000..a6b83a5 --- /dev/null +++ b/core/game_menu/page.gd @@ -0,0 +1,14 @@ +extends Control + +class_name GameMenuPage + + +func show_page() -> void: + var tweens = find_children("*", "ContainerTween", true, false) + for tween in tweens: + tween.start_tween() + show() + + +func hide_page() -> void: + hide() diff --git a/core/game_menu/page.gd.uid b/core/game_menu/page.gd.uid new file mode 100644 index 0000000..12b9da8 --- /dev/null +++ b/core/game_menu/page.gd.uid @@ -0,0 +1 @@ +uid://dup0tdvb3eghp diff --git a/core/game_menu/page.tscn b/core/game_menu/page.tscn index 4f5522c..f0e8f83 100644 --- a/core/game_menu/page.tscn +++ b/core/game_menu/page.tscn @@ -1,5 +1,6 @@ [gd_scene format=3 uid="uid://id854u4gh12f"] +[ext_resource type="Script" uid="uid://dup0tdvb3eghp" path="res://core/game_menu/page.gd" id="1_21t5y"] [ext_resource type="Texture2D" uid="uid://bs56pdbywm4uh" path="res://core/game_menu/assets/page_1/quad_main.png" id="1_jwl25"] [node name="Page" type="Control" unique_id=2037261222] @@ -7,6 +8,7 @@ layout_mode = 3 anchors_preset = 0 offset_right = 40.0 offset_bottom = 40.0 +script = ExtResource("1_21t5y") [node name="Background" type="TextureRect" parent="." unique_id=1203110384] visible = false diff --git a/core/game_menu/page_1.tscn b/core/game_menu/page_1.tscn index 5b3b698..60b0a32 100644 --- a/core/game_menu/page_1.tscn +++ b/core/game_menu/page_1.tscn @@ -2,8 +2,6 @@ [ext_resource type="PackedScene" uid="uid://id854u4gh12f" path="res://core/game_menu/page.tscn" id="1_uxih6"] [ext_resource type="PackedScene" uid="uid://bh1kxsp5jyxfx" path="res://core/game_menu/train_selector.tscn" id="3_ijm38"] -[ext_resource type="Texture2D" uid="uid://bjqp8kmb5y7px" path="res://core/game_menu/assets/page_1/chooseyourtrain_text.png" id="3_t5hmd"] -[ext_resource type="Texture2D" uid="uid://dqqnfnero7ckl" path="res://core/game_menu/assets/page_1/chooseyourbiome_text.png" id="11_3chbu"] [ext_resource type="PackedScene" uid="uid://bc60gon7fmvbr" path="res://core/game_menu/biome_selector.tscn" id="12_7yi8x"] [node name="Page1" unique_id=2037261222 instance=ExtResource("1_uxih6")] @@ -16,33 +14,16 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="ChooseyourtrainText" type="TextureRect" parent="." index="1" unique_id=1883940124] -layout_mode = 0 -offset_left = 350.0 -offset_top = 365.0 -offset_right = 758.0 -offset_bottom = 445.0 -texture = ExtResource("3_t5hmd") - -[node name="TrainSelector" parent="." index="2" unique_id=1039769375 instance=ExtResource("3_ijm38")] +[node name="TrainSelector" parent="." index="1" unique_id=1039769375 instance=ExtResource("3_ijm38")] layout_mode = 0 offset_left = 211.0 -offset_top = 469.0 -offset_right = 871.0 -offset_bottom = 778.0 - -[node name="ChooseyourbiomeText" type="TextureRect" parent="." index="3" unique_id=1133714914] -layout_mode = 0 -offset_left = 1184.0 offset_top = 365.0 -offset_right = 1579.0 -offset_bottom = 436.0 -texture = ExtResource("11_3chbu") -stretch_mode = 3 +offset_right = 871.0 +offset_bottom = 758.0 -[node name="BiomeSelector" parent="." index="4" unique_id=1957954960 instance=ExtResource("12_7yi8x")] +[node name="BiomeSelector" parent="." index="2" unique_id=1957954960 instance=ExtResource("12_7yi8x")] layout_mode = 0 offset_left = 1038.0 -offset_top = 437.0 +offset_top = 365.0 offset_right = 1738.0 -offset_bottom = 837.0 +offset_bottom = 783.0 diff --git a/core/game_menu/page_2.tscn b/core/game_menu/page_2.tscn index d3765dd..76e5faf 100644 --- a/core/game_menu/page_2.tscn +++ b/core/game_menu/page_2.tscn @@ -17,9 +17,6 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Background" parent="." index="0" unique_id=1203110384] -mouse_filter = 2 - [node name="PhotoCollectionText" type="TextureRect" parent="." index="1" unique_id=240014191] layout_mode = 0 offset_left = 350.0 @@ -43,7 +40,7 @@ layout_mode = 1 offset_left = 244.0 offset_top = 410.0 offset_right = 844.0 -offset_bottom = 810.0 +offset_bottom = 850.0 [node name="CollectibleGallery" parent="." index="4" unique_id=708445500 instance=ExtResource("5_w0bcg")] layout_mode = 1 diff --git a/core/game_menu/photo.gd b/core/game_menu/photo.gd index b1f48cd..ac83eba 100644 --- a/core/game_menu/photo.gd +++ b/core/game_menu/photo.gd @@ -1,4 +1,4 @@ -extends Control +extends Button class_name Photo @@ -11,6 +11,20 @@ func setup(texture: Texture) -> void: texture_rect.texture = texture -func _on_gui_input(event: InputEvent) -> void: - if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: - GameState.on_photo_highlighted.emit(texture_rect.texture) +func _on_pressed() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.PUNCH_IN): + return + TweenFX.punch_in(self) + GameState.on_photo_highlighted.emit(texture_rect.texture) + + + +func _on_mouse_entered() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.BREATHE): + return + TweenFX.breathe(self, 1) + + +func _on_mouse_exited() -> void: + TweenFX.stop(self, TweenFX.Animations.BREATHE) + scale = Vector2(1, 1) diff --git a/core/game_menu/photo.tscn b/core/game_menu/photo.tscn index 0c07fd1..130b3e8 100644 --- a/core/game_menu/photo.tscn +++ b/core/game_menu/photo.tscn @@ -1,29 +1,26 @@ [gd_scene format=3 uid="uid://cvus62qkop3qi"] [ext_resource type="Script" uid="uid://dsey5dvc11vpq" path="res://core/game_menu/photo.gd" id="1_u0arp"] -[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/game_menu/hoover_tween.tscn" id="2_62vvn"] -[node name="Photo" type="Control" unique_id=201865221] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +[node name="Photo" type="Button" unique_id=1451980505] +custom_minimum_size = Vector2(132, 154) +anchors_preset = -1 +anchor_right = 0.06875 +anchor_bottom = 0.1425926 +pivot_offset_ratio = Vector2(0.5, 0.5) script = ExtResource("1_u0arp") +metadata/_edit_use_anchors_ = true [node name="ColorRect" type="ColorRect" parent="." unique_id=1208008621] custom_minimum_size = Vector2(132, 154) layout_mode = 1 anchors_preset = -1 -anchor_left = 0.465625 -anchor_top = 0.4287037 -anchor_right = 0.534375 -anchor_bottom = 0.5712963 -offset_left = 66.0 -offset_top = 77.0 -offset_right = -66.0 -offset_bottom = -77.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 127.462494 +offset_top = 143.02037 +offset_right = -127.4625 +offset_bottom = -143.02037 grow_horizontal = 2 grow_vertical = 2 pivot_offset_ratio = Vector2(0.5, 0.5) @@ -50,8 +47,6 @@ mouse_filter = 2 expand_mode = 1 stretch_mode = 6 -[node name="HooverTween" parent="." unique_id=160227524 node_paths=PackedStringArray("detector_node", "visual_node") instance=ExtResource("2_62vvn")] -detector_node = NodePath("..") -visual_node = NodePath("../ColorRect") - -[connection signal="gui_input" from="." to="." method="_on_gui_input"] +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/core/game_menu/photo_gallery.tscn b/core/game_menu/photo_gallery.tscn index 4f58395..15c353a 100644 --- a/core/game_menu/photo_gallery.tscn +++ b/core/game_menu/photo_gallery.tscn @@ -2,12 +2,13 @@ [ext_resource type="Script" uid="uid://k4iqrlkbjppl" path="res://core/game_menu/photo_gallery.gd" id="1_bp5uf"] [ext_resource type="PackedScene" uid="uid://cvus62qkop3qi" path="res://core/game_menu/photo.tscn" id="2_45wok"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="3_ht2y6"] [node name="PhotoGallery" type="Control" unique_id=354419843] layout_mode = 3 anchors_preset = 0 offset_right = 600.0 -offset_bottom = 420.0 +offset_bottom = 440.0 mouse_filter = 2 script = ExtResource("1_bp5uf") photo_scene = ExtResource("2_45wok") @@ -21,35 +22,40 @@ grow_horizontal = 2 grow_vertical = 2 draw_focus_border = true -[node name="PhotoGrid" type="GridContainer" parent="ScrollContainer" unique_id=1187865988] -unique_name_in_owner = true +[node name="MarginContainer" type="MarginContainer" parent="ScrollContainer" unique_id=934979837] layout_mode = 2 size_flags_horizontal = 6 size_flags_vertical = 6 +theme_override_constants/margin_left = 32 +theme_override_constants/margin_top = 32 +theme_override_constants/margin_right = 32 +theme_override_constants/margin_bottom = 33 + +[node name="PhotoGrid" type="GridContainer" parent="ScrollContainer/MarginContainer" unique_id=1187865988] +unique_name_in_owner = true +layout_mode = 2 theme_override_constants/h_separation = 44 theme_override_constants/v_separation = 54 columns = 3 -[node name="Photo" parent="ScrollContainer/PhotoGrid" unique_id=201865221 instance=ExtResource("2_45wok")] -custom_minimum_size = Vector2(132, 154) +[node name="Photo" parent="ScrollContainer/MarginContainer/PhotoGrid" unique_id=201865221 instance=ExtResource("2_45wok")] layout_mode = 2 -[node name="Photo2" parent="ScrollContainer/PhotoGrid" unique_id=427039285 instance=ExtResource("2_45wok")] -custom_minimum_size = Vector2(132, 154) +[node name="Photo2" parent="ScrollContainer/MarginContainer/PhotoGrid" unique_id=427039285 instance=ExtResource("2_45wok")] layout_mode = 2 -[node name="Photo3" parent="ScrollContainer/PhotoGrid" unique_id=800591401 instance=ExtResource("2_45wok")] -custom_minimum_size = Vector2(132, 154) +[node name="Photo3" parent="ScrollContainer/MarginContainer/PhotoGrid" unique_id=800591401 instance=ExtResource("2_45wok")] layout_mode = 2 -[node name="Photo4" parent="ScrollContainer/PhotoGrid" unique_id=1895298585 instance=ExtResource("2_45wok")] -custom_minimum_size = Vector2(132, 154) +[node name="Photo4" parent="ScrollContainer/MarginContainer/PhotoGrid" unique_id=1895298585 instance=ExtResource("2_45wok")] layout_mode = 2 -[node name="Photo5" parent="ScrollContainer/PhotoGrid" unique_id=2093353381 instance=ExtResource("2_45wok")] -custom_minimum_size = Vector2(132, 154) +[node name="Photo5" parent="ScrollContainer/MarginContainer/PhotoGrid" unique_id=2093353381 instance=ExtResource("2_45wok")] layout_mode = 2 -[node name="Photo6" parent="ScrollContainer/PhotoGrid" unique_id=316021755 instance=ExtResource("2_45wok")] -custom_minimum_size = Vector2(132, 154) +[node name="Photo6" parent="ScrollContainer/MarginContainer/PhotoGrid" unique_id=316021755 instance=ExtResource("2_45wok")] layout_mode = 2 + +[node name="ContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("runtime_target_parent") instance=ExtResource("3_ht2y6")] +unique_name_in_owner = true +runtime_target_parent = NodePath("../ScrollContainer/MarginContainer/PhotoGrid") diff --git a/core/game_menu/settings_menu.tscn b/core/game_menu/settings_menu.tscn index 13f901e..decbdb9 100644 --- a/core/game_menu/settings_menu.tscn +++ b/core/game_menu/settings_menu.tscn @@ -4,20 +4,30 @@ [ext_resource type="PackedScene" uid="uid://cescrovsjlwke" path="res://core/game_menu/audio_option.tscn" id="1_hwcco"] [ext_resource type="Texture2D" uid="uid://0t00kjvrw206" path="res://core/game_menu/assets/page_3/music_volume_button.png" id="3_kgdba"] [ext_resource type="Texture2D" uid="uid://dvergpy6qgggn" path="res://core/game_menu/assets/page_3/sfx_volume_button.png" id="4_ugk4n"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="5_p0gqk"] [node name="SettingsMenu" type="Control" unique_id=1639777294] +custom_minimum_size = Vector2(327, 512) layout_mode = 3 -anchors_preset = 0 -offset_right = 600.0 -offset_bottom = 420.0 +anchor_right = 0.1703125 +anchor_bottom = 0.47407407 +offset_right = -327.0 +offset_bottom = -512.0 +pivot_offset_ratio = Vector2(0.5, 0.5) script = ExtResource("1_4lekq") +metadata/_edit_use_anchors_ = true [node name="AudioOptionsContainer" type="VBoxContainer" parent="." unique_id=743642398] unique_name_in_owner = true -layout_mode = 0 -offset_right = 327.0 -offset_bottom = 512.0 +custom_minimum_size = Vector2(327, 512) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 theme_override_constants/separation = 12 +alignment = 1 [node name="MasterVolume_AudioOption" parent="AudioOptionsContainer" unique_id=1509773712 instance=ExtResource("1_hwcco")] layout_mode = 2 @@ -31,3 +41,6 @@ bus_name = &"Music" layout_mode = 2 image = ExtResource("4_ugk4n") bus_name = &"SFX" + +[node name="ContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("targets") instance=ExtResource("5_p0gqk")] +targets = [NodePath("../AudioOptionsContainer/MasterVolume_AudioOption"), NodePath("../AudioOptionsContainer/MusicVolume_AudioOption"), NodePath("../AudioOptionsContainer/SFXVolume_AudioOption")] diff --git a/core/game_menu/train_selector.gd b/core/game_menu/train_selector.gd index 9812be8..68d2f88 100644 --- a/core/game_menu/train_selector.gd +++ b/core/game_menu/train_selector.gd @@ -3,36 +3,50 @@ extends VBoxContainer @onready var color_pickers: Array[TrainColorPicker] = [$%ColorPicker1, $%ColorPicker2, $%ColorPicker3, $%ColorPicker4, $%ColorPicker5, $%ColorPicker6] @onready var left_arrow: ArrowButton = $%ArrowButtonLeft @onready var right_arrow: ArrowButton = $%ArrowButtonRight +@onready var treno: Node3D = $TrainViewportContainer/SubViewport/Treno + var selected_color: Color var selected_color_index: int = 0 func _ready() -> void: for color_picker in color_pickers: - color_picker.on_color_selected.connect(_on_color_selected) + color_picker.pressed.connect(_on_color_selected.bind(color_picker)) color_picker.deselect() - selected_color = color_pickers[0].color - color_pickers[0].select() + _set_selected_color(0) - left_arrow.on_pressed.connect(_select_prev_color) - right_arrow.on_pressed.connect(_select_next_color) + left_arrow.pressed.connect(_select_prev_color) + right_arrow.pressed.connect(_select_next_color) -func _on_color_selected(selected_color_picker: TrainColorPicker) -> void: +func _process(delta: float) -> void: + if treno: + treno.rotation_degrees.y += 30.0 * delta + +func _set_selected_color(index: int) -> void: for i in range(color_pickers.size()): - if color_pickers[i].color == selected_color_picker.color: - selected_color_picker.select() + if i == index: + color_pickers[i].select() selected_color_index = i + selected_color = color_pickers[i].color + _apply_train_color(selected_color) else: color_pickers[i].deselect() +func _on_color_selected(selected_color_picker: TrainColorPicker) -> void: + for i in range(color_pickers.size()): + if color_pickers[i] == selected_color_picker: + _set_selected_color(i) + break + func _select_prev_color() -> void: - for color_picker in color_pickers: - color_picker.deselect() - selected_color_index = (selected_color_index - 1 + color_pickers.size()) % color_pickers.size() - color_pickers[selected_color_index].select() + var next_index = (selected_color_index - 1 + color_pickers.size()) % color_pickers.size() + _set_selected_color(next_index) func _select_next_color() -> void: - for color_picker in color_pickers: - color_picker.deselect() - selected_color_index = (selected_color_index + 1) % color_pickers.size() - color_pickers[selected_color_index].select() + var next_index = (selected_color_index + 1) % color_pickers.size() + _set_selected_color(next_index) + +func _apply_train_color(color: Color) -> void: + var mat: ShaderMaterial = load("res://tgcc/train/Color1_train.tres") + if mat: + mat.set_shader_parameter("albedo_color", color) diff --git a/core/game_menu/train_selector.tscn b/core/game_menu/train_selector.tscn index 5eb27c6..20b000b 100644 --- a/core/game_menu/train_selector.tscn +++ b/core/game_menu/train_selector.tscn @@ -1,7 +1,7 @@ [gd_scene format=3 uid="uid://bh1kxsp5jyxfx"] [ext_resource type="Script" uid="uid://8k1msabobhks" path="res://core/game_menu/train_selector.gd" id="1_puip6"] -[ext_resource type="Texture2D" uid="uid://cqvani6n2h3fw" path="res://core/game_menu/assets/page_1/train_texture.png" id="1_wfiis"] +[ext_resource type="Texture2D" uid="uid://bjqp8kmb5y7px" path="res://core/game_menu/assets/page_1/chooseyourtrain_text.png" id="2_cfvtr"] [ext_resource type="PackedScene" uid="uid://dm3skv22c60tm" path="res://core/game_menu/arrow_button.tscn" id="2_puip6"] [ext_resource type="PackedScene" uid="uid://ch1st1oryjoio" path="res://core/game_menu/color_picker.tscn" id="3_i2rs1"] [ext_resource type="Texture2D" uid="uid://b5arobd7gl4u4" path="res://core/game_menu/assets/page_1/customizecolor-3.png" id="4_cfvtr"] @@ -9,19 +9,47 @@ [ext_resource type="Texture2D" uid="uid://bv07xhpe3kh0r" path="res://core/game_menu/assets/page_1/customizecolor-5.png" id="6_dxnpq"] [ext_resource type="Texture2D" uid="uid://cryqbi1av2x1c" path="res://core/game_menu/assets/page_1/customizecolor.png" id="7_d1sdr"] [ext_resource type="Texture2D" uid="uid://d4l5ih723j3md" path="res://core/game_menu/assets/page_1/customizecolor-2.png" id="8_tuh6m"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="10_i2rs1"] +[ext_resource type="PackedScene" uid="uid://otptvwer4par" path="res://tgcc/train/train.tscn" id="11_train"] [node name="TrainSelector" type="VBoxContainer" unique_id=1039769375] offset_right = 625.0 offset_bottom = 309.0 +alignment = 1 script = ExtResource("1_puip6") -[node name="TrainTexture" type="TextureRect" parent="." unique_id=2095010706] +[node name="ChooseYourTrainTexture" type="TextureRect" parent="." unique_id=2095010706] layout_mode = 2 -texture = ExtResource("1_wfiis") +texture = ExtResource("2_cfvtr") stretch_mode = 3 +[node name="Spacer" type="Control" parent="." unique_id=685700140] +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 + +[node name="TrainViewportContainer" type="SubViewportContainer" parent="." unique_id=1674220600] +custom_minimum_size = Vector2(0, 180) +layout_mode = 2 +stretch = true + +[node name="SubViewport" type="SubViewport" parent="TrainViewportContainer" unique_id=1674220601] +transparent_bg = true +handle_input_locally = false +size = Vector2i(660, 180) +render_target_update_mode = 4 + +[node name="Camera3D" type="Camera3D" parent="TrainViewportContainer/SubViewport" unique_id=1674220602] +transform = Transform3D(0.707107, -0.353553, 0.612372, 0, 0.866025, 0.5, -0.707107, -0.353553, 0.612372, 6, 4, 6) +current = true + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="TrainViewportContainer/SubViewport" unique_id=1674220604] +transform = Transform3D(0.707107, -0.5, 0.5, 0, 0.707107, 0.707107, -0.707107, -0.5, 0.5, 0, 5, 0) + +[node name="Treno" parent="TrainViewportContainer/SubViewport" unique_id=1674220603 instance=ExtResource("11_train")] + [node name="HBoxContainer2" type="HBoxContainer" parent="." unique_id=607833319] layout_mode = 2 +alignment = 1 [node name="ArrowButtonLeft" parent="HBoxContainer2" unique_id=103192648 instance=ExtResource("2_puip6")] unique_name_in_owner = true @@ -31,44 +59,39 @@ flip_h = true [node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer2" unique_id=1364417494] layout_mode = 2 theme_override_constants/separation = 18 +alignment = 1 [node name="ColorPicker1" parent="HBoxContainer2/HBoxContainer" unique_id=59169767 instance=ExtResource("3_i2rs1")] unique_name_in_owner = true -custom_minimum_size = Vector2(60, 60) layout_mode = 2 size_flags_vertical = 4 image = ExtResource("4_cfvtr") [node name="ColorPicker2" parent="HBoxContainer2/HBoxContainer" unique_id=584054476 instance=ExtResource("3_i2rs1")] unique_name_in_owner = true -custom_minimum_size = Vector2(60, 60) layout_mode = 2 size_flags_vertical = 4 image = ExtResource("5_jnto8") [node name="ColorPicker3" parent="HBoxContainer2/HBoxContainer" unique_id=889429149 instance=ExtResource("3_i2rs1")] unique_name_in_owner = true -custom_minimum_size = Vector2(60, 60) layout_mode = 2 size_flags_vertical = 4 image = ExtResource("6_dxnpq") [node name="ColorPicker4" parent="HBoxContainer2/HBoxContainer" unique_id=466686411 instance=ExtResource("3_i2rs1")] unique_name_in_owner = true -custom_minimum_size = Vector2(60, 60) layout_mode = 2 size_flags_vertical = 4 image = ExtResource("7_d1sdr") [node name="ColorPicker5" parent="HBoxContainer2/HBoxContainer" unique_id=675841518 instance=ExtResource("3_i2rs1")] unique_name_in_owner = true -custom_minimum_size = Vector2(60, 60) layout_mode = 2 size_flags_vertical = 4 [node name="ColorPicker6" parent="HBoxContainer2/HBoxContainer" unique_id=1698412911 instance=ExtResource("3_i2rs1")] unique_name_in_owner = true -custom_minimum_size = Vector2(60, 60) layout_mode = 2 size_flags_vertical = 4 image = ExtResource("8_tuh6m") @@ -76,3 +99,7 @@ image = ExtResource("8_tuh6m") [node name="ArrowButtonRight" parent="HBoxContainer2" unique_id=68298624 instance=ExtResource("2_puip6")] unique_name_in_owner = true layout_mode = 2 + +[node name="ContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("targets") instance=ExtResource("10_i2rs1")] +unique_name_in_owner = true +targets = [NodePath("../HBoxContainer2/ArrowButtonLeft"), NodePath("../HBoxContainer2/HBoxContainer/ColorPicker1"), NodePath("../HBoxContainer2/HBoxContainer/ColorPicker2"), NodePath("../HBoxContainer2/HBoxContainer/ColorPicker3"), NodePath("../HBoxContainer2/HBoxContainer/ColorPicker4"), NodePath("../HBoxContainer2/HBoxContainer/ColorPicker5"), NodePath("../HBoxContainer2/HBoxContainer/ColorPicker6"), NodePath("../HBoxContainer2/ArrowButtonRight")] diff --git a/core/main_menu/main_menu.gd b/core/main_menu/main_menu.gd index 4a6611a..b6e5a97 100644 --- a/core/main_menu/main_menu.gd +++ b/core/main_menu/main_menu.gd @@ -1,10 +1,16 @@ extends Control @onready var settings_menu: Control = $%SettingsMenu +@onready var option_menu: Control = $%OptionMenu +@onready var show_container_tween: ContainerTween = $%ShowContainerTween +@onready var hide_container_tween: ContainerTween = $%HideContainerTween -func _on_play_button_on_button_pressed() -> void: - SceneManager.change_scene(SceneConfig.SceneName.GAME) +func _ready() -> void: + option_menu.settings_button.pressed.connect(_on_settings_button_pressed) -func _on_settings_button_on_button_pressed() -> void: - $%SettingsMenu.visible = !$%SettingsMenu.visible +func _on_settings_button_pressed() -> void: + if settings_menu.visible: + hide_container_tween.start_tween() + else: + show_container_tween.start_tween() diff --git a/core/main_menu/main_menu.tscn b/core/main_menu/main_menu.tscn index df9ac6d..3749c13 100644 --- a/core/main_menu/main_menu.tscn +++ b/core/main_menu/main_menu.tscn @@ -1,9 +1,10 @@ [gd_scene format=3 uid="uid://btcpge7cj2041"] -[ext_resource type="Script" uid="uid://csqxuftsnv1br" path="res://core/main_menu/main_menu.gd" id="1_g1whv"] +[ext_resource type="Script" uid="uid://csqxuftsnv1br" path="res://core/main_menu/main_menu.gd" id="1_jy6on"] [ext_resource type="PackedScene" uid="uid://cxf8s80ivwj1p" path="res://core/game_menu/option_menu.tscn" id="1_uvy4f"] [ext_resource type="Texture2D" uid="uid://buy4x63u237np" path="res://core/main_menu/assets/main_menu_background.png" id="2_mloc8"] [ext_resource type="PackedScene" uid="uid://caqf471x0kttc" path="res://core/game_menu/settings_menu.tscn" id="3_26agx"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="4_mloc8"] [node name="MainMenu" type="Control" unique_id=889720172] layout_mode = 3 @@ -12,7 +13,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("1_g1whv") +script = ExtResource("1_jy6on") [node name="TextureRect" type="TextureRect" parent="." unique_id=11805511] layout_mode = 1 @@ -24,16 +25,15 @@ grow_vertical = 2 texture = ExtResource("2_mloc8") [node name="OptionMenu" parent="." unique_id=1055457221 instance=ExtResource("1_uvy4f")] +unique_name_in_owner = true layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 +anchors_preset = 6 +anchor_left = 1.0 anchor_top = 0.5 -anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = 492.0 -offset_top = 274.0 -offset_right = 492.0 -offset_bottom = 274.0 +offset_left = -294.0 +offset_right = -294.0 +grow_horizontal = 0 [node name="VBoxContainer" parent="OptionMenu" index="0" unique_id=508055524] anchor_top = 0.3037037 @@ -51,12 +51,26 @@ visible = false unique_name_in_owner = true visible = false layout_mode = 1 -offset_left = 639.0 -offset_top = 566.0 -offset_right = 639.0 -offset_bottom = 566.0 +anchors_preset = 4 +anchor_top = 0.5 +anchor_right = 0.0 +anchor_bottom = 0.5 +offset_left = 225.0 +offset_top = -256.0 +offset_right = 552.0 +offset_bottom = 256.0 +grow_vertical = 2 -[connection signal="on_button_pressed" from="OptionMenu/VBoxContainer/PlayButton" to="." method="_on_play_button_on_button_pressed"] -[connection signal="on_button_pressed" from="OptionMenu/VBoxContainer/SettingsButton" to="." method="_on_settings_button_on_button_pressed"] +[node name="ShowContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("targets") instance=ExtResource("4_mloc8")] +unique_name_in_owner = true +targets = [NodePath("../SettingsMenu")] +tween_types = Array[String](["fold_in"]) +show_on_start = true + +[node name="HideContainerTween" parent="." unique_id=570405239 node_paths=PackedStringArray("targets") instance=ExtResource("4_mloc8")] +unique_name_in_owner = true +targets = [NodePath("../SettingsMenu")] +tween_types = Array[String](["fold_out"]) +hide_on_finish = true [editable path="OptionMenu"] diff --git a/core/main_scene_ui/audio_player.gd b/core/main_scene_ui/audio_player.gd index 6259ef2..551a021 100644 --- a/core/main_scene_ui/audio_player.gd +++ b/core/main_scene_ui/audio_player.gd @@ -3,8 +3,18 @@ extends Control @export var radio: Radio @onready var track_label: Label = $%TrackLabel +@onready var prev_track_icon_button: Button = $%PrevTrackIconButton +@onready var play_pause_icon_button: Button = $%PlayPauseIconButton +@onready var next_track_icon_button: Button = $%NextTrackIconButton +@onready var increase_volume_icon_button: Button = $%IncreaseVolumeIconButton +@onready var decrease_volume_icon_button: Button = $%DecreaseVolumeIconButton func _ready() -> void: + prev_track_icon_button.pressed.connect(_on_prev_track_icon_button_pressed) + play_pause_icon_button.pressed.connect(_on_play_pause_icon_button_pressed) + next_track_icon_button.pressed.connect(_on_next_track_icon_button_pressed) + increase_volume_icon_button.pressed.connect(_on_increase_volume_icon_button_pressed) + decrease_volume_icon_button.pressed.connect(_on_decrease_volume_icon_button_pressed) if radio: radio.track_changed.connect(_on_radio_track_changed) if radio.stream and radio.stream.resource_path: @@ -15,29 +25,25 @@ func _ready() -> void: func _on_radio_track_changed(track_name: String) -> void: track_label.text = track_name -func _on_prev_track_icon_button_on_pressed() -> void: +func _on_prev_track_icon_button_pressed() -> void: if radio: radio.prev_track() - -func _on_play_pause_icon_button_on_pressed() -> void: +func _on_play_pause_icon_button_pressed() -> void: radio.toggle_pause() #if radio.stream_paused: #button_pause_resume.text = "Resume" #else: #button_pause_resume.text = "Pause" - -func _on_next_track_icon_button_on_pressed() -> void: +func _on_next_track_icon_button_pressed() -> void: if radio: radio.next_track() - -func _on_increase_volume_icon_button_on_pressed() -> void: +func _on_increase_volume_icon_button_pressed() -> void: var current_vol = AudioManager.get_audio_bus_volume("Music", 1.0) AudioManager.set_audio_bus_volume("Music", current_vol + 0.1) - -func _on_decrease_volume_icon_button_on_pressed() -> void: +func _on_decrease_volume_icon_button_pressed() -> void: var current_vol = AudioManager.get_audio_bus_volume("Music", 1.0) AudioManager.set_audio_bus_volume("Music", current_vol - 0.1) diff --git a/core/main_scene_ui/audio_player.tscn b/core/main_scene_ui/audio_player.tscn index 5aff572..7a2680a 100644 --- a/core/main_scene_ui/audio_player.tscn +++ b/core/main_scene_ui/audio_player.tscn @@ -89,6 +89,7 @@ layout_mode = 2 size_flags_vertical = 4 [node name="IncreaseVolumeIconButton" parent="HBoxContainer/VBoxContainer2" unique_id=1788399963 instance=ExtResource("1_ucnyb")] +unique_name_in_owner = true custom_minimum_size = Vector2(40, 40) layout_mode = 2 size_flags_horizontal = 0 @@ -106,6 +107,7 @@ offset_right = -96.666664 offset_bottom = -92.64813 [node name="DecreaseVolumeIconButton" parent="HBoxContainer/VBoxContainer2" unique_id=399629327 instance=ExtResource("1_ucnyb")] +unique_name_in_owner = true custom_minimum_size = Vector2(40, 40) layout_mode = 2 size_flags_horizontal = 0 @@ -122,12 +124,6 @@ offset_top = 92.64813 offset_right = -96.666664 offset_bottom = -92.64813 -[connection signal="on_pressed" from="HBoxContainer/VBoxContainer/IconButtonsRow/PrevTrackIconButton" to="." method="_on_prev_track_icon_button_on_pressed"] -[connection signal="on_pressed" from="HBoxContainer/VBoxContainer/IconButtonsRow/PlayPauseIconButton" to="." method="_on_play_pause_icon_button_on_pressed"] -[connection signal="on_pressed" from="HBoxContainer/VBoxContainer/IconButtonsRow/NextTrackIconButton" to="." method="_on_next_track_icon_button_on_pressed"] -[connection signal="on_pressed" from="HBoxContainer/VBoxContainer2/IncreaseVolumeIconButton" to="." method="_on_increase_volume_icon_button_on_pressed"] -[connection signal="on_pressed" from="HBoxContainer/VBoxContainer2/DecreaseVolumeIconButton" to="." method="_on_decrease_volume_icon_button_on_pressed"] - [editable path="HBoxContainer/VBoxContainer/IconButtonsRow/PrevTrackIconButton"] [editable path="HBoxContainer/VBoxContainer/IconButtonsRow/PlayPauseIconButton"] [editable path="HBoxContainer/VBoxContainer/IconButtonsRow/NextTrackIconButton"] diff --git a/core/main_scene_ui/icon_button.gd b/core/main_scene_ui/icon_button.gd index a64dfe0..f5b6130 100644 --- a/core/main_scene_ui/icon_button.gd +++ b/core/main_scene_ui/icon_button.gd @@ -1,9 +1,8 @@ @tool -extends Control +extends Button class_name IconButton -signal on_pressed @export var data: String @export var image: Texture: @@ -12,12 +11,22 @@ signal on_pressed if is_inside_tree() and has_node("%Texture"): $%Texture.texture = image +@onready var mini_texture: TextureRect = $%MiniTexture func _ready(): if image != null and has_node("%Texture"): $%Texture.texture = image - -func _on_gui_input(event: InputEvent) -> void: - if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed: - on_pressed.emit() +func _on_mouse_entered() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.BREATHE): + return + TweenFX.breathe(self, 1) + +func _on_mouse_exited() -> void: + TweenFX.stop(self, TweenFX.Animations.BREATHE) + scale = Vector2(1, 1) + +func _on_pressed() -> void: + if TweenFX.is_playing(self, TweenFX.Animations.PRESS_ROTATE): + return + TweenFX.press_rotate(self) diff --git a/core/main_scene_ui/icon_button.tscn b/core/main_scene_ui/icon_button.tscn index 4ad70a6..1fa6610 100644 --- a/core/main_scene_ui/icon_button.tscn +++ b/core/main_scene_ui/icon_button.tscn @@ -3,34 +3,78 @@ [ext_resource type="Script" uid="uid://bpbgecvan0a5k" path="res://core/main_scene_ui/icon_button.gd" id="1_r8gxt"] [ext_resource type="Texture2D" uid="uid://dldg826x1kkoe" path="res://core/main_scene_ui/assets/weather_test.png" id="1_upldh"] -[node name="IconButton" type="Control" unique_id=1750448019] +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_r8gxt"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_6q6an"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_60w2f"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4xtsh"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_305hl"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_jurvi"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_xxros"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3kui7"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ogiom"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4beq1"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_cxhgx"] + +[node name="IconButton" type="Button" unique_id=1621140689] custom_minimum_size = Vector2(160, 160) -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +anchors_preset = -1 +anchor_right = 0.083333336 +anchor_bottom = 0.14814815 +pivot_offset_ratio = Vector2(0.5, 0.5) +theme_override_styles/normal = SubResource("StyleBoxEmpty_r8gxt") +theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_6q6an") +theme_override_styles/pressed = SubResource("StyleBoxEmpty_60w2f") +theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_4xtsh") +theme_override_styles/hover = SubResource("StyleBoxEmpty_305hl") +theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_jurvi") +theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_xxros") +theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_3kui7") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_ogiom") +theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_4beq1") +theme_override_styles/focus = SubResource("StyleBoxEmpty_cxhgx") script = ExtResource("1_r8gxt") image = ExtResource("1_upldh") +metadata/_edit_use_anchors_ = true [node name="Texture" type="TextureRect" parent="." unique_id=1071359322] unique_name_in_owner = true custom_minimum_size = Vector2(160, 160) layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.45833334 -anchor_top = 0.42592594 -anchor_right = 0.5416667 -anchor_bottom = 0.5740741 -offset_left = 80.0 -offset_top = 79.99997 -offset_right = -80.0 -offset_bottom = -80.0 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("1_upldh") expand_mode = 1 -metadata/_edit_use_anchors_ = true -[connection signal="gui_input" from="." to="." method="_on_gui_input"] +[node name="MiniTexture" type="TextureRect" parent="." unique_id=65158044] +unique_name_in_owner = true +visible = false +custom_minimum_size = Vector2(32, 32) +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -32.0 +offset_top = -32.0 +grow_horizontal = 0 +grow_vertical = 0 +texture = ExtResource("1_upldh") +expand_mode = 1 + +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] +[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/core/main_scene_ui/icon_buttons_row.gd b/core/main_scene_ui/icon_buttons_row.gd index 628c2a9..73865cd 100644 --- a/core/main_scene_ui/icon_buttons_row.gd +++ b/core/main_scene_ui/icon_buttons_row.gd @@ -2,47 +2,50 @@ extends HBoxContainer signal on_option_changed(data: String) -@onready var current_icon_button: IconButton -@onready var icon_buttons_options: Array[IconButton] +@onready var category_icon_button: IconButton +@onready var options_icon_buttons: Array[IconButton] +@onready var show_container_tween: ContainerTween = $%ShowContainerTween +@onready var hide_container_tween: ContainerTween = $%HideContainerTween var is_menu_open: bool = false func _ready() -> void: for i in range(get_child_count()): + if get_child(i) is not Control: + continue var icon_button: IconButton = get_child(i) if i == 0: - current_icon_button = icon_button - icon_button.on_pressed.connect(on_current_icon_button_pressed) + category_icon_button = icon_button + icon_button.pressed.connect(on_category_icon_button_pressed) + icon_button.mini_texture.visible = true else: - icon_buttons_options.append(icon_button) - icon_button.on_pressed.connect(_on_icon_pressed_changed.bind(icon_button)) - + options_icon_buttons.append(icon_button) + icon_button.pressed.connect(on_icon_pressed_changed.bind(icon_button)) + icon_button.mini_texture.visible = false -func _on_icon_pressed_changed(in_icon_button: IconButton): - for icon_button in icon_buttons_options: +func on_icon_pressed_changed(in_icon_button: IconButton): + for icon_button in options_icon_buttons: if icon_button == in_icon_button: - current_icon_button.image = in_icon_button.image - current_icon_button.data = in_icon_button.data + category_icon_button.mini_texture.texture = in_icon_button.image + category_icon_button.data = in_icon_button.data on_option_changed.emit(icon_button.data) break - hide_options() - -func on_current_icon_button_pressed() -> void: +func on_category_icon_button_pressed() -> void: + if show_container_tween.is_running or hide_container_tween.is_running: + return + if is_menu_open: hide_options() else: show_options() - func show_options() -> void: - for icon_button in icon_buttons_options: - icon_button.show() + show_container_tween.start_tween() is_menu_open = true - func hide_options() -> void: - for icon_button in icon_buttons_options: - icon_button.hide() + hide_container_tween.start_tween() + await hide_container_tween.finished is_menu_open = false diff --git a/core/main_scene_ui/icon_buttons_row.tscn b/core/main_scene_ui/icon_buttons_row.tscn index 99b64be..0cfbc0a 100644 --- a/core/main_scene_ui/icon_buttons_row.tscn +++ b/core/main_scene_ui/icon_buttons_row.tscn @@ -2,6 +2,7 @@ [ext_resource type="PackedScene" uid="uid://2tqofxxxnvhv" path="res://core/main_scene_ui/icon_button.tscn" id="1_lnxme"] [ext_resource type="Script" uid="uid://cpf5rwmd0kaa6" path="res://core/main_scene_ui/icon_buttons_row.gd" id="1_xq3mw"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="3_58qdb"] [node name="IconButtonsRow" type="HBoxContainer" unique_id=1734127019] custom_minimum_size = Vector2(800, 0) @@ -41,3 +42,15 @@ visible = false layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 3 + +[node name="ShowContainerTween" parent="." unique_id=160227524 node_paths=PackedStringArray("targets") instance=ExtResource("3_58qdb")] +unique_name_in_owner = true +targets = [NodePath("../IconButton2"), NodePath("../IconButton3"), NodePath("../IconButton4"), NodePath("../IconButton5")] +tween_types = Array[String](["impact_land"]) +show_on_start = true + +[node name="HideContainerTween" parent="." unique_id=1169748375 node_paths=PackedStringArray("targets") instance=ExtResource("3_58qdb")] +unique_name_in_owner = true +targets = [NodePath("../IconButton5"), NodePath("../IconButton4"), NodePath("../IconButton3"), NodePath("../IconButton2")] +tween_types = Array[String](["impact_land"]) +hide_on_finish = true diff --git a/core/main_scene_ui/main_menu_ui.gd b/core/main_scene_ui/main_menu_ui.gd deleted file mode 100644 index 773a09e..0000000 --- a/core/main_scene_ui/main_menu_ui.gd +++ /dev/null @@ -1,49 +0,0 @@ -extends Control - -enum Weather {RAIN, SNOW} - -@onready var game_menu: Control = $%GameMenu - -func _on_menu_icon_button_on_pressed() -> void: - GameState.pause_game() - game_menu.show() - - -func _on_photo_icon_button_on_pressed() -> void: - GameState.on_enable_photo_mode_request.emit() - - -func _on_collectible_icon_button_on_pressed() -> void: - GameState.pause_game() - game_menu.on_tab_pressed(1, true) - game_menu.show() - - -func _on_time_of_day_row_on_option_changed(data: String) -> void: - match data: - "Sunrise": - UIEvents.time_option_item_changed.emit(0) - "Day": - UIEvents.time_option_item_changed.emit(1) - "Sunset": - UIEvents.time_option_item_changed.emit(2) - "Night": - UIEvents.time_option_item_changed.emit(3) - _: - pass - - -func _on_weather_row_on_option_changed(data: String) -> void: - match data: - "Snow": - UIEvents.toggle_snow.emit(true) - "Rain": - UIEvents.toggle_rain.emit(true) - "Storm": - UIEvents.toggle_storm.emit(true) - "Wind": - UIEvents.toggle_wind.emit(true) - "Random": - pass - _: - pass diff --git a/core/main_scene_ui/main_scene_ui.gd b/core/main_scene_ui/main_scene_ui.gd new file mode 100644 index 0000000..52ac452 --- /dev/null +++ b/core/main_scene_ui/main_scene_ui.gd @@ -0,0 +1,78 @@ +extends Control + +enum Weather {RAIN, SNOW} + +@onready var game_menu: Control = $%GameMenu +@onready var game_menu_panel: Control = $%GameMenuPanel +@onready var menu_icon_button: Button = $%MenuIconButton +@onready var photo_icon_button: Button = $%PhotoIconButton +@onready var collectible_icon_button: Button = $%CollectibleIconButton +@onready var resume_button: Button = $GameMenuPanel/GameMenu/Pages/Page3/OptionMenu/VBoxContainer/ResumeButton +@onready var show_container_tween: ContainerTween = $%ShowContainerTween +@onready var hide_container_tween: ContainerTween = $%HideContainerTween +@onready var weather_row: HBoxContainer = $%WeatherRow + +func _ready() -> void: + menu_icon_button.pressed.connect(_on_menu_icon_button_pressed) + photo_icon_button.pressed.connect(_on_photo_icon_button_pressed) + collectible_icon_button.pressed.connect(_on_collectible_icon_button_pressed) + resume_button.pressed.connect(_on_resume_button_pressed) + + +func _on_menu_icon_button_pressed() -> void: + GameState.pause_game() + game_menu_panel.show() + show_container_tween.start_tween() + +func _on_photo_icon_button_pressed() -> void: + GameState.on_enable_photo_mode_request.emit() + +func _on_collectible_icon_button_pressed() -> void: + GameState.pause_game() + game_menu.on_tab_pressed(1, true) + game_menu_panel.show() + show_container_tween.start_tween() + +func _on_resume_button_pressed() -> void: + hide_container_tween.start_tween() + await hide_container_tween.finished + game_menu_panel.hide() + GameState.resume_game() + +func _on_time_of_day_row_on_option_changed(data: String) -> void: + match data: + "Sunrise": + UIEvents.time_option_item_changed.emit(0) + "Day": + UIEvents.time_option_item_changed.emit(1) + "Sunset": + UIEvents.time_option_item_changed.emit(2) + "Night": + UIEvents.time_option_item_changed.emit(3) + _: + pass + +func _on_weather_row_on_option_changed(data: String) -> void: + match data: + "Snow": + UIEvents.toggle_snow.emit(true) + "Rain": + UIEvents.toggle_rain.emit(true) + "Storm": + UIEvents.toggle_storm.emit(true) + "Wind": + UIEvents.toggle_wind.emit(true) + "Random": + pick_random_weather() + _: + pass + +func pick_random_weather() -> void: + var valid_buttons = [] + for child in weather_row.options_icon_buttons: + if child.data.to_lower() != "random": + valid_buttons.append(child) + + if valid_buttons.size() > 0: + var random_button = valid_buttons.pick_random() + weather_row.on_icon_pressed_changed(random_button) diff --git a/core/main_scene_ui/main_menu_ui.gd.uid b/core/main_scene_ui/main_scene_ui.gd.uid similarity index 100% rename from core/main_scene_ui/main_menu_ui.gd.uid rename to core/main_scene_ui/main_scene_ui.gd.uid diff --git a/core/main_scene_ui/main_menu_ui.tscn b/core/main_scene_ui/main_scene_ui.tscn similarity index 52% rename from core/main_scene_ui/main_menu_ui.tscn rename to core/main_scene_ui/main_scene_ui.tscn index 2ddbff5..3aa0864 100644 --- a/core/main_scene_ui/main_menu_ui.tscn +++ b/core/main_scene_ui/main_scene_ui.tscn @@ -1,21 +1,23 @@ [gd_scene format=3 uid="uid://bei7fscn77p1p"] -[ext_resource type="PackedScene" uid="uid://ir8nke8o6ssm" path="res://core/main_scene_ui/icon_buttons_row.tscn" id="1_87dkt"] -[ext_resource type="Script" uid="uid://bhad1id8jr8jw" path="res://core/main_scene_ui/main_menu_ui.gd" id="1_aurcl"] -[ext_resource type="PackedScene" uid="uid://2tqofxxxnvhv" path="res://core/main_scene_ui/icon_button.tscn" id="1_fjauj"] -[ext_resource type="PackedScene" uid="uid://dqqm4o8j45tr6" path="res://core/game_menu/game_menu.tscn" id="4_7q818"] -[ext_resource type="PackedScene" uid="uid://cpeyt1dgrtglc" path="res://core/radio/radio.tscn" id="5_21kh1"] -[ext_resource type="PackedScene" uid="uid://dg4f3v0ukpmay" path="res://core/main_scene_ui/audio_player.tscn" id="6_1h1a0"] -[ext_resource type="AudioStream" uid="uid://70cc8she43re" path="res://docs/gyms/radio/lofi_01.ogg" id="6_vhlrw"] +[ext_resource type="Script" uid="uid://bhad1id8jr8jw" path="res://core/main_scene_ui/main_scene_ui.gd" id="1_h43jo"] +[ext_resource type="PackedScene" uid="uid://ir8nke8o6ssm" path="res://core/main_scene_ui/icon_buttons_row.tscn" id="2_4cc8f"] +[ext_resource type="PackedScene" uid="uid://2tqofxxxnvhv" path="res://core/main_scene_ui/icon_button.tscn" id="3_t1xop"] +[ext_resource type="PackedScene" uid="uid://dqqm4o8j45tr6" path="res://core/game_menu/game_menu.tscn" id="4_jh36j"] +[ext_resource type="PackedScene" uid="uid://cpeyt1dgrtglc" path="res://core/radio/radio.tscn" id="5_nevjt"] +[ext_resource type="AudioStream" uid="uid://70cc8she43re" path="res://docs/gyms/radio/lofi_01.ogg" id="6_kd244"] +[ext_resource type="PackedScene" uid="uid://dg4f3v0ukpmay" path="res://core/main_scene_ui/audio_player.tscn" id="7_lapqe"] +[ext_resource type="PackedScene" uid="uid://dxun0jk5t0n6" path="res://core/tween/container_tween.tscn" id="8_msh61"] -[node name="MainMenuUi" type="Control" unique_id=1359391222] +[node name="MainSceneUi" type="Control" unique_id=1359391222] +process_mode = 3 layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("1_aurcl") +script = ExtResource("1_h43jo") [node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=2071886807] custom_minimum_size = Vector2(160, 320) @@ -27,7 +29,7 @@ offset_top = -320.0 offset_right = 160.0 grow_vertical = 0 -[node name="TimeOfDayRow" parent="VBoxContainer" unique_id=1734127019 instance=ExtResource("1_87dkt")] +[node name="TimeOfDayRow" parent="VBoxContainer" unique_id=1734127019 instance=ExtResource("2_4cc8f")] layout_mode = 2 [node name="IconButton2" parent="VBoxContainer/TimeOfDayRow" index="1" unique_id=638856991] @@ -42,7 +44,14 @@ data = "Sunset" [node name="IconButton5" parent="VBoxContainer/TimeOfDayRow" index="4" unique_id=315412403] data = "Night" -[node name="WeatherRow" parent="VBoxContainer" unique_id=1803637359 instance=ExtResource("1_87dkt")] +[node name="ShowContainerTween" parent="VBoxContainer/TimeOfDayRow" index="5" unique_id=160227524] +tween_types = Array[String](["impact_land", "fade_in"]) + +[node name="HideContainerTween" parent="VBoxContainer/TimeOfDayRow" index="6" unique_id=1169748375] +tween_types = Array[String](["impact_land", "fade_out"]) + +[node name="WeatherRow" parent="VBoxContainer" unique_id=1803637359 instance=ExtResource("2_4cc8f")] +unique_name_in_owner = true layout_mode = 2 [node name="IconButton2" parent="VBoxContainer/WeatherRow" index="1" unique_id=638856991] @@ -57,7 +66,15 @@ data = "Storm" [node name="IconButton5" parent="VBoxContainer/WeatherRow" index="4" unique_id=315412403] data = "Wind" -[node name="IconButton6" parent="VBoxContainer/WeatherRow" unique_id=218253485 instance=ExtResource("1_fjauj")] +[node name="ShowContainerTween" parent="VBoxContainer/WeatherRow" index="5" unique_id=160227524 node_paths=PackedStringArray("targets")] +targets = [NodePath("../IconButton2"), NodePath("../IconButton3"), NodePath("../IconButton4"), NodePath("../IconButton5"), NodePath("../IconButton6")] +tween_types = Array[String](["impact_land", "fade_in"]) + +[node name="HideContainerTween" parent="VBoxContainer/WeatherRow" index="6" unique_id=1169748375 node_paths=PackedStringArray("targets")] +targets = [NodePath("../IconButton6"), NodePath("../IconButton5"), NodePath("../IconButton4"), NodePath("../IconButton3"), NodePath("../IconButton2")] +tween_types = Array[String](["impact_land", "fade_out"]) + +[node name="IconButton6" parent="VBoxContainer/WeatherRow" unique_id=218253485 instance=ExtResource("3_t1xop")] unique_name_in_owner = true visible = false layout_mode = 2 @@ -65,15 +82,15 @@ size_flags_horizontal = 0 size_flags_vertical = 3 data = "Random" -[node name="MenuIconButton" parent="." unique_id=707872474 instance=ExtResource("1_fjauj")] +[node name="MenuIconButton" parent="." unique_id=707872474 instance=ExtResource("3_t1xop")] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 +anchor_right = 1.0 anchor_bottom = 0.0 offset_left = -160.0 -offset_bottom = 160.0 grow_horizontal = 0 -grow_vertical = 1 [node name="CollectionOptions" type="VBoxContainer" parent="." unique_id=542153805] layout_mode = 1 @@ -88,21 +105,15 @@ offset_bottom = 20.0 grow_horizontal = 0 grow_vertical = 2 -[node name="PhotoIconButton" parent="CollectionOptions" unique_id=1863476241 instance=ExtResource("1_fjauj")] -layout_mode = 2 - -[node name="CollectibleIconButton" parent="CollectionOptions" unique_id=520235552 instance=ExtResource("1_fjauj")] -layout_mode = 2 - -[node name="GameMenu" parent="." unique_id=2124096517 instance=ExtResource("4_7q818")] +[node name="PhotoIconButton" parent="CollectionOptions" unique_id=1863476241 instance=ExtResource("3_t1xop")] unique_name_in_owner = true -visible = false -layout_mode = 1 +layout_mode = 2 -[node name="Radio" parent="." unique_id=1234112225 instance=ExtResource("5_21kh1")] -playlist = Array[AudioStream]([ExtResource("6_vhlrw")]) +[node name="CollectibleIconButton" parent="CollectionOptions" unique_id=520235552 instance=ExtResource("3_t1xop")] +unique_name_in_owner = true +layout_mode = 2 -[node name="AudioPlayer" parent="." unique_id=425192018 node_paths=PackedStringArray("radio") instance=ExtResource("6_1h1a0")] +[node name="AudioPlayer" parent="." unique_id=425192018 node_paths=PackedStringArray("radio") instance=ExtResource("7_lapqe")] layout_mode = 1 anchors_preset = 3 anchor_left = 1.0 @@ -117,11 +128,40 @@ grow_horizontal = 0 grow_vertical = 0 radio = NodePath("../Radio") +[node name="GameMenuPanel" type="Panel" parent="." unique_id=846120687] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="GameMenu" parent="GameMenuPanel" unique_id=2124096517 instance=ExtResource("4_jh36j")] +unique_name_in_owner = true +layout_mode = 1 + +[node name="Radio" parent="." unique_id=1234112225 instance=ExtResource("5_nevjt")] +playlist = Array[AudioStream]([ExtResource("6_kd244")]) + +[node name="ShowContainerTween" parent="." unique_id=902285649 node_paths=PackedStringArray("targets") instance=ExtResource("8_msh61")] +unique_name_in_owner = true +targets = [NodePath("../GameMenuPanel/GameMenu")] +tween_types = Array[String](["fold_in"]) +show_on_start = true + +[node name="HideContainerTween" parent="." unique_id=1041880010 node_paths=PackedStringArray("targets") instance=ExtResource("8_msh61")] +unique_name_in_owner = true +targets = [NodePath("../GameMenuPanel/GameMenu")] +tween_types = Array[String](["fold_out"]) +hide_on_finish = true + [connection signal="on_option_changed" from="VBoxContainer/TimeOfDayRow" to="." method="_on_time_of_day_row_on_option_changed"] [connection signal="on_option_changed" from="VBoxContainer/WeatherRow" to="." method="_on_weather_row_on_option_changed"] -[connection signal="on_pressed" from="MenuIconButton" to="." method="_on_menu_icon_button_on_pressed"] -[connection signal="on_pressed" from="CollectionOptions/PhotoIconButton" to="." method="_on_photo_icon_button_on_pressed"] -[connection signal="on_pressed" from="CollectionOptions/CollectibleIconButton" to="." method="_on_collectible_icon_button_on_pressed"] [editable path="VBoxContainer/TimeOfDayRow"] [editable path="VBoxContainer/WeatherRow"] +[editable path="GameMenuPanel/GameMenu"] +[editable path="GameMenuPanel/GameMenu/Pages/Page3"] +[editable path="GameMenuPanel/GameMenu/Pages/Page3/OptionMenu"] diff --git a/core/scene_manager/scene_manager.tscn b/core/scene_manager/scene_manager.tscn index 2370a3f..0df7e87 100644 --- a/core/scene_manager/scene_manager.tscn +++ b/core/scene_manager/scene_manager.tscn @@ -4,6 +4,7 @@ [ext_resource type="Resource" uid="uid://dr612tmciq8pg" path="res://core/scene_manager/scene_config.tres" id="2_vtdwt"] [node name="SceneManager" type="CanvasLayer" unique_id=399843239] +process_mode = 3 layer = 100 script = ExtResource("1_7resu") config = ExtResource("2_vtdwt") diff --git a/core/tween/container_tween.gd b/core/tween/container_tween.gd new file mode 100644 index 0000000..4699ce1 --- /dev/null +++ b/core/tween/container_tween.gd @@ -0,0 +1,86 @@ +extends Node +class_name ContainerTween + +signal finished + +enum AnimateOrder { + AS_IS, + TOP_TO_BOTTOM, + BOTTOM_TO_TOP, + LEFT_TO_RIGHT, + RIGHT_TO_LEFT +} + +@export_group("Settings") +@export var targets: Array[Control] +@export var runtime_target_parent: Control +@export var tween_types: Array[String] = ["punch_in"] +@export var order: AnimateOrder = AnimateOrder.AS_IS +@export var stagger_delay: float = 0.05 +@export var show_on_start: bool = false +@export var hide_on_finish: bool = false +@export var reset_state_on_start: bool = true + +var _tween_generation: int = 0 +var is_running: bool = false + + +func start_tween() -> void: + if is_running: + return + + is_running = true + _tween_generation += 1 + var current_gen = _tween_generation + + var sorted_targets = targets.duplicate() if !targets.is_empty() else runtime_target_parent.get_children().duplicate() + + match order: + AnimateOrder.TOP_TO_BOTTOM: + sorted_targets.sort_custom(func(a, b): return a.global_position.y < b.global_position.y) + AnimateOrder.BOTTOM_TO_TOP: + sorted_targets.sort_custom(func(a, b): return a.global_position.y > b.global_position.y) + AnimateOrder.LEFT_TO_RIGHT: + sorted_targets.sort_custom(func(a, b): return a.global_position.x < b.global_position.x) + AnimateOrder.RIGHT_TO_LEFT: + sorted_targets.sort_custom(func(a, b): return a.global_position.x > b.global_position.x) + + var last_tween: Tween = null + for target in sorted_targets: + if current_gen != _tween_generation: + return + + if is_instance_valid(target): + if reset_state_on_start: + target.scale = Vector2.ONE + target.modulate.a = 1.0 + + if show_on_start: + target.show() + + for type in tween_types: + var tween = TweenFX.call(type, target) + if tween is Tween: + last_tween = tween + + if hide_on_finish and tween is Tween: + tween.tween_callback(target.hide) + + if stagger_delay > 0.0: + await get_tree().create_timer(stagger_delay).timeout + + if is_instance_valid(last_tween) and last_tween.is_running(): + await last_tween.finished + + if current_gen == _tween_generation: + is_running = false + finished.emit() + + +func stop_tween() -> void: + is_running = false + _tween_generation += 1 + var current_targets = targets if !targets.is_empty() else runtime_target_parent.get_children() + for target in current_targets: + if is_instance_valid(target): + TweenFX.stop_all(target) diff --git a/core/game_menu/hoover_tween.gd.uid b/core/tween/container_tween.gd.uid similarity index 100% rename from core/game_menu/hoover_tween.gd.uid rename to core/tween/container_tween.gd.uid diff --git a/core/tween/container_tween.tscn b/core/tween/container_tween.tscn new file mode 100644 index 0000000..ffb2cae --- /dev/null +++ b/core/tween/container_tween.tscn @@ -0,0 +1,7 @@ +[gd_scene format=3 uid="uid://dxun0jk5t0n6"] + +[ext_resource type="Script" uid="uid://ryxh3nm7ayvf" path="res://core/tween/container_tween.gd" id="1_qfild"] + +[node name="ContainerTween" type="Node" unique_id=160227524] +process_mode = 3 +script = ExtResource("1_qfild") diff --git a/project.godot b/project.godot index 130d920..d5d1ef6 100644 --- a/project.godot +++ b/project.godot @@ -24,6 +24,7 @@ CollectionManager="*uid://22orqdm34hfm" AudioManager="*uid://dcttbbavtwtsg" SceneManager="*uid://bw8hwkw55j675" ShaderWarmup="res://core/shader_warmup.gd" +TweenFX="*uid://d2n10rw2dnx8o" [display] @@ -34,7 +35,7 @@ window/stretch/aspect="expand" [editor_plugins] -enabled=PackedStringArray() +enabled=PackedStringArray("res://addons/TweenFX/plugin.cfg") [global_group] diff --git a/tgcc/chunk/prop/fields/carrot/carrot.res b/tgcc/chunk/prop/fields/carrot/carrot.res index f17c9dbf68bdde5aee5bf1529d398e963bb53b3f..16c28a89d4af4db5174ede99363ce24043380473 100644 GIT binary patch literal 35706 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 delta 19406 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 z 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 ELnBN($p8QV diff --git a/tgcc/chunk/prop/tree/bambù/Bambu.res b/tgcc/chunk/prop/tree/bambù/Bambu.res index 70c60b2072683ea46c789df88a2e6f32bd101495..54263e3845ed998b7430ffde5364d016430f0835 100644 GIT binary patch literal 131844 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%0A^B%j* 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℘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%0Aiw)o=Ug#<~wE`)INOoiQ5tDL8**{WZsr`{et% zqC;+>JAN4Ti$T8R_)$;n4wKIf4qtl=<@JQc=Yb#ZssEK7u$OM-b%lNBRpa9IfNw_w zbji0P<6(g_8PAvXi}XO?q<)8f zQE_Mci;R9z(H-$epJ2LZy^R!ov8?~%gGLGslHrB0knz*TjtCE*Fg7?md=gq(gZvhX UyZ~YC#OSk&M$mn+a delta 80262 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 WZrUcd8cipOGdWDJgbWN775^WYteScN diff --git a/tgcc/main_scene.tscn b/tgcc/main_scene.tscn index 38adf09..2d85c8c 100644 --- a/tgcc/main_scene.tscn +++ b/tgcc/main_scene.tscn @@ -66,7 +66,7 @@ [ext_resource type="PackedScene" uid="uid://dn1btv0e0ses7" path="res://core/fireworks.tscn" id="47_q7p65"] [ext_resource type="PackedScene" uid="uid://ccg8aaxoghjpq" path="res://tgcc/chunk/countryside/scene/rice/river/scene/chunk_river_straight_3.tscn" id="48_ihpv1"] [ext_resource type="Script" uid="uid://cx2tlvxhvatj5" path="res://docs/museums/daynight/control.gd" id="48_r5xyi"] -[ext_resource type="PackedScene" uid="uid://bei7fscn77p1p" path="res://core/main_scene_ui/main_menu_ui.tscn" id="49_exdk1"] +[ext_resource type="PackedScene" uid="uid://bei7fscn77p1p" path="res://core/main_scene_ui/main_scene_ui.tscn" id="49_exdk1"] [ext_resource type="PackedScene" uid="uid://vni5kjalum6d" path="res://core/photo_mode/runtime/photo_mode_controller.tscn" id="50_57hhv"] [ext_resource type="PackedScene" uid="uid://bujym3ai10i7q" path="res://tgcc/chunk/countryside/scene/tea/chunk_country_tea_corner_01.tscn" id="51_lxncq"] [ext_resource type="PackedScene" uid="uid://bdfosig4g14vt" path="res://tgcc/chunk/countryside/scene/tea/chunk_country_tea_corner_02.tscn" id="52_317hq"] @@ -489,7 +489,7 @@ theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1) theme_override_colors/font_outline_color = Color(1, 1, 1, 1) text = "Update Rails" -[node name="MainMenuUi" parent="." unique_id=1359391222 instance=ExtResource("49_exdk1")] +[node name="MainSceneUi" parent="." unique_id=1359391222 instance=ExtResource("49_exdk1")] mouse_filter = 2 [connection signal="toggled" from="Control/Snow" to="Control" method="_on_snow_toggled"] diff --git a/tgcc/train/rail/rail.res b/tgcc/train/rail/rail.res index 4057f6352fe7982ddf35b60ddd3543e7f201ca8b..f8a71d7e72d4a934697dfafdf85cf3f136e99ed8 100644 GIT binary patch delta 86 zcmbPnhH2s%rVUfLnP%`z{=luuZjqdoSIM9-`8~H9d%1aKeip+9AX|s=FIXfqBRQ{> np>wh)k1`Vj|70&78SYXOAdv$m^ng+fuA3+F HG|U75Un3)@