extends Tool ## Pump up the jamz! const BIG_RUMBLE = 0.006 const SMALL_RUMBLE = 0.0009 const RUMBLE_DROPOFF = 0.8 const AMBIENT_BUS_IDX = 3 @onready var mp3_controller: MP3Controller = %MP3Controller @onready var audio_stream_player: AudioStreamPlayer = %AudioStreamPlayer @onready var rumbler: Rumbler3D = %Rumbler func _ready() -> void: World.instance.manager.mp3_collected.connect(_on_mp3_collected) func unlocked() -> bool: return World.instance.manager.mp3_player_unlocked func fire() -> void: if not firing: firing = true rumbler.intensity = BIG_RUMBLE mp3_controller.select() func switch_mode() -> void: rumbler.intensity = SMALL_RUMBLE mp3_controller.cancel() func _physics_process(delta: float) -> void: rumbler.intensity *= RUMBLE_DROPOFF super._physics_process(delta) func _on_mp3_collected(_track: MP3Track) -> void: # TODO we may want to dynamically build the player tracklist # rather than rebuilding the whole thing each time a track is collected var mp3_list: Array[String] = [] mp3_list.assign( World.instance.manager.mp3_collection.map(func(mp3: MP3Track) -> String: return mp3.title) ) mp3_controller.set_track_list(mp3_list) func pause_playback() -> void: audio_stream_player.stream_paused = true AudioServer.set_bus_mute(AMBIENT_BUS_IDX, false) func resume_playback() -> void: audio_stream_player.stream_paused = false AudioServer.set_bus_mute(AMBIENT_BUS_IDX, true) func select_track(idx: int) -> void: audio_stream_player.stream = World.instance.manager.mp3_collection[idx].track audio_stream_player.play() AudioServer.set_bus_mute(AMBIENT_BUS_IDX, true)