package ei.game.gamestate; import java.util.LinkedList; import java.util.Queue; import ei.engine.LWJGLGameWindow; import ei.engine.math.Vector3f; import ei.engine.scene.Sprite; import ei.engine.sound.SoundLoader; import ei.engine.state.GameState; import ei.engine.state.GameStateManager; import ei.engine.texture.TextureLoader; /** * This class handels the loading of the * images and sounds to the memmory. * * @author Ziver */ public class LoadingState extends GameState{ // The things to load private Queue loadTextures; private Queue loadSounds; // The name of the next state to activate after loading private String nextState; // Temp things for the loadingbar private int status; private Sprite bar; private Sprite loadBar; private Sprite background; /** * Creates a loadingstate * @param name The name of the state */ public LoadingState(String name,String nextState) { super(name); this.nextState = nextState; status = 0; loadTextures = new LinkedList(); loadSounds = new LinkedList(); bar = new Sprite("Bar","data/loadbar_front.png"); bar.setLocation(new Vector3f( (LWJGLGameWindow.getWidth()/2), (LWJGLGameWindow.getHeight()/2),0.0f)); loadBar = new Sprite("LoadingBar","data/loadbar.png"); loadBar.setLocation(new Vector3f( (LWJGLGameWindow.getWidth()/2)-loadBar.getWidth(), (LWJGLGameWindow.getHeight()/2)+3,0.0f)); background = new Sprite("Bar","data/loadbar_back.png"); background.setLocation(new Vector3f( (LWJGLGameWindow.getWidth()/2), (LWJGLGameWindow.getHeight()/2),0.0f)); } /** * Add a texture to be loaded * @param url */ public void addTexture(String url){ loadTextures.add(url); } /** * Add a sound to be loaded * @param url */ public void addSound(String url){ loadSounds.add(url); } /** * Loads the things */ public void update() { if(!loadTextures.isEmpty()){ TextureLoader.getTextureLoaderInstance().getTexture(loadTextures.poll()); status++; } else if(!loadSounds.isEmpty()){ SoundLoader.getInstnace().loadSound(loadSounds.poll()); status++; } else{ status++; if(status >= 100){ //deactivate this state and activate the next one GameStateManager.getInstance().removeState(this); GameStateManager.getInstance().setActive(nextState); } } background.update(); loadBar.update(); bar.update(); } /** * Render the load bar */ public void render() { // Calculate the procentage float procent = (float)status/100;//(loadTextures.size()+loadSounds.size()); loadBar.setLocation(new Vector3f( (LWJGLGameWindow.getWidth()/2)-loadBar.getWidth()+(loadBar.getWidth()*procent), (LWJGLGameWindow.getHeight()/2)+6,0.0f)); //render the bar background.render(); loadBar.render(); bar.render(); } }