175 lines
4.3 KiB
Java
175 lines
4.3 KiB
Java
package diveengine2d;
|
|
|
|
import java.awt.Canvas;
|
|
import java.awt.Color;
|
|
import java.awt.Dimension;
|
|
import java.awt.Graphics2D;
|
|
import java.awt.RenderingHints;
|
|
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.*;
|
|
|
|
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 = null;
|
|
public static boolean running = true;
|
|
|
|
public Engine(String gameFolder) {
|
|
|
|
// setup the folder
|
|
Engine.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(WindowConstants.EXIT_ON_CLOSE);
|
|
this.requestFocus();
|
|
this.addKeyListener(new Input());
|
|
this.addMouseMotionListener(new Input());
|
|
this.addMouseListener(new Input());
|
|
|
|
createBufferStrategy(2);
|
|
bs = getBufferStrategy();
|
|
|
|
Time.nanos = System.nanoTime();
|
|
|
|
while(running) {
|
|
|
|
Time.startTime = System.currentTimeMillis();
|
|
if (System.currentTimeMillis() > Time.nextSecond) {
|
|
Time.nextSecond += 1000;
|
|
Time.FPS = Time.framesInCurrentSecond;
|
|
Time.framesInCurrentSecond = 0;
|
|
System.out.println("Timed Frames: " + Time.timedFramesCurrent);
|
|
System.out.println("Calculated Frames: " + Time.FPS);
|
|
Time.timedFramesCurrent = 0;
|
|
}
|
|
Time.framesInCurrentSecond++;
|
|
|
|
render();
|
|
updateScene();
|
|
Time.tickTime = (System.nanoTime() - Time.nanos)/16640000d;
|
|
Time.deltaTime = Time.tickTime * Time.timeScale;
|
|
Time.nanos = System.nanoTime();
|
|
// System.out.println("dTime: " + Time.deltaTime);
|
|
|
|
Time.timedFramesCurrent += Time.deltaTime;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public void render() {
|
|
Graphics2D g = (Graphics2D)bs.getDrawGraphics();
|
|
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
|
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
|
render(g);
|
|
DebugSettings.render(g);
|
|
Tests.run(g);
|
|
bs.show();
|
|
}
|
|
|
|
private void updateScene() {
|
|
SceneManager.updateAll();
|
|
}
|
|
|
|
private void loadConfig() throws Exception {
|
|
|
|
try {
|
|
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")) {
|
|
Engine.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);
|
|
g.setColor(Color.BLACK);
|
|
}
|
|
}
|