From 4febf417210fbfa85a4d38280d4430342f892fe9 Mon Sep 17 00:00:00 2001 From: Brychan Dempsey Date: Fri, 11 Jun 2021 21:09:41 +1200 Subject: [PATCH] Added some skeletons --- demo2/pom.xml | 5 + .../nz/ac/massey/javaecs/examples/App.java | 5 + .../javaecs/examples/Components/Control.java | 5 + .../javaecs/examples/Components/Render.java | 11 +++ .../javaecs/examples/Components/Sprite.java | 7 ++ .../javaecs/examples/Components/Vec2D.java | 11 +++ .../examples/Systems/ControlSystem.java | 19 ++++ .../examples/Systems/RenderSystem.java | 97 +++++++++++++++++++ 8 files changed, 160 insertions(+) create mode 100644 demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Control.java create mode 100644 demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Render.java create mode 100644 demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Sprite.java create mode 100644 demo2/src/main/java/nz/ac/massey/javaecs/examples/Components/Vec2D.java create mode 100644 demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/ControlSystem.java create mode 100644 demo2/src/main/java/nz/ac/massey/javaecs/examples/Systems/RenderSystem.java 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]); + } + } +}