fix shovel + dig script function
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
58dc5333e6
commit
01595f3228
@ -44,7 +44,7 @@ export const clientHooks: Hook[] = [
|
|||||||
{
|
{
|
||||||
signal: "DIG",
|
signal: "DIG",
|
||||||
callback: (engine: Engine) => {
|
callback: (engine: Engine) => {
|
||||||
engine.classes.voxelUtils.static.applyEdit()
|
engine.classes.voxelUtils.static.dig()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1501,6 +1501,8 @@ Clarify content serialization pipelines for character vs non-character entities
|
|||||||
Server send disconnect packet on disconnection
|
Server send disconnect packet on disconnection
|
||||||
Associate each server connection with a character ID
|
Associate each server connection with a character ID
|
||||||
Code cleanup
|
Code cleanup
|
||||||
|
Fix dig script function
|
||||||
|
Fix shovel functionality
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -19,18 +19,29 @@ import electrosphere.net.parser.net.message.InventoryMessage;
|
|||||||
*/
|
*/
|
||||||
public class ItemActions {
|
public class ItemActions {
|
||||||
|
|
||||||
//the item action code for left clicking
|
/**
|
||||||
|
* the item action code for left clicking
|
||||||
|
*/
|
||||||
public static final int ITEM_ACTION_CODE_PRIMARY = 0;
|
public static final int ITEM_ACTION_CODE_PRIMARY = 0;
|
||||||
//the item action code for right clicking
|
|
||||||
|
/**
|
||||||
|
* the item action code for right clicking
|
||||||
|
*/
|
||||||
public static final int ITEM_ACTION_CODE_SECONDARY = 1;
|
public static final int ITEM_ACTION_CODE_SECONDARY = 1;
|
||||||
|
|
||||||
//the state for performing the item action code
|
/**
|
||||||
|
* the state for performing the item action code
|
||||||
|
*/
|
||||||
public static final int ITEM_ACTION_CODE_STATE_ON = 1;
|
public static final int ITEM_ACTION_CODE_STATE_ON = 1;
|
||||||
|
|
||||||
//the state for releasing the item action code
|
/**
|
||||||
|
* the state for releasing the item action code
|
||||||
|
*/
|
||||||
public static final int ITEM_ACTION_CODE_STATE_OFF = 0;
|
public static final int ITEM_ACTION_CODE_STATE_OFF = 0;
|
||||||
|
|
||||||
//the state for performing the item action code
|
/**
|
||||||
|
* the state for performing the item action code
|
||||||
|
*/
|
||||||
public static final int ITEM_ACTION_CODE_STATE_REPEAT = 2;
|
public static final int ITEM_ACTION_CODE_STATE_REPEAT = 2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -21,7 +21,14 @@ public class ScriptClientVoxelUtils {
|
|||||||
*/
|
*/
|
||||||
static final float EDIT_INCREMENT = 0.1f;
|
static final float EDIT_INCREMENT = 0.1f;
|
||||||
|
|
||||||
//vertical offset from cursor position to spawn things at
|
/**
|
||||||
|
* Increment to remove terrain by
|
||||||
|
*/
|
||||||
|
static final float REMOVE_INCREMENT = -0.1f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vertical offset from cursor position to spawn things at
|
||||||
|
*/
|
||||||
static final Vector3d cursorVerticalOffset = new Vector3d(0,0.05,0);
|
static final Vector3d cursorVerticalOffset = new Vector3d(0,0.05,0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -100,9 +107,7 @@ public class ScriptClientVoxelUtils {
|
|||||||
if(cursorPos == null){
|
if(cursorPos == null){
|
||||||
cursorPos = new Vector3d(centerPos).add(new Vector3d(eyePos).mul(-CollisionEngine.DEFAULT_INTERACT_DISTANCE));
|
cursorPos = new Vector3d(centerPos).add(new Vector3d(eyePos).mul(-CollisionEngine.DEFAULT_INTERACT_DISTANCE));
|
||||||
}
|
}
|
||||||
if(Globals.clientSelectedVoxelType != null){
|
TerrainEditing.removeTerrainGated(cursorPos, 1.1f, REMOVE_INCREMENT);
|
||||||
TerrainEditing.removeTerrainGated(cursorPos, 1.1f, Globals.clientSelectedVoxelType.getId(), EDIT_INCREMENT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -70,12 +70,11 @@ public class TerrainEditing {
|
|||||||
* Tries to remove terrain with proper game logic checks applied
|
* Tries to remove terrain with proper game logic checks applied
|
||||||
* @param position The position to perform the edit
|
* @param position The position to perform the edit
|
||||||
* @param editMagnitude The magnitude of the edit to perform
|
* @param editMagnitude The magnitude of the edit to perform
|
||||||
* @param type The type of block to make all edited blocks
|
|
||||||
* @param weight The weight of the sphere to apply the edit to
|
* @param weight The weight of the sphere to apply the edit to
|
||||||
*/
|
*/
|
||||||
public static void removeTerrainGated(Vector3d position, float editMagnitude, int type, float weight){
|
public static void removeTerrainGated(Vector3d position, float editMagnitude, float weight){
|
||||||
if(position != null){
|
if(position != null){
|
||||||
Globals.clientConnection.queueOutgoingMessage(TerrainMessage.constructRequestUseTerrainPaletteMessage(position.x, position.y, position.z, editMagnitude, weight, type));
|
Globals.clientConnection.queueOutgoingMessage(TerrainMessage.constructRequestDestroyTerrainMessage(position.x, position.y, position.z, editMagnitude, weight));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -185,6 +185,11 @@ public abstract class NetworkMessage {
|
|||||||
rVal = TerrainMessage.parseRequestUseTerrainPaletteMessage(byteBuffer,pool);
|
rVal = TerrainMessage.parseRequestUseTerrainPaletteMessage(byteBuffer,pool);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN:
|
||||||
|
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
|
||||||
|
rVal = TerrainMessage.parseRequestDestroyTerrainMessage(byteBuffer,pool);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION:
|
case TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION:
|
||||||
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
|
if(TerrainMessage.canParseMessage(byteBuffer,secondByte)){
|
||||||
rVal = TerrainMessage.parseSpawnPositionMessage(byteBuffer,pool);
|
rVal = TerrainMessage.parseSpawnPositionMessage(byteBuffer,pool);
|
||||||
|
|||||||
@ -16,6 +16,7 @@ public class TerrainMessage extends NetworkMessage {
|
|||||||
REQUESTEDITVOXEL,
|
REQUESTEDITVOXEL,
|
||||||
UPDATEVOXEL,
|
UPDATEVOXEL,
|
||||||
REQUESTUSETERRAINPALETTE,
|
REQUESTUSETERRAINPALETTE,
|
||||||
|
REQUESTDESTROYTERRAIN,
|
||||||
SPAWNPOSITION,
|
SPAWNPOSITION,
|
||||||
REQUESTCHUNKDATA,
|
REQUESTCHUNKDATA,
|
||||||
SENDCHUNKDATA,
|
SENDCHUNKDATA,
|
||||||
@ -490,6 +491,12 @@ public class TerrainMessage extends NetworkMessage {
|
|||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
case TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN:
|
||||||
|
if(byteBuffer.getRemaining() >= TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN_SIZE){
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
case TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION:
|
case TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION:
|
||||||
if(byteBuffer.getRemaining() >= TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION_SIZE){
|
if(byteBuffer.getRemaining() >= TypeBytes.TERRAIN_MESSAGE_TYPE_SPAWNPOSITION_SIZE){
|
||||||
return true;
|
return true;
|
||||||
@ -693,6 +700,35 @@ public class TerrainMessage extends NetworkMessage {
|
|||||||
return rVal;
|
return rVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses a message of type RequestDestroyTerrain
|
||||||
|
*/
|
||||||
|
public static TerrainMessage parseRequestDestroyTerrainMessage(CircularByteBuffer byteBuffer, MessagePool pool){
|
||||||
|
TerrainMessage rVal = (TerrainMessage)pool.get(MessageType.TERRAIN_MESSAGE);
|
||||||
|
rVal.messageType = TerrainMessageType.REQUESTDESTROYTERRAIN;
|
||||||
|
TerrainMessage.stripPacketHeader(byteBuffer);
|
||||||
|
rVal.setrealLocationX(ByteStreamUtils.popDoubleFromByteQueue(byteBuffer));
|
||||||
|
rVal.setrealLocationY(ByteStreamUtils.popDoubleFromByteQueue(byteBuffer));
|
||||||
|
rVal.setrealLocationZ(ByteStreamUtils.popDoubleFromByteQueue(byteBuffer));
|
||||||
|
rVal.setvalue(ByteStreamUtils.popFloatFromByteQueue(byteBuffer));
|
||||||
|
rVal.setterrainWeight(ByteStreamUtils.popFloatFromByteQueue(byteBuffer));
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a message of type RequestDestroyTerrain
|
||||||
|
*/
|
||||||
|
public static TerrainMessage constructRequestDestroyTerrainMessage(double realLocationX,double realLocationY,double realLocationZ,float value,float terrainWeight){
|
||||||
|
TerrainMessage rVal = new TerrainMessage(TerrainMessageType.REQUESTDESTROYTERRAIN);
|
||||||
|
rVal.setrealLocationX(realLocationX);
|
||||||
|
rVal.setrealLocationY(realLocationY);
|
||||||
|
rVal.setrealLocationZ(realLocationZ);
|
||||||
|
rVal.setvalue(value);
|
||||||
|
rVal.setterrainWeight(terrainWeight);
|
||||||
|
rVal.serialize();
|
||||||
|
return rVal;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses a message of type SpawnPosition
|
* Parses a message of type SpawnPosition
|
||||||
*/
|
*/
|
||||||
@ -1318,6 +1354,31 @@ public class TerrainMessage extends NetworkMessage {
|
|||||||
rawBytes[34+i] = intValues[i];
|
rawBytes[34+i] = intValues[i];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case REQUESTDESTROYTERRAIN:
|
||||||
|
rawBytes = new byte[2+8+8+8+4+4];
|
||||||
|
//message header
|
||||||
|
rawBytes[0] = TypeBytes.MESSAGE_TYPE_TERRAIN;
|
||||||
|
//entity messaage header
|
||||||
|
rawBytes[1] = TypeBytes.TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN;
|
||||||
|
intValues = ByteStreamUtils.serializeDoubleToBytes(realLocationX);
|
||||||
|
for(int i = 0; i < 8; i++){
|
||||||
|
rawBytes[2+i] = intValues[i];
|
||||||
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeDoubleToBytes(realLocationY);
|
||||||
|
for(int i = 0; i < 8; i++){
|
||||||
|
rawBytes[10+i] = intValues[i];
|
||||||
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeDoubleToBytes(realLocationZ);
|
||||||
|
for(int i = 0; i < 8; i++){
|
||||||
|
rawBytes[18+i] = intValues[i];
|
||||||
|
}
|
||||||
|
intValues = ByteStreamUtils.serializeFloatToBytes(value);
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
rawBytes[26+i] = intValues[i];
|
||||||
|
} intValues = ByteStreamUtils.serializeFloatToBytes(terrainWeight);
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
rawBytes[30+i] = intValues[i];
|
||||||
|
} break;
|
||||||
case SPAWNPOSITION:
|
case SPAWNPOSITION:
|
||||||
rawBytes = new byte[2+8+8+8];
|
rawBytes = new byte[2+8+8+8];
|
||||||
//message header
|
//message header
|
||||||
|
|||||||
@ -72,17 +72,18 @@ public class TypeBytes {
|
|||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTEDITVOXEL = 2;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTEDITVOXEL = 2;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEVOXEL = 3;
|
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEVOXEL = 3;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTUSETERRAINPALETTE = 4;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTUSETERRAINPALETTE = 4;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_SPAWNPOSITION = 5;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN = 5;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTCHUNKDATA = 6;
|
public static final byte TERRAIN_MESSAGE_TYPE_SPAWNPOSITION = 6;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_SENDCHUNKDATA = 7;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTCHUNKDATA = 7;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDCHUNKDATA = 8;
|
public static final byte TERRAIN_MESSAGE_TYPE_SENDCHUNKDATA = 8;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_SENDREDUCEDCHUNKDATA = 9;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDCHUNKDATA = 9;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDBLOCKDATA = 10;
|
public static final byte TERRAIN_MESSAGE_TYPE_SENDREDUCEDCHUNKDATA = 10;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA = 11;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDBLOCKDATA = 11;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEBLOCK = 12;
|
public static final byte TERRAIN_MESSAGE_TYPE_SENDREDUCEDBLOCKDATA = 12;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTFLUIDDATA = 13;
|
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEBLOCK = 13;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_SENDFLUIDDATA = 14;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTFLUIDDATA = 14;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEFLUIDDATA = 15;
|
public static final byte TERRAIN_MESSAGE_TYPE_SENDFLUIDDATA = 15;
|
||||||
|
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEFLUIDDATA = 16;
|
||||||
/*
|
/*
|
||||||
Terrain packet sizes
|
Terrain packet sizes
|
||||||
*/
|
*/
|
||||||
@ -91,6 +92,7 @@ public class TypeBytes {
|
|||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTEDITVOXEL_SIZE = 34;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTEDITVOXEL_SIZE = 34;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEVOXEL_SIZE = 34;
|
public static final byte TERRAIN_MESSAGE_TYPE_UPDATEVOXEL_SIZE = 34;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTUSETERRAINPALETTE_SIZE = 38;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTUSETERRAINPALETTE_SIZE = 38;
|
||||||
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTDESTROYTERRAIN_SIZE = 34;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_SPAWNPOSITION_SIZE = 26;
|
public static final byte TERRAIN_MESSAGE_TYPE_SPAWNPOSITION_SIZE = 26;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTCHUNKDATA_SIZE = 14;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTCHUNKDATA_SIZE = 14;
|
||||||
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDCHUNKDATA_SIZE = 18;
|
public static final byte TERRAIN_MESSAGE_TYPE_REQUESTREDUCEDCHUNKDATA_SIZE = 18;
|
||||||
|
|||||||
@ -70,6 +70,9 @@ public class TerrainProtocol implements ServerProtocolTemplate<TerrainMessage> {
|
|||||||
case REQUESTUSETERRAINPALETTE: {
|
case REQUESTUSETERRAINPALETTE: {
|
||||||
TerrainProtocol.attemptUseTerrainEditPalette(connectionHandler, message);
|
TerrainProtocol.attemptUseTerrainEditPalette(connectionHandler, message);
|
||||||
} break;
|
} break;
|
||||||
|
case REQUESTDESTROYTERRAIN: {
|
||||||
|
TerrainProtocol.attemptDestroyTerrain(connectionHandler, message);
|
||||||
|
} break;
|
||||||
case REQUESTFLUIDDATA: {
|
case REQUESTFLUIDDATA: {
|
||||||
LoggerInterface.loggerNetworking.DEBUG("(Server) Received request for fluid " + message.getworldX() + " " + message.getworldY() + " " + message.getworldZ());
|
LoggerInterface.loggerNetworking.DEBUG("(Server) Received request for fluid " + message.getworldX() + " " + message.getworldY() + " " + message.getworldZ());
|
||||||
// System.out.println("Received request for fluid " + message.getworldX() + " " + message.getworldY() + " " + message.getworldZ());
|
// System.out.println("Received request for fluid " + message.getworldX() + " " + message.getworldY() + " " + message.getworldZ());
|
||||||
@ -424,6 +427,18 @@ public class TerrainProtocol implements ServerProtocolTemplate<TerrainMessage> {
|
|||||||
TerrainEditing.editTerrain(realm, location, message.getvalue(), message.getterrainValue(), message.getterrainWeight());
|
TerrainEditing.editTerrain(realm, location, message.getvalue(), message.getterrainValue(), message.getterrainWeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to destroy terrain
|
||||||
|
* @param connectionHandler The connection handler
|
||||||
|
* @param message The message that contains the request to use an edit palette
|
||||||
|
*/
|
||||||
|
static void attemptDestroyTerrain(ServerConnectionHandler connectionHandler, TerrainMessage message){
|
||||||
|
Player player = Globals.playerManager.getPlayerFromId(connectionHandler.getPlayerId());
|
||||||
|
Realm realm = Globals.realmManager.getPlayerRealm(player);
|
||||||
|
Vector3d location = new Vector3d(message.getrealLocationX(), message.getrealLocationY(), message.getrealLocationZ());
|
||||||
|
TerrainEditing.destroyTerrain(realm, location, message.getvalue(), message.getterrainWeight());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a buffer to send a fluid chunk to the client
|
* Constructs a buffer to send a fluid chunk to the client
|
||||||
* @param chunk The chunk to send
|
* @param chunk The chunk to send
|
||||||
|
|||||||
@ -74,4 +74,63 @@ public class TerrainEditing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a terrain chunk edit. Basically has a sphere around the provided position that it attempts to remove value from.
|
||||||
|
* @param position The position to perform the edit
|
||||||
|
* @param editMagnitude The magnitude of the edit to perform
|
||||||
|
* @param weight The weight of the sphere to apply the edit to
|
||||||
|
*/
|
||||||
|
public static void destroyTerrain(Realm realm, Vector3d position, float editMagnitude, float weight){
|
||||||
|
if(position != null && realm != null && realm.getDataCellManager() instanceof VoxelCellManager){
|
||||||
|
VoxelCellManager voxelCellManager = (VoxelCellManager) realm.getDataCellManager();
|
||||||
|
//calculate kernel size
|
||||||
|
int numPlacesToCheck = (int)((editMagnitude * 2 + 1) * (editMagnitude * 2 + 1) * (editMagnitude * 2 + 1));
|
||||||
|
//create and fill in kernel of positions to check
|
||||||
|
int[] xOffsetSet = new int[numPlacesToCheck];
|
||||||
|
int[] yOffsetSet = new int[numPlacesToCheck];
|
||||||
|
int[] zOffsetSet = new int[numPlacesToCheck];
|
||||||
|
int i = 0;
|
||||||
|
for(int x = -(int)editMagnitude; x <= (int)editMagnitude; x++){
|
||||||
|
for(int y = -(int)editMagnitude; y <= (int)editMagnitude; y++){
|
||||||
|
for(int z = -(int)editMagnitude; z <= (int)editMagnitude; z++){
|
||||||
|
xOffsetSet[i] = x;
|
||||||
|
yOffsetSet[i] = y;
|
||||||
|
zOffsetSet[i] = z;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(i = 0; i < numPlacesToCheck; i++){
|
||||||
|
//calculate position of edit
|
||||||
|
Vector3d offsetPos = new Vector3d(position).add(xOffsetSet[i],yOffsetSet[i],zOffsetSet[i]);
|
||||||
|
Vector3i chunkPos = realm.getServerWorldData().convertRealToWorldSpace(offsetPos);
|
||||||
|
Vector3i voxelPos = realm.getServerWorldData().convertRealToVoxelSpace(offsetPos);
|
||||||
|
//get distance from true center point of sphere to current voxel position in world space
|
||||||
|
float distance = (float)new Vector3d(Math.floor(offsetPos.x),Math.floor(offsetPos.y),Math.floor(offsetPos.z)).distance(position);
|
||||||
|
float currentPositionMagnitude = editMagnitude - distance;
|
||||||
|
|
||||||
|
ServerTerrainChunk data;
|
||||||
|
if(
|
||||||
|
voxelPos.x < ServerTerrainChunk.CHUNK_DIMENSION &&
|
||||||
|
voxelPos.y < ServerTerrainChunk.CHUNK_DIMENSION &&
|
||||||
|
voxelPos.z < ServerTerrainChunk.CHUNK_DIMENSION &&
|
||||||
|
voxelPos.x >= 0 &&
|
||||||
|
voxelPos.y >= 0 &&
|
||||||
|
voxelPos.z >= 0 &&
|
||||||
|
currentPositionMagnitude > 0 &&
|
||||||
|
(data = voxelCellManager.getChunkAtPosition(chunkPos)) != null
|
||||||
|
){
|
||||||
|
float current = data.getWeights()[voxelPos.x][voxelPos.y][voxelPos.z];
|
||||||
|
//hard clamp so it doesn't go over 1
|
||||||
|
float finalValue = Math.max(Math.min(current + weight / distance,1),-1);
|
||||||
|
if(finalValue < MINIMUM_FULL_VALUE && current > MINIMUM_FULL_VALUE){
|
||||||
|
finalValue = -1;
|
||||||
|
}
|
||||||
|
int typeAtPos = voxelCellManager.getVoxelTypeAtLocalPosition(chunkPos, voxelPos);
|
||||||
|
voxelCellManager.editChunk(chunkPos, voxelPos, finalValue, typeAtPos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -185,6 +185,17 @@
|
|||||||
"terrainValue"
|
"terrainValue"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"messageName" : "RequestDestroyTerrain",
|
||||||
|
"description" : "Requests that the current player entity destroys voxels in a radius around a position using a given weight",
|
||||||
|
"data" : [
|
||||||
|
"realLocationX",
|
||||||
|
"realLocationY",
|
||||||
|
"realLocationZ",
|
||||||
|
"value",
|
||||||
|
"terrainWeight"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"messageName" : "SpawnPosition",
|
"messageName" : "SpawnPosition",
|
||||||
"description" : "Sets the spawn position of the client",
|
"description" : "Sets the spawn position of the client",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user