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;
}
}