diff --git a/demo2/pom.xml b/demo2/pom.xml
index f1e7f59..5a7b326 100644
--- a/demo2/pom.xml
+++ b/demo2/pom.xml
@@ -35,6 +35,11 @@
${junit.version}
test
+
+ nz.ac.massey.javaecs
+ javaecs
+ 0.9.2-PRERELEASE
+
diff --git a/demo2/src/main/java/nz/ac/massey/javaecs/examples/App.java b/demo2/src/main/java/nz/ac/massey/javaecs/examples/App.java
index 5874920..ce2c849 100644
--- a/demo2/src/main/java/nz/ac/massey/javaecs/examples/App.java
+++ b/demo2/src/main/java/nz/ac/massey/javaecs/examples/App.java
@@ -1,5 +1,7 @@
package nz.ac.massey.javaecs.examples;
+import nz.ac.massey.javaecs.Engine;
+
/**
* Hello world!
*/
@@ -12,6 +14,9 @@ public final class App {
* @param args The arguments of the program.
*/
public static void main(String[] args) {
+ Engine gameEngine = new Engine();
+
+
System.out.println("Hello World!");
}
}
diff --git a/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Control.java b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Control.java
new file mode 100644
index 0000000..2b51912
--- /dev/null
+++ b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Control.java
@@ -0,0 +1,5 @@
+package nz.ac.massey.javaecs.examples.Components;
+
+public class Control {
+
+}
diff --git a/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Render.java b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Render.java
new file mode 100644
index 0000000..27e2f02
--- /dev/null
+++ b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Render.java
@@ -0,0 +1,11 @@
+package nz.ac.massey.javaecs.examples.Components;
+
+import java.lang.reflect.Type;
+
+public class Render {
+ public Type renderType;
+
+ public Render(Type t){
+ renderType = t;
+ }
+}
diff --git a/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Sprite.java b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Sprite.java
new file mode 100644
index 0000000..ae81cb6
--- /dev/null
+++ b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Sprite.java
@@ -0,0 +1,7 @@
+package nz.ac.massey.javaecs.examples.Components;
+
+import javafx.scene.image.Image;
+
+public class Sprite {
+ Image sprite;
+}
diff --git a/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Vec2D.java b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Vec2D.java
new file mode 100644
index 0000000..a363de9
--- /dev/null
+++ b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Vec2D.java
@@ -0,0 +1,11 @@
+package nz.ac.massey.javaecs.examples.Components;
+
+public class Vec2D {
+ public double x;
+ public double y;
+
+ public Vec2D(double x, double y){
+ this.x = x;
+ this.y = y;
+ }
+}
diff --git a/demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/ControlSystem.java b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/ControlSystem.java
new file mode 100644
index 0000000..3940907
--- /dev/null
+++ b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/ControlSystem.java
@@ -0,0 +1,19 @@
+package nz.ac.massey.javaecs.examples.Systems;
+
+import nz.ac.massey.javaecs.ECSSystem;
+
+public class ControlSystem extends ECSSystem {
+
+ @Override
+ public void init() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void update() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/RenderSystem.java b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/RenderSystem.java
new file mode 100644
index 0000000..bff4614
--- /dev/null
+++ b/demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/RenderSystem.java
@@ -0,0 +1,97 @@
+package nz.ac.massey.javaecs.examples.Systems;
+
+import java.util.BitSet;
+
+import javafx.application.Application;
+import javafx.application.Platform;
+import javafx.scene.Group;
+import javafx.scene.Scene;
+import javafx.scene.paint.Color;
+import javafx.stage.Stage;
+import nz.ac.massey.javaecs.ECSSystem;
+import nz.ac.massey.javaecs.Engine;
+import nz.ac.massey.javaecs.Entity;
+import nz.ac.massey.javaecs.examples.Components.Control;
+import nz.ac.massey.javaecs.examples.Components.Render;
+import nz.ac.massey.javaecs.examples.Components.Sprite;
+import nz.ac.massey.javaecs.examples.Components.Vec2D;
+
+public class RenderSystem extends ECSSystem {
+ JFXView jFXView;
+ Engine gameEngine;
+ Thread renderThread;
+ double renderScale;
+ int screenX = 1024;
+ int screenY = 1024;
+
+ public RenderSystem(Engine gameEngine, double renderScale){
+ this.gameEngine = gameEngine;
+ // Set registrations
+ registrationSet = new BitSet();
+ registrationSet.set(gameEngine.getComponentIndex(Render.class));
+ registrationSet.set(gameEngine.getComponentIndex(Vec2D.class));
+ this.renderScale = renderScale;
+ }
+
+ @Override
+ public void init() {
+ // Spawn a new asynchronous thread (won't rejoin the main program flow)
+ renderThread = new Thread(new RenderStarter());
+ renderThread.start();
+ }
+
+ @Override
+ public void update() {
+ Group renderScene = new Group();
+ for (Entity entity : entities) {
+ if (((Render)gameEngine.getComponentData(entity, Render.class)).renderType == Control.class){
+ // Do control updates here
+ }
+ else if (((Render)gameEngine.getComponentData(entity, Render.class)).renderType == Sprite.class){
+ Vec2D vec2d = (Vec2D)gameEngine.getComponentData(entity, Vec2D.class);
+ Sprite sprite = (Sprite)gameEngine.getComponentData(entity, Sprite.class);
+ }
+ }
+
+
+ // Must be run by the UI thread, not the main thread.
+ // This dispatches the operation run() to the UI.
+ Platform.runLater(new Runnable(){
+ @Override
+ public void run() {
+ JFXView.root.getChildren().clear();
+ JFXView.root.getChildren().add(renderScene);
+ }
+ });
+ }
+
+ // Add a renderer
+ public class RenderStarter implements Runnable{
+
+ @Override
+ public void run() {
+ JFXView.run();
+ }
+ void updateScene(Group newGroup){
+ JFXView.root.getChildren().clear();
+ JFXView.root.getChildren().add(newGroup);
+ }
+ }
+
+ public static class JFXView extends Application {
+ private static Group root;
+
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+ // based on the colorful circles sample at https://docs.oracle.com/javase/8/javafx/get-started-tutorial/animation.htm
+ root = new Group();
+ Scene scene = new Scene(root, 1024, 1024, Color.BLACK);
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+
+ public static void run(){
+ launch(new String[0]);
+ }
+ }
+}