grunk/src/equipment/mp3_player/mp3_player.gd

72 lines
1.7 KiB
GDScript3
Raw Normal View History

2025-06-20 12:42:04 -06:00
extends Tool
## Pump up the jamz!
2025-06-27 17:46:08 -06:00
const BIG_RUMBLE = 0.006
const SMALL_RUMBLE = 0.0009
2025-06-27 12:56:50 -06:00
const RUMBLE_DROPOFF = 0.8
const AMBIENT_BUS_IDX = 3
2025-06-26 23:34:01 -06:00
@onready var mp3_controller: MP3Controller = %MP3Controller
2025-06-27 12:18:47 -06:00
@onready var audio_stream_player: AudioStreamPlayer = %AudioStreamPlayer
2025-06-27 12:56:50 -06:00
@onready var rumbler: Rumbler3D = %Rumbler
2025-06-27 12:18:47 -06:00
func _ready() -> void:
World.instance.manager.mp3_collected.connect(_on_mp3_collected)
2025-06-26 23:34:01 -06:00
2025-06-20 12:42:04 -06:00
func unlocked() -> bool:
return World.instance.manager.mp3_player_unlocked
2025-06-26 23:34:01 -06:00
func fire() -> void:
if not firing:
firing = true
2025-06-27 17:46:08 -06:00
rumbler.intensity = BIG_RUMBLE
2025-06-26 23:34:01 -06:00
mp3_controller.select()
2025-06-29 16:49:34 -06:00
func on_equip() -> void:
_rebuild_track_list()
2025-06-26 23:34:01 -06:00
func switch_mode() -> void:
2025-06-27 17:46:08 -06:00
rumbler.intensity = SMALL_RUMBLE
2025-06-26 23:34:01 -06:00
mp3_controller.cancel()
2025-06-27 12:18:47 -06:00
2025-06-27 12:56:50 -06:00
func _physics_process(delta: float) -> void:
rumbler.intensity *= RUMBLE_DROPOFF
super._physics_process(delta)
2025-06-27 12:18:47 -06:00
func _on_mp3_collected(_track: MP3Track) -> void:
2025-06-29 16:49:34 -06:00
_rebuild_track_list()
func _rebuild_track_list() -> void:
2025-06-27 12:18:47 -06:00
# 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)
2025-06-27 12:18:47 -06:00
func resume_playback() -> void:
audio_stream_player.stream_paused = false
AudioServer.set_bus_mute(AMBIENT_BUS_IDX, true)
2025-06-27 12:18:47 -06:00
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)