Package engine

Source Code of engine.Universe

package engine;

import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;

import com.threed.jpct.FrameBuffer;
import com.threed.jpct.World;

import font.GLFont;

public class Universe implements IEntity {
  private static final int MIN_SEND_POINTS = 1;

  private int victory;
 
  private List<Planet> planets;
  private int playerPlanetCounter;
  private int enemyPlanetCounter;
  private float aggressivness;

  private List<Ship> ships;
  private List<Ship> shipsToRemove;

  private EventHandler eventHandler;

  private DifficultyLevel difficultyLevel;

  private World world;

  private static GLFont font;

  public Universe() {
    planets = new ArrayList<Planet>();
    setVictory(0);
    ships = new ArrayList<Ship>();
    shipsToRemove = new ArrayList<Ship>();
    difficultyLevel = new DifficultyLevel(DifficultyLevel.HARD);
    font = new GLFont(new Font("Arial", Font.PLAIN, 16));
  }

  public void addPlanet(Planet p) {
    planets.add(p);
  }

  public void addShip(Ship s) {
    ships.add(s);
  }

  public World getWorld() {
    return world;
  }

  public List<Planet> getPlanets() {
    return planets;
  }

  @Override
  public void onInit(World world, FrameBuffer buffer) {
    aggressivness = 0.5f;
    eventHandler = new EventHandler(world, buffer, this);
    this.world = world;

    for (Planet planet : getPlanets())
      planet.onInit(world, buffer);

    AIPlayer ai = new AIPlayer(this, difficultyLevel);
    ai.start();
  }

  @Override
  public void onUpdate(World world, FrameBuffer buffer) {
    eventHandler.handle();

    playerPlanetCounter = 0;
    enemyPlanetCounter = 0;

    for (Planet planet : planets) {
      planet.onUpdate(world, buffer);

      switch (planet.getOwner()) {
      case PLAYER:
        playerPlanetCounter++;
        break;
      case ENEMY:
        enemyPlanetCounter++;
        break;
      }
    }

    if (playerPlanetCounter == 0 && !isShipsExist(Ownership.PLAYER)) {
      enemyWon();
    } else if (enemyPlanetCounter == 0 && !isShipsExist(Ownership.ENEMY)) {
      playerWon();
    }

    for (int i = 0; i < ships.size(); i++)
      ships.get(i).onRenderUpdate(world, buffer);

    font.blitString(buffer, "A: " + getAggressivnessAsPercent(aggressivness), 700, 30, 100, Color.WHITE);
  }

  private boolean isShipsExist(Ownership owner) {
    for (int i = 0; i < ships.size(); i++){
      if (ships.get(i).getOwner() == owner)
        return true;
    }
    return false;
  }

  private String getAggressivnessAsPercent(float a) {
    int percent = (int) (a * 100);
    return percent + "%";
  }

  public void onLogicUpdate(World world, FrameBuffer buffer) {
    for (int i=0; i<ships.size(); i++) {
      ships.get(i).onUpdate(world, buffer);

      if (ships.get(i).isShipArrived()) {
        ships.get(i).destroy(world);
        shipsToRemove.add(ships.get(i));
      }
    }
    ships.removeAll(shipsToRemove);
  }

  public void onDragBetweenPlanets(Planet src, Planet dest) {
    if (src.getPoints() > MIN_SEND_POINTS && src.getOwner() == Ownership.PLAYER) {
      Ship ship = new Ship(world, src, dest, (int) (src.getPoints() * aggressivness));
      ship.setOwner(Ownership.PLAYER);
      ships.add(ship);
    }
  }
 
  private void playerWon(){
    setVictory(1);

  }
 
  private void enemyWon(){
    setVictory(-1);
  }

  public void onAggressivnessChange(float a) {
    //Logger.log("Agg changed: " + a);
    aggressivness = a;
  }

  public int getVictory() {
    return victory;
  }

  public void setVictory(int victory) {
    this.victory = victory;
  }
 
  public void stopPointIncrementation(){
    for(int i = 0; i < planets.size(); i++)
      planets.get(i).stopPointIncrementation();
  }
 
  public void startPointIncrementation(){
    for(int i = 0; i < planets.size(); i++)
      planets.get(i).startPointIncrementation();
  }
}
TOP

Related Classes of engine.Universe

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.