grunk/levels/ghost_ship/ambient_drone.gd

63 lines
1.2 KiB
GDScript3
Raw Normal View History

2025-04-01 16:11:11 -06:00
extends AudioStreamPlayer
const MUTE_VOLUME := -80.0
@export var volume_increment := 0.618
@export var base_volume := -14.0
@export var boosted_volume := -2.0
var target_volume := MUTE_VOLUME
var suppressed := false
var boosted := false
func _ready() -> void:
Game.manager.alert_raised.connect(_on_alert_raised)
func get_target_volume() -> float:
if suppressed:
return MUTE_VOLUME
if boosted:
return boosted_volume
return target_volume
## Temporarily suppress ambience
func suppress(time: float = 5.0) -> void:
suppressed = true
get_tree().create_timer(time).timeout.connect(_unsuppress)
## Temporarily boost ambience
func boost(time: float = 5.0) -> void:
boosted = true
get_tree().create_timer(time).timeout.connect(_unboost)
func _unsuppress() -> void:
suppressed = false
func _unboost() -> void:
boosted = false
func _process(delta: float) -> void:
volume_db = lerpf(volume_db, get_target_volume(), volume_increment * delta)
func _on_player_enters_ship(_body: Node3D) -> void:
target_volume = MUTE_VOLUME
func _on_player_exits_ship(_body: Node3D) -> void:
target_volume = base_volume
func _on_alert_raised(new_level: int) -> void:
if new_level == Game.manager.MAX_ALERT:
suppress(30)
else:
boost(10.0)