fab file loading
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2025-04-26 11:46:44 -04:00
parent 383a3b6ac3
commit ca9282d2e6
3 changed files with 77 additions and 1 deletions

View File

@ -1543,6 +1543,7 @@ Block area selection
Exporting block prefabs to compressed files
Minor block fab improvements
Fab selection tool
Fab selection tool actually loads fab files

View File

@ -8,6 +8,8 @@ import electrosphere.client.ui.menu.WindowUtils;
import electrosphere.controls.ControlHandler.ControlsState;
import electrosphere.engine.Globals;
import electrosphere.engine.signal.Signal.SignalType;
import electrosphere.game.data.block.BlockFab;
import electrosphere.logger.LoggerInterface;
import electrosphere.renderer.ui.elements.Window;
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaAlignment;
import electrosphere.renderer.ui.elementtypes.ContainerElement.YogaFlexDirection;
@ -54,7 +56,8 @@ public class FabMenus {
//attach scrollable after search input for organzation purposes
fabSelectionPanelWindow.addChild(FabSelectionPanel.createFabSelectionPanel((File selectedFile) -> {
System.out.println(selectedFile);
BlockFab fab = BlockFab.read(selectedFile);
LoggerInterface.loggerEngine.WARNING("" + fab.getDimensions());
}));
Globals.signalSystem.post(SignalType.YOGA_APPLY,fabSelectionPanelWindow);

View File

@ -9,6 +9,7 @@ import java.nio.ShortBuffer;
import org.joml.Vector3i;
import electrosphere.client.block.BlockChunkData;
import electrosphere.logger.LoggerInterface;
import electrosphere.util.FileUtils;
/**
@ -91,4 +92,75 @@ public class BlockFab {
}
}
/**
* Reads a BlockFab from a specified file
* @param file The file
* @return The BlockFab
*/
public static BlockFab read(File file){
BlockFab rVal = null;
ByteBuffer buff;
try {
buff = FileUtils.readBufferFromCompressedFile(file);
IntBuffer intView = buff.asIntBuffer();
int fileVer = intView.get();
LoggerInterface.loggerFileIO.DEBUG("Read fab file with ver " + fileVer);
int dimX = intView.get();
int dimY = intView.get();
int dimZ = intView.get();
Vector3i dims = new Vector3i(dimX, dimY, dimZ);
buff.position(HEADER_SIZE);
ShortBuffer shortView = buff.asShortBuffer();
int blockCount = dims.x * dims.y * dims.z;
short[] types = new short[blockCount];
short[] metadata = new short[blockCount];
int i = 0;
for(int x = 0; x < dims.x; x++){
for(int y = 0; y < dims.y; y++){
for(int z = 0; z < dims.z; z++){
types[i] = shortView.get();
metadata[i] = shortView.get();
i++;
}
}
}
rVal = new BlockFab();
rVal.dimensions = dims;
rVal.types = types;
rVal.metadata = metadata;
} catch (IOException e) {
LoggerInterface.loggerFileIO.ERROR(e);
throw new Error("Failed to read BlockFab " + file);
}
return rVal;
}
/**
* Gets the dimensions of the fab
* @return The dimensions of the fab
*/
public Vector3i getDimensions() {
return dimensions;
}
/**
* Gets the type data of the fab
* @return The type data
*/
public short[] getTypes() {
return types;
}
/**
* Gets the metadata of the fab
* @return The metadata
*/
public short[] getMetadata() {
return metadata;
}
}