40 lines
1.2 KiB
GDScript
40 lines
1.2 KiB
GDScript
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
|
|
|
|
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
|