client state
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
df3a9ec460
commit
3c10d42351
@ -1801,6 +1801,9 @@ Fix reloading client world repeatedly
|
||||
AI manager thread safeing
|
||||
AI manager better error handling
|
||||
Delete deprecated classes
|
||||
Create ClientState global
|
||||
Properly reset ClientState
|
||||
Move clientWorldData to clientState
|
||||
|
||||
|
||||
|
||||
|
||||
15
src/main/java/electrosphere/client/ClientState.java
Normal file
15
src/main/java/electrosphere/client/ClientState.java
Normal file
@ -0,0 +1,15 @@
|
||||
package electrosphere.client;
|
||||
|
||||
import electrosphere.client.scene.ClientWorldData;
|
||||
|
||||
/**
|
||||
* State on the client
|
||||
*/
|
||||
public class ClientState {
|
||||
|
||||
/**
|
||||
* Data on the currently loaded world
|
||||
*/
|
||||
public ClientWorldData clientWorldData;
|
||||
|
||||
}
|
||||
@ -28,9 +28,9 @@ public class ClientBlockSelection {
|
||||
|
||||
boolean encountered = false;
|
||||
|
||||
for(int x = 0; x < Globals.clientWorldData.getWorldDiscreteSize(); x++){
|
||||
for(int y = 0; y < Globals.clientWorldData.getWorldDiscreteSize(); y++){
|
||||
for(int z = 0; z < Globals.clientWorldData.getWorldDiscreteSize(); z++){
|
||||
for(int x = 0; x < Globals.clientState.clientWorldData.getWorldDiscreteSize(); x++){
|
||||
for(int y = 0; y < Globals.clientState.clientWorldData.getWorldDiscreteSize(); y++){
|
||||
for(int z = 0; z < Globals.clientState.clientWorldData.getWorldDiscreteSize(); z++){
|
||||
chunkPos = new Vector3i(x,y,z);
|
||||
|
||||
BlockChunkData blockChunkData = Globals.clientBlockManager.getChunkDataAtWorldPoint(chunkPos, 0);
|
||||
@ -57,8 +57,8 @@ public class ClientBlockSelection {
|
||||
}
|
||||
}
|
||||
|
||||
Vector3d localMin = Globals.clientWorldData.convertBlockToRealSpace(chunkPos, minVoxelPos);
|
||||
Vector3d localMax = Globals.clientWorldData.convertBlockToRealSpace(chunkPos, maxVoxelPos);
|
||||
Vector3d localMin = Globals.clientState.clientWorldData.convertBlockToRealSpace(chunkPos, minVoxelPos);
|
||||
Vector3d localMax = Globals.clientState.clientWorldData.convertBlockToRealSpace(chunkPos, maxVoxelPos);
|
||||
|
||||
if(!encountered){
|
||||
encountered = true;
|
||||
@ -90,13 +90,13 @@ public class ClientBlockSelection {
|
||||
*/
|
||||
public static BlockFab convertSelectionToFab(){
|
||||
AreaSelection selection = Globals.cursorState.getAreaSelection();
|
||||
Vector3i startChunk = Globals.clientWorldData.convertRealToWorldSpace(selection.getRectStart());
|
||||
Vector3i endChunk = Globals.clientWorldData.convertRealToWorldSpace(selection.getRectEnd());
|
||||
Vector3i startChunk = Globals.clientState.clientWorldData.convertRealToWorldSpace(selection.getRectStart());
|
||||
Vector3i endChunk = Globals.clientState.clientWorldData.convertRealToWorldSpace(selection.getRectEnd());
|
||||
if(!startChunk.equals(endChunk)){
|
||||
throw new Error("Unsupported case! Selected are coverts multiple chunks.. " + startChunk + " " + endChunk);
|
||||
}
|
||||
Vector3i blockStart = Globals.clientWorldData.convertRealToBlockSpace(selection.getRectStart());
|
||||
Vector3i blockEnd = Globals.clientWorldData.convertRealToBlockSpace(selection.getRectEnd());
|
||||
Vector3i blockStart = Globals.clientState.clientWorldData.convertRealToBlockSpace(selection.getRectStart());
|
||||
Vector3i blockEnd = Globals.clientState.clientWorldData.convertRealToBlockSpace(selection.getRectEnd());
|
||||
|
||||
BlockChunkData chunk = Globals.clientBlockManager.getChunkDataAtWorldPoint(startChunk, 0);
|
||||
if(chunk == null){
|
||||
|
||||
@ -139,7 +139,7 @@ public class ClientBlockCellManager {
|
||||
Globals.profiler.beginCpuSample("ClientBlockCellManager.update");
|
||||
if(shouldUpdate && Globals.playerEntity != null){
|
||||
Vector3d playerPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||
Vector3i playerWorldPos = Globals.clientWorldData.convertRealToWorldSpace(playerPos);
|
||||
Vector3i playerWorldPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(playerPos);
|
||||
int distCache = this.getDistCache(this.lastPlayerPos, playerWorldPos);
|
||||
this.lastPlayerPos.set(playerWorldPos);
|
||||
//the sets to iterate through
|
||||
@ -657,8 +657,8 @@ public class ClientBlockCellManager {
|
||||
*/
|
||||
public boolean isFullLOD(Vector3i worldPos){
|
||||
Vector3d playerRealPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||
Vector3d chunkMin = Globals.clientWorldData.convertWorldToRealSpace(worldPos);
|
||||
Vector3d chunkMax = Globals.clientWorldData.convertWorldToRealSpace(new Vector3i(worldPos).add(1,1,1));
|
||||
Vector3d chunkMin = Globals.clientState.clientWorldData.convertWorldToRealSpace(worldPos);
|
||||
Vector3d chunkMax = Globals.clientState.clientWorldData.convertWorldToRealSpace(new Vector3i(worldPos).add(1,1,1));
|
||||
return GeomUtils.getMinDistanceAABB(playerRealPos, chunkMin, chunkMax) <= FULL_RES_DIST;
|
||||
}
|
||||
|
||||
@ -706,11 +706,11 @@ public class ClientBlockCellManager {
|
||||
Vector3i worldPos = node.getMinBound();
|
||||
if(
|
||||
worldPos.x >= 0 &&
|
||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y >= 0 &&
|
||||
worldPos.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z >= 0 &&
|
||||
worldPos.z < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
!Globals.clientBlockManager.containsChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z, lod)
|
||||
){
|
||||
//client should request chunk data from server for each chunk necessary to create the model
|
||||
|
||||
@ -83,8 +83,8 @@ public class FluidCellManager {
|
||||
* @param discreteY The initial discrete position Y coordinate
|
||||
*/
|
||||
public FluidCellManager(ClientTerrainManager clientTerrainManager, int discreteX, int discreteY, int discreteZ){
|
||||
if(Globals.clientWorldData != null){
|
||||
worldBoundDiscreteMax = (int)(Globals.clientWorldData.getWorldBoundMin().x / ServerTerrainChunk.CHUNK_DIMENSION * 1.0f);
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
worldBoundDiscreteMax = (int)(Globals.clientState.clientWorldData.getWorldBoundMin().x / ServerTerrainChunk.CHUNK_DIMENSION * 1.0f);
|
||||
}
|
||||
cells = new HashSet<FluidCell>();
|
||||
hasNotRequested = new HashSet<String>();
|
||||
@ -130,11 +130,11 @@ public class FluidCellManager {
|
||||
|
||||
if(
|
||||
worldPos.x >= 0 &&
|
||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y >= 0 &&
|
||||
worldPos.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z >= 0 &&
|
||||
worldPos.z < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
worldPos.z < Globals.clientState.clientWorldData.getWorldDiscreteSize()
|
||||
){
|
||||
// if(!hasRequested.contains(targetKey)){
|
||||
//client should request chunk data from server
|
||||
@ -160,11 +160,11 @@ public class FluidCellManager {
|
||||
Vector3i worldPos = getVectorFromKey(targetKey);
|
||||
if(
|
||||
worldPos.x >= 0 &&
|
||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y >= 0 &&
|
||||
worldPos.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z >= 0 &&
|
||||
worldPos.z < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
worldPos.z < Globals.clientState.clientWorldData.getWorldDiscreteSize()
|
||||
){
|
||||
if(containsChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z)){
|
||||
FluidCell cell = FluidCell.generateFluidCell(
|
||||
@ -194,11 +194,11 @@ public class FluidCellManager {
|
||||
Vector3i worldPos = this.getVectorFromKey(targetKey);
|
||||
if(
|
||||
worldPos.x >= 0 &&
|
||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y >= 0 &&
|
||||
worldPos.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z >= 0 &&
|
||||
worldPos.z < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
worldPos.z < Globals.clientState.clientWorldData.getWorldDiscreteSize()
|
||||
){
|
||||
// if(Math.abs(drawRadius + 1 - targetX) < physicsRadius && Math.abs(drawRadius + 1 - targetY) < physicsRadius){
|
||||
// needsPhysics[targetX][targetY] = true;
|
||||
@ -315,30 +315,30 @@ public class FluidCellManager {
|
||||
* Queues new cells that are in bounds but not currently accounted for
|
||||
*/
|
||||
private void queueNewCells(){
|
||||
if(Globals.playerEntity != null && Globals.clientWorldData != null){
|
||||
if(Globals.playerEntity != null && Globals.clientState.clientWorldData != null){
|
||||
Vector3d playerPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||
for(int x = -(int)drawRadius; x < drawRadius; x = x + ChunkData.CHUNK_DATA_SIZE){
|
||||
for(int y = -(int)drawRadius; y < drawRadius; y = y + ChunkData.CHUNK_DATA_SIZE){
|
||||
for(int z = -(int)drawRadius; z < drawRadius; z = z + ChunkData.CHUNK_DATA_SIZE){
|
||||
Vector3d newPos = new Vector3d(playerPos.x + x, playerPos.y + y, playerPos.z + z);
|
||||
Vector3i worldPos = new Vector3i(
|
||||
Globals.clientWorldData.convertRealToChunkSpace(newPos.x),
|
||||
Globals.clientWorldData.convertRealToChunkSpace(newPos.y),
|
||||
Globals.clientWorldData.convertRealToChunkSpace(newPos.z)
|
||||
Globals.clientState.clientWorldData.convertRealToChunkSpace(newPos.x),
|
||||
Globals.clientState.clientWorldData.convertRealToChunkSpace(newPos.y),
|
||||
Globals.clientState.clientWorldData.convertRealToChunkSpace(newPos.z)
|
||||
);
|
||||
Vector3d chunkRealSpace = new Vector3d(
|
||||
Globals.clientWorldData.convertChunkToRealSpace(worldPos.x),
|
||||
Globals.clientWorldData.convertChunkToRealSpace(worldPos.y),
|
||||
Globals.clientWorldData.convertChunkToRealSpace(worldPos.z)
|
||||
Globals.clientState.clientWorldData.convertChunkToRealSpace(worldPos.x),
|
||||
Globals.clientState.clientWorldData.convertChunkToRealSpace(worldPos.y),
|
||||
Globals.clientState.clientWorldData.convertChunkToRealSpace(worldPos.z)
|
||||
);
|
||||
if(
|
||||
playerPos.distance(chunkRealSpace) < drawRadius &&
|
||||
worldPos.x >= 0 &&
|
||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y >= 0 &&
|
||||
worldPos.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z >= 0 &&
|
||||
worldPos.z < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
worldPos.z < Globals.clientState.clientWorldData.getWorldDiscreteSize()
|
||||
){
|
||||
String key = getCellKey(
|
||||
worldPos.x,
|
||||
|
||||
@ -277,9 +277,9 @@ public class ClientInteractionEngine {
|
||||
collisionPosition.x >= 0 && collisionPosition.y >= 0 && collisionPosition.z >= 0
|
||||
){
|
||||
//grab block at point
|
||||
BlockChunkData blockChunkData = Globals.clientBlockManager.getChunkDataAtWorldPoint(Globals.clientWorldData.convertRealToWorldSpace(collisionPosition), 0);
|
||||
BlockChunkData blockChunkData = Globals.clientBlockManager.getChunkDataAtWorldPoint(Globals.clientState.clientWorldData.convertRealToWorldSpace(collisionPosition), 0);
|
||||
if(blockChunkData != null){
|
||||
Vector3i blockPos = Globals.clientWorldData.convertRealToBlockSpace(new Vector3d(collisionPosition).add(new Vector3d(eyePos).mul(-BlockChunkData.BLOCK_SIZE_MULTIPLIER / 2.0f)));
|
||||
Vector3i blockPos = Globals.clientState.clientWorldData.convertRealToBlockSpace(new Vector3d(collisionPosition).add(new Vector3d(eyePos).mul(-BlockChunkData.BLOCK_SIZE_MULTIPLIER / 2.0f)));
|
||||
if(!blockChunkData.isEmpty(blockPos.x, blockPos.y, blockPos.z)){
|
||||
short type = blockChunkData.getType(blockPos.x, blockPos.y, blockPos.z);
|
||||
String text = Globals.gameConfigCurrent.getBlockData().getTypeFromId(type).getName();
|
||||
@ -291,9 +291,9 @@ public class ClientInteractionEngine {
|
||||
}
|
||||
//if we didn't find a block type, try terrain
|
||||
if(!set){
|
||||
ChunkData chunkData = Globals.clientTerrainManager.getChunkDataAtWorldPoint(Globals.clientWorldData.convertRealToWorldSpace(collisionPosition), 0);
|
||||
ChunkData chunkData = Globals.clientTerrainManager.getChunkDataAtWorldPoint(Globals.clientState.clientWorldData.convertRealToWorldSpace(collisionPosition), 0);
|
||||
if(chunkData != null){
|
||||
int voxelType = chunkData.getType(Globals.clientWorldData.convertRealToVoxelSpace(new Vector3d(collisionPosition).add(new Vector3d(ServerTerrainChunk.VOXEL_SIZE / 2.0f))));
|
||||
int voxelType = chunkData.getType(Globals.clientState.clientWorldData.convertRealToVoxelSpace(new Vector3d(collisionPosition).add(new Vector3d(ServerTerrainChunk.VOXEL_SIZE / 2.0f))));
|
||||
if(voxelType != ServerTerrainChunk.VOXEL_TYPE_AIR){
|
||||
String text = Globals.gameConfigCurrent.getVoxelData().getTypeFromId(voxelType).getName();
|
||||
InteractionTargetMenu.setInteractionTargetString(text);
|
||||
|
||||
@ -151,7 +151,7 @@ public class AreaSelection {
|
||||
currVoxelPos.y % BlockChunkData.CHUNK_DATA_WIDTH,
|
||||
currVoxelPos.z % BlockChunkData.CHUNK_DATA_WIDTH
|
||||
);
|
||||
if(!Globals.clientWorldData.chunkInBounds(currChunkPos)){
|
||||
if(!Globals.clientState.clientWorldData.chunkInBounds(currChunkPos)){
|
||||
switch(increment % 6){
|
||||
case 0: {
|
||||
if(expandPositiveX){
|
||||
@ -324,13 +324,13 @@ public class AreaSelection {
|
||||
}
|
||||
}
|
||||
|
||||
Vector3d startPos = new Vector3d(Globals.clientWorldData.convertBlockToRealSpace(chunkPos, blockPos))
|
||||
Vector3d startPos = new Vector3d(Globals.clientState.clientWorldData.convertBlockToRealSpace(chunkPos, blockPos))
|
||||
.add(
|
||||
startOffset.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER,
|
||||
startOffset.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER,
|
||||
startOffset.z * BlockChunkData.BLOCK_SIZE_MULTIPLIER
|
||||
);
|
||||
Vector3d endPos = new Vector3d(Globals.clientWorldData.convertBlockToRealSpace(chunkPos, blockPos))
|
||||
Vector3d endPos = new Vector3d(Globals.clientState.clientWorldData.convertBlockToRealSpace(chunkPos, blockPos))
|
||||
.add(
|
||||
endOffset.x * BlockChunkData.BLOCK_SIZE_MULTIPLIER,
|
||||
endOffset.y * BlockChunkData.BLOCK_SIZE_MULTIPLIER,
|
||||
|
||||
@ -21,8 +21,8 @@ public class ScriptClientAreaUtils {
|
||||
public static void selectAreaRectangular(){
|
||||
// Vector3d blockCursorPos = Globals.cursorState.getBlockCursorPos();
|
||||
Vector3d cursorPos = new Vector3d(EntityUtils.getPosition(Globals.playerCursor));
|
||||
Vector3i chunkPos = Globals.clientWorldData.convertRealToWorldSpace(cursorPos);
|
||||
Vector3i blockPos = Globals.clientWorldData.convertRealToBlockSpace(cursorPos);
|
||||
Vector3i chunkPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(cursorPos);
|
||||
Vector3i blockPos = Globals.clientState.clientWorldData.convertRealToBlockSpace(cursorPos);
|
||||
AreaSelection selection = AreaSelection.selectRectangularBlockCavity(chunkPos, blockPos, AreaSelection.DEFAULT_SELECTION_RADIUS);
|
||||
Globals.cursorState.selectRectangularArea(selection);
|
||||
CursorState.makeAreaVisible();
|
||||
|
||||
@ -144,8 +144,8 @@ public class ScriptClientVoxelUtils {
|
||||
if(Globals.cursorState.getSelectedFabPath() != null){
|
||||
String fabPath = Globals.cursorState.getSelectedFabPath();
|
||||
Vector3d fabCursorPos = EntityUtils.getPosition(CursorState.getFabCursor());
|
||||
Vector3i chunkPos = Globals.clientWorldData.convertRealToWorldSpace(fabCursorPos);
|
||||
Vector3i voxelPos = Globals.clientWorldData.convertRealToBlockSpace(fabCursorPos);
|
||||
Vector3i chunkPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(fabCursorPos);
|
||||
Vector3i voxelPos = Globals.clientState.clientWorldData.convertRealToBlockSpace(fabCursorPos);
|
||||
int rotation = Globals.cursorState.getFabCursorRotation();
|
||||
Globals.clientConnection.queueOutgoingMessage(TerrainMessage.constructRequestPlaceFabMessage(
|
||||
chunkPos.x, chunkPos.y, chunkPos.z,
|
||||
|
||||
@ -195,7 +195,7 @@ public class ClientSimulation {
|
||||
///
|
||||
/// C L I E N T C E L L M A N A G E R
|
||||
///
|
||||
if(Globals.clientDrawCellManager != null && Globals.clientWorldData != null){
|
||||
if(Globals.clientDrawCellManager != null && Globals.clientState.clientWorldData != null){
|
||||
//Cell manager do your things
|
||||
Globals.clientDrawCellManager.update();
|
||||
}
|
||||
@ -206,7 +206,7 @@ public class ClientSimulation {
|
||||
*/
|
||||
private void updateFluidCellManager(){
|
||||
//fluid work
|
||||
if(Globals.fluidCellManager != null && Globals.clientWorldData != null && Globals.RUN_FLUIDS){
|
||||
if(Globals.fluidCellManager != null && Globals.clientState.clientWorldData != null && Globals.RUN_FLUIDS){
|
||||
Globals.fluidCellManager.update();
|
||||
}
|
||||
}
|
||||
@ -215,7 +215,7 @@ public class ClientSimulation {
|
||||
* Updates the block cell manager
|
||||
*/
|
||||
private void updateBlockCellManager(){
|
||||
if(Globals.clientBlockCellManager != null && Globals.clientWorldData != null){
|
||||
if(Globals.clientBlockCellManager != null && Globals.clientState.clientWorldData != null){
|
||||
Globals.clientBlockCellManager.update();
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,7 +174,7 @@ public class ClientDrawCellManager {
|
||||
Globals.profiler.beginCpuSample("ClientDrawCellManager.update");
|
||||
if(shouldUpdate && Globals.playerEntity != null){
|
||||
Vector3d playerPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||
Vector3i playerWorldPos = Globals.clientWorldData.convertRealToWorldSpace(playerPos);
|
||||
Vector3i playerWorldPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(playerPos);
|
||||
int distCache = this.getDistCache(this.lastPlayerPos, playerWorldPos);
|
||||
if(this.bustDistCache){
|
||||
this.bustDistCache = false;
|
||||
@ -804,8 +804,8 @@ public class ClientDrawCellManager {
|
||||
*/
|
||||
public boolean isFullLOD(Vector3i worldPos){
|
||||
Vector3d playerRealPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||
Vector3d chunkMin = Globals.clientWorldData.convertWorldToRealSpace(worldPos);
|
||||
Vector3d chunkMax = Globals.clientWorldData.convertWorldToRealSpace(new Vector3i(worldPos).add(1,1,1));
|
||||
Vector3d chunkMin = Globals.clientState.clientWorldData.convertWorldToRealSpace(worldPos);
|
||||
Vector3d chunkMax = Globals.clientState.clientWorldData.convertWorldToRealSpace(new Vector3i(worldPos).add(1,1,1));
|
||||
return GeomUtils.getMinDistanceAABB(playerRealPos, chunkMin, chunkMax) <= FULL_RES_DIST;
|
||||
}
|
||||
|
||||
@ -843,11 +843,11 @@ public class ClientDrawCellManager {
|
||||
Vector3i worldPos = node.getMinBound();
|
||||
if(
|
||||
worldPos.x >= 0 &&
|
||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y >= 0 &&
|
||||
worldPos.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z >= 0 &&
|
||||
worldPos.z < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
!Globals.clientTerrainManager.containsChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z, lod)
|
||||
){
|
||||
//client should request chunk data from server for each chunk necessary to create the model
|
||||
@ -887,11 +887,11 @@ public class ClientDrawCellManager {
|
||||
}
|
||||
if(
|
||||
posToCheck.x >= 0 &&
|
||||
posToCheck.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.y >= 0 &&
|
||||
posToCheck.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.z >= 0 &&
|
||||
posToCheck.z < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.z < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
!Globals.clientTerrainManager.containsChunkDataAtWorldPoint(posToCheck.x, posToCheck.y, posToCheck.z, highResLod)
|
||||
){
|
||||
LoggerInterface.loggerNetworking.DEBUG("(Client) Send Request for terrain at " + posToCheck);
|
||||
@ -951,11 +951,11 @@ public class ClientDrawCellManager {
|
||||
}
|
||||
if(
|
||||
posToCheck.x >= 0 &&
|
||||
posToCheck.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.y >= 0 &&
|
||||
posToCheck.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.z >= 0 &&
|
||||
posToCheck.z < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
posToCheck.z < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
!Globals.clientTerrainManager.containsChunkDataAtWorldPoint(posToCheck.x, posToCheck.y, posToCheck.z, highResLod)
|
||||
){
|
||||
return false;
|
||||
|
||||
@ -16,9 +16,9 @@ public class BlockEditing {
|
||||
* @param metadata The metadata of the block
|
||||
*/
|
||||
public static void editBlock(short type, short metadata){
|
||||
Vector3i cornerVoxel = Globals.clientWorldData.convertRealToBlockSpace(Globals.cursorState.getBlockCursorPos());
|
||||
Vector3i cornerVoxel = Globals.clientState.clientWorldData.convertRealToBlockSpace(Globals.cursorState.getBlockCursorPos());
|
||||
int blockSize = Globals.cursorState.getBlockSize();
|
||||
Vector3i chunkPos = Globals.clientWorldData.convertRealToWorldSpace(Globals.cursorState.getBlockCursorPos());
|
||||
Vector3i chunkPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(Globals.cursorState.getBlockCursorPos());
|
||||
ScriptClientVoxelUtils.clientRequestEditBlock(chunkPos, cornerVoxel, type, metadata, blockSize);
|
||||
}
|
||||
|
||||
@ -26,9 +26,9 @@ public class BlockEditing {
|
||||
* Destroy blocks
|
||||
*/
|
||||
public static void destroyBlock(){
|
||||
Vector3i cornerVoxel = Globals.clientWorldData.convertRealToBlockSpace(Globals.cursorState.getBlockCursorPos());
|
||||
Vector3i cornerVoxel = Globals.clientState.clientWorldData.convertRealToBlockSpace(Globals.cursorState.getBlockCursorPos());
|
||||
int blockSize = Globals.cursorState.getBlockSize();
|
||||
Vector3i chunkPos = Globals.clientWorldData.convertRealToWorldSpace(Globals.cursorState.getBlockCursorPos());
|
||||
Vector3i chunkPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(Globals.cursorState.getBlockCursorPos());
|
||||
ScriptClientVoxelUtils.clientRequestEditBlock(chunkPos, cornerVoxel, (short)0, (short)0, blockSize);
|
||||
}
|
||||
|
||||
|
||||
@ -199,8 +199,8 @@ public class FoliageCell {
|
||||
){
|
||||
FoliageCell rVal = new FoliageCell();
|
||||
rVal.lod = lod;
|
||||
rVal.worldPos = Globals.clientWorldData.convertAbsoluteVoxelToWorldSpace(voxelAbsPos);
|
||||
rVal.voxelPos = Globals.clientWorldData.convertAbsoluteVoxelToRelativeVoxelSpace(voxelAbsPos);
|
||||
rVal.worldPos = Globals.clientState.clientWorldData.convertAbsoluteVoxelToWorldSpace(voxelAbsPos);
|
||||
rVal.voxelPos = Globals.clientState.clientWorldData.convertAbsoluteVoxelToRelativeVoxelSpace(voxelAbsPos);
|
||||
return rVal;
|
||||
}
|
||||
|
||||
@ -213,8 +213,8 @@ public class FoliageCell {
|
||||
){
|
||||
FoliageCell rVal = new FoliageCell();
|
||||
rVal.lod = lod;
|
||||
rVal.worldPos = Globals.clientWorldData.convertAbsoluteVoxelToWorldSpace(voxelAbsPos);
|
||||
rVal.voxelPos = Globals.clientWorldData.convertAbsoluteVoxelToRelativeVoxelSpace(voxelAbsPos);
|
||||
rVal.worldPos = Globals.clientState.clientWorldData.convertAbsoluteVoxelToWorldSpace(voxelAbsPos);
|
||||
rVal.voxelPos = Globals.clientState.clientWorldData.convertAbsoluteVoxelToRelativeVoxelSpace(voxelAbsPos);
|
||||
rVal.hasGenerated = true;
|
||||
rVal.homogenous = true;
|
||||
return rVal;
|
||||
|
||||
@ -196,7 +196,7 @@ public class FoliageCellManager {
|
||||
Globals.profiler.beginCpuSample("FoliageCellManager.update");
|
||||
if(shouldUpdate && Globals.playerEntity != null && Globals.userSettings.getGraphicsPerformanceEnableFoliageManager()){
|
||||
Vector3d playerPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||
Vector3i absVoxelPos = Globals.clientWorldData.convertRealToAbsoluteVoxelSpace(playerPos);
|
||||
Vector3i absVoxelPos = Globals.clientState.clientWorldData.convertRealToAbsoluteVoxelSpace(playerPos);
|
||||
int distCache = this.getDistCache(this.lastPlayerPos, absVoxelPos);
|
||||
if(bustDistCache || absVoxelPos.distance(this.lastPlayerPos) > TELEPORT_DISTANCE){
|
||||
distCache = BUST_META_CELLS;
|
||||
@ -743,8 +743,8 @@ public class FoliageCellManager {
|
||||
*/
|
||||
public boolean isFullLOD(Vector3i worldPos){
|
||||
Vector3d playerRealPos = EntityUtils.getPosition(Globals.playerEntity);
|
||||
Vector3d chunkMin = Globals.clientWorldData.convertWorldToRealSpace(worldPos);
|
||||
Vector3d chunkMax = Globals.clientWorldData.convertWorldToRealSpace(new Vector3i(worldPos).add(1,1,1));
|
||||
Vector3d chunkMin = Globals.clientState.clientWorldData.convertWorldToRealSpace(worldPos);
|
||||
Vector3d chunkMax = Globals.clientState.clientWorldData.convertWorldToRealSpace(new Vector3i(worldPos).add(1,1,1));
|
||||
return GeomUtils.getMinDistanceAABB(playerRealPos, chunkMin, chunkMax) <= FULL_RES_DIST;
|
||||
}
|
||||
|
||||
@ -768,9 +768,9 @@ public class FoliageCellManager {
|
||||
* @param voxelZ The voxel z position
|
||||
*/
|
||||
public void markUpdateable(int worldX, int worldY, int worldZ, int voxelX, int voxelY, int voxelZ){
|
||||
int absVoxelX = Globals.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(voxelX,worldX);
|
||||
int absVoxelY = Globals.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(voxelY,worldY);
|
||||
int absVoxelZ = Globals.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(voxelZ,worldZ);
|
||||
int absVoxelX = Globals.clientState.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(voxelX,worldX);
|
||||
int absVoxelY = Globals.clientState.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(voxelY,worldY);
|
||||
int absVoxelZ = Globals.clientState.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(voxelZ,worldZ);
|
||||
FoliageCell foliageCell = this.getFoliageCell(absVoxelX, absVoxelY, absVoxelZ);
|
||||
foliageCell.ejectChunkData();
|
||||
foliageCell.setHasGenerated(false);
|
||||
@ -787,9 +787,9 @@ public class FoliageCellManager {
|
||||
for(int x = 0; x < ServerTerrainChunk.CHUNK_DIMENSION; x++){
|
||||
for(int y = 0; y < ServerTerrainChunk.CHUNK_DIMENSION; y++){
|
||||
for(int z = 0; z < ServerTerrainChunk.CHUNK_DIMENSION; z++){
|
||||
int absVoxelX = Globals.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(x,worldX);
|
||||
int absVoxelY = Globals.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(y,worldY);
|
||||
int absVoxelZ = Globals.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(z,worldZ);
|
||||
int absVoxelX = Globals.clientState.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(x,worldX);
|
||||
int absVoxelY = Globals.clientState.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(y,worldY);
|
||||
int absVoxelZ = Globals.clientState.clientWorldData.convertRelativeVoxelToAbsoluteVoxelSpace(z,worldZ);
|
||||
FoliageCell foliageCell = this.getFoliageCell(absVoxelX, absVoxelY, absVoxelZ);
|
||||
foliageCell.ejectChunkData();
|
||||
foliageCell.setHasGenerated(false);
|
||||
@ -806,14 +806,14 @@ public class FoliageCellManager {
|
||||
*/
|
||||
private boolean requestChunks(WorldOctTree.WorldOctTreeNode<FoliageCell> node){
|
||||
//min bound is in absolute voxel coordinates, need to convert to world coordinates
|
||||
Vector3i worldPos = Globals.clientWorldData.convertAbsoluteVoxelToWorldSpace(node.getMinBound());
|
||||
Vector3i worldPos = Globals.clientState.clientWorldData.convertAbsoluteVoxelToWorldSpace(node.getMinBound());
|
||||
if(
|
||||
worldPos.x >= 0 &&
|
||||
worldPos.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y >= 0 &&
|
||||
worldPos.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z >= 0 &&
|
||||
worldPos.z < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPos.z < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
!Globals.clientTerrainManager.containsChunkDataAtWorldPoint(worldPos.x, worldPos.y, worldPos.z, ChunkData.NO_STRIDE)
|
||||
){
|
||||
//client should request chunk data from server for each chunk necessary to create the model
|
||||
|
||||
@ -35,8 +35,8 @@ public class ClientVoxelSampler {
|
||||
*/
|
||||
public static int getVoxelType(Vector3d realPos){
|
||||
int voxelId = 0;
|
||||
Vector3i chunkSpacePos = Globals.clientWorldData.convertRealToWorldSpace(realPos);
|
||||
Vector3i voxelSpacePos = Globals.clientWorldData.convertRealToVoxelSpace(realPos);
|
||||
Vector3i chunkSpacePos = Globals.clientState.clientWorldData.convertRealToWorldSpace(realPos);
|
||||
Vector3i voxelSpacePos = Globals.clientState.clientWorldData.convertRealToVoxelSpace(realPos);
|
||||
if(Globals.clientTerrainManager.containsChunkDataAtWorldPoint(chunkSpacePos, ChunkData.NO_STRIDE)){
|
||||
ChunkData chunkData = Globals.clientTerrainManager.getChunkDataAtWorldPoint(chunkSpacePos, ChunkData.NO_STRIDE);
|
||||
voxelId = chunkData.getType(voxelSpacePos);
|
||||
|
||||
@ -45,7 +45,7 @@ public class ImGuiChunkMonitor {
|
||||
}
|
||||
if(ImGui.button("Break at chunk")){
|
||||
if(Globals.foliageCellManager != null){
|
||||
Vector3i absVoxelPos = Globals.clientWorldData.convertRealToAbsoluteVoxelSpace(EntityUtils.getPosition(Globals.playerEntity));
|
||||
Vector3i absVoxelPos = Globals.clientState.clientWorldData.convertRealToAbsoluteVoxelSpace(EntityUtils.getPosition(Globals.playerEntity));
|
||||
Globals.foliageCellManager.addBreakPoint(absVoxelPos);
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ public class ImGuiClientServices {
|
||||
|
||||
if(ImGui.collapsingHeader("Draw Cells")){
|
||||
if(ImGui.button("Debug DrawCell at camera position")){
|
||||
Vector3i cameraWorldPos = Globals.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
Vector3i cameraWorldPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
DrawCell cell = Globals.clientDrawCellManager.getDrawCell(cameraWorldPos.x, cameraWorldPos.y, cameraWorldPos.z);
|
||||
LoggerInterface.loggerEngine.WARNING("" + cell);
|
||||
|
||||
@ -60,17 +60,17 @@ public class ImGuiClientServices {
|
||||
}
|
||||
}
|
||||
if(ImGui.button("Print debug info for FoliageCell at camera position")){
|
||||
Vector3i cameraWorldPos = Globals.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
Vector3i cameraWorldPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
FoliageCell cell = Globals.foliageCellManager.getFoliageCell(cameraWorldPos.x, cameraWorldPos.y, cameraWorldPos.z);
|
||||
LoggerInterface.loggerEngine.WARNING("" + cell);
|
||||
}
|
||||
if(ImGui.button("Debug FoliageCell evaluation at camera position")){
|
||||
Vector3i cameraWorldPos = Globals.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
Vector3i cameraWorldPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
FoliageCell cell = Globals.foliageCellManager.getFoliageCell(cameraWorldPos.x, cameraWorldPos.y, cameraWorldPos.z);
|
||||
cell.setTripDebug(true);
|
||||
}
|
||||
if(ImGui.button("Request terrain at camera position")){
|
||||
Vector3i cameraWorldPos = Globals.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
Vector3i cameraWorldPos = Globals.clientState.clientWorldData.convertRealToWorldSpace(CameraEntityUtils.getCameraCenter(Globals.playerCamera));
|
||||
Globals.clientTerrainManager.requestChunk(cameraWorldPos.x, cameraWorldPos.y, cameraWorldPos.z, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package electrosphere.collision;
|
||||
|
||||
import electrosphere.client.scene.ClientWorldData;
|
||||
import electrosphere.client.terrain.manager.ClientTerrainManager;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.server.datacell.ServerWorldData;
|
||||
import electrosphere.server.physics.terrain.manager.ServerTerrainManager;
|
||||
|
||||
@ -11,7 +11,6 @@ public class CollisionWorldData {
|
||||
|
||||
|
||||
|
||||
ClientWorldData clientWorldData;
|
||||
ClientTerrainManager clientTerrainManager;
|
||||
|
||||
|
||||
@ -19,58 +18,58 @@ public class CollisionWorldData {
|
||||
ServerWorldData serverWorldData;
|
||||
ServerTerrainManager serverTerrainManager;
|
||||
|
||||
public CollisionWorldData(){
|
||||
|
||||
}
|
||||
|
||||
public CollisionWorldData(ServerWorldData serverWorldData){
|
||||
this.serverWorldData = serverWorldData;
|
||||
}
|
||||
|
||||
public CollisionWorldData(ClientWorldData clientWorldData){
|
||||
this.clientWorldData = clientWorldData;
|
||||
}
|
||||
|
||||
|
||||
public Vector3f getWorldBoundMin(){
|
||||
if(clientWorldData != null){
|
||||
return clientWorldData.getWorldBoundMin();
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
return Globals.clientState.clientWorldData.getWorldBoundMin();
|
||||
} else {
|
||||
return serverWorldData.getWorldBoundMin();
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3f getWorldBoundMax(){
|
||||
if(clientWorldData != null){
|
||||
return clientWorldData.getWorldBoundMax();
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
return Globals.clientState.clientWorldData.getWorldBoundMax();
|
||||
} else {
|
||||
return serverWorldData.getWorldBoundMax();
|
||||
}
|
||||
}
|
||||
|
||||
public int convertRealToWorld(double real){
|
||||
if(clientWorldData != null){
|
||||
return clientWorldData.convertRealToChunkSpace(real);
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
return Globals.clientState.clientWorldData.convertRealToChunkSpace(real);
|
||||
} else {
|
||||
return ServerWorldData.convertRealToChunkSpace(real);
|
||||
}
|
||||
}
|
||||
|
||||
public double convertWorldToReal(int world){
|
||||
if(clientWorldData != null){
|
||||
return clientWorldData.convertChunkToRealSpace(world);
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
return Globals.clientState.clientWorldData.convertChunkToRealSpace(world);
|
||||
} else {
|
||||
return ServerWorldData.convertChunkToRealSpace(world);
|
||||
}
|
||||
}
|
||||
|
||||
public int getDynamicInterpolationRatio(){
|
||||
if(clientWorldData != null){
|
||||
return clientWorldData.getWorldDiscreteSize();
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
return Globals.clientState.clientWorldData.getWorldDiscreteSize();
|
||||
} else {
|
||||
return serverWorldData.getDynamicInterpolationRatio();
|
||||
}
|
||||
}
|
||||
|
||||
public int getWorldDiscreteSize(){
|
||||
if(clientWorldData != null){
|
||||
return clientWorldData.getWorldDiscreteSize();
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
return Globals.clientState.clientWorldData.getWorldDiscreteSize();
|
||||
} else {
|
||||
return serverWorldData.getWorldSizeDiscrete();
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ import electrosphere.audio.VirtualAudioSourceManager;
|
||||
import electrosphere.audio.collision.HitboxAudioService;
|
||||
import electrosphere.audio.movement.MovementAudioService;
|
||||
import electrosphere.auth.AuthenticationManager;
|
||||
import electrosphere.client.ClientState;
|
||||
import electrosphere.client.block.ClientBlockManager;
|
||||
import electrosphere.client.block.cells.BlockTextureAtlas;
|
||||
import electrosphere.client.block.cells.ClientBlockCellManager;
|
||||
@ -23,7 +24,6 @@ import electrosphere.client.fluid.manager.ClientFluidManager;
|
||||
import electrosphere.client.player.ClientPlayerData;
|
||||
import electrosphere.client.scene.ClientLevelEditorData;
|
||||
import electrosphere.client.scene.ClientSceneWrapper;
|
||||
import electrosphere.client.scene.ClientWorldData;
|
||||
import electrosphere.client.sim.ClientSimulation;
|
||||
import electrosphere.client.terrain.cells.ClientDrawCellManager;
|
||||
import electrosphere.client.terrain.cells.VoxelTextureAtlas;
|
||||
@ -351,7 +351,6 @@ public class Globals {
|
||||
public static FoliageCellManager foliageCellManager;
|
||||
|
||||
//client world data
|
||||
public static ClientWorldData clientWorldData;
|
||||
public static ClientCharacterManager clientCharacterManager = new ClientCharacterManager();
|
||||
|
||||
//client gridded manager
|
||||
@ -431,6 +430,10 @@ public class Globals {
|
||||
public static Object dragSourceInventory = null;
|
||||
public static Entity targetContainer = null;
|
||||
|
||||
/**
|
||||
* State for the client
|
||||
*/
|
||||
public static ClientState clientState = new ClientState();
|
||||
|
||||
|
||||
|
||||
@ -490,6 +493,10 @@ public class Globals {
|
||||
RENDER_FLAG_RENDER_WHITE_BACKGROUND = false;
|
||||
RENDER_FLAG_RENDER_UI = true;
|
||||
RENDER_FLAG_RENDER_UI_BOUNDS = false;
|
||||
|
||||
//client state
|
||||
Globals.clientState = new ClientState();
|
||||
|
||||
//load in default texture map
|
||||
textureMapDefault = TextureMap.construct("Textures/default_texture_map.json");
|
||||
//load model pretransforms
|
||||
@ -719,7 +726,7 @@ public class Globals {
|
||||
Globals.playerManager = new PlayerManager();
|
||||
Globals.clientScene = new Scene();
|
||||
Globals.clientSceneWrapper = new ClientSceneWrapper(Globals.clientScene, new CollisionEngine(), CollisionEngine.create(new ClientChemistryCollisionCallback()), new CollisionEngine());
|
||||
Globals.clientWorldData = null;
|
||||
Globals.clientState = new ClientState();
|
||||
Globals.clientSynchronizationManager = new ClientSynchronizationManager();
|
||||
Globals.server = null;
|
||||
Globals.serverSynchronizationManager = new ServerSynchronizationManager();
|
||||
@ -748,7 +755,7 @@ public class Globals {
|
||||
Globals.realmManager = null;
|
||||
Globals.clientSceneWrapper = null;
|
||||
Globals.clientScene = null;
|
||||
Globals.clientWorldData = null;
|
||||
Globals.clientState = null;
|
||||
Globals.audioEngine = null;
|
||||
Globals.renderingEngine = null;
|
||||
Globals.threadManager = null;
|
||||
|
||||
@ -320,7 +320,7 @@ public class ClientLoading {
|
||||
static void initDrawCellManager(boolean blockForInit){
|
||||
int iterations = 0;
|
||||
WindowUtils.updateLoadingWindow("WAITING ON WORLD DATA");
|
||||
while(blockForInit && (Globals.clientWorldData == null || InitialAssetLoading.atlasQueuedTexture == null || !InitialAssetLoading.atlasQueuedTexture.hasLoaded()) && Globals.threadManager.shouldKeepRunning()){
|
||||
while(blockForInit && (Globals.clientState.clientWorldData == null || InitialAssetLoading.atlasQueuedTexture == null || !InitialAssetLoading.atlasQueuedTexture.hasLoaded()) && Globals.threadManager.shouldKeepRunning()){
|
||||
try {
|
||||
TimeUnit.MILLISECONDS.sleep(10);
|
||||
iterations++;
|
||||
@ -329,14 +329,14 @@ public class ClientLoading {
|
||||
}
|
||||
if(iterations > MAX_DRAW_CELL_WAIT){
|
||||
String message = "Draw cell took too long to init!\n" +
|
||||
Globals.clientWorldData + "\n" +
|
||||
Globals.clientState.clientWorldData + "\n" +
|
||||
InitialAssetLoading.atlasQueuedTexture.hasLoaded();
|
||||
throw new IllegalStateException(message);
|
||||
}
|
||||
}
|
||||
//initialize draw cell manager
|
||||
// Globals.drawCellManager = new DrawCellManager(Globals.clientTerrainManager, 0, 0, 0);
|
||||
Globals.clientDrawCellManager = new ClientDrawCellManager(Globals.voxelTextureAtlas, Globals.clientWorldData.getWorldDiscreteSize());
|
||||
Globals.clientDrawCellManager = new ClientDrawCellManager(Globals.voxelTextureAtlas, Globals.clientState.clientWorldData.getWorldDiscreteSize());
|
||||
//Alerts the client simulation that it should start loading terrain
|
||||
Globals.clientSimulation.setLoadingTerrain(true);
|
||||
//wait for all the terrain data to arrive
|
||||
@ -366,7 +366,7 @@ public class ClientLoading {
|
||||
|
||||
//wait for world data
|
||||
WindowUtils.updateLoadingWindow("WAITING ON WORLD DATA");
|
||||
while(blockForInit && Globals.clientWorldData == null && Globals.threadManager.shouldKeepRunning()){
|
||||
while(blockForInit && Globals.clientState.clientWorldData == null && Globals.threadManager.shouldKeepRunning()){
|
||||
try {
|
||||
TimeUnit.MILLISECONDS.sleep(10);
|
||||
} catch (InterruptedException ex) {
|
||||
@ -406,7 +406,7 @@ public class ClientLoading {
|
||||
static void initBlockCellManager(boolean blockForInit){
|
||||
int iterations = 0;
|
||||
WindowUtils.updateLoadingWindow("WAITING ON WORLD DATA");
|
||||
while(blockForInit && (Globals.clientWorldData == null || InitialAssetLoading.atlasQueuedTexture == null || !InitialAssetLoading.atlasQueuedTexture.hasLoaded()) && Globals.threadManager.shouldKeepRunning()){
|
||||
while(blockForInit && (Globals.clientState.clientWorldData == null || InitialAssetLoading.atlasQueuedTexture == null || !InitialAssetLoading.atlasQueuedTexture.hasLoaded()) && Globals.threadManager.shouldKeepRunning()){
|
||||
try {
|
||||
TimeUnit.MILLISECONDS.sleep(10);
|
||||
iterations++;
|
||||
@ -415,12 +415,12 @@ public class ClientLoading {
|
||||
}
|
||||
if(iterations > MAX_DRAW_CELL_WAIT){
|
||||
String message = "Draw cell took too long to init!\n" +
|
||||
Globals.clientWorldData + "\n" +
|
||||
Globals.clientState.clientWorldData + "\n" +
|
||||
InitialAssetLoading.atlasQueuedTexture.hasLoaded();
|
||||
throw new IllegalStateException(message);
|
||||
}
|
||||
}
|
||||
Globals.clientBlockCellManager = new ClientBlockCellManager(Globals.blockTextureAtlas, Globals.clientWorldData.getWorldDiscreteSize());
|
||||
Globals.clientBlockCellManager = new ClientBlockCellManager(Globals.blockTextureAtlas, Globals.clientState.clientWorldData.getWorldDiscreteSize());
|
||||
//Alerts the client simulation that it should start loading blocks
|
||||
Globals.clientSimulation.setLoadingTerrain(true);
|
||||
//wait for all the block data to arrive
|
||||
@ -446,7 +446,7 @@ public class ClientLoading {
|
||||
* Starts up the foliage manager
|
||||
*/
|
||||
private static void initFoliageManager(){
|
||||
Globals.foliageCellManager = new FoliageCellManager(Globals.clientWorldData.getWorldDiscreteSize());
|
||||
Globals.foliageCellManager = new FoliageCellManager(Globals.clientState.clientWorldData.getWorldDiscreteSize());
|
||||
Globals.foliageCellManager.init();
|
||||
// Globals.foliageCellManager.start();
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ public class ViewportLoading {
|
||||
Globals.clientConnection.queueOutgoingMessage(TerrainMessage.constructRequestMetadataMessage());
|
||||
|
||||
//block for client world data
|
||||
while(Globals.clientWorldData == null){
|
||||
while(Globals.clientState.clientWorldData == null){
|
||||
try {
|
||||
TimeUnit.MILLISECONDS.sleep(10);
|
||||
} catch (InterruptedException e) {
|
||||
|
||||
@ -66,9 +66,11 @@ public class ServiceManager {
|
||||
* Fires all functions required to unload a scene.
|
||||
*/
|
||||
public void unloadScene(){
|
||||
if(this.trackedServices != null){
|
||||
for(Service serivce : this.trackedServices){
|
||||
serivce.unloadScene();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -53,15 +53,15 @@ public class ClientCollidableTree implements BehaviorTree {
|
||||
Quaterniond rotation = EntityUtils.getRotation(parent);
|
||||
Vector3d newPosition = new Vector3d(position);
|
||||
//bound to world bounds
|
||||
if(Globals.clientWorldData != null){
|
||||
if(newPosition.x < Globals.clientWorldData.getWorldBoundMin().x){
|
||||
newPosition.x = Globals.clientWorldData.getWorldBoundMin().x;
|
||||
if(Globals.clientState.clientWorldData != null){
|
||||
if(newPosition.x < Globals.clientState.clientWorldData.getWorldBoundMin().x){
|
||||
newPosition.x = Globals.clientState.clientWorldData.getWorldBoundMin().x;
|
||||
}
|
||||
if(newPosition.y < Globals.clientWorldData.getWorldBoundMin().y){
|
||||
newPosition.y = Globals.clientWorldData.getWorldBoundMin().y;
|
||||
if(newPosition.y < Globals.clientState.clientWorldData.getWorldBoundMin().y){
|
||||
newPosition.y = Globals.clientState.clientWorldData.getWorldBoundMin().y;
|
||||
}
|
||||
if(newPosition.z < Globals.clientWorldData.getWorldBoundMin().z){
|
||||
newPosition.z = Globals.clientWorldData.getWorldBoundMin().z;
|
||||
if(newPosition.z < Globals.clientState.clientWorldData.getWorldBoundMin().z){
|
||||
newPosition.z = Globals.clientState.clientWorldData.getWorldBoundMin().z;
|
||||
}
|
||||
}
|
||||
PhysicsUtils.setRigidBodyTransform(Globals.clientSceneWrapper.getCollisionEngine(), newPosition, rotation, body);
|
||||
|
||||
@ -2,7 +2,6 @@ package electrosphere.entity.state.movement.editor;
|
||||
|
||||
|
||||
import electrosphere.entity.state.gravity.GravityUtils;
|
||||
import electrosphere.client.scene.ClientWorldData;
|
||||
import electrosphere.data.creature.movement.EditorMovementSystem;
|
||||
import electrosphere.engine.Globals;
|
||||
import electrosphere.entity.types.creature.CreatureUtils;
|
||||
@ -197,7 +196,6 @@ public class ClientEditorMovementTree implements BehaviorTree {
|
||||
float maxNaturalVelocity = EDITOR_MAX_VELOCITY;
|
||||
|
||||
Entity serverEntity = EntityLookupUtils.getEntityById(Globals.clientSceneWrapper.mapClientToServerId(parent.getId()));
|
||||
ClientWorldData clientWorldData = Globals.clientWorldData;
|
||||
|
||||
//
|
||||
//rotation update
|
||||
@ -260,7 +258,7 @@ public class ClientEditorMovementTree implements BehaviorTree {
|
||||
rotation.set(movementQuaternion);
|
||||
position.set(new Vector3d(position).add(new Vector3d(movementVector).mul(velocity)));
|
||||
if(serverEntity != null){
|
||||
if(position.x >= 0 && position.y >= 0 && position.z >= 0 && position.x < clientWorldData.getWorldBoundMax().x && position.y < clientWorldData.getWorldBoundMax().y && position.z < clientWorldData.getWorldBoundMax().z){
|
||||
if(position.x >= 0 && position.y >= 0 && position.z >= 0 && position.x < Globals.clientState.clientWorldData.getWorldBoundMax().x && position.y < Globals.clientState.clientWorldData.getWorldBoundMax().y && position.z < Globals.clientState.clientWorldData.getWorldBoundMax().z){
|
||||
ServerEntityUtils.repositionEntity(serverEntity, new Vector3d(position));
|
||||
}
|
||||
}
|
||||
@ -277,7 +275,7 @@ public class ClientEditorMovementTree implements BehaviorTree {
|
||||
rotation.set(movementQuaternion);
|
||||
position.set(new Vector3d(position).add(new Vector3d(movementVector).mul(velocity)));
|
||||
if(serverEntity != null){
|
||||
if(position.x >= 0 && position.y >= 0 && position.z >= 0 && position.x < clientWorldData.getWorldBoundMax().x && position.y < clientWorldData.getWorldBoundMax().y && position.z < clientWorldData.getWorldBoundMax().z){
|
||||
if(position.x >= 0 && position.y >= 0 && position.z >= 0 && position.x < Globals.clientState.clientWorldData.getWorldBoundMax().x && position.y < Globals.clientState.clientWorldData.getWorldBoundMax().y && position.z < Globals.clientState.clientWorldData.getWorldBoundMax().z){
|
||||
ServerEntityUtils.repositionEntity(serverEntity, new Vector3d(position));
|
||||
}
|
||||
}
|
||||
@ -300,7 +298,7 @@ public class ClientEditorMovementTree implements BehaviorTree {
|
||||
rotation.set(movementQuaternion);
|
||||
position.set(new Vector3d(position).add(new Vector3d(movementVector).mul(velocity)));
|
||||
if(serverEntity != null){
|
||||
if(position.x >= 0 && position.y >= 0 && position.z >= 0 && position.x < clientWorldData.getWorldBoundMax().x && position.y < clientWorldData.getWorldBoundMax().y && position.z < clientWorldData.getWorldBoundMax().z){
|
||||
if(position.x >= 0 && position.y >= 0 && position.z >= 0 && position.x < Globals.clientState.clientWorldData.getWorldBoundMax().x && position.y < Globals.clientState.clientWorldData.getWorldBoundMax().y && position.z < Globals.clientState.clientWorldData.getWorldBoundMax().z){
|
||||
ServerEntityUtils.repositionEntity(serverEntity, new Vector3d(position));
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ public class TerrainProtocol implements ClientProtocolTemplate<TerrainMessage> {
|
||||
Globals.profiler.beginAggregateCpuSample("TerrainProtocol.handleTerrainMessage");
|
||||
switch(message.getMessageSubtype()){
|
||||
case RESPONSEMETADATA:
|
||||
Globals.clientWorldData = new ClientWorldData(
|
||||
Globals.clientState.clientWorldData = new ClientWorldData(
|
||||
//Vector3f worldMinPoint, Vector3f worldMaxPoint, int dynamicInterpolationRatio, float randomDampener, int worldDiscreteSize
|
||||
new Vector3f(
|
||||
message.getworldMinX(),
|
||||
@ -45,7 +45,7 @@ public class TerrainProtocol implements ClientProtocolTemplate<TerrainMessage> {
|
||||
),
|
||||
message.getworldSizeDiscrete()
|
||||
);
|
||||
Globals.clientSceneWrapper.getCollisionEngine().setCollisionWorldData(new CollisionWorldData(Globals.clientWorldData));
|
||||
Globals.clientSceneWrapper.getCollisionEngine().setCollisionWorldData(new CollisionWorldData());
|
||||
Globals.clientConnection.getMessageProtocol().setHasReceivedWorld(true);
|
||||
break;
|
||||
case SPAWNPOSITION:
|
||||
@ -111,9 +111,9 @@ public class TerrainProtocol implements ClientProtocolTemplate<TerrainMessage> {
|
||||
//mark all relevant drawcells as updateable
|
||||
for(Vector3i worldPosToUpdate : positionsToUpdate){
|
||||
if(
|
||||
worldPosToUpdate.x >= 0 && worldPosToUpdate.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.y >= 0 && worldPosToUpdate.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.z >= 0 && worldPosToUpdate.z < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
worldPosToUpdate.x >= 0 && worldPosToUpdate.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.y >= 0 && worldPosToUpdate.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.z >= 0 && worldPosToUpdate.z < Globals.clientState.clientWorldData.getWorldDiscreteSize()
|
||||
){
|
||||
//
|
||||
//mark terrain chunk for update
|
||||
@ -223,9 +223,9 @@ public class TerrainProtocol implements ClientProtocolTemplate<TerrainMessage> {
|
||||
//mark all relevant drawcells as updateable
|
||||
for(Vector3i worldPosToUpdate : positionsToUpdate){
|
||||
if(
|
||||
worldPosToUpdate.x >= 0 && worldPosToUpdate.x < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.y >= 0 && worldPosToUpdate.y < Globals.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.z >= 0 && worldPosToUpdate.z < Globals.clientWorldData.getWorldDiscreteSize()
|
||||
worldPosToUpdate.x >= 0 && worldPosToUpdate.x < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.y >= 0 && worldPosToUpdate.y < Globals.clientState.clientWorldData.getWorldDiscreteSize() &&
|
||||
worldPosToUpdate.z >= 0 && worldPosToUpdate.z < Globals.clientState.clientWorldData.getWorldDiscreteSize()
|
||||
){
|
||||
//
|
||||
//mark terrain chunk for update
|
||||
|
||||
@ -66,7 +66,7 @@ public class DataCellPhysicsManager {
|
||||
* @param discreteY The initial discrete position Y coordinate
|
||||
*/
|
||||
public DataCellPhysicsManager(Realm realm, int discreteX, int discreteY, int discreteZ){
|
||||
worldBoundDiscreteMax = (int)(Globals.clientWorldData.getWorldBoundMin().x / ServerTerrainChunk.CHUNK_DIMENSION * 1.0f);
|
||||
worldBoundDiscreteMax = (int)(Globals.clientState.clientWorldData.getWorldBoundMin().x / ServerTerrainChunk.CHUNK_DIMENSION * 1.0f);
|
||||
cells = new HashSet<PhysicsDataCell>();
|
||||
invalid = new HashSet<String>();
|
||||
updateable = new HashSet<String>();
|
||||
|
||||
@ -35,7 +35,7 @@ public class ClientDrawCellManagerTests {
|
||||
public void testJoinCase(){
|
||||
|
||||
int worldDiscreteSize = 64;
|
||||
Globals.clientWorldData = new ClientWorldData(new Vector3f(0), new Vector3f(worldDiscreteSize * ServerTerrainChunk.CHUNK_DIMENSION), worldDiscreteSize);
|
||||
Globals.clientState.clientWorldData = new ClientWorldData(new Vector3f(0), new Vector3f(worldDiscreteSize * ServerTerrainChunk.CHUNK_DIMENSION), worldDiscreteSize);
|
||||
ClientDrawCellManager manager = new ClientDrawCellManager(null, 64);
|
||||
Vector3i playerPos = new Vector3i(0,0,0);
|
||||
WorldOctTreeNode<DrawCell> node = WorldOctTreeNode.constructorForTests(manager.chunkTree, 1, new Vector3i(16,0,0), new Vector3i(32,16,16));
|
||||
|
||||
@ -30,7 +30,7 @@ public class StateCleanupCheckerExtension implements AfterEachCallback {
|
||||
Globals.playerManager,
|
||||
LoggerInterface.loggerEngine,
|
||||
RenderingEngine.screenFramebuffer,
|
||||
Globals.clientWorldData,
|
||||
Globals.clientState,
|
||||
};
|
||||
for(Object object : objectsToCheck){
|
||||
if(object != null){
|
||||
|
||||
Loading…
Reference in New Issue
Block a user