class_name PickupBehavior extends Resource ## Base resource that defines how a pickup moves and looks on screen. ## Assign to [member pickup_behavior] on a PickupBehaviorController. @export_group("Animation") ## Whether the pickup bobs up and down in place. @export var bob_enabled: bool = true ## Bob oscillation frequency in cycles per second. @export var bob_frequency: float = 2.0 ## Bob vertical amplitude in pixels (peak-to-center). @export var bob_amplitude: float = 4.0 ## Whether the pickup subtly shakes (jitter) in place. @export var shake_enabled: bool = false ## Shake frequency in Hz (how fast the jitter oscillates). @export var shake_frequency: float = 8.0 ## Shake amplitude in pixels (peak-to-center). @export var shake_amplitude: float = 1.5 ## Optional fade-in duration (0 = no fade). @export var fade_in_duration: float = 0.0 ## Optional fade-out duration when the pickup is about to be collected ## (used by controller; 0 = no fade). @export var fade_out_duration: float = 0.0 var _elapsed: float = 0.0 func start() -> void: _elapsed = 0.0 func process(delta: float) -> float: # Returns the current opacity factor (0..1) based on fade timers. _elapsed += delta var target_alpha: float = 1.0 if fade_in_duration > 0 and _elapsed < fade_in_duration: target_alpha = clampf(_elapsed / fade_in_duration, 0.0, 1.0) return target_alpha