Scaffolding for various unit tests
This commit is contained in:
parent
b01efa89e8
commit
b167062585
@ -323,7 +323,7 @@
|
|||||||
"movementStart" : 0,
|
"movementStart" : 0,
|
||||||
"movementEnd" : 0,
|
"movementEnd" : 0,
|
||||||
"movementGoal" : 0,
|
"movementGoal" : 0,
|
||||||
"initialMove" : false
|
"initialMove" : true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"healthSystem" : {
|
"healthSystem" : {
|
||||||
|
|||||||
@ -323,7 +323,7 @@
|
|||||||
"movementStart" : 0,
|
"movementStart" : 0,
|
||||||
"movementEnd" : 0,
|
"movementEnd" : 0,
|
||||||
"movementGoal" : 0,
|
"movementGoal" : 0,
|
||||||
"initialMove" : false
|
"initialMove" : true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"healthSystem" : {
|
"healthSystem" : {
|
||||||
|
|||||||
@ -145,7 +145,7 @@
|
|||||||
"movementStart" : 0,
|
"movementStart" : 0,
|
||||||
"movementEnd" : 0,
|
"movementEnd" : 0,
|
||||||
"movementGoal" : 0,
|
"movementGoal" : 0,
|
||||||
"initialMove" : false
|
"initialMove" : true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"healthSystem" : {
|
"healthSystem" : {
|
||||||
|
|||||||
@ -309,6 +309,10 @@ public class Globals {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
//Base engine creation flags
|
||||||
|
//
|
||||||
|
public static boolean HEADLESS = false;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@ -54,6 +54,13 @@ public class Main {
|
|||||||
//parse command line arguments
|
//parse command line arguments
|
||||||
CLIParser.parseCLIArgs(args);
|
CLIParser.parseCLIArgs(args);
|
||||||
|
|
||||||
|
startUp();
|
||||||
|
|
||||||
|
mainLoop();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void startUp(){
|
||||||
//initialize logging interfaces
|
//initialize logging interfaces
|
||||||
LoggerInterface.initLoggers();
|
LoggerInterface.initLoggers();
|
||||||
|
|
||||||
@ -122,7 +129,7 @@ public class Main {
|
|||||||
// TerrainViewer.runViewer();
|
// TerrainViewer.runViewer();
|
||||||
|
|
||||||
//create the drawing context
|
//create the drawing context
|
||||||
if(Globals.RUN_CLIENT){
|
if(Globals.RUN_CLIENT && !Globals.HEADLESS){
|
||||||
Globals.renderingEngine = new RenderingEngine();
|
Globals.renderingEngine = new RenderingEngine();
|
||||||
Globals.renderingEngine.createOpenglContext();
|
Globals.renderingEngine.createOpenglContext();
|
||||||
}
|
}
|
||||||
@ -150,14 +157,14 @@ public class Main {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
//create the audio context
|
//create the audio context
|
||||||
if(Globals.RUN_CLIENT){
|
if(Globals.RUN_CLIENT && !Globals.HEADLESS){
|
||||||
Globals.audioEngine = new AudioEngine();
|
Globals.audioEngine = new AudioEngine();
|
||||||
Globals.audioEngine.init();
|
Globals.audioEngine.init();
|
||||||
// Globals.audioEngine.setGain(0.1f);
|
// Globals.audioEngine.setGain(0.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
//init default resources
|
//init default resources
|
||||||
if(Globals.RUN_CLIENT){
|
if(Globals.RUN_CLIENT && !Globals.HEADLESS){
|
||||||
Globals.initDefaultGraphicalResources();
|
Globals.initDefaultGraphicalResources();
|
||||||
Globals.initDefaultAudioResources();
|
Globals.initDefaultAudioResources();
|
||||||
}
|
}
|
||||||
@ -175,17 +182,19 @@ public class Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//recapture the screen for rendering
|
//recapture the screen for rendering
|
||||||
if(Globals.RUN_CLIENT){
|
if(Globals.RUN_CLIENT && !Globals.HEADLESS){
|
||||||
LoggerInterface.loggerStartup.INFO("Recapture screen");
|
LoggerInterface.loggerStartup.INFO("Recapture screen");
|
||||||
Globals.controlHandler.setShouldRecapture(true);
|
Globals.controlHandler.setShouldRecapture(true);
|
||||||
}
|
}
|
||||||
// RenderUtils.recaptureScreen();
|
// RenderUtils.recaptureScreen();
|
||||||
|
}
|
||||||
///
|
|
||||||
/// C A M E R A C R E A T I O N
|
public static void mainLoop(){
|
||||||
///
|
mainLoop(0);
|
||||||
// Vector3f cameraRotationVector = new Vector3f();
|
}
|
||||||
|
|
||||||
|
public static void mainLoop(long maxFrames){
|
||||||
|
|
||||||
//main loop
|
//main loop
|
||||||
while (running) {
|
while (running) {
|
||||||
|
|
||||||
@ -270,6 +279,10 @@ public class Main {
|
|||||||
}
|
}
|
||||||
frameCount++;
|
frameCount++;
|
||||||
|
|
||||||
|
if(maxFrames > 0 && frameCount > maxFrames){
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -289,7 +302,6 @@ public class Main {
|
|||||||
if(Globals.RUN_CLIENT){
|
if(Globals.RUN_CLIENT){
|
||||||
Globals.audioEngine.shutdown();
|
Globals.audioEngine.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long getCurrentFrame(){
|
public static long getCurrentFrame(){
|
||||||
|
|||||||
@ -9,10 +9,14 @@ public class CLIParser {
|
|||||||
|
|
||||||
public static void parseCLIArgs(String args[]){
|
public static void parseCLIArgs(String args[]){
|
||||||
List<String> argList = Arrays.asList(args);
|
List<String> argList = Arrays.asList(args);
|
||||||
for(String arg : argList){
|
for(int i = 0; i < argList.size(); i++){
|
||||||
if(arg.equals("--headless")){
|
String argCurrent = argList.get(i);
|
||||||
Globals.RUN_CLIENT = false;
|
switch(argCurrent){
|
||||||
Globals.RUN_SERVER = true;
|
case "--headless": {
|
||||||
|
Globals.RUN_CLIENT = false;
|
||||||
|
Globals.RUN_SERVER = true;
|
||||||
|
Globals.HEADLESS = true;
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -234,5 +234,13 @@ public class Scene {
|
|||||||
tree.simulate(deltaTime);
|
tree.simulate(deltaTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of all entities in the scene
|
||||||
|
* @return The list of all entities in the scene
|
||||||
|
*/
|
||||||
|
public List<Entity> getEntityList(){
|
||||||
|
return entityList;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,14 +20,14 @@ public class LoggerInterface {
|
|||||||
public static Logger loggerDB;
|
public static Logger loggerDB;
|
||||||
|
|
||||||
public static void initLoggers(){
|
public static void initLoggers(){
|
||||||
loggerStartup = new Logger(LogLevel.INFO);
|
loggerStartup = new Logger(LogLevel.WARNING);
|
||||||
loggerNetworking = new Logger(LogLevel.INFO);
|
loggerNetworking = new Logger(LogLevel.WARNING);
|
||||||
loggerFileIO = new Logger(LogLevel.INFO);
|
loggerFileIO = new Logger(LogLevel.WARNING);
|
||||||
loggerGameLogic = new Logger(LogLevel.INFO);
|
loggerGameLogic = new Logger(LogLevel.WARNING);
|
||||||
loggerRenderer = new Logger(LogLevel.WARNING);
|
loggerRenderer = new Logger(LogLevel.WARNING);
|
||||||
loggerEngine = new Logger(LogLevel.INFO);
|
loggerEngine = new Logger(LogLevel.WARNING);
|
||||||
loggerAuth = new Logger(LogLevel.INFO);
|
loggerAuth = new Logger(LogLevel.WARNING);
|
||||||
loggerDB = new Logger(LogLevel.INFO);
|
loggerDB = new Logger(LogLevel.WARNING);
|
||||||
loggerStartup.INFO("Initialized loggers");
|
loggerStartup.INFO("Initialized loggers");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ public class NetUtils {
|
|||||||
public static final int DEFAULT_PORT = 34251;
|
public static final int DEFAULT_PORT = 34251;
|
||||||
|
|
||||||
static int port = DEFAULT_PORT;
|
static int port = DEFAULT_PORT;
|
||||||
static String address = "127.0.0.1";
|
static String address = "localhost";
|
||||||
|
|
||||||
// public static EntityMessage createSpawnEntityMessage(Entity e){
|
// public static EntityMessage createSpawnEntityMessage(Entity e){
|
||||||
// EntityMessage rVal = EntityMessage.constructCreateMessage(e.getId(), CreatureUtils.getCreatureType(e), 0.0f, 0.0f, 0.0f);
|
// EntityMessage rVal = EntityMessage.constructCreateMessage(e.getId(), CreatureUtils.getCreatureType(e), 0.0f, 0.0f, 0.0f);
|
||||||
@ -35,6 +35,12 @@ public class NetUtils {
|
|||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the port the program attempts to use
|
||||||
|
* If the port is set to 0, and it is creating the server, it will create the socket with port 0.
|
||||||
|
* This causes Java to find any available port. The Server class then re-calls setPort to update the static port with the found port.
|
||||||
|
* @param port The port to use when doing any networking
|
||||||
|
*/
|
||||||
public static void setPort(int port) {
|
public static void setPort(int port) {
|
||||||
NetUtils.port = port;
|
NetUtils.port = port;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,6 +48,11 @@ public class Server implements Runnable{
|
|||||||
initServer();
|
initServer();
|
||||||
try {
|
try {
|
||||||
serverSocket = new ServerSocket(port);
|
serverSocket = new ServerSocket(port);
|
||||||
|
//if we set port to 0, java searches for any available port to open
|
||||||
|
//This then explicitly alerts NetUtils of the real port
|
||||||
|
if(port == 0){
|
||||||
|
NetUtils.setPort(serverSocket.getLocalPort());
|
||||||
|
}
|
||||||
} catch(BindException ex){
|
} catch(BindException ex){
|
||||||
System.err.println("Failed to bind server socket!");
|
System.err.println("Failed to bind server socket!");
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.graalvm.polyglot.Context;
|
import org.graalvm.polyglot.Context;
|
||||||
|
import org.graalvm.polyglot.Engine;
|
||||||
import org.graalvm.polyglot.Source;
|
import org.graalvm.polyglot.Source;
|
||||||
import org.graalvm.polyglot.Value;
|
import org.graalvm.polyglot.Value;
|
||||||
|
|
||||||
@ -21,8 +22,10 @@ public class ScriptEngine {
|
|||||||
public void init(){
|
public void init(){
|
||||||
//init datastructures
|
//init datastructures
|
||||||
sourceMap = new HashMap<String,Source>();
|
sourceMap = new HashMap<String,Source>();
|
||||||
|
//create engine with flag to disable warning
|
||||||
|
Engine engine = Engine.newBuilder().option("engine.WarnInterpreterOnly", "false").build();
|
||||||
//create context
|
//create context
|
||||||
context = Context.create("js");
|
context = Context.newBuilder("js").engine(engine).build();
|
||||||
//read scripts into source map
|
//read scripts into source map
|
||||||
readScriptsDirectory("/Scripts", FileUtils.getAssetFile("/Scripts"));
|
readScriptsDirectory("/Scripts", FileUtils.getAssetFile("/Scripts"));
|
||||||
//create bindings
|
//create bindings
|
||||||
|
|||||||
@ -1,22 +0,0 @@
|
|||||||
import junit.framework.TestCase;
|
|
||||||
import testingutils.MainLoop;
|
|
||||||
|
|
||||||
public class StartupTest extends TestCase {
|
|
||||||
|
|
||||||
public void testStartupHeadless(){
|
|
||||||
System.out.println("[Test] Startup Headless");
|
|
||||||
MainLoop.startup(true);
|
|
||||||
MainLoop.timedMainLoop(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testStartupGUI(){
|
|
||||||
System.out.println("[Test] Startup GUI");
|
|
||||||
MainLoop.startup(false);
|
|
||||||
MainLoop.timedMainLoop(10);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testEmpty() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,13 +1,42 @@
|
|||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.junit.runner.JUnitCore;
|
import org.junit.runner.JUnitCore;
|
||||||
import org.junit.runner.Result;
|
import org.junit.runner.Result;
|
||||||
import org.junit.runner.notification.Failure;
|
import org.junit.runner.notification.Failure;
|
||||||
|
|
||||||
|
import entity.SpawningCreaturesTest;
|
||||||
|
import startup.StartupTest;
|
||||||
|
|
||||||
public class TestRunner {
|
public class TestRunner {
|
||||||
|
|
||||||
|
static final List<Class> classes = Arrays.asList(new Class[]{
|
||||||
|
StartupTest.class,
|
||||||
|
SpawningCreaturesTest.class,
|
||||||
|
});
|
||||||
|
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
Result result = JUnitCore.runClasses(StartupTest.class);
|
|
||||||
for(Failure failure : result.getFailures()){
|
boolean success = true;
|
||||||
|
List<Failure> failures = new LinkedList<Failure>();
|
||||||
|
|
||||||
|
//run tests
|
||||||
|
for(Class classObject : classes){
|
||||||
|
System.out.println("CLASS " + classObject.descriptorString());
|
||||||
|
Result result = JUnitCore.runClasses(classObject);
|
||||||
|
for(Failure failure : result.getFailures()){
|
||||||
|
failures.add(failure);
|
||||||
|
}
|
||||||
|
success = success && result.wasSuccessful();
|
||||||
|
}
|
||||||
|
|
||||||
|
//print failures
|
||||||
|
for(Failure failure : failures){
|
||||||
System.out.println(failure);
|
System.out.println(failure);
|
||||||
}
|
}
|
||||||
System.out.println("Testing was successful: " + result.wasSuccessful());
|
|
||||||
|
System.out.println("Testing was successful: " + success);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
5
src/test/java/db/DBTest.java
Normal file
5
src/test/java/db/DBTest.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package db;
|
||||||
|
|
||||||
|
public class DBTest {
|
||||||
|
|
||||||
|
}
|
||||||
5
src/test/java/entity/InventoryStateTest.java
Normal file
5
src/test/java/entity/InventoryStateTest.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package entity;
|
||||||
|
|
||||||
|
public class InventoryStateTest {
|
||||||
|
|
||||||
|
}
|
||||||
5
src/test/java/entity/LifeStateTest.java
Normal file
5
src/test/java/entity/LifeStateTest.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package entity;
|
||||||
|
|
||||||
|
public class LifeStateTest {
|
||||||
|
|
||||||
|
}
|
||||||
46
src/test/java/entity/SpawningCreaturesTest.java
Normal file
46
src/test/java/entity/SpawningCreaturesTest.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package entity;
|
||||||
|
|
||||||
|
import org.joml.Vector3d;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.engine.Main;
|
||||||
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
|
import electrosphere.net.NetUtils;
|
||||||
|
import testutils.TestEntityUtils;
|
||||||
|
|
||||||
|
public class SpawningCreaturesTest {
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void initEngine(){
|
||||||
|
System.out.println("[Test] Spawn many creatures");
|
||||||
|
Globals.RUN_CLIENT = false;
|
||||||
|
Globals.RUN_SERVER = true;
|
||||||
|
Globals.HEADLESS = true;
|
||||||
|
NetUtils.setPort(0);
|
||||||
|
Main.startUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Test
|
||||||
|
// public void testSpawnCreature(){
|
||||||
|
// System.out.println("[Test] Spawn creature");
|
||||||
|
// Globals.RUN_CLIENT = false;
|
||||||
|
// Globals.RUN_SERVER = true;
|
||||||
|
// NetUtils.setPort(0);
|
||||||
|
// Main.startUp();
|
||||||
|
// CreatureUtils.spawnBasicCreature("human", null);
|
||||||
|
// Main.mainLoop(1);
|
||||||
|
// assert TestEntityUtils.numberOfEntitiesInBox(new Vector3d(-1,-1,-1),new Vector3d(1,1,1)) == 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSpawnMultipleCreatures(){
|
||||||
|
for(int i = 0; i < 100; i++){
|
||||||
|
CreatureUtils.spawnBasicCreature("human", null);
|
||||||
|
}
|
||||||
|
Main.mainLoop(1);
|
||||||
|
assert TestEntityUtils.numberOfEntitiesInBox(new Vector3d(-1,-1,-1),new Vector3d(1,1,1)) == 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
5
src/test/java/networking/NetworkingTest.java
Normal file
5
src/test/java/networking/NetworkingTest.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package networking;
|
||||||
|
|
||||||
|
public class NetworkingTest {
|
||||||
|
|
||||||
|
}
|
||||||
5
src/test/java/physics/PhysicsTest.java
Normal file
5
src/test/java/physics/PhysicsTest.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package physics;
|
||||||
|
|
||||||
|
public class PhysicsTest {
|
||||||
|
|
||||||
|
}
|
||||||
5
src/test/java/script/ScriptTest.java
Normal file
5
src/test/java/script/ScriptTest.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package script;
|
||||||
|
|
||||||
|
public class ScriptTest {
|
||||||
|
|
||||||
|
}
|
||||||
36
src/test/java/startup/StartupTest.java
Normal file
36
src/test/java/startup/StartupTest.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package startup;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.engine.Main;
|
||||||
|
import electrosphere.net.NetUtils;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
public class StartupTest extends TestCase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testStartupHeadless(){
|
||||||
|
System.out.println("[Test] Startup Headless");
|
||||||
|
Globals.RUN_CLIENT = false;
|
||||||
|
Globals.RUN_SERVER = true;
|
||||||
|
NetUtils.setPort(0);
|
||||||
|
Main.startUp();
|
||||||
|
Main.mainLoop(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testStartupGUI(){
|
||||||
|
System.out.println("[Test] Startup GUI");
|
||||||
|
Globals.RUN_CLIENT = false;
|
||||||
|
Globals.RUN_SERVER = true;
|
||||||
|
NetUtils.setPort(0);
|
||||||
|
Main.startUp();
|
||||||
|
Main.mainLoop(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEmpty() {
|
||||||
|
System.out.println("[Test] Empty test");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,237 +0,0 @@
|
|||||||
package testingutils;
|
|
||||||
|
|
||||||
import static org.lwjgl.glfw.GLFW.glfwGetTime;
|
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import electrosphere.audio.AudioEngine;
|
|
||||||
import electrosphere.controls.ControlHandler;
|
|
||||||
import electrosphere.engine.Globals;
|
|
||||||
import electrosphere.engine.LoadingThread;
|
|
||||||
import electrosphere.engine.cli.CLIParser;
|
|
||||||
import electrosphere.game.client.ClientFunctions;
|
|
||||||
import electrosphere.game.config.UserSettings;
|
|
||||||
import electrosphere.logger.LoggerInterface;
|
|
||||||
import electrosphere.renderer.RenderingEngine;
|
|
||||||
|
|
||||||
public class MainLoop {
|
|
||||||
|
|
||||||
//
|
|
||||||
//Visualization Controls
|
|
||||||
//
|
|
||||||
//These are used in calculating the time between frames for visualization (camera) control and such
|
|
||||||
static double deltaTime = 0.0f;
|
|
||||||
static double lastFrame = 0.0f;
|
|
||||||
static long frameCount = 0;
|
|
||||||
public static float deltaFrames = 0;
|
|
||||||
|
|
||||||
//target amount of time per frame
|
|
||||||
public static float targetFrameRate = 60.0f;
|
|
||||||
static float targetFramePeriod = 1.0f/targetFrameRate;
|
|
||||||
|
|
||||||
//framestep variable
|
|
||||||
static int framestep = 2;
|
|
||||||
|
|
||||||
|
|
||||||
public static void startup(boolean headless){
|
|
||||||
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// I N I T I A L I Z A T I O N
|
|
||||||
//
|
|
||||||
//
|
|
||||||
|
|
||||||
//parse command line arguments
|
|
||||||
String[] args = new String[]{
|
|
||||||
"Renderer"
|
|
||||||
};
|
|
||||||
CLIParser.parseCLIArgs(args);
|
|
||||||
|
|
||||||
//initialize logging interfaces
|
|
||||||
LoggerInterface.initLoggers();
|
|
||||||
|
|
||||||
//load user settings
|
|
||||||
UserSettings.loadUserSettings();
|
|
||||||
|
|
||||||
//controls
|
|
||||||
if(Globals.RUN_CLIENT){
|
|
||||||
initControlHandler();
|
|
||||||
}
|
|
||||||
|
|
||||||
//init global variables
|
|
||||||
Globals.initGlobals();
|
|
||||||
|
|
||||||
//create the drawing context
|
|
||||||
if(Globals.RUN_CLIENT && !headless){
|
|
||||||
Globals.renderingEngine = new RenderingEngine();
|
|
||||||
Globals.renderingEngine.createOpenglContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
//create the audio context
|
|
||||||
if(Globals.RUN_CLIENT && !headless){
|
|
||||||
Globals.audioEngine = new AudioEngine();
|
|
||||||
Globals.audioEngine.init();
|
|
||||||
// Globals.audioEngine.setGain(0.1f);
|
|
||||||
}
|
|
||||||
|
|
||||||
//init default resources
|
|
||||||
if(Globals.RUN_CLIENT && !headless){
|
|
||||||
Globals.initDefaultGraphicalResources();
|
|
||||||
Globals.initDefaultAudioResources();
|
|
||||||
}
|
|
||||||
|
|
||||||
//fire off a loading thread for the title menus/screen
|
|
||||||
LoggerInterface.loggerStartup.INFO("Fire off loading thread");
|
|
||||||
if(Globals.RUN_CLIENT){
|
|
||||||
LoadingThread serverThread = new LoadingThread(LoadingThread.LOAD_TITLE_MENU);
|
|
||||||
Globals.loadingThreadsList.add(serverThread);
|
|
||||||
serverThread.start();
|
|
||||||
} else {
|
|
||||||
LoadingThread clientThread = new LoadingThread(LoadingThread.LOAD_ARENA);
|
|
||||||
Globals.loadingThreadsList.add(clientThread);
|
|
||||||
clientThread.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
//recapture the screen for rendering
|
|
||||||
if(Globals.RUN_CLIENT){
|
|
||||||
LoggerInterface.loggerStartup.INFO("Recapture screen");
|
|
||||||
Globals.controlHandler.setShouldRecapture(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void initControlHandler(){
|
|
||||||
LoggerInterface.loggerStartup.INFO("Initialize control handler");
|
|
||||||
Globals.controlHandler = ControlHandler.generateExampleControlsMap();
|
|
||||||
Globals.controlHandler.setCallbacks();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static void run(MainLoop.MainLoopHaltingCallback haltingCallback){
|
|
||||||
|
|
||||||
|
|
||||||
//main loop
|
|
||||||
while (haltingCallback.shouldRun()) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
Frame calculation
|
|
||||||
*/
|
|
||||||
double currentTime = glfwGetTime();
|
|
||||||
deltaTime = currentTime - lastFrame;
|
|
||||||
deltaFrames = targetFrameRate * (float)deltaTime;
|
|
||||||
lastFrame = currentTime;
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// A S S E T M A N A G E R S T U F F
|
|
||||||
///
|
|
||||||
if(Globals.RUN_CLIENT){
|
|
||||||
Globals.assetManager.loadAssetsInQueue();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// C L I E N T N E T W O R K I N G S T U F F
|
|
||||||
///
|
|
||||||
//Why is this its own function? Just to get the networking code out of main()
|
|
||||||
if(Globals.RUN_CLIENT && Globals.clientConnection != null){
|
|
||||||
Globals.clientConnection.parseMessages();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//handle framestep
|
|
||||||
if(framestep == 1){
|
|
||||||
framestep = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// I N P U T C O N T R O L S
|
|
||||||
///
|
|
||||||
//Poll controls
|
|
||||||
if(Globals.RUN_CLIENT){
|
|
||||||
Globals.controlHandler.pollControls();
|
|
||||||
Globals.controlHandler.recaptureIfNecessary();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///
|
|
||||||
/// C L I E N T S I M U L A T I O N S T U F F
|
|
||||||
///
|
|
||||||
if(Globals.RUN_CLIENT && framestep > 0){
|
|
||||||
ClientFunctions.runBeforeSimulationFunctions();
|
|
||||||
}
|
|
||||||
if(Globals.microSimulation != null && Globals.microSimulation.isReady() && framestep > 0){
|
|
||||||
Globals.microSimulation.simulate();
|
|
||||||
}
|
|
||||||
if(Globals.RUN_CLIENT && framestep > 0){
|
|
||||||
ClientFunctions.runClientFunctions();
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
|
||||||
/// M A C R O S I M U L A T I O N S T U F F
|
|
||||||
///
|
|
||||||
if(Globals.macroSimulation != null && Globals.macroSimulation.isReady() && framestep > 0){
|
|
||||||
Globals.macroSimulation.simulate();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(Globals.RUN_CLIENT){
|
|
||||||
Globals.renderingEngine.drawScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(deltaTime < targetFramePeriod){
|
|
||||||
sleep((int)(1000.0 * (targetFramePeriod - deltaTime)));
|
|
||||||
} else {
|
|
||||||
sleep(1);
|
|
||||||
}
|
|
||||||
frameCount++;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void sleep(int i) {
|
|
||||||
try {
|
|
||||||
TimeUnit.MILLISECONDS.sleep(i);
|
|
||||||
} catch (InterruptedException ex) {
|
|
||||||
System.out.println("Sleep somehow interrupted?!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static boolean shouldRun = true;
|
|
||||||
|
|
||||||
public static void timedMainLoop(int seconds){
|
|
||||||
|
|
||||||
Thread stopMainLoopThread = new Thread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
TimeUnit.SECONDS.sleep(3);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
shouldRun = false;
|
|
||||||
}});
|
|
||||||
stopMainLoopThread.start();
|
|
||||||
|
|
||||||
Globals.RUN_CLIENT = false;
|
|
||||||
|
|
||||||
MainLoopHaltingCallback haltingCallback = new MainLoop.MainLoopHaltingCallback() {
|
|
||||||
@Override
|
|
||||||
public boolean shouldRun() {
|
|
||||||
return shouldRun;
|
|
||||||
}};
|
|
||||||
|
|
||||||
MainLoop.run(haltingCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static abstract class MainLoopHaltingCallback {
|
|
||||||
|
|
||||||
public abstract boolean shouldRun();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
45
src/test/java/testutils/TestEntityUtils.java
Normal file
45
src/test/java/testutils/TestEntityUtils.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package testutils;
|
||||||
|
|
||||||
|
import org.joml.Vector3d;
|
||||||
|
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.entity.Entity;
|
||||||
|
import electrosphere.entity.EntityUtils;
|
||||||
|
|
||||||
|
public class TestEntityUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of entities in the bounding box defined by boxMin and boxMax, noninclusive.
|
||||||
|
* @param boxMin The minimum point for the bounding box
|
||||||
|
* @param boxMax The maximum point for the bounding box
|
||||||
|
* @return The number of entities in the bounding box
|
||||||
|
*/
|
||||||
|
public static int numberOfEntitiesInBox(Vector3d boxMin, Vector3d boxMax){
|
||||||
|
double minX = boxMin.x < boxMax.x ? boxMin.x : boxMax.x;
|
||||||
|
double minY = boxMin.y < boxMax.y ? boxMin.y : boxMax.y;
|
||||||
|
double minZ = boxMin.z < boxMax.z ? boxMin.z : boxMax.z;
|
||||||
|
double maxX = boxMin.x > boxMax.x ? boxMin.x : boxMax.x;
|
||||||
|
double maxY = boxMin.y > boxMax.y ? boxMin.y : boxMax.y;
|
||||||
|
double maxZ = boxMin.z > boxMax.z ? boxMin.z : boxMax.z;
|
||||||
|
|
||||||
|
int accumulator = 0;
|
||||||
|
|
||||||
|
for(Entity entity : Globals.entityManager.getEntityList()){
|
||||||
|
if(EntityUtils.getPosition(entity) != null){
|
||||||
|
Vector3d position = EntityUtils.getPosition(entity);
|
||||||
|
if(
|
||||||
|
position.x > minX &&
|
||||||
|
position.x < maxX &&
|
||||||
|
position.y > minY &&
|
||||||
|
position.y < maxY &&
|
||||||
|
position.z > minZ &&
|
||||||
|
position.z < maxZ
|
||||||
|
){
|
||||||
|
accumulator++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accumulator;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
5
src/test/java/ui/UICreationTest.java
Normal file
5
src/test/java/ui/UICreationTest.java
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package ui;
|
||||||
|
|
||||||
|
public class UICreationTest {
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user