62 lines
1.6 KiB
Ruby
62 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Module for managing and interacting with music.
|
|
module Music
|
|
class << self
|
|
def queue
|
|
@queue ||= {}
|
|
@queue
|
|
end
|
|
|
|
def queue_up(key, channel = 0)
|
|
@queue[channel] ||= []
|
|
@queue[channel].push(MUSIC.fetch(key))
|
|
end
|
|
|
|
def for(key)
|
|
MUSIC.fetch(key)
|
|
end
|
|
|
|
def play(args, key, opts = { channel: 0 })
|
|
MUSIC.fetch(key).play_music(args, opts)
|
|
end
|
|
|
|
def stopped(args, channel = 0)
|
|
!args.audio.key?("MUSIC_CHANNEL_#{channel}")
|
|
end
|
|
|
|
def paused(args, channel = 0)
|
|
args.audio["MUSIC_CHANNEL_#{channel}"].paused unless stopped(args, channel)
|
|
end
|
|
|
|
def stop(args, channel = 0)
|
|
args.audio.delete("MUSIC_CHANNEL_#{channel}")
|
|
end
|
|
|
|
def pause(args, channel = 0)
|
|
args.audio["MUSIC_CHANNEL_#{channel}"].paused = true unless stopped(args, channel)
|
|
end
|
|
|
|
def resume(args, channel = 0)
|
|
args.audio["MUSIC_CHANNEL_#{channel}"].paused = false unless stopped(args, channel)
|
|
end
|
|
|
|
def set_volume(args, volume, channel = 0)
|
|
args.audio["MUSIC_CHANNEL_#{channel}"].gain = volume unless stopped(args, channel)
|
|
end
|
|
|
|
def tick(args)
|
|
queue.each do |channel, value|
|
|
unless value.empty?
|
|
if args.audio["MUSIC_CHANNEL_#{channel}"]
|
|
if args.audio["MUSIC_CHANNEL_#{channel}"].looping
|
|
args.audio["MUSIC_CHANNEL_#{channel}"].looping = false
|
|
end
|
|
else
|
|
value.shift.play_music(args, { channel: channel, gain: args.state.setting.music ? 0.8 : 0.0 })
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|