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

152 lines
3.4 KiB
Java
Raw Normal View History

2016-02-15 17:52:56 -05:00
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;
2016-02-16 03:42:12 -05:00
import java.nio.charset.Charset;
2016-02-15 17:52:56 -05:00
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 static BufferStrategy bs;
2016-02-15 17:52:56 -05:00
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);
2016-02-16 03:42:12 -05:00
this.requestFocus();
this.addKeyListener(new Input());
createBufferStrategy(2);
bs = getBufferStrategy();
2016-02-15 17:52:56 -05:00
while(true) {
long startTime = System.currentTimeMillis();
updateScene();
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
render(g);
bs.show();
int elapsed = (int)(System.currentTimeMillis() - startTime);
try{
Thread.sleep(17 - elapsed);
}catch(Exception e) {
}
}
2016-02-15 17:52:56 -05:00
}
2016-02-16 03:42:12 -05:00
private void updateScene() {
SceneManager.updateAll();
}
2016-02-15 17:52:56 -05:00
private void loadConfig() throws Exception {
File configFile = null;
try {
2016-02-16 03:42:12 -05:00
configFile = new File(gameFolder + File.separatorChar + "build.config");
2016-02-15 17:52:56 -05:00
} catch (Exception e) {
throw new Exception("Configuration File not found");
}
2016-02-16 03:42:12 -05:00
List<String> lines = Files.readAllLines(Paths.get(gameFolder, "build.config"), Charset.forName("UTF-8"));
2016-02-15 17:52:56 -05:00
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...");
}
private void render(Graphics2D g) {
SceneManager.render(g);
2016-02-15 17:52:56 -05:00
g.setColor(Color.BLACK);
}
}