Package ast.level

Source Code of ast.level.Level

package ast.level;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import org.lwjgl.input.Keyboard;
import org.lwjgl.util.vector.Vector3f;
import static org.lwjgl.opengl.GL11.*;

import ast.AssetStore;
import ast.Game;
import ast.StateManager;
import ast.StateManager.State;
import ast.effect.Light;
import ast.entity.*;
import ast.ui.ActionBar;
import ast.ui.UI;


public class Level {
  Player player;
  public List<Entity> asteroids; 
  public List<Bullet> bullets;
  private List<Entity> removeList = new ArrayList<Entity>();
  private List<Entity> addList = new ArrayList<Entity>()
 
  private ActionBar actionBar = new ActionBar();
 
  private Light light;
  private Game game;
 
  public float xMin = -6, xMax = 6;
  public float yMin= -4.5f, yMax = 4.5f;
 
  private Vector3f playerSpawn;
  /**
   * Initialize level
   * @param game
   */
  public void init(Game game){
    playerSpawn = new Vector3f(0,0,-10);
   
    asteroids = new ArrayList<Entity>();
    bullets = new ArrayList<Bullet>();   
    player = new Player(this, AssetStore.getModel("Player"));
    player.setPos(playerSpawn);
   
    light = new Light();
    light.init(new Vector3f(5,5,0));
   
    addRandomAsteroids(8);
   
    addAddList()
   
    actionBar.init(player);
    this.game = game;
  }
 
  /**
   * Update level
   * @param delta time since last update(ms)
   */
  public void update(int delta){
    deleteRemoveList();
    addAddList();
    //light.update();
   
    for (Entity entity: asteroids){
      entity.update(delta);
    }
   
    for (Bullet bullet: bullets){
      bullet.update(delta);
    }
   
    player.update(delta);
    actionBar.update(delta);
   
    if(asteroids.size() <= 0){
      game.reset();
    }
   
    if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)){
      StateManager.setState(State.MainMenu);
    }
  }
 
  /**
   * Render level
   */
  public void render(){
   
    drawBackground();
   
    for (Entity entity: asteroids){
      entity.render();
    }
 
    for (Bullet bullet: bullets){
      bullet.render();
    }
   
    player.render();
   
    UI.enable2D();
     
      actionBar.render();       

    UI.disable2D();
  }
  /**
   * Add bullet to level
   * @param b bullet
   */
  public void addBullet(Bullet b){
    bullets.add(b);
  }
 
  /**
   * Add asteroids with random pos/speed/rotation
   * @param num int number of asteroids
   */
  public void addRandomAsteroids(int num){
   
    for(int i = 0; i<= num-1; i++){
      Asteroid ast = new Asteroid(this, AssetStore.getModel("Asteroid"), 2);     
      ast.randomSpeed();     
     
      ast.setPos(randomSpawn());
      while(ast.collidesWith(player)){
        ast.setPos(randomSpawn());
      }
     
     
      addEntity(ast);
    }
   
  }
 
  /**
   * Add new asteroid
   * @param pos Vector3f position on screen
   * @param size float
   */
  public void addAsteroid(Vector3f pos,float size){
    Asteroid ast;
   
    ast = new Asteroid(this, AssetStore.getModel("Asteroid"), size);   
   
    ast.setPos(pos);
    ast.randomSpeed();
    addEntity(ast);
  }

  /**
   * Remove Entity from level
   * @param e Entity
   */
  public void removeEntity(Entity e){
    removeList.add(e);
  }
 
  /**
   * Add entity to level
   * @param e Entity
   */
  private void addEntity(Entity e){
    addList.add(e);
  }
 
  /**
   * Add entities in list
   */
  private void addAddList(){
    for(Entity e: addList){
      if(e instanceof Asteroid){
        asteroids.add(e);
      }else{
      }
    }
    addList.clear();
  }
 
  /**
   * Remove entities in list
   */
  private void deleteRemoveList(){
    for(Entity e: removeList){
      if(e instanceof Bullet){
        bullets.remove(e);
      }else{
        asteroids.remove(e);
      }
    }
    removeList.clear();
  }
 
  /**
   * Render background image
   */
  private void drawBackground(){
    UI.enable2D();
    float xMax = 1.6f;
   
    //glLoadIdentity();
   
    glBindTexture(GL_TEXTURE_2D, AssetStore.getTexture("Background").getTextureID());
   
    glBegin( GL_QUADS )
      //bottom left
        glTexCoord2f(0,0);
        glVertex2f(0, 0);
       
        //bottom right
        glTexCoord2f(1,0);
        glVertex2f(1*xMax, 0);
       
        //top right
        glTexCoord2f(1,1);
        glVertex2f(1*xMax, 1);
       
        //top left
        glTexCoord2f(0,1);
        glVertex2f(0, 1);
       
    glEnd();
    UI.disable2D();
 
 
  /**
   *
   * @return Random Vector3f on screen
   */
  private Vector3f randomSpawn(){
    float xLimit = 4, yLimit = 4;
   
   
    Random rand = new Random();
   
    float xPos = (rand.nextFloat()-0.5f)*2*xLimit;
    float yPos = (rand.nextFloat()-0.5f)*2*yLimit;
   
   
    return new Vector3f(xPos, yPos,-10);
  }
 


}
TOP

Related Classes of ast.level.Level

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.