asdf
parent
bf9e74169d
commit
0cc8babc19
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Dive Engine 2D</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
package diveengine2d;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
public abstract class DiveScript {
|
||||
public boolean enabled = true;
|
||||
public String name;
|
||||
public Entity entity;
|
||||
|
||||
/**
|
||||
* called every frame
|
||||
*/
|
||||
public void update() {}
|
||||
|
||||
/**
|
||||
* when initialized in the scene. <br />
|
||||
* SCENE WILL BE INCOMPLETE HERE.
|
||||
*/
|
||||
public void create() {}
|
||||
|
||||
/**
|
||||
* called after the scene has been initialized
|
||||
*/
|
||||
public void awake() {}
|
||||
|
||||
/**
|
||||
* render method beeboop
|
||||
* @param g
|
||||
*/
|
||||
public void render(Graphics2D g) {}
|
||||
}
|
||||
|
|
@ -0,0 +1,150 @@
|
|||
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.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;
|
||||
|
||||
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);
|
||||
|
||||
createBufferStrategy(2);
|
||||
bs = getBufferStrategy();
|
||||
|
||||
while(true) {
|
||||
repaint();
|
||||
try{
|
||||
Thread.sleep(17);
|
||||
}catch(Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void loadConfig() throws Exception {
|
||||
|
||||
File configFile = null;
|
||||
try {
|
||||
configFile = new File(gameFolder + "\\build.config");
|
||||
} catch (Exception e) {
|
||||
throw new Exception("Configuration File not found");
|
||||
}
|
||||
|
||||
List<String> lines = Files.readAllLines(Paths.get(gameFolder, "build.config"));
|
||||
|
||||
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) {
|
||||
Graphics2D g2 = null;
|
||||
try {
|
||||
g2 = (Graphics2D) bs.getDrawGraphics();
|
||||
render(g2);
|
||||
} finally {
|
||||
g2.dispose();
|
||||
}
|
||||
bs.show();
|
||||
}
|
||||
|
||||
private void render(Graphics2D g) {
|
||||
SceneManager.render(g);
|
||||
g.setColor(Color.BLACK);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package diveengine2d;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Entity {
|
||||
public float x = 0, y = 0, rotation = 0;
|
||||
public boolean enabled = true;
|
||||
public String GUID = null;
|
||||
public String name = null;
|
||||
|
||||
public List<DiveScript> components = new ArrayList<DiveScript>();
|
||||
|
||||
public String toString() {
|
||||
return "name: " + name + "\n" +
|
||||
"GUID: " + GUID +
|
||||
componentsToString();
|
||||
|
||||
}
|
||||
private String componentsToString() {
|
||||
String _return = "";
|
||||
for(DiveScript c : components) {
|
||||
_return += "\nComponent " + c.name;
|
||||
}
|
||||
return _return;
|
||||
}
|
||||
|
||||
public void addComponent(DiveScript component) {
|
||||
components.add(component);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package diveengine2d;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
|
||||
public class RectRenderer extends DiveScript{
|
||||
|
||||
public Color color = null;
|
||||
public int width, height;
|
||||
|
||||
public void render(Graphics2D g) {
|
||||
g.setColor(color);
|
||||
g.fillRect((int)entity.x, (int)entity.y, width, height);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
package diveengine2d;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Stack;
|
||||
|
||||
public class SceneManager {
|
||||
private static ArrayList<Entity> entities = new ArrayList<Entity>();
|
||||
|
||||
/**
|
||||
* load scene by filename without the .scene extension.
|
||||
* @param scene
|
||||
* @return
|
||||
*/
|
||||
public static boolean loadScene(String scene) {
|
||||
synchronized(entities) {
|
||||
try{
|
||||
List<String> lines = Files.readAllLines(Paths.get(Engine.gameFolder, scene + ".scene"));
|
||||
Stack<Object> scopeObject = new Stack<Object>();
|
||||
for (String line : lines) {
|
||||
//System.out.println(line);
|
||||
line = line.trim();
|
||||
if(line.startsWith("#")) continue;
|
||||
if(line.startsWith("[") && line.endsWith("]")){
|
||||
String newLine = line.substring(1, line.length() - 1);
|
||||
Class<?> entityClass = null;
|
||||
try{
|
||||
entityClass = Class.forName(newLine);
|
||||
}catch(ClassNotFoundException e) {
|
||||
System.out.println(newLine + " class not found!");
|
||||
continue;
|
||||
}
|
||||
Object object = entityClass.newInstance();
|
||||
if(!(object instanceof Entity)) {
|
||||
System.out.println(entityClass + " is not an entity");
|
||||
continue;
|
||||
}
|
||||
entities.add((Entity)object);
|
||||
scopeObject.push((Entity)object);
|
||||
}else if(line.startsWith("$")) {
|
||||
//scope variable
|
||||
String[] parts = line.substring(1).split("=");
|
||||
if(parts.length != 2) {
|
||||
System.out.println("line: " + line + " is incorrect.\nignoring...");
|
||||
continue;
|
||||
}
|
||||
parts[0] = parts[0].trim();
|
||||
parts[1] = parts[1].trim();
|
||||
String key = parts[0], value = parts[1];
|
||||
|
||||
if(scopeObject.isEmpty()) {
|
||||
System.out.println("no object in scope to bind " + key + " to");
|
||||
continue;
|
||||
}
|
||||
|
||||
if(value.startsWith("\"") && value.endsWith("\"")) {
|
||||
value = value.substring(1, value.length() - 1);
|
||||
scopeObject.peek().getClass().getField(key).set(scopeObject.peek(), value);
|
||||
}else if(value.startsWith("#")) {
|
||||
value = value.substring(1, value.length());
|
||||
//TODO CHECK IF 6 characters
|
||||
int r = Integer.parseInt(value.substring(0, 2), 16);
|
||||
int g = Integer.parseInt(value.substring(2, 4), 16);
|
||||
int b = Integer.parseInt(value.substring(4, 6), 16);
|
||||
|
||||
Color color = new Color(r, g, b);
|
||||
|
||||
scopeObject.peek().getClass().getField(key).set(scopeObject.peek(), color);
|
||||
}else if(value.endsWith("F") || value.endsWith("f")) {
|
||||
value = value.substring(0, value.length() - 1);
|
||||
|
||||
int intValue;
|
||||
try{
|
||||
intValue = Integer.parseInt(value);
|
||||
}catch(Exception e) {
|
||||
System.out.println(value + " is not an int");
|
||||
continue;
|
||||
}
|
||||
|
||||
scopeObject.peek().getClass().getField(key).set(scopeObject.peek(), intValue);
|
||||
}
|
||||
|
||||
}else if(line.startsWith("Component")) {
|
||||
//component
|
||||
if(!(scopeObject.peek() instanceof Entity)) {
|
||||
System.out.println("Con not apply a component to " + scopeObject.peek());
|
||||
continue;
|
||||
}
|
||||
String[] parts = line.substring(1).split(" ");
|
||||
if(parts.length != 2) {
|
||||
System.out.println("line: " + line + " is incorrect.\nignoring...");
|
||||
continue;
|
||||
}
|
||||
//we really only care about this part anyways so...
|
||||
String componentClass = parts[1].trim();
|
||||
DiveScript component = null;
|
||||
try {
|
||||
Object maybeComponent = Class.forName(componentClass).newInstance();
|
||||
if(maybeComponent instanceof DiveScript) {
|
||||
component = (DiveScript)maybeComponent;
|
||||
}else {
|
||||
System.out.println("" + componentClass + " is not of type component!");
|
||||
continue;
|
||||
}
|
||||
} catch( ClassNotFoundException e ) {
|
||||
System.out.println("Component " + componentClass + " not found!");
|
||||
continue;
|
||||
}
|
||||
component.entity = (Entity) scopeObject.peek();
|
||||
((Entity)scopeObject.peek()).addComponent(component);
|
||||
scopeObject.push(component);
|
||||
}else if (line.equals("End Component")) {
|
||||
scopeObject.pop();
|
||||
}
|
||||
}
|
||||
}catch(Exception e) {
|
||||
System.out.println(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
System.out.println("Loaded Scene File...");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static void entityDump() {
|
||||
synchronized(entities) {
|
||||
System.out.println("--------------------ENTITY DUMP--------------------\n");
|
||||
for(Entity entity : entities) {
|
||||
System.out.println("" + entity + "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void render(Graphics2D g) {
|
||||
for(Entity e : entities) {
|
||||
for(DiveScript script : e.components) {
|
||||
script.render(g);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue