generated from krampus/template-godot4
72 lines
1.7 KiB
GDScript
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)
|