# frozen_string_literal: true class IMICFPS module SoundManager extend CyberarmEngine::Common MASTERS = {}.freeze EFFECTS = [].freeze PLAYLISTS = {}.freeze def self.master_volume 1.0 end def self.music_volume 0.25 * master_volume end def self.sfx_volume 0.5 * master_volume end def self.load_master(package) return if MASTERS[package] yaml = YAML.load_file("#{IMICFPS.assets_path}/#{package}/shared/sound/master.yaml") MASTERS[package] = yaml end def self.sound(package, name) if data = sound_data(package, name.to_s) get_sample("#{IMICFPS.assets_path}/#{package}/shared/sound/#{data['path']}") else raise "Missing sound: '#{name}' in package '#{package}'" end end def self.sound_data(package, name) load_master(package) if master = MASTERS[package] return master["sounds"].find { |s| s["name"] == name } end nil end def self.sound_effect(klass, options) EFFECTS << klass.new(options) end def self.update EFFECTS.each { |e| e.update; EFFECTS.delete(e) if e.done? } end end end