package org.erikaredmark.monkeyshines.menu; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; /** * * Class that loads up main menu resources. All instances of this class are the same, but they * are not cached. This class is designed to be created when the graphics are needed, and disposed * of (falling out of scope and GC'd) when they are not. Menu graphics are quite large and should * not be persisting in memory during gameplay. * <p/> * Offers access to all main menu graphics, sounds, and music. All resources are public, final * variables. This resource is immutable once created. * * @author Erika Redmark * */ public final class MainMenuResource { // see main class description and constructor description; INTENTIONALLY NON-STATIC! // Three elements in array: first is normal, second is clicked, third is highlighted. // Package access also intended final BufferedImage[] BUTTON_CONTROLS = new BufferedImage[3]; final BufferedImage[] BUTTON_PLAY_GAME = new BufferedImage[3]; final BufferedImage[] BUTTON_MUSIC = new BufferedImage[3]; final BufferedImage[] BUTTON_SOUND = new BufferedImage[3]; final BufferedImage[] BUTTON_HIGH = new BufferedImage[3]; final BufferedImage[] BUTTON_HELP = new BufferedImage[3]; final BufferedImage[] BUTTON_EXIT = new BufferedImage[3]; final BufferedImage INFORMATION_BORDER; final BufferedImage INFORMATION_CONTENT; final BufferedImage BACKGROUND; final String TEXT_CONTROLS = "Controls"; final String TEXT_PLAY_GAME = "New Game"; final String TEXT_MUSIC = "Music"; final String TEXT_SOUND = "Sound"; final String TEXT_HIGH = "High Scores"; final String TEXT_HELP = "Help"; final String TEXT_EXIT = "Quit"; /** * * Initialises this object with static main menu resources for access in the program. It is the responsibility * of the caller to only initialise this once and let it go out of scope properly such that these resources * are not persisted or duplicated. * * @throws RuntimeException * if the graphics resources could not be found. As they are packaged in the .jar, this indicates a completely * unhandable issue * */ public MainMenuResource() { // Just to make it easier on the typing... Class<?> clazz = this.getClass(); try { // Load Controls BUTTON_CONTROLS[0] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnControls1.png") ); BUTTON_CONTROLS[1] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnControls2.png") ); BUTTON_CONTROLS[2] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnControls3.png") ); // Load Play Game BUTTON_PLAY_GAME[0] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnNewGame1.png") ); BUTTON_PLAY_GAME[1] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnNewGame2.png") ); BUTTON_PLAY_GAME[2] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnNewGame3.png") ); // Load Music BUTTON_MUSIC[0] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnMusic1.png") ); BUTTON_MUSIC[1] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnMusic2.png") ); BUTTON_MUSIC[2] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnMusic3.png") ); // Load Sound BUTTON_SOUND[0] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnSound1.png") ); BUTTON_SOUND[1] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnSound2.png") ); BUTTON_SOUND[2] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnSound3.png") ); // Load High Scores BUTTON_HIGH[0] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnHighScores1.png") ); BUTTON_HIGH[1] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnHighScores2.png") ); BUTTON_HIGH[2] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnHighScores3.png") ); // Load Help BUTTON_HELP[0] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnHelp1.png") ); BUTTON_HELP[1] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnHelp2.png") ); BUTTON_HELP[2] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnHelp3.png") ); // Load Exit BUTTON_EXIT[0] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnQuit1.png") ); BUTTON_EXIT[1] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnQuit2.png") ); BUTTON_EXIT[2] = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/btnQuit3.png") ); // Load borders and info INFORMATION_BORDER = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/menuInfoBorder.png") ); INFORMATION_CONTENT = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/menuInfoWelcome.png") ); // The most important of all; the main background BACKGROUND = ImageIO.read(clazz.getResourceAsStream("/resources/graphics/mainmenu/menuBackground.png") ); } catch (IOException e) { throw new RuntimeException("Could not load main menu resource; possibly corrupted .jar: " + e.getMessage(), e); } } }