extends Tool ## Pump up the jamz! const RUMBLE_INTENSITY = 0.006 const RUMBLE_DROPOFF = 0.8 @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 = RUMBLE_INTENSITY mp3_controller.select() func switch_mode() -> void: rumbler.intensity = RUMBLE_INTENSITY 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 func resume_playback() -> void: audio_stream_player.stream_paused = false func select_track(idx: int) -> void: audio_stream_player.stream = World.instance.manager.mp3_collection[idx].track audio_stream_player.play()