/* * ----------------------------------------------------------------------- * Copyright 2012 - Alistair Rutherford - www.netthreads.co.uk * ----------------------------------------------------------------------- * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.netthreads.libgdx.sound; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.utils.Disposable; import com.google.inject.Singleton; /** * Cache of sound objects. * */ @Singleton public class SoundCache implements Disposable { private Map<String, Sound> data; private Map<String, SoundDefinition> definitions; /** * Construct cache. * */ public SoundCache() { // Cache. data = new HashMap<String, Sound>(); definitions = new HashMap<String, SoundDefinition>(); } /** * Load list of definitions. * * @param definitions */ public void load(List<SoundDefinition> definitions) { // Load/Re-load sounds. for (SoundDefinition definition : definitions) { add(definition); } } /** * Add sound. * */ private void add(SoundDefinition definition) { Sound sound = null; // Load sound sound = Gdx.audio.newSound(Gdx.files.internal(definition.getPath())); String name = definition.getName(); // Cache data. data.put(name, sound); // Cache details. definitions.put(name, definition); } /** * Return sound. * * @param name * The name of sound. * * @return The target sound or null if not found. */ public Sound get(String name) { return data.get(name); } /** * Return {@link Sound} map. * * @return The {@link Sound} map. */ public Map<String, Sound> getData() { return data; } /** * Return {@link SoundDefinition} map. * * @return The {@link SoundDefinition} map. */ public Map<String, SoundDefinition> getDefinitions() { return definitions; } /** * Dispose of cache data. * */ @Override public void dispose() { Collection<Sound> values = data.values(); for (Sound sound : values) { sound.dispose(); } data.clear(); definitions.clear(); } }