161 lines
5.7 KiB
Java
161 lines
5.7 KiB
Java
package electrosphere.net.server.protocol;
|
|
|
|
import electrosphere.engine.Globals;
|
|
import electrosphere.game.server.terrain.manager.ServerTerrainChunk;
|
|
import electrosphere.game.server.terrain.models.TerrainModification;
|
|
import electrosphere.net.parser.net.message.TerrainMessage;
|
|
import electrosphere.net.server.Server;
|
|
import electrosphere.net.server.ServerConnectionHandler;
|
|
|
|
public class TerrainProtocol {
|
|
|
|
protected static void handleTerrainMessage(ServerConnectionHandler connectionHandler, TerrainMessage message){
|
|
switch(message.getMessageSubtype()){
|
|
case REQUESTCHUNK:
|
|
sendWorldChunk(connectionHandler, message.getworldX(), message.getworldY());
|
|
break;
|
|
case REQUESTMETADATA:
|
|
sendWorldMetadata(connectionHandler);
|
|
break;
|
|
|
|
//all ignored message types
|
|
case CHUNKLOADSTART:
|
|
case HEIGHTMAPMODIFICATION:
|
|
case MACROVALUE:
|
|
case RESPONSEMETADATA:
|
|
case SPAWNPOSITION:
|
|
case UPDATE:
|
|
//silently ignore
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void sendWorldChunk(ServerConnectionHandler connectionHandler, int worldX, int worldY){
|
|
/*
|
|
int locationX,
|
|
int locationY,
|
|
float macroValue00,
|
|
float macroValue01,
|
|
float macroValue02,
|
|
float macroValue10,
|
|
float macroValue11,
|
|
float macroValue12,
|
|
float macroValue20,
|
|
float macroValue21,
|
|
float macroValue22,
|
|
long randomizerValue00,
|
|
long randomizerValue01,
|
|
long randomizerValue02,
|
|
long randomizerValue10,
|
|
long randomizerValue11,
|
|
long randomizerValue12,
|
|
long randomizerValue20,
|
|
long randomizerValue21,
|
|
long randomizerValue22
|
|
*/
|
|
|
|
// System.out.println("Received request for chunk " + message.getworldX() + " " + message.getworldY());
|
|
|
|
ServerTerrainChunk chunk = Globals.serverTerrainManager.getChunk(worldX, worldY);
|
|
|
|
float[][] macroValues = chunk.getMacroValues();//Globals.serverTerrainManager.getRad5MacroValues(message.getworldX(), message.getworldY());
|
|
|
|
long[][] randomizer = chunk.getRandomizer();//Globals.serverTerrainManager.getRandomizer(message.getworldX(), message.getworldY());
|
|
|
|
int numMessages = 2 + chunk.getModifications().size();
|
|
|
|
connectionHandler.addMessagetoOutgoingQueue(
|
|
TerrainMessage.constructchunkLoadStartMessage(worldX, worldY, numMessages)
|
|
);
|
|
|
|
connectionHandler.addMessagetoOutgoingQueue(
|
|
TerrainMessage.constructMacroValueMessage(
|
|
worldX,
|
|
worldY,
|
|
|
|
|
|
macroValues[0][0],
|
|
macroValues[0][1],
|
|
macroValues[0][2],
|
|
macroValues[0][3],
|
|
macroValues[0][4],
|
|
macroValues[1][0],
|
|
macroValues[1][1],
|
|
macroValues[1][2],
|
|
macroValues[1][3],
|
|
macroValues[1][4],
|
|
macroValues[2][0],
|
|
macroValues[2][1],
|
|
macroValues[2][2],
|
|
macroValues[2][3],
|
|
macroValues[2][4],
|
|
macroValues[3][0],
|
|
macroValues[3][1],
|
|
macroValues[3][2],
|
|
macroValues[3][3],
|
|
macroValues[3][4],
|
|
macroValues[4][0],
|
|
macroValues[4][1],
|
|
macroValues[4][2],
|
|
macroValues[4][3],
|
|
macroValues[4][4],
|
|
|
|
|
|
randomizer[0][0],
|
|
randomizer[0][1],
|
|
randomizer[0][2],
|
|
randomizer[0][3],
|
|
randomizer[0][4],
|
|
randomizer[1][0],
|
|
randomizer[1][1],
|
|
randomizer[1][2],
|
|
randomizer[1][3],
|
|
randomizer[1][4],
|
|
randomizer[2][0],
|
|
randomizer[2][1],
|
|
randomizer[2][2],
|
|
randomizer[2][3],
|
|
randomizer[2][4],
|
|
randomizer[3][0],
|
|
randomizer[3][1],
|
|
randomizer[3][2],
|
|
randomizer[3][3],
|
|
randomizer[3][4],
|
|
randomizer[4][0],
|
|
randomizer[4][1],
|
|
randomizer[4][2],
|
|
randomizer[4][3],
|
|
randomizer[4][4]
|
|
)
|
|
);
|
|
|
|
for(TerrainModification modification : chunk.getModifications()){
|
|
connectionHandler.addMessagetoOutgoingQueue(
|
|
TerrainMessage.constructheightMapModificationMessage(
|
|
modification.getValue(),
|
|
modification.getWorldX(),
|
|
modification.getWorldY(),
|
|
modification.getLocationX(),
|
|
modification.getLocationY()
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
static void sendWorldMetadata(ServerConnectionHandler connectionHandler){
|
|
//world metadata
|
|
connectionHandler.addMessagetoOutgoingQueue(
|
|
TerrainMessage.constructResponseMetadataMessage(
|
|
Globals.serverWorldData.getWorldSizeDiscrete(),
|
|
Globals.serverWorldData.getDynamicInterpolationRatio(),
|
|
Globals.serverWorldData.getRandomDampener(),
|
|
(int)Globals.serverWorldData.getWorldBoundMin().x,
|
|
(int)Globals.serverWorldData.getWorldBoundMin().z,
|
|
(int)Globals.serverWorldData.getWorldBoundMax().x,
|
|
(int)Globals.serverWorldData.getWorldBoundMax().z
|
|
)
|
|
);
|
|
}
|
|
|
|
}
|