work on rotating structures
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
2f05fc06dd
commit
84b4c11199
@ -5,9 +5,9 @@
|
|||||||
"displayName" : "Default House",
|
"displayName" : "Default House",
|
||||||
"fabPath" : "Data/fab/defaultHouse.fab",
|
"fabPath" : "Data/fab/defaultHouse.fab",
|
||||||
"dimensions" : {
|
"dimensions" : {
|
||||||
"x" : 5,
|
"x" : 4.75,
|
||||||
"y" : 5,
|
"y" : 5,
|
||||||
"z" : 5
|
"z" : 4.75
|
||||||
},
|
},
|
||||||
"placementOffset" : {
|
"placementOffset" : {
|
||||||
"x" : 0,
|
"x" : 0,
|
||||||
|
|||||||
@ -1950,6 +1950,11 @@ Town layout work
|
|||||||
Macro broadphase filters prior to per-voxel macro data intersection checks
|
Macro broadphase filters prior to per-voxel macro data intersection checks
|
||||||
Block chunks properly stride
|
Block chunks properly stride
|
||||||
|
|
||||||
|
(05/24/2025)
|
||||||
|
Work on rotating structures
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import org.joml.Vector3d;
|
|||||||
import electrosphere.controls.cursor.CursorState;
|
import electrosphere.controls.cursor.CursorState;
|
||||||
import electrosphere.data.block.fab.BlockFab;
|
import electrosphere.data.block.fab.BlockFab;
|
||||||
import electrosphere.data.struct.StructureData;
|
import electrosphere.data.struct.StructureData;
|
||||||
|
import electrosphere.server.datacell.ServerWorldData;
|
||||||
import electrosphere.server.macro.MacroData;
|
import electrosphere.server.macro.MacroData;
|
||||||
import electrosphere.server.macro.spatial.MacroAreaObject;
|
import electrosphere.server.macro.spatial.MacroAreaObject;
|
||||||
import electrosphere.util.annotation.Exclude;
|
import electrosphere.util.annotation.Exclude;
|
||||||
@ -90,7 +91,7 @@ public class VirtualStructure implements MacroAreaObject {
|
|||||||
rVal.fabPath = data.getFabPath();
|
rVal.fabPath = data.getFabPath();
|
||||||
rVal.fab = data.getFab();
|
rVal.fab = data.getFab();
|
||||||
rVal.type = data.getId();
|
rVal.type = data.getId();
|
||||||
rVal.position = position;
|
rVal.position = ServerWorldData.clampRealToBlock(position);
|
||||||
rVal.rotation = rotation;
|
rVal.rotation = rotation;
|
||||||
rVal.aabb = new AABBd();
|
rVal.aabb = new AABBd();
|
||||||
VirtualStructure.setAABB(rVal.aabb, rVal.position, data.getDimensions(), rotation);
|
VirtualStructure.setAABB(rVal.aabb, rVal.position, data.getDimensions(), rotation);
|
||||||
|
|||||||
@ -244,9 +244,9 @@ public class ServerBlockChunkGenerationThread implements Runnable {
|
|||||||
if(struct.getAABB().testPoint(currRealPos.x, currRealPos.y, currRealPos.z)){
|
if(struct.getAABB().testPoint(currRealPos.x, currRealPos.y, currRealPos.z)){
|
||||||
AABBd aabb = struct.getAABB();
|
AABBd aabb = struct.getAABB();
|
||||||
localBlockPos.set(
|
localBlockPos.set(
|
||||||
(int)Math.round((currRealPos.x - aabb.minX) / BlockChunkData.BLOCK_SIZE_MULTIPLIER),
|
Math.round((currRealPos.x - aabb.minX) / BlockChunkData.BLOCK_SIZE_MULTIPLIER),
|
||||||
(int)Math.round((currRealPos.y - aabb.minY) / BlockChunkData.BLOCK_SIZE_MULTIPLIER),
|
Math.round((currRealPos.y - aabb.minY) / BlockChunkData.BLOCK_SIZE_MULTIPLIER),
|
||||||
(int)Math.round((currRealPos.z - aabb.minZ) / BlockChunkData.BLOCK_SIZE_MULTIPLIER)
|
Math.round((currRealPos.z - aabb.minZ) / BlockChunkData.BLOCK_SIZE_MULTIPLIER)
|
||||||
);
|
);
|
||||||
|
|
||||||
Quaterniond rotationQuat = CursorState.getBlockRotation(struct.getRotation());
|
Quaterniond rotationQuat = CursorState.getBlockRotation(struct.getRotation());
|
||||||
@ -255,27 +255,27 @@ public class ServerBlockChunkGenerationThread implements Runnable {
|
|||||||
rotationQuat.transform(dimVec);
|
rotationQuat.transform(dimVec);
|
||||||
dimVec.absolute();
|
dimVec.absolute();
|
||||||
if(localBlockPos.x < 0){
|
if(localBlockPos.x < 0){
|
||||||
localBlockPos.x = (int)(dimVec.x + localBlockPos.x);
|
localBlockPos.x = dimVec.x + localBlockPos.x;
|
||||||
}
|
}
|
||||||
if(localBlockPos.y < 0){
|
if(localBlockPos.y < 0){
|
||||||
localBlockPos.y = (int)(dimVec.y + localBlockPos.y);
|
localBlockPos.y = dimVec.y + localBlockPos.y;
|
||||||
}
|
}
|
||||||
if(localBlockPos.z < 0){
|
if(localBlockPos.z < 0){
|
||||||
localBlockPos.z = (int)(dimVec.z + localBlockPos.z);
|
localBlockPos.z = dimVec.z + localBlockPos.z;
|
||||||
}
|
}
|
||||||
localBlockPos.x = Math.round(localBlockPos.x);
|
int finalX = Math.round((float)localBlockPos.x);
|
||||||
localBlockPos.y = Math.round(localBlockPos.y);
|
int finalY = Math.round((float)localBlockPos.y);
|
||||||
localBlockPos.z = Math.round(localBlockPos.z);
|
int finalZ = Math.round((float)localBlockPos.z);
|
||||||
//structure file might have dimensions larger than fab, so need to make sure we're inbounds on fab file to draw data from fab file
|
//structure file might have dimensions larger than fab, so need to make sure we're inbounds on fab file to draw data from fab file
|
||||||
if(
|
if(
|
||||||
(int)localBlockPos.x >= 0 &&
|
finalX >= 0 &&
|
||||||
(int)localBlockPos.y >= 0 &&
|
finalY >= 0 &&
|
||||||
(int)localBlockPos.z >= 0 &&
|
finalZ >= 0 &&
|
||||||
(int)localBlockPos.x < struct.getFab().getDimensions().x &&
|
finalX < struct.getFab().getDimensions().x &&
|
||||||
(int)localBlockPos.y < struct.getFab().getDimensions().y &&
|
finalY < struct.getFab().getDimensions().y &&
|
||||||
(int)localBlockPos.z < struct.getFab().getDimensions().z
|
finalZ < struct.getFab().getDimensions().z
|
||||||
){
|
){
|
||||||
short blocktype = struct.getFab().getType((int)localBlockPos.x,(int)localBlockPos.y,(int)localBlockPos.z);
|
short blocktype = struct.getFab().getType(finalX,finalY,finalZ);
|
||||||
chunk.setType(x, y, z, blocktype);
|
chunk.setType(x, y, z, blocktype);
|
||||||
placedBlock = true;
|
placedBlock = true;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user