package org.erikaredmark.monkeyshines;
import java.util.HashMap;
import java.util.Map;
/**
*
* An enumeration of all sound effects in the game. Is is the responsibility of a paricular
* {@code WorldResource} to map a given sound effect to a specific clip. All sound effects are
* stored in-memory. This does NOT handle streaming sounds such as music.
* <p/>
* These sound effects are specific to a particular world. This does not enumerate global
* sounds, such as any menu/button sounds, used outside of actual gameplay.
*
* @author Erika Redmark
*
*/
public enum GameSoundEffect {
APPLAUSE {
@Override public String filename() { return "applause.ogg"; }
},
BEE_STING {
@Override public String filename() { return "bee.ogg"; }
},
BONZO_HURT {
@Override public String filename() { return "bonzoHurt.ogg"; }
},
EXTRA_LIFE {
@Override public String filename() { return "extraLife.ogg"; }
},
LAST_RED_KEY {
@Override public String filename() { return "lastRedKey.ogg"; }
},
LAST_BLUE_KEY {
@Override public String filename() { return "lastBlueKey.ogg"; }
},
LEVEL_FINISHED {
@Override public String filename() { return "levelFinishedScreen.ogg"; }
},
POWERUP_FADE {
@Override public String filename() { return "powerupFade.ogg"; }
},
POWERUP_SHIELD {
@Override public String filename() { return "powerupShield.ogg"; }
},
POWERUP_WING {
@Override public String filename() { return "powerupWing.ogg"; }
},
POWERUP_EXTRA_LIFE {
@Override public String filename() { return "powerupExtralife.ogg"; }
},
STANDARD_DEATH {
@Override public String filename() { return "bonzoStandardDeath.ogg"; }
},
ELECTRIC_DEATH {
@Override public String filename() { return "bonzoElectricDeath.ogg"; }
},
BOMB_DEATH {
@Override public String filename() { return "bonzoBombDeath.ogg"; }
},
EXPLOSION {
@Override public String filename() { return "explosion.ogg"; }
},
ENERGY_RESTORE {
@Override public String filename() { return "energyRestore.ogg"; }
},
TICK {
@Override public String filename() { return "tick.ogg"; }
},
YES {
@Override public String filename() { return "yes.ogg"; }
},
YUM_COLLECT {
@Override public String filename() { return "yumCollect.ogg"; }
};
private static final Map<String, GameSoundEffect> filenameToEnum;
static {
filenameToEnum = new HashMap<>();
for (GameSoundEffect e : GameSoundEffect.values() ) {
filenameToEnum.put(e.filename(), e);
}
}
/**
*
* Returns the name of the file (including extension) of where the sound is expected to be
* located in the resource pack .zip file. This is only the file name; not a path.
*
* @return
* expected filename for sound in resource pack, including extension
*
*/
public abstract String filename();
/**
*
* Returns the enumerated {@code GameSoundEffect} that corresponds to the given filename, typically
* taken from a resource pack. This may return {@code null} if the filename maps to no known
* sound effect.
*
* @param filename
* filename of sound effect
*
* @return
* instance of this enum mapped to the given filename, or {@code null} if the filename corresponds
* to no known sound effect
*
*/
public static GameSoundEffect filenameToEnum(String filename) {
return filenameToEnum.get(filename);
}
}