package com.lucasdnd.ags.system; import java.util.Random; import org.newdawn.slick.AngelCodeFont; import org.newdawn.slick.Font; import org.newdawn.slick.Image; import org.newdawn.slick.SlickException; import org.newdawn.slick.Sound; import org.newdawn.slick.SpriteSheet; /** * All Images and Sounds are loaded here and then distributed to the rest of the game * @author tulio * */ public class ResourceLoader { private static ResourceLoader instance; // Characters public SpriteSheet janitorSpriteSheet, organizerSpriteSheet, geekSpriteSheet, ownerSpriteSheet; public SpriteSheet[] customerSpriteSheets, customerPlayingSpriteSheets; // Sounds public Sound coinSound; public Sound clickSound; public Sound cashRegisterSound; public Sound popSound; public Sound placementSound; public Sound notificationSound; // UI public Image title; public Image[] refreshButtonImages; public Image[] sellButtonImages; public Image[] moveButtonImages; public Image[] minusButtonImages; public Image[] plusButtonImages; public Image[] nextPageButtonImages; public Image[] previousPageButtonImages; public Image[] buyButtonImages; public Image[] inventoryButtonImages; public Image[] buyTilesButtonImages; public Image[] financesButtonImages; public Image[] marketButtonImages; public Image[] staffButtonImages; public Image[] buyGamesButtonImages; public Image[] buyConsolesButtonImages; public Image[] buyTvsButtonImages; public Image[] buyFurnituresButtonImages; public Image[] buyDecorationsButtonImages; public Image[] hireStaffButtonImages; public Image[] viewStaffButtonImages; public Image[] gameRatingImages; public Image[] unlockGamesButtonImages; public Image disabledUnlockGamesButtonImage; public SpriteSheet timeSpriteSheet; // Buttons with Enabled and Disabled versions public Image[] greenBuyButtonImages; public Image disabledBuyButtonImage; public Image[] fireButtonImages; // Game Objects public SpriteSheet shelf1SpriteSheet; public SpriteSheet shelf2SpriteSheet; public SpriteSheet tableSpriteSheet; public SpriteSheet tv1SpriteSheet; public SpriteSheet tv2SpriteSheet; public SpriteSheet tv3SpriteSheet; public SpriteSheet plantSpriteSheet; // Map public SpriteSheet wallSpriteSheet; public SpriteSheet floorSpriteSheet; public SpriteSheet groundSpriteSheet; // Speed buttons public Image[] pauseButtonImages; public Image[] speed1; public Image[] speed2; public Image[] speed3; // Consoles. Access these by calling "getRandomConsoleSpriteSheet()" private SpriteSheet[] consolesSheets; // Fonts public Font blackFont, redFont, grayFont, lightGrayFont, tinyWhiteFont, tinyBlackFont, tinyRedFont, tinyGrayFont, tinyLightGrayFont, tinyGreenFont; public Image uiOverlay; private ResourceLoader() throws SlickException { System.out.println("Loading sounds..."); // Sounds coinSound = new Sound("./res/sfx/coin.wav"); clickSound = new Sound("./res/sfx/click.wav"); cashRegisterSound = new Sound("./res/sfx/cash_register.wav"); popSound = new Sound("./res/sfx/pop.wav"); placementSound = new Sound("./res/sfx/placement.wav"); notificationSound = new Sound("./res/sfx/start.wav"); System.out.println("Loading sprites..."); // Characters janitorSpriteSheet = new SpriteSheet(InitializeImages(new String[] {"./res/img/characters/staff1.png"})[0], 14, 20); organizerSpriteSheet = new SpriteSheet(InitializeImages(new String[] {"./res/img/characters/staff2.png"})[0], 14, 20); geekSpriteSheet = new SpriteSheet(InitializeImages(new String[] {"./res/img/characters/staff3.png"})[0], 14, 20); customerSpriteSheets = new SpriteSheet[9]; customerPlayingSpriteSheets = new SpriteSheet[9]; for (int i = 1; i < customerSpriteSheets.length + 1; i++) { customerSpriteSheets[i-1] = new SpriteSheet("./res/img/characters/char" + i + ".png", 14, 20); customerPlayingSpriteSheets[i-1] = new SpriteSheet("./res/img/characters/char" + i + "_playing.png", 17, 21); } // Time Sprite Sheets timeSpriteSheet = new SpriteSheet(InitializeImages(new String[]{"./res/img/gui/time.png"})[0], 11, 11); // Refresh Button refreshButtonImages = InitializeImages(new String[] {"./res/img/gui/panels/refresh.png", "./res/img/gui/panels/refresh_hover.png", "./res/img/gui/panels/refresh.png"}); // Sell and Move Asset Buttons sellButtonImages = InitializeImages(new String[] {"./res/img/gui/panels/sell.png", "./res/img/gui/panels/sell_hover.png", "./res/img/gui/panels/sell_pressed.png"}); moveButtonImages = InitializeImages(new String[] {"./res/img/gui/panels/move.png", "./res/img/gui/panels/move_hover.png", "./res/img/gui/panels/move_pressed.png"}); // Plus and Minus Buttons minusButtonImages = InitializeImages(new String[] {"./res/img/gui/panels/minus.png", "./res/img/gui/panels/minus_hover.png", "./res/img/gui/panels/minus_pressed.png"}); plusButtonImages = InitializeImages(new String[] {"./res/img/gui/panels/plus.png", "./res/img/gui/panels/plus_hover.png", "./res/img/gui/panels/plus_pressed.png"}); // Next and Previous Page Buttons nextPageButtonImages = InitializeImages(new String[] {"./res/img/gui/panels/next_page.png", "./res/img/gui/panels/next_page_hover.png", "./res/img/gui/panels/next_page_pressed.png"}); previousPageButtonImages = InitializeImages(new String[] {"./res/img/gui/panels/previous_page.png", "./res/img/gui/panels/previous_page_hover.png", "./res/img/gui/panels/previous_page_pressed.png"}); // Menu Buttons Image[] grapeButton = InitializeImages(new String[]{"./res/img/gui/buttons/grapeButton.png", "./res/img/gui/buttons/grapeButtonHover.png", "./res/img/gui/buttons/grapeButtonPressed.png"}); buyButtonImages = grapeButton; buyGamesButtonImages = grapeButton; buyConsolesButtonImages = grapeButton; buyTvsButtonImages = grapeButton; buyFurnituresButtonImages = grapeButton; buyDecorationsButtonImages = grapeButton; inventoryButtonImages = InitializeImages(new String[]{"./res/img/gui/buttons/yellowButton.png", "./res/img/gui/buttons/yellowButtonHover.png", "./res/img/gui/buttons/yellowButtonPressed.png"}); buyTilesButtonImages = InitializeImages(new String[]{"./res/img/gui/buttons/roseButton.png", "./res/img/gui/buttons/roseButtonHover.png", "./res/img/gui/buttons/roseButtonPressed.png"}); financesButtonImages = InitializeImages(new String[]{"./res/img/gui/buttons/greenButton.png", "./res/img/gui/buttons/greenButtonHover.png", "./res/img/gui/buttons/greenButtonPressed.png"}); marketButtonImages = InitializeImages(new String[]{"./res/img/gui/buttons/purpleButton.png", "./res/img/gui/buttons/purpleButtonHover.png", "./res/img/gui/buttons/purpleButtonPressed.png"}); staffButtonImages = InitializeImages(new String[]{"./res/img/gui/buttons/roseButton.png", "./res/img/gui/buttons/roseButtonHover.png", "./res/img/gui/buttons/roseButtonPressed.png"}); hireStaffButtonImages = staffButtonImages; viewStaffButtonImages = staffButtonImages; // Buy Games, Games Rating, Unlock Games gameRatingImages = InitializeImages(new String[]{"./res/img/gui/panels/demand_1.png", "./res/img/gui/panels/demand_2.png", "./res/img/gui/panels/demand_3.png", "./res/img/gui/panels/demand_4.png", "./res/img/gui/panels/demand_5.png"}); unlockGamesButtonImages = InitializeImages(new String[]{"./res/img/gui/panels/unlock_button.png", "./res/img/gui/panels/unlock_button_hover.png", "./res/img/gui/panels/unlock_button_hover.png"}); disabledUnlockGamesButtonImage = InitializeImages(new String[]{"./res/img/gui/panels/unlock_button_disabled.png"})[0]; // Game Objects shelf1SpriteSheet = new SpriteSheet("./res/img/shelves/shelf1.png", 32, 42); shelf2SpriteSheet = new SpriteSheet("./res/img/shelves/shelf2.png", 32, 42); tableSpriteSheet = new SpriteSheet("./res/img/tables/table1.png", 48, 32); tv1SpriteSheet = new SpriteSheet("./res/img/tvs/tv1.png", 22, 20); tv2SpriteSheet = new SpriteSheet("./res/img/tvs/tv2.png", 22, 20); tv3SpriteSheet = new SpriteSheet("./res/img/tvs/tv3.png", 22, 20); plantSpriteSheet = new SpriteSheet("./res/img/decoration/plant.png", 21, 38); // Map wallSpriteSheet = new SpriteSheet("./res/map/walls.png", 20, 27); floorSpriteSheet = new SpriteSheet("./res/map/floor.png", 32, 16); groundSpriteSheet = new SpriteSheet("./res/map/ground_32_16.png", 32, 16); // Buy Buttons greenBuyButtonImages = InitializeImages(new String[]{"./res/img/gui/buttons/buy_normal.png", "./res/img/gui/buttons/buy_hover.png", "./res/img/gui/buttons/buy_pressed.png"}); disabledBuyButtonImage = InitializeImages(new String[]{"./res/img/gui/buttons/buy_disabled.png"})[0]; fireButtonImages = InitializeImages(new String[]{"./res/img/gui/buttons/fire_normal.png", "./res/img/gui/buttons/fire_hover.png", "./res/img/gui/buttons/fire_pressed.png"}); title = new Image("./res/img/gui/title.png"); // UI Overlay uiOverlay = new Image("./res/img/gui/menu_overlay.png"); // UI Overlay Speed Buttons pauseButtonImages = InitializeImages(new String[]{"./res/img/gui/panels/pause_bnw.png", "./res/img/gui/panels/pause_hover.png", "./res/img/gui/panels/pause.png"}); speed1 = InitializeImages(new String[]{"./res/img/gui/panels/play_bnw.png", "./res/img/gui/panels/play_hover.png", "./res/img/gui/panels/play.png"}); speed2 = InitializeImages(new String[]{"./res/img/gui/panels/fast2_bnw.png", "./res/img/gui/panels/fast2_hover.png", "./res/img/gui/panels/fast2.png"}); speed3 = InitializeImages(new String[]{"./res/img/gui/panels/fast3_bnw.png", "./res/img/gui/panels/fast3_hover.png", "./res/img/gui/panels/fast3.png"}); // Fonts blackFont = new AngelCodeFont("./res/font/proggyCleanBlack.fnt", "./res/font/proggyCleanBlack.png"); redFont = new AngelCodeFont("./res/font/proggyCleanRed.fnt", "./res/font/proggyCleanRed.png"); grayFont = new AngelCodeFont("./res/font/proggyCleanGray.fnt", "./res/font/proggyCleanGray.png"); lightGrayFont = new AngelCodeFont("./res/font/proggyCleanLightGray.fnt", "./res/font/proggyCleanLightGray.png"); tinyWhiteFont = new AngelCodeFont("./res/font/proggyTinyWhite.fnt", "./res/font/proggyTinyWhite.png"); tinyBlackFont = new AngelCodeFont("./res/font/proggyTinyBlack.fnt", "./res/font/proggyTinyBlack.png"); tinyRedFont = new AngelCodeFont("./res/font/proggyTinyRed.fnt", "./res/font/proggyTinyRed.png"); tinyGrayFont = new AngelCodeFont("./res/font/proggyTinyGray.fnt", "./res/font/proggyTinyGray.png"); tinyLightGrayFont = new AngelCodeFont("./res/font/proggyTinyLightGray.fnt", "./res/font/proggyTinyLightGray.png"); tinyGreenFont = new AngelCodeFont("./res/font/proggyTinyGreen.fnt", "./res/font/proggyTinyGreen.png"); // Consoles consolesSheets = new SpriteSheet[5]; consolesSheets[0] = new SpriteSheet("./res/img/consoles/console1.png", 25, 14); consolesSheets[1] = new SpriteSheet("./res/img/consoles/console2.png", 25, 14); consolesSheets[2] = new SpriteSheet("./res/img/consoles/console3.png", 25, 14); consolesSheets[3] = new SpriteSheet("./res/img/consoles/console4.png", 25, 14); consolesSheets[4] = new SpriteSheet("./res/img/consoles/console5.png", 25, 14); System.out.println("done loading"); } /** * Returns a random Console Sprite Sheet * @return */ public SpriteSheet getRandomConsoleSpriteSheet() { return consolesSheets[new Random().nextInt(consolesSheets.length)]; } /** * Returns a pair of Customer Sprite Sheets * @return */ public SpriteSheet[] getRandomCustomerSpriteSheet() { int rand = new java.util.Random().nextInt(customerSpriteSheets.length); return new SpriteSheet[]{customerSpriteSheets[rand], customerPlayingSpriteSheets[rand]}; } /** * Returns a List of Images * @param imageNames * @return * @throws SlickException */ private Image[] InitializeImages(String[] imageNames) throws SlickException { Image[] images = new Image[imageNames.length]; for(int i = 0; i < imageNames.length; i++) { images[i] = new Image(imageNames[i]); images[i].setFilter(Image.FILTER_NEAREST); } return images; } /** * Singleton * @return * @throws SlickException */ public static ResourceLoader getInstance() throws SlickException { if(instance == null) { instance = new ResourceLoader(); } return instance; } }