reorganization + logging + networking fixes

This commit is contained in:
austin 2021-06-27 14:33:13 -04:00
parent 375e457f81
commit d889e6126c
25 changed files with 290 additions and 54 deletions

View File

@ -2,6 +2,8 @@
"types": [ "types": [
{ {
"id" : 0, "id" : 0,
"isCreature" : true,
"isItem" : false,
"modelPath" : "/Models/person1walkanim.fbx", "modelPath" : "/Models/person1walkanim.fbx",
"hitboxes" : [ "hitboxes" : [
{ {
@ -53,11 +55,15 @@
}, },
{ {
"id" : 1, "id" : 1,
"isCreature" : true,
"isItem" : false,
"modelPath" : "", "modelPath" : "",
"hitboxes" : [] "hitboxes" : []
}, },
{ {
"id" : 2, "id" : 2,
"isCreature" : false,
"isItem" : true,
"modelPath" : "/Models/katana1alt.fbx", "modelPath" : "/Models/katana1alt.fbx",
"hitboxes" : [ "hitboxes" : [
{ {

View File

@ -1,4 +1,4 @@
package electrosphere.game.state; package electrosphere.engine;
import electrosphere.controls.ControlHandler; import electrosphere.controls.ControlHandler;
import electrosphere.entity.CameraEntityUtils; import electrosphere.entity.CameraEntityUtils;
@ -15,6 +15,9 @@ import electrosphere.game.collision.CommonWorldData;
import electrosphere.game.state.SimulationState.SimulationStateMachine; import electrosphere.game.state.SimulationState.SimulationStateMachine;
import electrosphere.game.server.terrain.manager.ServerTerrainManager; import electrosphere.game.server.terrain.manager.ServerTerrainManager;
import electrosphere.game.server.world.ServerWorldData; import electrosphere.game.server.world.ServerWorldData;
import electrosphere.game.state.AttachUtils;
import electrosphere.game.state.SimulationState;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import static electrosphere.main.Globals.loadingBox; import static electrosphere.main.Globals.loadingBox;
import electrosphere.menu.MenuUtils; import electrosphere.menu.MenuUtils;
@ -90,7 +93,7 @@ public class LoadingThread extends Thread {
initServerGameTerrainManager(); initServerGameTerrainManager();
} }
System.out.println("run server: " + Globals.RUN_SERVER + " run client: " + Globals.RUN_CLIENT); LoggerInterface.loggerEngine.INFO("run server: " + Globals.RUN_SERVER + " run client: " + Globals.RUN_CLIENT);
//init the data of the world //init the data of the world
if(Globals.RUN_SERVER){ if(Globals.RUN_SERVER){
@ -136,7 +139,7 @@ public class LoadingThread extends Thread {
Globals.RENDER_FLAG_RENDER_UI = true; Globals.RENDER_FLAG_RENDER_UI = true;
Globals.RENDER_FLAG_RENDER_BLACK_BACKGROUND = false; Globals.RENDER_FLAG_RENDER_BLACK_BACKGROUND = false;
System.out.println("Finished loading"); LoggerInterface.loggerEngine.INFO("Finished loading");
SimulationState.simulationState = SimulationStateMachine.MAIN_SIMULATION; SimulationState.simulationState = SimulationStateMachine.MAIN_SIMULATION;
Globals.controlHandler.setHandlerState(ControlHandler.ControlsState.MAIN_GAME); Globals.controlHandler.setHandlerState(ControlHandler.ControlsState.MAIN_GAME);
@ -200,7 +203,7 @@ public class LoadingThread extends Thread {
Globals.RENDER_FLAG_RENDER_UI = true; Globals.RENDER_FLAG_RENDER_UI = true;
Globals.RENDER_FLAG_RENDER_BLACK_BACKGROUND = false; Globals.RENDER_FLAG_RENDER_BLACK_BACKGROUND = false;
System.out.println("Finished loading"); LoggerInterface.loggerEngine.INFO("Finished loading");
SimulationState.simulationState = SimulationStateMachine.MAIN_SIMULATION; SimulationState.simulationState = SimulationStateMachine.MAIN_SIMULATION;
Globals.controlHandler.setHandlerState(ControlHandler.ControlsState.MAIN_GAME); Globals.controlHandler.setHandlerState(ControlHandler.ControlsState.MAIN_GAME);

View File

@ -6,6 +6,9 @@
package electrosphere.entity; package electrosphere.entity;
import electrosphere.entity.state.MovementTree; import electrosphere.entity.state.MovementTree;
import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.entity.types.creature.creaturemap.CreatureType;
import electrosphere.entity.types.item.ItemUtils;
import electrosphere.renderer.Model; import electrosphere.renderer.Model;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.renderer.Actor; import electrosphere.renderer.Actor;
@ -85,5 +88,21 @@ public class EntityUtils {
return (Actor)e.getData(EntityDataStrings.DATA_STRING_ACTOR); return (Actor)e.getData(EntityDataStrings.DATA_STRING_ACTOR);
} }
public static Entity spawnEntityFromEntityMap(int type){
Entity rVal = null;
CreatureType entityType = Globals.entityTypeMap.get(type);
if(entityType.isIsCreature()){
rVal = CreatureUtils.spawnBasicCreature(type, 0.001f, 0.05f);
}
if(entityType.isIsItem()){
rVal = ItemUtils.spawnBasicItem(type);
}
if(rVal == null){
System.err.println("ERROR!");
System.err.println("The entity you are trying to spawn (type=" + type + ") is neither a creature nor an item in the entity type map!");
System.err.println("Error occurred in spawnEntityFromEntityMap in EntityUtils");
}
return rVal;
}
} }

View File

@ -8,6 +8,8 @@ import java.util.List;
*/ */
public class CreatureType { public class CreatureType {
int id; int id;
boolean isCreature;
boolean isItem;
String modelPath; String modelPath;
List<HitboxData> hitboxes; List<HitboxData> hitboxes;
@ -35,6 +37,22 @@ public class CreatureType {
this.hitboxes = hitboxes; this.hitboxes = hitboxes;
} }
public boolean isIsCreature() {
return isCreature;
}
public boolean isIsItem() {
return isItem;
}
public void setIsCreature(boolean isCreature) {
this.isCreature = isCreature;
}
public void setIsItem(boolean isItem) {
this.isItem = isItem;
}
} }

View File

@ -3,6 +3,7 @@ package electrosphere.game.client.drawcell;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.game.terrain.processing.TerrainInterpolator; import electrosphere.game.terrain.processing.TerrainInterpolator;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.renderer.Model; import electrosphere.renderer.Model;
import electrosphere.renderer.ModelUtils; import electrosphere.renderer.ModelUtils;
@ -76,7 +77,7 @@ public class DrawCell {
Model terrainModel = ModelUtils.createTerrainModelPrecomputedShader(heightmap, program, stride); Model terrainModel = ModelUtils.createTerrainModelPrecomputedShader(heightmap, program, stride);
String terrainModelPath = Globals.assetManager.registerModel(terrainModel); String terrainModelPath = Globals.assetManager.registerModel(terrainModel);
modelEntity = EntityUtils.spawnDrawableEntity(terrainModelPath); modelEntity = EntityUtils.spawnDrawableEntity(terrainModelPath);
System.out.println("New cell @ " + cellX * dynamicInterpolationRatio + "," + cellY * dynamicInterpolationRatio); LoggerInterface.loggerRenderer.INFO("New cell @ " + cellX * dynamicInterpolationRatio + "," + cellY * dynamicInterpolationRatio);
EntityUtils.getEntityPosition(modelEntity).set(new Vector3f(cellX * dynamicInterpolationRatio, 0.01f, cellY * dynamicInterpolationRatio)); EntityUtils.getEntityPosition(modelEntity).set(new Vector3f(cellX * dynamicInterpolationRatio, 0.01f, cellY * dynamicInterpolationRatio));
} }

View File

@ -1,5 +1,7 @@
package electrosphere.game.client.player; package electrosphere.game.client.player;
import electrosphere.logger.LoggerInterface;
public class ClientPlayerData { public class ClientPlayerData {
int initialDiscretePositionX; int initialDiscretePositionX;
int initialDiscretePositionY; int initialDiscretePositionY;
@ -16,7 +18,7 @@ public class ClientPlayerData {
public void setInitialDiscretePosition(int x, int y){ public void setInitialDiscretePosition(int x, int y){
initialDiscretePositionX = x; initialDiscretePositionX = x;
initialDiscretePositionY = y; initialDiscretePositionY = y;
System.out.println("Loaded"); LoggerInterface.loggerGameLogic.INFO("Loaded client data");
loaded = true; loaded = true;
} }

View File

@ -4,6 +4,7 @@ import electrosphere.game.server.world.*;
import electrosphere.game.server.terrain.manager.ServerTerrainManager; import electrosphere.game.server.terrain.manager.ServerTerrainManager;
import electrosphere.game.server.world.datacell.DataCell; import electrosphere.game.server.world.datacell.DataCell;
import java.util.List; import java.util.List;
import org.joml.Vector2f;
import org.joml.Vector3f; import org.joml.Vector3f;
/** /**

View File

@ -0,0 +1,45 @@
package electrosphere.logger;
/**
*
* @author amaterasu
*/
public class Logger {
public enum LogLevel {
DEBUG,
INFO,
WARNING,
ERROR,
}
LogLevel level;
public Logger(LogLevel level){
this.level = level;
}
public void DEBUG(String message){
if(level == LogLevel.DEBUG){
System.out.println(message);
}
}
public void INFO(String message){
if(level == LogLevel.DEBUG || level == LogLevel.INFO){
System.out.println(message);
}
}
public void WARNING(String message){
if(level == LogLevel.DEBUG || level == LogLevel.INFO || level == LogLevel.WARNING){
System.out.println(message);
}
}
public void ERROR(String message, Exception e){
if(level == LogLevel.DEBUG || level == LogLevel.INFO || level == LogLevel.WARNING || level == LogLevel.ERROR){
System.out.println(message);
}
}
}

View File

@ -0,0 +1,26 @@
package electrosphere.logger;
import electrosphere.logger.Logger.LogLevel;
/**
*
* @author amaterasu
*/
public class LoggerInterface {
public static Logger loggerNetworking;
public static Logger loggerFileIO;
public static Logger loggerGameLogic;
public static Logger loggerRenderer;
public static Logger loggerEngine;
public static void initLoggers(){
loggerNetworking = new Logger(LogLevel.INFO);
loggerFileIO = new Logger(LogLevel.ERROR);
loggerGameLogic = new Logger(LogLevel.DEBUG);
loggerRenderer = new Logger(LogLevel.WARNING);
loggerEngine = new Logger(LogLevel.WARNING);
}
}

View File

@ -20,7 +20,7 @@ import electrosphere.game.client.terrain.manager.ClientTerrainManager;
import electrosphere.game.client.world.ClientWorldData; import electrosphere.game.client.world.ClientWorldData;
import electrosphere.game.collision.CommonWorldData; import electrosphere.game.collision.CommonWorldData;
import electrosphere.game.state.AliveManager; import electrosphere.game.state.AliveManager;
import electrosphere.game.state.LoadingThread; import electrosphere.engine.LoadingThread;
import electrosphere.game.server.terrain.manager.ServerTerrainManager; import electrosphere.game.server.terrain.manager.ServerTerrainManager;
import electrosphere.game.server.world.ServerWorldData; import electrosphere.game.server.world.ServerWorldData;
import electrosphere.menu.Menu; import electrosphere.menu.Menu;

View File

@ -13,9 +13,10 @@ import electrosphere.entity.state.MovementTree;
import electrosphere.entity.types.hitbox.HitboxUtils; import electrosphere.entity.types.hitbox.HitboxUtils;
import electrosphere.entity.types.item.ItemUtils; import electrosphere.entity.types.item.ItemUtils;
import electrosphere.game.state.AttachUtils; import electrosphere.game.state.AttachUtils;
import electrosphere.game.state.LoadingThread; import electrosphere.engine.LoadingThread;
import electrosphere.game.state.SimulationState; import electrosphere.game.state.SimulationState;
import electrosphere.game.state.SimulationState.SimulationStateMachine; import electrosphere.game.state.SimulationState.SimulationStateMachine;
import electrosphere.logger.LoggerInterface;
import electrosphere.renderer.RenderingEngine; import electrosphere.renderer.RenderingEngine;
import electrosphere.util.FileLoadingUtils; import electrosphere.util.FileLoadingUtils;
import java.util.ArrayList; import java.util.ArrayList;
@ -99,6 +100,9 @@ public class Main {
// //
// //
//initialize logging interfaces
LoggerInterface.initLoggers();
//set simulation status to loading title menu //set simulation status to loading title menu
SimulationState.simulationState = SimulationStateMachine.LOADING; SimulationState.simulationState = SimulationStateMachine.LOADING;

View File

@ -1,7 +1,7 @@
package electrosphere.menu; package electrosphere.menu;
import electrosphere.controls.ControlHandler; import electrosphere.controls.ControlHandler;
import electrosphere.game.state.LoadingThread; import electrosphere.engine.LoadingThread;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.main.Main; import electrosphere.main.Main;
import electrosphere.net.NetUtils; import electrosphere.net.NetUtils;

View File

@ -2,6 +2,7 @@ package electrosphere.net;
import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.logger.LoggerInterface;
import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.net.parser.net.message.EntityMessage;
/** /**
@ -21,7 +22,7 @@ public class NetUtils {
// } // }
public static EntityMessage createSetCreatureControllerIdEntityMessage(Entity e){ public static EntityMessage createSetCreatureControllerIdEntityMessage(Entity e){
System.out.println("Controller id: " + CreatureUtils.getControllerPlayerId(e)); LoggerInterface.loggerNetworking.DEBUG("Entity " + e.getId() + " set controller id: " + CreatureUtils.getControllerPlayerId(e));
EntityMessage rVal = EntityMessage.constructsetPropertyMessage(e.getId(), System.currentTimeMillis(), 0, CreatureUtils.getControllerPlayerId(e)); EntityMessage rVal = EntityMessage.constructsetPropertyMessage(e.getId(), System.currentTimeMillis(), 0, CreatureUtils.getControllerPlayerId(e));
return rVal; return rVal;
} }

View File

@ -1,5 +1,6 @@
package electrosphere.net.client; package electrosphere.net.client;
import electrosphere.logger.LoggerInterface;
import electrosphere.util.BufferUtils; import electrosphere.util.BufferUtils;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
@ -52,7 +53,7 @@ public class ClientNetworkMessage {
byteQueue.remove(0); byteQueue.remove(0);
int id = BufferUtils.popIntFromByteQueue(byteQueue); int id = BufferUtils.popIntFromByteQueue(byteQueue);
int type = BufferUtils.popIntFromByteQueue(byteQueue); int type = BufferUtils.popIntFromByteQueue(byteQueue);
System.out.println("Create entity id:" + id + " type:" + type); LoggerInterface.loggerNetworking.INFO("Create entity id:" + id + " type:" + type);
break; break;
case ENTITY_DELETE: case ENTITY_DELETE:
break; break;

View File

@ -3,6 +3,7 @@ package electrosphere.net.client;
import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.main.Main; import electrosphere.main.Main;
import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.net.parser.net.message.EntityMessage;
@ -95,7 +96,7 @@ public class ClientNetworking implements Runnable{
if(initialized){ if(initialized){
while(parser.hasIncomingMessaage()){ while(parser.hasIncomingMessaage()){
NetworkMessage message = parser.popIncomingMessage(); NetworkMessage message = parser.popIncomingMessage();
System.out.println("New message " + message.getType()); LoggerInterface.loggerNetworking.DEBUG("New message " + message.getType());
//do something //do something
clientProtocol.handleMessage(message); clientProtocol.handleMessage(message);
} }

View File

@ -5,6 +5,7 @@ import electrosphere.entity.EntityUtils;
import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.game.client.world.ClientWorldData; import electrosphere.game.client.world.ClientWorldData;
import electrosphere.game.state.AttachUtils; import electrosphere.game.state.AttachUtils;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.main.Main; import electrosphere.main.Main;
import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.net.parser.net.message.EntityMessage;
@ -12,6 +13,7 @@ import electrosphere.net.parser.net.message.NetworkMessage;
import electrosphere.net.parser.net.message.PlayerMessage; import electrosphere.net.parser.net.message.PlayerMessage;
import electrosphere.net.parser.net.message.StatusMessage; import electrosphere.net.parser.net.message.StatusMessage;
import electrosphere.net.parser.net.message.WorldMessage; import electrosphere.net.parser.net.message.WorldMessage;
import org.joml.Vector2f;
import org.joml.Vector3f; import org.joml.Vector3f;
public class ClientProtocol { public class ClientProtocol {
@ -46,11 +48,11 @@ public class ClientProtocol {
} }
void handleEntityMessage(EntityMessage message){ void handleEntityMessage(EntityMessage message){
System.out.println(message.getMessageSubtype()); LoggerInterface.loggerNetworking.DEBUG("Parse entity message of type " + message.getMessageSubtype());
switch(message.getMessageSubtype()){ switch(message.getMessageSubtype()){
case CREATE: case CREATE:
System.out.println("Spawn ID " + message.getentityID()); LoggerInterface.loggerNetworking.DEBUG("Spawn ID " + message.getentityID() + " of type " + message.getcreatureType());
Entity newlySpawnedEntity = CreatureUtils.spawnBasicCreature(message.getcreatureType(), 0.005f, 0.025f); Entity newlySpawnedEntity = EntityUtils.spawnEntityFromEntityMap(message.getcreatureType());;
EntityUtils.getEntityScale(newlySpawnedEntity).set(0.005f); EntityUtils.getEntityScale(newlySpawnedEntity).set(0.005f);
EntityUtils.getEntityPosition(newlySpawnedEntity).set(message.getpositionX(),message.getpositionY(),message.getpositionZ()); EntityUtils.getEntityPosition(newlySpawnedEntity).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
EntityUtils.setEntityID(newlySpawnedEntity, message.getentityID()); EntityUtils.setEntityID(newlySpawnedEntity, message.getentityID());
@ -61,7 +63,7 @@ public class ClientProtocol {
//literally just adding this to scope so I can use `` Entity target; `` again //literally just adding this to scope so I can use `` Entity target; `` again
if(message.getentityID() != -1){ if(message.getentityID() != -1){
Entity target = Globals.entityManager.getEntityFromId(message.getentityID()); Entity target = Globals.entityManager.getEntityFromId(message.getentityID());
System.out.println("ID: " + message.getentityID()); LoggerInterface.loggerNetworking.DEBUG("ID: " + message.getentityID());
if(target != null){ if(target != null){
EntityUtils.getEntityPosition(target).set(message.getpositionX(),message.getpositionY(),message.getpositionZ()); EntityUtils.getEntityPosition(target).set(message.getpositionX(),message.getpositionY(),message.getpositionZ());
} }
@ -84,7 +86,7 @@ public class ClientProtocol {
case ATTACHENTITYTOENTITY: case ATTACHENTITYTOENTITY:
Entity child = Globals.entityManager.getEntityFromId(message.getentityID()); Entity child = Globals.entityManager.getEntityFromId(message.getentityID());
Entity parent = Globals.entityManager.getEntityFromId(message.gettargetID()); Entity parent = Globals.entityManager.getEntityFromId(message.gettargetID());
System.out.println("Attach " + message.getentityID() + " to " + message.gettargetID() + " on bone " + message.getbone()); LoggerInterface.loggerNetworking.DEBUG("Attach " + message.getentityID() + " to " + message.gettargetID() + " on bone " + message.getbone());
if(child != null && parent != null){ if(child != null && parent != null){
AttachUtils.attachEntityToEntityAtBone(parent, child, message.getbone()); AttachUtils.attachEntityToEntityAtBone(parent, child, message.getbone());
} }
@ -96,7 +98,7 @@ public class ClientProtocol {
switch(message.getMessageSubtype()){ switch(message.getMessageSubtype()){
case SET_ID: case SET_ID:
Main.playerId = message.getplayerID(); Main.playerId = message.getplayerID();
System.out.println("Player ID is " + Main.playerId); LoggerInterface.loggerNetworking.DEBUG("Player ID is " + Main.playerId);
break; break;
case SETINITIALDISCRETEPOSITION: case SETINITIALDISCRETEPOSITION:
Globals.clientPlayerData.setInitialDiscretePosition(message.getinitialDiscretePositionX(), message.getinitialDiscretePositionY()); Globals.clientPlayerData.setInitialDiscretePosition(message.getinitialDiscretePositionX(), message.getinitialDiscretePositionY());
@ -121,6 +123,9 @@ public class ClientProtocol {
Globals.clientTerrainManager.attachWorldMessage(message); Globals.clientTerrainManager.attachWorldMessage(message);
Globals.clientTerrainManager.handleMessages(); Globals.clientTerrainManager.handleMessages();
break; break;
case SPAWNPOSITION:
Globals.spawnPoint.set(new Vector3f(message.getrealLocationX(),0,message.getrealLocationY()));
break;
} }
} }

View File

@ -64,6 +64,11 @@ ENTITY_MESSAGE,
rVal = WorldMessage.parseMacroValueMessage(byteStream); rVal = WorldMessage.parseMacroValueMessage(byteStream);
} }
break; break;
case TypeBytes.WORLD_MESSAGE_TYPE_SPAWNPOSITION:
if(WorldMessage.canParseMessage(byteStream,secondByte)){
rVal = WorldMessage.parseSpawnPositionMessage(byteStream);
}
break;
} }
break; break;
case TypeBytes.MESSAGE_TYPE_PLAYER: case TypeBytes.MESSAGE_TYPE_PLAYER:

View File

@ -24,6 +24,7 @@ Message categories
public static final byte WORLD_MESSAGE_TYPE_REQUESTMACROVALUES = 1; public static final byte WORLD_MESSAGE_TYPE_REQUESTMACROVALUES = 1;
public static final byte WORLD_MESSAGE_TYPE_UPDATE = 2; public static final byte WORLD_MESSAGE_TYPE_UPDATE = 2;
public static final byte WORLD_MESSAGE_TYPE_MACROVALUE = 3; public static final byte WORLD_MESSAGE_TYPE_MACROVALUE = 3;
public static final byte WORLD_MESSAGE_TYPE_SPAWNPOSITION = 4;
/* /*
World packet sizes World packet sizes
*/ */
@ -31,6 +32,7 @@ Message categories
public static final byte WORLD_MESSAGE_TYPE_REQUESTMACROVALUES_SIZE = 10; public static final byte WORLD_MESSAGE_TYPE_REQUESTMACROVALUES_SIZE = 10;
public static final byte WORLD_MESSAGE_TYPE_UPDATE_SIZE = 10; public static final byte WORLD_MESSAGE_TYPE_UPDATE_SIZE = 10;
public static final byte WORLD_MESSAGE_TYPE_MACROVALUE_SIZE = 118; public static final byte WORLD_MESSAGE_TYPE_MACROVALUE_SIZE = 118;
public static final byte WORLD_MESSAGE_TYPE_SPAWNPOSITION_SIZE = 10;
/* /*
Player subcategories Player subcategories
*/ */

View File

@ -11,6 +11,7 @@ public class WorldMessage extends NetworkMessage {
REQUESTMACROVALUES, REQUESTMACROVALUES,
UPDATE, UPDATE,
MACROVALUE, MACROVALUE,
SPAWNPOSITION,
} }
WorldMessageType messageType; WorldMessageType messageType;
@ -23,6 +24,8 @@ public class WorldMessage extends NetworkMessage {
int worldMaxY; int worldMaxY;
int locationX; int locationX;
int locationY; int locationY;
float realLocationX;
float realLocationY;
float macroValue00; float macroValue00;
float macroValue01; float macroValue01;
float macroValue02; float macroValue02;
@ -123,6 +126,22 @@ public class WorldMessage extends NetworkMessage {
this.locationY = locationY; this.locationY = locationY;
} }
public float getrealLocationX() {
return realLocationX;
}
public void setrealLocationX(float realLocationX) {
this.realLocationX = realLocationX;
}
public float getrealLocationY() {
return realLocationY;
}
public void setrealLocationY(float realLocationY) {
this.realLocationY = realLocationY;
}
public float getmacroValue00() { public float getmacroValue00() {
return macroValue00; return macroValue00;
} }
@ -298,6 +317,12 @@ public class WorldMessage extends NetworkMessage {
} else { } else {
return false; return false;
} }
case TypeBytes.WORLD_MESSAGE_TYPE_SPAWNPOSITION:
if(byteStream.size() >= TypeBytes.WORLD_MESSAGE_TYPE_SPAWNPOSITION_SIZE){
return true;
} else {
return false;
}
} }
return false; return false;
} }
@ -412,6 +437,22 @@ public class WorldMessage extends NetworkMessage {
return rVal; return rVal;
} }
public static WorldMessage parseSpawnPositionMessage(List<Byte> byteStream){
WorldMessage rVal = new WorldMessage(WorldMessageType.SPAWNPOSITION);
stripPacketHeader(byteStream);
rVal.setrealLocationX(ByteStreamUtils.popFloatFromByteQueue(byteStream));
rVal.setrealLocationY(ByteStreamUtils.popFloatFromByteQueue(byteStream));
return rVal;
}
public static WorldMessage constructSpawnPositionMessage(float realLocationX,float realLocationY){
WorldMessage rVal = new WorldMessage(WorldMessageType.SPAWNPOSITION);
rVal.setrealLocationX(realLocationX);
rVal.setrealLocationY(realLocationY);
rVal.serialize();
return rVal;
}
@Override @Override
void serialize(){ void serialize(){
byte[] intValues = new byte[8]; byte[] intValues = new byte[8];
@ -559,6 +600,19 @@ public class WorldMessage extends NetworkMessage {
rawBytes[110+i] = intValues[i]; rawBytes[110+i] = intValues[i];
} }
break; break;
case SPAWNPOSITION:
rawBytes = new byte[2+4+4];
//message header
rawBytes[0] = TypeBytes.MESSAGE_TYPE_WORLD;
//entity messaage header
rawBytes[1] = TypeBytes.WORLD_MESSAGE_TYPE_SPAWNPOSITION;
intValues = ByteStreamUtils.serializeFloatToBytes(realLocationX);
for(int i = 0; i < 4; i++){
rawBytes[2+i] = intValues[i];
} intValues = ByteStreamUtils.serializeFloatToBytes(realLocationY);
for(int i = 0; i < 4; i++){
rawBytes[6+i] = intValues[i];
} break;
} }
serialized = true; serialized = true;
} }

View File

@ -5,6 +5,7 @@ import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.entity.types.item.ItemUtils; import electrosphere.entity.types.item.ItemUtils;
import electrosphere.game.state.AttachUtils; import electrosphere.game.state.AttachUtils;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.main.Main; import electrosphere.main.Main;
import electrosphere.net.NetUtils; import electrosphere.net.NetUtils;
@ -54,12 +55,12 @@ public class ServerConnectionHandler implements Runnable {
public ServerConnectionHandler(Socket socket) { public ServerConnectionHandler(Socket socket) {
this.socket = socket; this.socket = socket;
playerID = getPlayerID(); playerID = getPlayerID();
System.out.println("Player ID: " + playerID); LoggerInterface.loggerNetworking.INFO("Player ID: " + playerID);
} }
@Override @Override
public void run() { public void run() {
System.out.println("ServerConnectionHandler start"); LoggerInterface.loggerNetworking.INFO("ServerConnectionHandler start");
initialized = false; initialized = false;
try { try {
socket.setSoTimeout(100); socket.setSoTimeout(100);
@ -121,6 +122,10 @@ public class ServerConnectionHandler implements Runnable {
Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z) Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z)
) )
); );
//send spawn point
networkParser.addOutgoingMessage(
WorldMessage.constructSpawnPositionMessage(Globals.spawnPoint.x, Globals.spawnPoint.z)
);
//tell them what player stats they are //tell them what player stats they are
networkParser.addOutgoingMessage(PlayerMessage.constructSet_IDMessage(playerID)); networkParser.addOutgoingMessage(PlayerMessage.constructSet_IDMessage(playerID));
//figure out what chunk they're in //figure out what chunk they're in
@ -141,22 +146,31 @@ public class ServerConnectionHandler implements Runnable {
); );
if(CreatureUtils.isCreature(currentEntity)){ if(CreatureUtils.isCreature(currentEntity)){
if(CreatureUtils.hasControllerPlayerId(currentEntity)){ if(CreatureUtils.hasControllerPlayerId(currentEntity)){
System.out.println("Sending controller packets"); LoggerInterface.loggerNetworking.INFO("Sending controller packets");
networkParser.addOutgoingMessage(NetUtils.createSetCreatureControllerIdEntityMessage(currentEntity)); networkParser.addOutgoingMessage(NetUtils.createSetCreatureControllerIdEntityMessage(currentEntity));
} }
} }
} }
// for(Entity currentEntity : Globals.entityManager.getItemEntities()){ for(Entity currentEntity : Globals.entityManager.getItemEntities()){
// if(AttachUtils.isAttached(currentEntity)){ networkParser.addOutgoingMessage(
// networkParser.addOutgoingMessage( EntityMessage.constructCreateMessage(
// EntityMessage.constructattachEntityToEntityMessage( currentEntity.getId(),
// currentEntity.getId(), CreatureUtils.getCreatureType(currentEntity),
// AttachUtils.getTargetBone(currentEntity), EntityUtils.getEntityPosition(currentEntity).x,
// AttachUtils.getParent(currentEntity).getId() EntityUtils.getEntityPosition(currentEntity).y,
// ) EntityUtils.getEntityPosition(currentEntity).z
// ); )
// } );
// } if(AttachUtils.isAttached(currentEntity)){
networkParser.addOutgoingMessage(
EntityMessage.constructattachEntityToEntityMessage(
currentEntity.getId(),
AttachUtils.getTargetBone(currentEntity),
AttachUtils.getParent(currentEntity).getId()
)
);
}
}
} }
//let client know it's ready //let client know it's ready

