package com.vitco.core.data; import com.vitco.core.data.container.Voxel; import gnu.trove.set.hash.TIntHashSet; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; /** * Defines the voxel data interaction (layer, undo, etc) */ public interface VoxelDataInterface { // adds a voxel directly to the container (no history entry is created!) // only to be used for back imports etc int addVoxelDirect(Color color, int[] pos); // adds a voxel to current layer and returns voxel id int addVoxel(Color color, int[] textureId, int[] pos); // deleted the voxel boolean removeVoxel(int voxelId); // move a voxel boolean moveVoxel(int voxelId, int[] newPos); // retrieve a voxel by id Voxel getVoxel(int voxelId); // set the color of a voxel boolean setColor(int voxelId, Color color); // get the color of a voxel Color getColor(int voxelId); // set the alpha of a voxel boolean setAlpha(int voxelId, int alpha); // get the alpha of a voxel int getAlpha(int voxelId); // returns the layer of a voxel int getLayer(int voxelId); // delete all voxels in layer boolean clearV(int layerId); // search for voxel in specific layer (no matter if visible or not) Voxel searchVoxel(int[] pos, int layerId); // returns a voxel if the current layer has a voxel at the position // layer needs to be visible Voxel searchVoxel(int[] pos, boolean onlyCurrentLayer); // get all voxels in current layer Voxel[] getLayerVoxels(int layerId); // get changed voxels since last call Voxel[][] getNewVisibleLayerVoxel(String requestId); // get all visible layer voxels Voxel[] getVisibleLayerVoxel(); // true iff any voxels are visible boolean anyLayerVoxelVisible(); // true iff any voxels are visible boolean anyVoxelSelected(); // to invalidate the side view buffer void invalidateSideViewBuffer(String requestId, Integer side, Integer plane); // get changed side view voxels since last call Voxel[][] getNewSideVoxel(String requestId, Integer side, Integer plane); // get voxel range (plane) of specific layer (not buffered!) Voxel[] getVoxelsXY(int z, int layerId); Voxel[] getVoxelsXZ(int y, int layerId); Voxel[] getVoxelsYZ(int x, int layerId); // get voxel range (plane) of current layer Voxel[] getVoxelsXY(int z); Voxel[] getVoxelsXZ(int y); Voxel[] getVoxelsYZ(int x); // get voxel number in layer int getVoxelCount(int layerId); // undo last action (animation) void undoV(); // redo last action (animation) void redoV(); // return true if the last action can be undone (animation) boolean canUndoV(); // return true if the last action can be redone (animation) boolean canRedoV(); // add a layer int createLayer(String layerName); // deletes a layer boolean deleteLayer(int layerId); // rename a layer boolean renameLayer(int layerId, String newName); // get the name of a layer String getLayerName(int layerId); // get the names of all layers String[] getLayerNames(); // select a layer boolean selectLayer(int layerId); // select a layer without producing a history entry boolean selectLayerSoft(int layerId); // retrieve selected layer int getSelectedLayer(); // retrieve all layers Integer[] getLayers(); // set a layer visible/ invisible boolean setVisible(int layerId, boolean b); // return true iff layer is visible boolean getLayerVisible(int layerId); // move layer up boolean moveLayerUp(int layerId); // move layer down boolean moveLayerDown(int layerId); // true iff layer can be moved up boolean canMoveLayerUp(int layerId); // true iff layer can be moved down boolean canMoveLayerDown(int layerId); // merge visible layers boolean mergeVisibleLayers(); // true iff vis layers can be merged boolean canMergeVisibleLayers(); boolean isSelected(int voxelId); Voxel[] getSelectedVoxels(); // get the new selected voxels since last call Voxel[][] getNewSelectedVoxel(String requestId); // select a voxel boolean setVoxelSelected(int voxelId, boolean selected); // select several voxels at once boolean massSetVoxelSelected(Integer[] voxelIds, boolean selected); // remove several voxels at once boolean massRemoveVoxel(Integer[] voxelIds); // add several voxels at once boolean massAddVoxel(Voxel[] voxels); // migrate voxels to a new layer boolean migrateVoxels(Voxel[] voxels); // set color of several voxels at once boolean massSetColor(Integer[] voxelIds, Color color); // shift color of several voxels at once boolean massShiftColor(Integer[] voxelIds, float[] hsbOffset); // move several voxels at once boolean massMoveVoxel(Voxel[] voxel, int[] shift); // todo describe functions below boolean rotateVoxelCenter(Voxel[] voxel, int axe, float degree); boolean mirrorVoxel(Voxel[] voxel, int axe); void addTexture(BufferedImage image); boolean removeTexture(int textureId); boolean removeAllTexture(); boolean replaceTexture(int textureId, ImageIcon texture); Integer[] getTextureList(); TIntHashSet getVoxelColorList(); ImageIcon getTexture(Integer textureId); String getTextureHash(Integer textureId); void selectTexture(int textureId); void selectTextureSoft(int textureId); int getSelectedTexture(); boolean setTexture(int voxelId, int voxelSide, int textureId); boolean massSetTexture(Integer[] voxelIds, int textureId); int[] getVoxelTextureIds(int voxelId); boolean flipVoxelTexture(int voxelId, int voxelSide); boolean rotateVoxelTexture(int voxelId, int voxelSide); }