grunk/src/equipment/mp3_player/mp3_player.gd

72 lines
1.7 KiB
GDScript

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 on_equip() -> void:
_rebuild_track_list()
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:
_rebuild_track_list()
func _rebuild_track_list() -> 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)