View File

@ -1,4 +1,4 @@
/* /*
* To change this license header, choose License Headers in Project Properties. * To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates * To change this template file, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.

View File

@ -4,6 +4,7 @@ import electrosphere.entity.CameraEntityUtils;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import static electrosphere.main.Main.deltaTime; import static electrosphere.main.Main.deltaTime;
import static electrosphere.main.Main.view_Range; import static electrosphere.main.Main.view_Range;
@ -95,7 +96,7 @@ public class RenderingEngine {
Globals.window = glfwCreateWindow(screenWidth, screenHeight, "LearnOpenGL", NULL, NULL); Globals.window = glfwCreateWindow(screenWidth, screenHeight, "LearnOpenGL", NULL, NULL);
//Errors for failure to create window (IE: No GUI mode on linux ?) //Errors for failure to create window (IE: No GUI mode on linux ?)
if (Globals.window == NULL) { if (Globals.window == NULL) {
System.out.println("Failed to make window."); LoggerInterface.loggerEngine.ERROR("Failed to make window.", new Exception("Renderer Creation Failure"));
glfwTerminate(); glfwTerminate();
} }
//Makes the window that was just created the current OS-level window context //Makes the window that was just created the current OS-level window context

View File

@ -1,5 +1,6 @@
package electrosphere.renderer; package electrosphere.renderer;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Main; import electrosphere.main.Main;
import electrosphere.util.FileLoadingUtils; import electrosphere.util.FileLoadingUtils;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -110,10 +111,10 @@ public class ShaderProgram {
int success; int success;
success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS);
if (success != GL_TRUE) { if (success != GL_TRUE) {
System.out.println("Vertex Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!");
System.out.println("Source is: "); LoggerInterface.loggerRenderer.WARNING("Source is: ");
System.out.println(GL20.glGetShaderSource(rVal.vertexShader)); LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader));
throw new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader)); LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader)));
} }
//Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader
rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
@ -124,10 +125,10 @@ public class ShaderProgram {
//This tests for the success of the compile attempt //This tests for the success of the compile attempt
success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS);
if (success != GL_TRUE) { if (success != GL_TRUE) {
System.out.println("Fragment Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!");
System.out.println("Source is: "); LoggerInterface.loggerRenderer.WARNING("Source is: ");
System.out.println(GL20.glGetShaderSource(rVal.fragmentShader)); LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader));
throw new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader)); LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader)));
} }
//This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram
rVal.shaderProgram = glCreateProgram(); rVal.shaderProgram = glCreateProgram();
@ -223,8 +224,10 @@ public class ShaderProgram {
int success; int success;
success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS);
if (success != GL_TRUE) { if (success != GL_TRUE) {
System.out.println("Vertex Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!");
throw new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader)); LoggerInterface.loggerRenderer.WARNING("Source is: ");
LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader));
LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader)));
} }
//Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader
rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
@ -235,8 +238,10 @@ public class ShaderProgram {
//This tests for the success of the compile attempt //This tests for the success of the compile attempt
success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS);
if (success != GL_TRUE) { if (success != GL_TRUE) {
System.out.println("Fragment Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!");
throw new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader)); LoggerInterface.loggerRenderer.WARNING("Source is: ");
LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader));
LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader)));
} }
//This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram
rVal.shaderProgram = glCreateProgram(); rVal.shaderProgram = glCreateProgram();
@ -300,8 +305,10 @@ public class ShaderProgram {
int success; int success;
success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS);
if (success != GL_TRUE) { if (success != GL_TRUE) {
System.out.println("Vertex Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!");
throw new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader)); LoggerInterface.loggerRenderer.WARNING("Source is: ");
LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader));
LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader)));
} }
//Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader
rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
@ -312,8 +319,10 @@ public class ShaderProgram {
//This tests for the success of the compile attempt //This tests for the success of the compile attempt
success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS);
if (success != GL_TRUE) { if (success != GL_TRUE) {
System.out.println("Fragment Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!");
throw new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader)); LoggerInterface.loggerRenderer.WARNING("Source is: ");
LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader));
LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader)));
} }
//This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram
rVal.shaderProgram = glCreateProgram(); rVal.shaderProgram = glCreateProgram();

View File

@ -1,5 +1,6 @@
package electrosphere.util; package electrosphere.util;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.main.Main; import electrosphere.main.Main;
import electrosphere.renderer.Material; import electrosphere.renderer.Material;
@ -65,10 +66,10 @@ public class ModelLoader {
ArrayList<String> texture_path_list = mesh_map.get(current_mesh.nodeID); ArrayList<String> texture_path_list = mesh_map.get(current_mesh.nodeID);
String diffuse_path = TextureMap.get_diffuse_path(texture_path_list); String diffuse_path = TextureMap.get_diffuse_path(texture_path_list);
if(diffuse_path != null){ if(diffuse_path != null){
System.out.println(diffuse_path); LoggerInterface.loggerRenderer.DEBUG(diffuse_path);
Texture diffuse = new Texture(diffuse_path); Texture diffuse = new Texture(diffuse_path);
final_material.set_diffuse(diffuse); final_material.set_diffuse(diffuse);
System.out.println(diffuse); LoggerInterface.loggerRenderer.DEBUG(diffuse.toString());
} else { } else {
final_material.set_diffuse(Globals.textureDiffuseDefault); final_material.set_diffuse(Globals.textureDiffuseDefault);
} }
@ -76,7 +77,7 @@ public class ModelLoader {
if(specular_path != null){ if(specular_path != null){
Texture specular = new Texture(specular_path); Texture specular = new Texture(specular_path);
final_material.set_specular(specular); final_material.set_specular(specular);
System.out.println(specular); LoggerInterface.loggerRenderer.DEBUG(specular.toString());
} else { } else {
final_material.set_specular(Globals.textureSpecularDefault); final_material.set_specular(Globals.textureSpecularDefault);
} }

View File

@ -70,6 +70,16 @@
}, },
{
"name" : "realLocationX",
"type" : "FIXED_FLOAT"
},
{
"name" : "realLocationY",
"type" : "FIXED_FLOAT"
},
@ -201,6 +211,13 @@
"randomizerValue21", "randomizerValue21",
"randomizerValue22" "randomizerValue22"
] ]
},
{
"messageName" : "SpawnPosition",
"data" : [
"realLocationX",
"realLocationY"
]
} }
] ]
}, },