2021-06-07 18:00:39 +12:00
|
|
|
package nz.ac.massey.javaecs;
|
2021-03-25 18:24:56 +13:00
|
|
|
|
2021-04-27 13:50:59 +12:00
|
|
|
import java.util.BitSet;
|
|
|
|
|
2021-03-25 18:24:56 +13:00
|
|
|
/**
|
|
|
|
* Hello world!
|
|
|
|
*/
|
|
|
|
public final class App {
|
|
|
|
private App() {
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Says hello to the world.
|
|
|
|
* @param args The arguments of the program.
|
2021-04-27 13:50:59 +12:00
|
|
|
* @throws InterruptedException
|
2021-03-25 18:24:56 +13:00
|
|
|
*/
|
2021-04-27 13:50:59 +12:00
|
|
|
public static void main(String[] args) throws InterruptedException {
|
|
|
|
ECS gameEngine = new ECS();
|
2021-03-25 18:24:56 +13:00
|
|
|
System.out.println("Hello World!");
|
2021-05-22 19:17:37 +12:00
|
|
|
gameEngine.registerComponent(Vec2D.class);
|
|
|
|
gameEngine.registerComponent(RidgidBody.class);
|
|
|
|
gameEngine.registerComponent(Gravity.class);
|
2021-04-27 13:50:59 +12:00
|
|
|
|
|
|
|
PhysicsSystem physicsSystem = new PhysicsSystem(gameEngine);
|
2021-05-22 19:17:37 +12:00
|
|
|
gameEngine.registerSystem(PhysicsSystem.class, physicsSystem);
|
2021-04-27 13:50:59 +12:00
|
|
|
{
|
|
|
|
BitSet signature = new BitSet();
|
2021-05-22 19:17:37 +12:00
|
|
|
signature.set(gameEngine.getComponentIndex(Gravity.class));
|
|
|
|
signature.set(gameEngine.getComponentIndex(Vec2D.class));
|
|
|
|
signature.set(gameEngine.getComponentIndex(RidgidBody.class));
|
|
|
|
gameEngine.setSystemSignature(PhysicsSystem.class, signature);
|
2021-04-27 13:50:59 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
physicsSystem.init();
|
|
|
|
|
|
|
|
LogVec2DSystem logVec2DSystem = new LogVec2DSystem(gameEngine);
|
2021-05-22 19:17:37 +12:00
|
|
|
gameEngine.registerSystem(LogVec2DSystem.class, logVec2DSystem);
|
2021-04-27 13:50:59 +12:00
|
|
|
{
|
|
|
|
BitSet signature = new BitSet();
|
2021-05-22 19:17:37 +12:00
|
|
|
signature.set(gameEngine.getComponentIndex(Gravity.class));
|
|
|
|
signature.set(gameEngine.getComponentIndex(Vec2D.class));
|
|
|
|
signature.set(gameEngine.getComponentIndex(RidgidBody.class));
|
|
|
|
gameEngine.setSystemSignature(LogVec2DSystem.class, signature);
|
2021-04-27 13:50:59 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
logVec2DSystem.init();
|
|
|
|
|
|
|
|
FrameRateSystem frameRateSystem = new FrameRateSystem();
|
2021-05-22 19:17:37 +12:00
|
|
|
gameEngine.registerSystem(FrameRateSystem.class, frameRateSystem);
|
2021-04-27 13:50:59 +12:00
|
|
|
|
|
|
|
// Create components:
|
|
|
|
|
|
|
|
int entity = gameEngine.createEntity();
|
|
|
|
|
2021-05-22 19:17:37 +12:00
|
|
|
gameEngine.addComponent(entity, Gravity.class, new Gravity(0.0, -9.80665, -1.0, 100.0));
|
|
|
|
gameEngine.addComponent(entity, Vec2D.class, new Vec2D(1.5, 0.0, 1));
|
|
|
|
gameEngine.addComponent(entity, RidgidBody.class, new RidgidBody());
|
2021-04-27 13:50:59 +12:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double dt = 0.0;
|
|
|
|
|
|
|
|
double frameRate = 1.0 / 20; // 1 second divided by target number of frames
|
2021-05-14 14:29:28 +12:00
|
|
|
double idleTime = 0.0; // the amount of time spent sleeping
|
2021-04-27 13:50:59 +12:00
|
|
|
|
|
|
|
boolean quit = false;
|
|
|
|
long loopStart = System.currentTimeMillis();
|
2021-06-07 18:00:39 +12:00
|
|
|
long startTime = System.nanoTime();
|
|
|
|
// One potential way to do this
|
2021-04-27 13:50:59 +12:00
|
|
|
while (!quit){
|
|
|
|
// Get the time between frames for accurate time-based calculations (i.e. physics systems etc)
|
2021-05-14 14:29:28 +12:00
|
|
|
frameRateSystem.update(dt, idleTime);
|
2021-04-27 13:50:59 +12:00
|
|
|
physicsSystem.update(dt);
|
|
|
|
logVec2DSystem.update(dt);
|
|
|
|
dt = (System.nanoTime() - startTime) / 1e9; // convert nanoseconds to seconds
|
2021-06-07 18:00:39 +12:00
|
|
|
startTime = System.nanoTime();
|
2021-04-27 13:50:59 +12:00
|
|
|
// Limit frame rate (approximately) to minimum of 16 ms
|
|
|
|
if (dt < frameRate){
|
2021-05-14 14:29:28 +12:00
|
|
|
idleTime = frameRate-dt;
|
2021-04-27 13:50:59 +12:00
|
|
|
Thread.sleep((int)((frameRate-dt)*1000));
|
|
|
|
dt = (System.nanoTime() - startTime) / 1e9;
|
2021-06-07 18:00:39 +12:00
|
|
|
startTime = System.nanoTime();
|
2021-04-27 13:50:59 +12:00
|
|
|
}
|
|
|
|
if (System.currentTimeMillis() - loopStart >= 1000){
|
|
|
|
loopStart = System.currentTimeMillis();
|
|
|
|
System.out.println("Second Elapsed");
|
|
|
|
}
|
2021-06-07 18:00:39 +12:00
|
|
|
|
2021-04-27 13:50:59 +12:00
|
|
|
}
|
2021-03-25 18:24:56 +13:00
|
|
|
}
|
|
|
|
}
|