Dive-Engine-2D/src/diveengine2d/Engine.java

162 lines
3.7 KiB
Java

package diveengine2d;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import javax.swing.JFrame;
public class Engine extends Canvas {
public static String gameFolder = null;
public static int WIDTH, HEIGHT;
public static String startScene = null;
public static String name = null;
public Engine(String gameFolder) {
// setup the folder
this.gameFolder = gameFolder;
System.out.println("Engine started with folder " + gameFolder + " ...");
boolean configFile = false;
try {
// get the config values from the config file
loadConfig();
configFile = true;
} catch (Exception e) {
e.printStackTrace();
}
// if we failed, screw this.
if (!configFile)
return;
// now, lets make our window.
System.out.println("start scene: " + startScene);
System.out.println("resolution: " + WIDTH + " X " + HEIGHT);
SceneManager.loadScene(startScene);
SceneManager.entityDump();
JFrame frame = new JFrame(name);
frame.add(this);
this.setPreferredSize(new Dimension(WIDTH, HEIGHT));
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.requestFocus();
this.addKeyListener(new Input());
//createBufferStrategy(2);
//bs = getBufferStrategy();
Time.nanos = System.nanoTime();
while(true) {
Time.startTime = System.currentTimeMillis();
if (System.currentTimeMillis() > Time.nextSecond) {
Time.nextSecond += 1000;
Time.FPS = Time.framesInCurrentSecond;
Time.framesInCurrentSecond = 0;
//System.out.println("FPS: " + Time.FPS);
}
Time.framesInCurrentSecond++;
render();
updateScene();
Time.tickTime = (System.nanoTime() - Time.nanos)/1000d;
Time.deltaTime = Time.tickTime * Time.timeScale;
Time.nanos = System.nanoTime();
// System.out.println("dTime: " + Time.deltaTime);
}
}
private void render() {
repaint();
}
private void updateScene() {
SceneManager.updateAll();
}
private void loadConfig() throws Exception {
File configFile = null;
try {
configFile = new File(gameFolder + File.separatorChar + "build.config");
} catch (Exception e) {
throw new Exception("Configuration File not found");
}
List<String> lines = Files.readAllLines(Paths.get(gameFolder, "build.config"), Charset.forName("UTF-8"));
for (String line : lines) {
if (line.startsWith("#"))
continue;
String[] parts = line.split("=");
if (parts.length != 2) {
System.out.println("line has incorrect parts length: '" + line + "'");
System.out.println("ignoring...");
continue;
}
parts[0] = parts[0].trim();
parts[1] = parts[1].trim();
if (parts[0].equals("StartScene")) {
this.startScene = parts[1];
} else if (parts[0].equals("Resolution")) {
String[] resparts = parts[1].split("x");
if (resparts.length != 2) {
System.out.println("line has incorrect parts length: '" + resparts + "'");
System.out.println("ignoring...");
continue;
}
resparts[0] = resparts[0].trim();
resparts[1] = resparts[1].trim();
try {
WIDTH = Integer.parseInt(resparts[0]);
HEIGHT = Integer.parseInt(resparts[1]);
} catch (NumberFormatException e) {
System.out.println("line has incorrect resolution: '" + parts[1] + "'");
System.out.println("ignoring...");
continue;
}
} else if (parts[0].equals("name")) {
name = parts[1].trim();
}
}
System.out.println("Loaded Config File...");
}
public void update(Graphics g) {
SceneManager.render((Graphics2D)g);
g.setColor(Color.BLACK);
}
}