Package engine

Source Code of engine.UniverseFactory

package engine;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.threed.jpct.Logger;
import com.threed.jpct.SimpleVector;

public class UniverseFactory {

  public static Universe createFromFile(String filePath) {
    try {
      String line;
      String[] properties = null;
      BufferedReader in = new BufferedReader(new FileReader(filePath));
      Logger.log("Loading map file: " + filePath);
      Universe universe = new Universe();
      while ((line = in.readLine()) != null) {
        properties = line.split("\\s");

        Planet planet = new Planet();
        planet.setPosition(Float.parseFloat(properties[0]), Float.parseFloat(properties[1]), Float.parseFloat(properties[2]));
        planet.setRadius(Float.parseFloat(properties[3]));
        planet.setPoints(Integer.parseInt(properties[4]));
        if (properties[5].equals("P")) {
          planet.setOwner(Ownership.PLAYER);
        } else if (properties[5].equals("E")) {
          planet.setOwner(Ownership.ENEMY);
        } else if (properties[5].equals("N")) {
          planet.setOwner(Ownership.NEUTRAL);
        }
        universe.addPlanet(planet);
      }
      return universe;
    } catch (NumberFormatException e) {
      Logger.log("Map file contains errors.");
      Logger.log(e.getMessage());
      return null;
    } catch (IOException e) {
      Logger.log("Could not load map file.");
      Logger.log(e.getMessage());
      return null;
    }
  }

  public static Universe createRandom(int numberOfPlanets) {
    float minDistance = 10.0f;
    float maxDistance = 60.0f;

    float minRadius = 1.5f;
    float maxRadius = 8.0f;

    int minPoints = 1;
    int maxPoints = 40;

    Universe universe = new Universe();
    List<Planet> planets = new ArrayList<Planet>();

    for (int i = 0; i < numberOfPlanets; i++) {
      Planet planet = new Planet();
      planet.setPosition(new SimpleVector(random(minDistance, maxDistance, true), random(minDistance, maxDistance, true), random(minDistance, maxDistance, true)));
      planet.setRadius(random(minRadius, maxRadius, false));
      planet.setPoints((int) random(minPoints, maxPoints, false));
      planet.setOwner(Ownership.NEUTRAL);

      if (planetColides(planet, planets)) {
        i--;
        continue;
      }

      planets.add(planet);
    }

    planets.get(0).setOwner(Ownership.PLAYER);
    planets.get(0).setPoints(50);
    planets.get(1).setOwner(Ownership.ENEMY);
    planets.get(1).setPoints(50);
   
    universe.getPlanets().addAll(planets);

    return universe;
  }

  private static Random RANDOM = new Random(System.nanoTime());

  private static final float random(final float pMin, final float pMax, boolean randomSign) {
    float number = pMin + RANDOM.nextFloat() * (pMax - pMin);
    if (randomSign) {
      if (-1 + (RANDOM.nextFloat() * (1 + 1)) < 0)
        return -number;
    }
    return number;
  }

  private static boolean planetColides(Planet p, List<Planet> otherPlanets) {
    for (Planet o : otherPlanets) {
      if (p.getPosition().distance(o.getPosition()) < p.getRadius() + 2 * o.getRadius())
        return true;
    }
    return false;
  }
}
TOP

Related Classes of engine.UniverseFactory

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.