66 lines
3.1 KiB
Java
66 lines
3.1 KiB
Java
package electrosphere.net.client.protocol;
|
|
|
|
|
|
import org.joml.Vector3f;
|
|
|
|
import electrosphere.client.fluid.cache.FluidChunkData;
|
|
import electrosphere.client.scene.ClientWorldData;
|
|
import electrosphere.client.terrain.cache.ChunkData;
|
|
import electrosphere.collision.CollisionWorldData;
|
|
import electrosphere.engine.Globals;
|
|
import electrosphere.entity.types.terrain.TerrainChunk;
|
|
import electrosphere.entity.types.terrain.TerrainChunkData;
|
|
import electrosphere.logger.LoggerInterface;
|
|
import electrosphere.net.parser.net.message.TerrainMessage;
|
|
|
|
public class TerrainProtocol {
|
|
|
|
protected static void handleTerrainMessage(TerrainMessage message){
|
|
switch(message.getMessageSubtype()){
|
|
case RESPONSEMETADATA:
|
|
Globals.clientWorldData = new ClientWorldData(
|
|
//Vector3f worldMinPoint, Vector3f worldMaxPoint, int dynamicInterpolationRatio, float randomDampener, int worldDiscreteSize
|
|
new Vector3f(message.getworldMinX(),0,message.getworldMinY()),
|
|
new Vector3f(message.getworldMaxX(),3,message.getworldMaxY()),
|
|
ChunkData.CHUNK_SIZE,
|
|
message.getrandomDampener(),
|
|
message.getworldSizeDiscrete()
|
|
);
|
|
Globals.clientSceneWrapper.getCollisionEngine().setCollisionWorldData(new CollisionWorldData(Globals.clientWorldData));
|
|
Globals.clientConnection.getClientProtocol().setHasReceivedWorld(true);
|
|
break;
|
|
case SPAWNPOSITION:
|
|
Globals.spawnPoint.set(message.getrealLocationX(),0.25,message.getrealLocationZ());
|
|
break;
|
|
case SENDCHUNKDATA:
|
|
Globals.clientTerrainManager.attachTerrainMessage(message);
|
|
break;
|
|
case UPDATEVOXEL: {
|
|
if(Globals.clientTerrainManager.containsChunkDataAtWorldPoint(message.getworldX(), message.getworldY(), message.getworldZ())){
|
|
ChunkData data = Globals.clientTerrainManager.getChunkDataAtWorldPoint(message.getworldX(), message.getworldY(), message.getworldZ());
|
|
if(data != null){
|
|
data.updatePosition(
|
|
message.getvoxelX(),
|
|
message.getvoxelY(),
|
|
message.getvoxelZ(),
|
|
message.getterrainWeight(),
|
|
message.getterrainValue()
|
|
);
|
|
Globals.drawCellManager.markUpdateable(message.getworldX(), message.getworldY(), message.getworldZ());
|
|
}
|
|
}
|
|
} break;
|
|
case SENDFLUIDDATA: {
|
|
Globals.clientFluidManager.attachFluidMessage(message);
|
|
} break;
|
|
case UPDATEFLUIDDATA: {
|
|
Globals.clientFluidManager.attachFluidMessage(message);
|
|
} break;
|
|
default:
|
|
LoggerInterface.loggerNetworking.WARNING("Client networking: Unhandled message of type: " + message.getMessageSubtype());
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|