diff --git a/build.gradle b/build.gradle index d20dcb6..2563a72 100644 --- a/build.gradle +++ b/build.gradle @@ -4,9 +4,14 @@ plugins { id 'application' } +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(11)) + } +} + repositories { mavenCentral() - jcenter() flatDir { dirs 'libs' } @@ -14,11 +19,12 @@ repositories { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation group: 'com.formdev', name: 'flatlaf', version: '0.39' - implementation group: 'com.miglayout', name: 'miglayout-swing', version: '5.0' + implementation group: 'com.formdev', name: 'flatlaf', version: '1.2' + implementation group: 'com.miglayout', name: 'miglayout-swing', version: '5.3' + implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' } -version '2.2' +version '2.3' mainClassName = "editor.MainFrame" compileJava.options.encoding = 'UTF-8' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 622ab64..3ab0b72 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/editor/MainFrame.java b/src/main/java/editor/MainFrame.java index f63e256..5a2210c 100644 --- a/src/main/java/editor/MainFrame.java +++ b/src/main/java/editor/MainFrame.java @@ -8,13 +8,13 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.prefs.Preferences; import javax.imageio.ImageIO; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.filechooser.FileNameExtensionFilter; @@ -25,7 +25,6 @@ import com.formdev.flatlaf.FlatLightLaf; import com.jogamp.opengl.GLContext; import editor.about.AboutDialog; -import editor.game.patches.GamePatch; import formats.animationeditor.AnimationEditorDialog; import formats.backsound.BacksoundEditorDialog; import formats.bdhc.BdhcEditorDialog; @@ -63,7 +62,6 @@ import editor.tileselector.*; import editor.tileseteditor.*; import net.miginfocom.swing.MigLayout; -import org.xml.sax.SAXException; import tileset.*; import utils.Utils; @@ -96,7 +94,7 @@ public static void main(String[] args) { } /* Create and display the form */ - java.awt.EventQueue.invokeLater(() -> { + EventQueue.invokeLater(() -> { MainFrame mainFrame = new MainFrame(); mainFrame.setVisible(true); @@ -116,7 +114,6 @@ public static void main(String[] args) { public MainFrame() { initComponents(); - updateRecentMapsMenu(); jscTileList.getVerticalScrollBar().setUnitIncrement(16); @@ -160,8 +157,6 @@ public MainFrame() { handler.updateAllMapThumbnails(); mapMatrixDisplay.updateMapsImage(); - - } private void formWindowClosing(WindowEvent e) { @@ -422,8 +417,6 @@ private void jlGameIconMousePressed(MouseEvent e) { changeGame(); } - - private void mapDisplayContainerComponentResized(ComponentEvent e) { updateMapDisplaySize(); } @@ -624,7 +617,7 @@ public void openMap(String path) { smartGridDisplay.repaint(); thumbnailLayerSelector.drawAllLayerThumbnails(); thumbnailLayerSelector.repaint(); - } catch (IOException | TextureNotFoundException ex) { + } catch (IOException ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "Error opening map", JOptionPane.ERROR_MESSAGE); } @@ -674,25 +667,22 @@ public void addMapWithDialog() { fc.setFileFilter(new FileNameExtensionFilter("Pokemon DS map (*.pdsmap)", MapMatrix.fileExtension)); fc.setApproveButtonText("Open"); fc.setDialogTitle("Add Maps from PDSMAP file"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - if (fc.getSelectedFile().exists()) { - handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); - try { - HashMap maps = MapMatrix.getGridsFromFile(fc.getSelectedFile().getPath(), handler); - final MapMatrixImportDialog dialog = new MapMatrixImportDialog(this); - dialog.init(handler, fc.getSelectedFile().getPath(), maps); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); - - } catch (Exception ex) { - JOptionPane.showMessageDialog(this, "There was a problem importing the maps", - "Can't add maps", JOptionPane.ERROR_MESSAGE); - } - } + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION || !fc.getSelectedFile().exists()) { + return; } + handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); + try { + Map maps = MapMatrix.getGridsFromFile(fc.getSelectedFile().getPath(), handler); + final MapMatrixImportDialog dialog = new MapMatrixImportDialog(this); + dialog.init(handler, fc.getSelectedFile().getPath(), maps); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); + + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, "There was a problem importing the maps", "Can't add maps", JOptionPane.ERROR_MESSAGE); + } } public void openTilesetEditor() { @@ -747,7 +737,7 @@ public void openBdhcEditor() { mapDisplay.requestUpdate(); mapDisplay.repaint(); - }else { + } else { mapDisplay.requestScreenshot(); mapDisplay.setOrthoView(); mapDisplay.setCameraAtSelectedMap(); @@ -862,7 +852,7 @@ public void openTileset(String path) { tileDisplay.repaint(); thumbnailLayerSelector.drawAllLayerThumbnails(); thumbnailLayerSelector.repaint(); - } catch (TextureNotFoundException | IOException ex) { + } catch (IOException ex) { JOptionPane.showMessageDialog(this, ex.getMessage(), "Error opening tilset", JOptionPane.ERROR_MESSAGE); } @@ -912,54 +902,57 @@ private void openBackImgWithDialog() { private void newMap() { int returnVal = JOptionPane.showConfirmDialog(this, "Do you want to close the current map?", "Create new map", JOptionPane.YES_NO_OPTION); - if (returnVal == JOptionPane.YES_OPTION) { - final GameTsetSelectorDialog2 dialog = new GameTsetSelectorDialog2(this); - dialog.init(handler); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); + if (returnVal != JOptionPane.YES_OPTION) { + return; + } - if (dialog.getReturnValue() == GameTsetSelectorDialog2.ACCEPTED) { - handler.setIndexTileSelected(0); - handler.setSmartGridIndexSelected(0); + final GameTsetSelectorDialog2 dialog = new GameTsetSelectorDialog2(this); + dialog.init(handler); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); - handler.setMapMatrix(new MapMatrix(handler)); - handler.setMapSelected(new Point(0, 0)); - - /* - handler.setCollisions(new Collisions(handler.getGameIndex())); - handler.setBdhc(new Bdhc()); - handler.setBacksound(new Backsound()); - handler.setBuildings(new BuildFile()); - handler.setGrid(new MapGrid(handler));*/ - handler.resetMapStateHandler(); - jbUndo.setEnabled(false); - jbRedo.setEnabled(false); - - //handler.setTileset(new Tileset()); - //handler.getSmartGridArray().add(new SmartGrid()); - tileSelector.updateLayout(); - tileSelector.repaint(); + if (dialog.getReturnValue() != GameTsetSelectorDialog2.ACCEPTED) { + return; + } + handler.setIndexTileSelected(0); + handler.setSmartGridIndexSelected(0); - smartGridDisplay.updateSize(); - smartGridDisplay.repaint(); + handler.setMapMatrix(new MapMatrix(handler)); + handler.setMapSelected(new Point(0, 0)); + + /* + handler.setCollisions(new Collisions(handler.getGameIndex())); + handler.setBdhc(new Bdhc()); + handler.setBacksound(new Backsound()); + handler.setBuildings(new BuildFile()); + handler.setGrid(new MapGrid(handler));*/ + handler.resetMapStateHandler(); + jbUndo.setEnabled(false); + jbRedo.setEnabled(false); + + //handler.setTileset(new Tileset()); + //handler.getSmartGridArray().add(new SmartGrid()); + tileSelector.updateLayout(); + tileSelector.repaint(); - mapDisplay.requestUpdate(); - mapDisplay.setCameraAtSelectedMap(); - repaintMapDisplay(); - tileDisplay.requestUpdate(); - tileDisplay.repaint(); - thumbnailLayerSelector.drawAllLayerThumbnails(); - thumbnailLayerSelector.repaint(); + smartGridDisplay.updateSize(); + smartGridDisplay.repaint(); - handler.updateAllMapThumbnails(); - mapMatrixDisplay.updateSize(); - updateMapMatrixDisplay(); + mapDisplay.requestUpdate(); + mapDisplay.setCameraAtSelectedMap(); + repaintMapDisplay(); + tileDisplay.requestUpdate(); + tileDisplay.repaint(); + thumbnailLayerSelector.drawAllLayerThumbnails(); + thumbnailLayerSelector.repaint(); - updateViewGame(); + handler.updateAllMapThumbnails(); + mapMatrixDisplay.updateSize(); + updateMapMatrixDisplay(); - setTitle(handler.getVersionName()); - } - } + updateViewGame(); + + setTitle(handler.getVersionName()); } private void saveMap() { @@ -982,7 +975,7 @@ private void saveMap() { //saveBuildings(); saveMapThumbnail(); - } catch (ParserConfigurationException | TransformerException | IOException ex) { + } catch (IOException ex) { JOptionPane.showMessageDialog(this, "There was a problem saving all the map files", "Error saving map files", JOptionPane.ERROR_MESSAGE); } @@ -997,104 +990,111 @@ private void saveMapWithDialog() { fc.setApproveButtonText("Save"); fc.setDialogTitle("Save"); int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); - try { - String path = fc.getSelectedFile().getPath(); - handler.getMapMatrix().saveGridsToFile(path); - handler.getMapMatrix().filePath = path; - setTitle(handler.getMapName() + " - " + handler.getVersionName()); - - saveTileset(); - - handler.getMapMatrix().saveCollisions(); - handler.getMapMatrix().saveBacksounds(); - handler.getMapMatrix().saveBDHCs(); - handler.getMapMatrix().saveBdhcams(); - handler.getMapMatrix().saveBuildings(); - - //handler.getMapMatrix().saveBinaryMaps(); - //saveCollisions(); - //saveBacksound(); - //saveBdhc(); - //saveBuildings(); - - saveMapThumbnail(); - - addRecentMap(Utils.addExtensionToPath(path, MapMatrix.fileExtension)); - updateRecentMaps(); - updateRecentMapsMenu(); - } catch (ParserConfigurationException | TransformerException | IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem saving all the map files", - "Error saving map files", JOptionPane.ERROR_MESSAGE); - } + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } + handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); + try { + String path = fc.getSelectedFile().getPath(); + handler.getMapMatrix().saveGridsToFile(path); + handler.getMapMatrix().filePath = path; + setTitle(handler.getMapName() + " - " + handler.getVersionName()); + + saveTileset(); + + handler.getMapMatrix().saveCollisions(); + handler.getMapMatrix().saveBacksounds(); + handler.getMapMatrix().saveBDHCs(); + handler.getMapMatrix().saveBdhcams(); + handler.getMapMatrix().saveBuildings(); + + //handler.getMapMatrix().saveBinaryMaps(); + //saveCollisions(); + //saveBacksound(); + //saveBdhc(); + //saveBuildings(); + + saveMapThumbnail(); + + addRecentMap(Utils.addExtensionToPath(path, MapMatrix.fileExtension)); + updateRecentMaps(); + updateRecentMapsMenu(); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem saving all the map files", + "Error saving map files", JOptionPane.ERROR_MESSAGE); } } private void saveTilesetWithDialog() { - if (handler.getTileset().size() > 0) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastTilesetDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastTilesetDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Pokemon DS tileset (*.pdsts)", Tileset.fileExtension)); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save Tileset"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); - try { - File file = fc.getSelectedFile(); - String path = file.getParent(); - String filename = Utils.removeExtensionFromPath(file.getName()) + "." + Tileset.fileExtension; - TilesetIO.saveTilesetToFile(path + File.separator + filename, handler.getTileset()); - handler.getTileset().saveImagesToFile(path); + if (handler.getTileset().size() <= 0) { + JOptionPane.showMessageDialog(this, "The tileset is empty", "Error saving tileset", JOptionPane.ERROR_MESSAGE); + return; + } - saveTilesetThumbnail(path + File.separator + "TilesetThumbnail.png"); + final JFileChooser fc = new JFileChooser(); + if (handler.getLastTilesetDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastTilesetDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Pokemon DS tileset (*.pdsts)", Tileset.fileExtension)); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save Tileset"); + int returnVal = fc.showOpenDialog(this); + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } - JOptionPane.showMessageDialog(this, "Tileset succesfully exported.", "Tileset saved", JOptionPane.INFORMATION_MESSAGE); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "Can't save file", "Error saving tileset", JOptionPane.ERROR_MESSAGE); - } - } - } else { - JOptionPane.showMessageDialog(this, "The tileset is empty", "Error saving tileset", JOptionPane.ERROR_MESSAGE); + handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); + try { + File file = fc.getSelectedFile(); + String path = file.getParent(); + String filename = Utils.removeExtensionFromPath(file.getName()) + "." + Tileset.fileExtension; + TilesetIO.saveTilesetToFile(path + File.separator + filename, handler.getTileset()); + handler.getTileset().saveImagesToFile(path); + + saveTilesetThumbnail(path + File.separator + "TilesetThumbnail.png"); + + JOptionPane.showMessageDialog(this, "Tileset succesfully exported.", "Tileset saved", JOptionPane.INFORMATION_MESSAGE); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "Can't save file", "Error saving tileset", JOptionPane.ERROR_MESSAGE); } } public void saveAllTilesAsObjWithDialog() { - if (handler.getTileset().size() > 0) { - final ExportTileDialog exportTileDialog = new ExportTileDialog(handler.getMainFrame(), "Export Tile Settings"); - exportTileDialog.setLocationRelativeTo(this); - exportTileDialog.setVisible(true); - if (exportTileDialog.getReturnValue() == AddTileDialog.APPROVE_OPTION) { - float scale = exportTileDialog.getScale(); - boolean flip = exportTileDialog.flip(); - boolean includeVertexColors = exportTileDialog.includeVertexColors(); - - final JFileChooser fc = new JFileChooser(); - if (handler.getLastTileObjDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastTileObjDirectoryUsed())); - } - fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Select folder for saving all tiles as OBJ"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - handler.setLastTileObjDirectoryUsed(fc.getSelectedFile().getPath()); - try { - ObjWriter objWriter = new ObjWriter(handler.getTileset(), - handler.getGrid(), fc.getSelectedFile().getPath(), - handler.getGameIndex(), true, includeVertexColors, 1.0f); - objWriter.writeAllTilesObj(scale, flip); - JOptionPane.showMessageDialog(this, "Tiles succesfully exported.", "Tiles saved", JOptionPane.INFORMATION_MESSAGE); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "Can't save tiles", "Error saving tiles", JOptionPane.ERROR_MESSAGE); - } - } - } - } else { + if (handler.getTileset().size() <= 0) { JOptionPane.showMessageDialog(this, "The tileset is empty", "Error saving tiles", JOptionPane.ERROR_MESSAGE); + return; + } + + final ExportTileDialog exportTileDialog = new ExportTileDialog(handler.getMainFrame(), "Export Tile Settings"); + exportTileDialog.setLocationRelativeTo(this); + exportTileDialog.setVisible(true); + if (exportTileDialog.getReturnValue() != AddTileDialog.APPROVE_OPTION) { + return; + } + + float scale = exportTileDialog.getScale(); + boolean flip = exportTileDialog.flip(); + boolean includeVertexColors = exportTileDialog.includeVertexColors(); + + final JFileChooser fc = new JFileChooser(); + if (handler.getLastTileObjDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastTileObjDirectoryUsed())); + } + fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Select folder for saving all tiles as OBJ"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + handler.setLastTileObjDirectoryUsed(fc.getSelectedFile().getPath()); + try { + ObjWriter objWriter = new ObjWriter(handler.getTileset(), + handler.getGrid(), fc.getSelectedFile().getPath(), + handler.getGameIndex(), true, includeVertexColors, 1.0f); + objWriter.writeAllTilesObj(scale, flip); + JOptionPane.showMessageDialog(this, "Tiles succesfully exported.", "Tiles saved", JOptionPane.INFORMATION_MESSAGE); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "Can't save tiles", "Error saving tiles", JOptionPane.ERROR_MESSAGE); + } } } @@ -1103,71 +1103,74 @@ private void saveMapAsObjWithDialog(boolean saveTextures) { exportMapDialog.setLocationRelativeTo(this); exportMapDialog.setVisible(true); - if (exportMapDialog.getReturnValue() == ExportMapObjDialog.APPROVE_OPTION) { - boolean includeVertexColors = exportMapDialog.includeVertexColors(); - boolean exportAllMapsSeparately = exportMapDialog.exportAllMapsSeparately(); - boolean exportAllMapsJoined = exportMapDialog.exportAllMapsJoined(); - float tileUpscale = exportMapDialog.getTileUpscaling(); + if (exportMapDialog.getReturnValue() != ExportMapObjDialog.APPROVE_OPTION) { + return; + } + boolean includeVertexColors = exportMapDialog.includeVertexColors(); + boolean exportAllMapsSeparately = exportMapDialog.exportAllMapsSeparately(); + boolean exportAllMapsJoined = exportMapDialog.exportAllMapsJoined(); + float tileUpscale = exportMapDialog.getTileUpscaling(); - final JFileChooser fc = new JFileChooser(); - fc.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); - if (handler.getLastMapDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("OBJ (*.obj)", "obj")); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Select a name for saving the maps as OBJ"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); - try { - String path = fc.getSelectedFile().getPath(); - if (exportAllMapsSeparately) { - path = Utils.removeMapCoordsFromName(path); - handler.getMapMatrix().saveMapsAsObj(path, saveTextures, includeVertexColors, tileUpscale); - JOptionPane.showMessageDialog(this, "OBJ maps succesfully exported.", "Maps saved", JOptionPane.INFORMATION_MESSAGE); - } else if (exportAllMapsJoined) { - path = Utils.removeMapCoordsFromName(path); - handler.getMapMatrix().saveMapsAsObjJoined(path, saveTextures, includeVertexColors, tileUpscale); - JOptionPane.showMessageDialog(this, "OBJ map succesfully exported.", "Map saved", JOptionPane.INFORMATION_MESSAGE); - } else { - handler.getGrid().saveMapToOBJ(handler.getTileset(), path, saveTextures, includeVertexColors, tileUpscale); - JOptionPane.showMessageDialog(this, "OBJ map succesfully exported.", "Map saved", JOptionPane.INFORMATION_MESSAGE); - } - } catch (FileNotFoundException ex) { - JOptionPane.showMessageDialog(this, "Can't save file.", "Error saving map", JOptionPane.ERROR_MESSAGE); - } + final JFileChooser fc = new JFileChooser(); + fc.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); + if (handler.getLastMapDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("OBJ (*.obj)", "obj")); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Select a name for saving the maps as OBJ"); + int returnVal = fc.showOpenDialog(this); + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } + handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); + try { + String path = fc.getSelectedFile().getPath(); + if (exportAllMapsSeparately) { + path = Utils.removeMapCoordsFromName(path); + handler.getMapMatrix().saveMapsAsObj(path, saveTextures, includeVertexColors, tileUpscale); + JOptionPane.showMessageDialog(this, "OBJ maps succesfully exported.", "Maps saved", JOptionPane.INFORMATION_MESSAGE); + } else if (exportAllMapsJoined) { + path = Utils.removeMapCoordsFromName(path); + handler.getMapMatrix().saveMapsAsObjJoined(path, saveTextures, includeVertexColors, tileUpscale); + JOptionPane.showMessageDialog(this, "OBJ map succesfully exported.", "Map saved", JOptionPane.INFORMATION_MESSAGE); + } else { + handler.getGrid().saveMapToOBJ(handler.getTileset(), path, saveTextures, includeVertexColors, tileUpscale); + JOptionPane.showMessageDialog(this, "OBJ map succesfully exported.", "Map saved", JOptionPane.INFORMATION_MESSAGE); } + } catch (FileNotFoundException ex) { + JOptionPane.showMessageDialog(this, "Can't save file.", "Error saving map", JOptionPane.ERROR_MESSAGE); } } private void saveMapAsBinWithDialog(){ if(handler.getGame().gameSelected >= Game.BLACK){ JOptionPane.showMessageDialog(this, "Can't save Gen V binary files yet", "Error saving bin map", JOptionPane.ERROR_MESSAGE); - }else{ - final ExportMapBinDialog exportBinDialog = new ExportMapBinDialog(this, "Export Bin Map Settings"); - exportBinDialog.setLocationRelativeTo(this); - exportBinDialog.setVisible(true); - - if (exportBinDialog.getReturnValue() == ExportMapBinDialog.APPROVE_OPTION) { - HashSet maps = new HashSet<>(); - if(exportBinDialog.exportCurrentMapBin()){ - maps.add(handler.getMapSelected()); - }else if(exportBinDialog.exportAllMapsBin()){ - maps.addAll(handler.getMapMatrix().getMatrix().keySet()); - }else{ - return;//Nothing selected - } + return; + } + final ExportMapBinDialog exportBinDialog = new ExportMapBinDialog(this, "Export Bin Map Settings"); + exportBinDialog.setLocationRelativeTo(this); + exportBinDialog.setVisible(true); - ExportMapBinInfoDialog exportInfoDialog = new ExportMapBinInfoDialog(this); - exportInfoDialog.init(handler, maps, new File(handler.getMapMatrix().filePath).getParent()); - exportInfoDialog.setLocationRelativeTo(this); - exportInfoDialog.setVisible(true); - } + if (exportBinDialog.getReturnValue() != ExportMapBinDialog.APPROVE_OPTION) { + return; + } + Set maps = new HashSet<>(); + if(exportBinDialog.exportCurrentMapBin()){ + maps.add(handler.getMapSelected()); + }else if(exportBinDialog.exportAllMapsBin()){ + maps.addAll(handler.getMapMatrix().getMatrix().keySet()); + }else{ + return;//Nothing selected } + + ExportMapBinInfoDialog exportInfoDialog = new ExportMapBinInfoDialog(this); + exportInfoDialog.init(handler, maps, new File(handler.getMapMatrix().filePath).getParent()); + exportInfoDialog.setLocationRelativeTo(this); + exportInfoDialog.setVisible(true); } - public void saveTileset() throws FileNotFoundException, ParserConfigurationException, TransformerException, IOException { + public void saveTileset() throws IOException { File file = new File(handler.getMapMatrix().filePath); String path = file.getParent(); @@ -1251,7 +1254,7 @@ public void saveMapsAsImdWithDialog() { configDialog.setVisible(true); if (configDialog.getReturnValue() == ExportImdDialog.APPROVE_OPTION) { - ArrayList fileNames = configDialog.getSelectedObjNames(); + List fileNames = configDialog.getSelectedObjNames(); String objFolderPath = configDialog.getObjFolderPath(); String imdFolderPath = configDialog.getImdFolderPath(); @@ -1259,7 +1262,6 @@ public void saveMapsAsImdWithDialog() { outputDialog.init(handler, fileNames, objFolderPath, imdFolderPath); outputDialog.setLocationRelativeTo(this); outputDialog.setVisible(true); - } } @@ -1281,70 +1283,73 @@ public void saveMapAsImdWithDialog() { fcOpen.setApproveButtonText("Open"); fcOpen.setDialogTitle("Open OBJ Map for converting into IMD"); int returnValOpen = fcOpen.showOpenDialog(this); - if (returnValOpen == JFileChooser.APPROVE_OPTION) { - if (fcOpen.getSelectedFile().exists()) { - String pathOpen = fcOpen.getSelectedFile().getPath(); - - final JFileChooser fcSave = new JFileChooser(); - fcSave.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); - fcSave.setCurrentDirectory(fcOpen.getSelectedFile().getParentFile()); - fcSave.setFileFilter(new FileNameExtensionFilter("IMD (*.imd)", "imd")); - fcSave.setApproveButtonText("Save"); - fcSave.setDialogTitle("Save"); - int returnValSave = fcSave.showOpenDialog(this); - if (returnValSave == JFileChooser.APPROVE_OPTION) { - String pathSave = fcSave.getSelectedFile().getPath(); + if (returnValOpen != JFileChooser.APPROVE_OPTION) { + return; + } + if (!fcOpen.getSelectedFile().exists()) { + JOptionPane.showMessageDialog(this, + "The selected OBJ file could not be opened", + "Can't open OBJ", + JOptionPane.ERROR_MESSAGE); + return; + } - try { - ImdModel model = new ImdModel(pathOpen, pathSave, handler.getTileset().getMaterials()); - final int numVertices = model.getNumVertices(); - final int numPolygons = model.getNumPolygons(); - final int numTris = model.getNumTris(); - final int numQuads = model.getNumQuads(); - JOptionPane.showMessageDialog(this, "IMD map succesfully exported.\n\n" - + "Number of Materials: " + String.valueOf(model.getNumMaterials()) + "\n" - + "Number of Vertices: " + String.valueOf(numVertices) + "\n" - + "Number of Polygons: " + String.valueOf(numPolygons) + "\n" - + "Number of Triangles: " + String.valueOf(numTris) + "\n" - + "Number of Quads: " + String.valueOf(numQuads), - "Map saved", JOptionPane.INFORMATION_MESSAGE); - final int maxNumPolygons = 1800; - final int maxNumTris = 1200; - if (numTris > maxNumTris) { - JOptionPane.showMessageDialog(this, "The map might not work properly in game.\n\n" - + "The map contains " + String.valueOf(numTris) + " triangles" + "\n" - + "Try to use less than " + maxNumTris + " triangles" + "\n" - + "Or try to use quads instead of triangles" + "\n", - "Too many triangles", JOptionPane.INFORMATION_MESSAGE); - } else if (numPolygons > maxNumPolygons) { - JOptionPane.showMessageDialog(this, "The map may not work properly in game.\n\n" - + "The map contains " + String.valueOf(numPolygons) + " polygons" + "\n" - + "Try to use less than " + maxNumPolygons + " polygons", - "Too many polygons", JOptionPane.WARNING_MESSAGE); - } - } catch (ParserConfigurationException | TransformerException ex) { - JOptionPane.showMessageDialog(this, - "There was a problem parsing the XML data of the IMD", - "Can't export IMD", - JOptionPane.ERROR_MESSAGE); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, - "There was a problem exporting the IMD", - "Can't export IMD", - JOptionPane.ERROR_MESSAGE); - } catch (TextureNotFoundException | NormalsNotFoundException ex) { - JOptionPane.showMessageDialog(this, - ex.getMessage(), - "Can't export IMD", - JOptionPane.ERROR_MESSAGE); - } - } - } else { - JOptionPane.showMessageDialog(this, - "The selected OBJ file could not be opened", - "Can't open OBJ", - JOptionPane.ERROR_MESSAGE); + String pathOpen = fcOpen.getSelectedFile().getPath(); + + final JFileChooser fcSave = new JFileChooser(); + fcSave.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); + fcSave.setCurrentDirectory(fcOpen.getSelectedFile().getParentFile()); + fcSave.setFileFilter(new FileNameExtensionFilter("IMD (*.imd)", "imd")); + fcSave.setApproveButtonText("Save"); + fcSave.setDialogTitle("Save"); + int returnValSave = fcSave.showOpenDialog(this); + if (returnValSave != JFileChooser.APPROVE_OPTION) { + return; + } + String pathSave = fcSave.getSelectedFile().getPath(); + + try { + ImdModel model = new ImdModel(pathOpen, pathSave, handler.getTileset().getMaterials()); + final int numVertices = model.getNumVertices(); + final int numPolygons = model.getNumPolygons(); + final int numTris = model.getNumTris(); + final int numQuads = model.getNumQuads(); + JOptionPane.showMessageDialog(this, "IMD map succesfully exported.\n\n" + + "Number of Materials: " + model.getNumMaterials() + "\n" + + "Number of Vertices: " + numVertices + "\n" + + "Number of Polygons: " + numPolygons + "\n" + + "Number of Triangles: " + numTris + "\n" + + "Number of Quads: " + numQuads, + "Map saved", JOptionPane.INFORMATION_MESSAGE); + final int maxNumPolygons = 1800; + final int maxNumTris = 1200; + if (numTris > maxNumTris) { + JOptionPane.showMessageDialog(this, "The map might not work properly in game.\n\n" + + "The map contains " + numTris + " triangles" + "\n" + + "Try to use less than " + maxNumTris + " triangles" + "\n" + + "Or try to use quads instead of triangles" + "\n", + "Too many triangles", JOptionPane.INFORMATION_MESSAGE); + } else if (numPolygons > maxNumPolygons) { + JOptionPane.showMessageDialog(this, "The map may not work properly in game.\n\n" + + "The map contains " + numPolygons + " polygons" + "\n" + + "Try to use less than " + maxNumPolygons + " polygons", + "Too many polygons", JOptionPane.WARNING_MESSAGE); } + } catch (ParserConfigurationException | TransformerException ex) { + JOptionPane.showMessageDialog(this, + "There was a problem parsing the XML data of the IMD", + "Can't export IMD", + JOptionPane.ERROR_MESSAGE); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, + "There was a problem exporting the IMD", + "Can't export IMD", + JOptionPane.ERROR_MESSAGE); + } catch (TextureNotFoundException | NormalsNotFoundException ex) { + JOptionPane.showMessageDialog(this, + ex.getMessage(), + "Can't export IMD", + JOptionPane.ERROR_MESSAGE); } } @@ -1370,136 +1375,141 @@ public void saveMapAsNsbWithDialog() { final ConverterDialog convDialog = new ConverterDialog(this); convDialog.setLocationRelativeTo(this); convDialog.setVisible(true); - if (convDialog.getReturnValue() == ConverterDialog.APPROVE_OPTION) { - boolean includeNsbtx = convDialog.includeNsbtxInNsbmd(); + if (convDialog.getReturnValue() != ConverterDialog.APPROVE_OPTION) { + return; + } + + boolean includeNsbtx = convDialog.includeNsbtxInNsbmd(); + try { + final JFileChooser fcOpen = new JFileChooser(); + fcOpen.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath) + ".imd")); + if (handler.getLastMapDirectoryUsed() != null) { + fcOpen.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); + } + fcOpen.setFileFilter(new FileNameExtensionFilter("IMD (*.imd)", "imd")); + fcOpen.setApproveButtonText("Open"); + fcOpen.setDialogTitle("Open IMD Map for converting into NSBMD"); + int returnVal = fcOpen.showOpenDialog(this); + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } + + String imdPath; + if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { + imdPath = fcOpen.getSelectedFile().getPath(); + } else { + String cwd = System.getProperty("user.dir"); // get current user directory + imdPath = new File(cwd).toURI().relativize(fcOpen.getSelectedFile().toPath().toRealPath().toUri()).getPath(); //this is some serious java shit + } + final JFileChooser fcSave = new JFileChooser(); + fcSave.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); + fcSave.setCurrentDirectory(fcOpen.getSelectedFile().getParentFile()); + fcSave.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); + fcSave.setApproveButtonText("Save"); + fcSave.setDialogTitle("Save"); + int returnValSave = fcSave.showOpenDialog(this); + + if (returnValSave != JFileChooser.APPROVE_OPTION) { + return; + } + String nsbPath = fcSave.getSelectedFile().getPath(); + String filename = new File(nsbPath).getName(); + try { - final JFileChooser fcOpen = new JFileChooser(); - fcOpen.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath) + ".imd")); - if (handler.getLastMapDirectoryUsed() != null) { - fcOpen.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); - } - fcOpen.setFileFilter(new FileNameExtensionFilter("IMD (*.imd)", "imd")); - fcOpen.setApproveButtonText("Open"); - fcOpen.setDialogTitle("Open IMD Map for converting into NSBMD"); - int returnVal = fcOpen.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - String imdPath; - if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { - imdPath = fcOpen.getSelectedFile().getPath(); + String converterPath = "converter/g3dcvtr.exe"; + String[] cmd; + if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { + if (includeNsbtx) { + cmd = new String[]{converterPath, imdPath, "-eboth", "-o", filename}; } else { - String cwd = System.getProperty("user.dir"); // get current user directory - imdPath = new File(cwd).toURI().relativize(fcOpen.getSelectedFile().toPath().toRealPath().toUri()).getPath(); //this is some serious java shit + cmd = new String[]{converterPath, imdPath, "-emdl", "-o", filename}; } - final JFileChooser fcSave = new JFileChooser(); - fcSave.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); - fcSave.setCurrentDirectory(fcOpen.getSelectedFile().getParentFile()); - fcSave.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); - fcSave.setApproveButtonText("Save"); - fcSave.setDialogTitle("Save"); - int returnValSave = fcSave.showOpenDialog(this); - - if (returnValSave == JFileChooser.APPROVE_OPTION) { - String nsbPath = fcSave.getSelectedFile().getPath(); - String filename = new File(nsbPath).getName(); - try { - String converterPath = "converter/g3dcvtr.exe"; - String[] cmd; - if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { - if (includeNsbtx) { - cmd = new String[]{converterPath, imdPath, "-eboth", "-o", filename}; - } else { - cmd = new String[]{converterPath, imdPath, "-emdl", "-o", filename}; - } + } else { + if (includeNsbtx) { + cmd = new String[]{"wine", converterPath, imdPath, "-eboth", "-o", filename}; + } else { + cmd = new String[]{"wine", converterPath, imdPath, "-emdl", "-o", filename}; + } + // NOTE: wine call works only with relative path + } - } else { - if (includeNsbtx) { - cmd = new String[]{"wine", converterPath, imdPath, "-eboth", "-o", filename}; - } else { - cmd = new String[]{"wine", converterPath, imdPath, "-emdl", "-o", filename}; - } - // NOTE: wine call works only with relative path - } + if (!Files.exists(Paths.get(converterPath))) { + throw new IOException(); + } - if (!Files.exists(Paths.get(converterPath))) { - throw new IOException(); - } + Process p = new ProcessBuilder(cmd).start(); - Process p = new ProcessBuilder(cmd).start(); + BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); + String outputString = ""; + String line = null; + while ((line = stdError.readLine()) != null) { + outputString += line + "\n"; + } - String outputString = ""; - String line = null; - while ((line = stdError.readLine()) != null) { - outputString += line + "\n"; - } + p.waitFor(); + p.destroy(); - p.waitFor(); - p.destroy(); + if (!filename.endsWith("nsbmd")) { + filename += ".nsbmd"; + } + if (!nsbPath.endsWith("nsbmd")) { + nsbPath += ".nsbmd"; + } - if (!filename.endsWith("nsbmd")) { - filename += ".nsbmd"; - } - if (!nsbPath.endsWith("nsbmd")) { - nsbPath += ".nsbmd"; - } + System.out.println(System.getProperty("user.dir")); + File srcFile = new File(System.getProperty("user.dir") + File.separator + filename); + File dstFile = new File(nsbPath); + if (srcFile.exists()) { + try { + Files.move(srcFile.toPath(), dstFile.toPath(), + StandardCopyOption.REPLACE_EXISTING); - System.out.println(System.getProperty("user.dir")); - File srcFile = new File(System.getProperty("user.dir") + File.separator + filename); - File dstFile = new File(nsbPath); - if (srcFile.exists()) { - try { - Files.move(srcFile.toPath(), dstFile.toPath(), - StandardCopyOption.REPLACE_EXISTING); - - try { - byte[] nsbmdData = Files.readAllBytes(dstFile.toPath()); - - ExportNsbmdResultDialog resultDialog = new ExportNsbmdResultDialog(this); - resultDialog.init(nsbmdData); - resultDialog.setLocationRelativeTo(this); - resultDialog.setVisible(true); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "NSBMD succesfully exported.", - "NSBMD saved", JOptionPane.INFORMATION_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, - "File was not moved to the save directory. \n" - + "Reopen Pokemon DS Map Studio and try again.", - "Problem saving generated file", - JOptionPane.ERROR_MESSAGE); - } - } else { - ConverterErrorDialog dialog = new ConverterErrorDialog(this); - dialog.init("There was a problem creating the NSBMD file. \n" - + "The output from the converter is:", - outputString); - dialog.setTitle("Problem generating file"); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); - } + try { + byte[] nsbmdData = Files.readAllBytes(dstFile.toPath()); + + ExportNsbmdResultDialog resultDialog = new ExportNsbmdResultDialog(this); + resultDialog.init(nsbmdData); + resultDialog.setLocationRelativeTo(this); + resultDialog.setVisible(true); } catch (IOException ex) { - JOptionPane.showMessageDialog(this, - "The program \"g3dcvtr.exe\" is not found in the \"converter\" folder.\n" - + "Put the program and its *.dll files in the folder and try again.", - "Converter not found", - JOptionPane.ERROR_MESSAGE); - } catch (InterruptedException ex) { - JOptionPane.showMessageDialog(this, - "The model was not converted", - "Problem converting the model", - JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, "NSBMD succesfully exported.", + "NSBMD saved", JOptionPane.INFORMATION_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, + "File was not moved to the save directory. \n" + + "Reopen Pokemon DS Map Studio and try again.", + "Problem saving generated file", + JOptionPane.ERROR_MESSAGE); } + } else { + ConverterErrorDialog dialog = new ConverterErrorDialog(this); + dialog.init("There was a problem creating the NSBMD file. \n" + + "The output from the converter is:", + outputString); + dialog.setTitle("Problem generating file"); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); } } catch (IOException ex) { JOptionPane.showMessageDialog(this, - "There was a problem reading the IMD file", - "Error loading the IMD file", + "The program \"g3dcvtr.exe\" is not found in the \"converter\" folder.\n" + + "Put the program and its *.dll files in the folder and try again.", + "Converter not found", + JOptionPane.ERROR_MESSAGE); + } catch (InterruptedException ex) { + JOptionPane.showMessageDialog(this, + "The model was not converted", + "Problem converting the model", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, + "There was a problem reading the IMD file", + "Error loading the IMD file", + JOptionPane.ERROR_MESSAGE); } } @@ -1513,94 +1523,96 @@ public void saveMapBtxWithDialog() { fcOpen.setApproveButtonText("Open"); fcOpen.setDialogTitle("Open IMD Map for converting into NSBTX"); int returnVal = fcOpen.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - String imdPath = fcOpen.getSelectedFile().getPath(); - - final JFileChooser fcSave = new JFileChooser(); - fcSave.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); - fcSave.setCurrentDirectory(fcOpen.getSelectedFile().getParentFile()); - fcSave.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); - fcSave.setApproveButtonText("Save"); - fcSave.setDialogTitle("Save"); - int returnValSave = fcSave.showOpenDialog(this); - - if (returnValSave == JFileChooser.APPROVE_OPTION) { - String nsbPath = fcSave.getSelectedFile().getPath(); - String filename = new File(nsbPath).getName(); + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } + String imdPath = fcOpen.getSelectedFile().getPath(); + + final JFileChooser fcSave = new JFileChooser(); + fcSave.setSelectedFile(new File(Utils.removeExtensionFromPath(handler.getMapMatrix().filePath))); + fcSave.setCurrentDirectory(fcOpen.getSelectedFile().getParentFile()); + fcSave.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); + fcSave.setApproveButtonText("Save"); + fcSave.setDialogTitle("Save"); + int returnValSave = fcSave.showOpenDialog(this); + + if (returnValSave != JFileChooser.APPROVE_OPTION) { + return; + } + String nsbPath = fcSave.getSelectedFile().getPath(); + String filename = new File(nsbPath).getName(); - System.out.println(filename); - String converterPath = "converter/g3dcvtr.exe"; - String[] cmd = {converterPath, imdPath, "-etex", "-o", filename}; - Process p; - try { - p = new ProcessBuilder(cmd).start(); + System.out.println(filename); + String converterPath = "converter/g3dcvtr.exe"; + String[] cmd = {converterPath, imdPath, "-etex", "-o", filename}; + Process p; + try { + p = new ProcessBuilder(cmd).start(); - BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); + BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - StringBuilder outputString = new StringBuilder(); - String line = null; - while ((line = stdError.readLine()) != null) { - outputString.append(line).append("\n"); - } + StringBuilder outputString = new StringBuilder(); + String line = null; + while ((line = stdError.readLine()) != null) { + outputString.append(line).append("\n"); + } - p.waitFor(); - p.destroy(); + p.waitFor(); + p.destroy(); - if (!filename.endsWith("nsbtx")) { - filename += ".nsbtx"; - } - if (!nsbPath.endsWith("nsbtx")) { - nsbPath += ".nsbtx"; - } + if (!filename.endsWith("nsbtx")) { + filename += ".nsbtx"; + } + if (!nsbPath.endsWith("nsbtx")) { + nsbPath += ".nsbtx"; + } - System.out.println(System.getProperty("user.dir")); - File srcFile = new File(System.getProperty("user.dir") + "/" + filename); - File dstFile = new File(nsbPath); - if (srcFile.exists()) { - try { - Files.move(srcFile.toPath(), dstFile.toPath(), - StandardCopyOption.REPLACE_EXISTING); - try { - byte[] nsbtxData = Files.readAllBytes(dstFile.toPath()); - Nsbtx2 nsbtx = NsbtxLoader2.loadNsbtx(nsbtxData); - - ExportNsbtxResultDialog resultDialog = new ExportNsbtxResultDialog(this, true); - resultDialog.init(nsbtx); - resultDialog.setLocationRelativeTo(this); - resultDialog.setVisible(true); - } catch (Exception ex) { - JOptionPane.showMessageDialog(this, "NSBTX succesfully exported.", - "NSBTX saved", JOptionPane.INFORMATION_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, - "File was not moved to the save directory. \n" - + "Reopen Pokemon DS Map Studio and try again.", - "Problem saving generated file", - JOptionPane.ERROR_MESSAGE); - } - } else { - ConverterErrorDialog dialog = new ConverterErrorDialog(this); - dialog.init("There was a problem creating the NSBTX file. \n" - + "The output from the converter is:", - outputString.toString()); - dialog.setTitle("Problem generating file"); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); + System.out.println(System.getProperty("user.dir")); + File srcFile = new File(System.getProperty("user.dir") + "/" + filename); + File dstFile = new File(nsbPath); + if (srcFile.exists()) { + try { + Files.move(srcFile.toPath(), dstFile.toPath(), + StandardCopyOption.REPLACE_EXISTING); + try { + byte[] nsbtxData = Files.readAllBytes(dstFile.toPath()); + Nsbtx2 nsbtx = NsbtxLoader2.loadNsbtx(nsbtxData); + + ExportNsbtxResultDialog resultDialog = new ExportNsbtxResultDialog(this, true); + resultDialog.init(nsbtx); + resultDialog.setLocationRelativeTo(this); + resultDialog.setVisible(true); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, "NSBTX succesfully exported.", + "NSBTX saved", JOptionPane.INFORMATION_MESSAGE); } } catch (IOException ex) { JOptionPane.showMessageDialog(this, - "The program \"g3dcvtr.exe\" is not found in the \"converter\" folder.\n" - + "Put the program and its *.dll files in the folder and try again.", - "Converter not found", - JOptionPane.ERROR_MESSAGE); - } catch (InterruptedException ex) { - JOptionPane.showMessageDialog(this, - "The model was not converted", - "Problem converting the model", + "File was not moved to the save directory. \n" + + "Reopen Pokemon DS Map Studio and try again.", + "Problem saving generated file", JOptionPane.ERROR_MESSAGE); } + } else { + ConverterErrorDialog dialog = new ConverterErrorDialog(this); + dialog.init("There was a problem creating the NSBTX file. \n" + + "The output from the converter is:", + outputString.toString()); + dialog.setTitle("Problem generating file"); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, + "The program \"g3dcvtr.exe\" is not found in the \"converter\" folder.\n" + + "Put the program and its *.dll files in the folder and try again.", + "Converter not found", + JOptionPane.ERROR_MESSAGE); + } catch (InterruptedException ex) { + JOptionPane.showMessageDialog(this, + "The model was not converted", + "Problem converting the model", + JOptionPane.ERROR_MESSAGE); } } @@ -1611,7 +1623,7 @@ public void saveAreasAsBtxWithDialog() { configDialog.setVisible(true); if (configDialog.getReturnValue() == ExportImdDialog.APPROVE_OPTION) { - ArrayList areaIndices = configDialog.getSelectedAreaIndices(); + List areaIndices = configDialog.getSelectedAreaIndices(); String nsbtxFolderPath = configDialog.getNsbtxFolderPath(); final NsbtxOutputInfoDialog outputDialog = new NsbtxOutputInfoDialog(this, true); @@ -1627,7 +1639,7 @@ public void changeGame() { dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == GameSelectorDialog.ACEPTED) { + if (dialog.getReturnValue() == GameSelectorDialog.ACCEPTED) { updateViewGame(); handler.getMapMatrix().updateAllLayersGL(); @@ -1690,59 +1702,61 @@ private void updateViewGame() { public void undoMapState() { StateHandler mapStateHandler = handler.getMapStateHandler(); - if (mapStateHandler.canGetPreviousState()) { - MapLayerState state = (MapLayerState) mapStateHandler.getPreviousState(new MapLayerState("Map Edit", handler, true)); - state.revertState(); - jbRedo.setEnabled(true); - if (!mapStateHandler.canGetPreviousState()) { - jbUndo.setEnabled(false); - } - for (Point mapCoord : state.getKeySet()) { - MapData mapData = handler.getMapMatrix().getMap(mapCoord); - mapData.getGrid().updateMapLayerGL(state.getLayerIndex(), handler.useRealTimePostProcessing()); - mapData.updateMapThumbnail(); - } - //mapDisplay.updateMapLayerGL(state.getLayerIndex()); - - handler.getMapMatrix().removeUnusedMaps(); - if (!handler.mapSelectedExists()) { - handler.setDefaultMapSelected(); + if (!mapStateHandler.canGetPreviousState()) { + return; + } + MapLayerState state = (MapLayerState) mapStateHandler.getPreviousState(new MapLayerState("Map Edit", handler, true)); + state.revertState(); + jbRedo.setEnabled(true); + if (!mapStateHandler.canGetPreviousState()) { + jbUndo.setEnabled(false); + } + for (Point mapCoord : state.getKeySet()) { + MapData mapData = handler.getMapMatrix().getMap(mapCoord); + mapData.getGrid().updateMapLayerGL(state.getLayerIndex(), handler.useRealTimePostProcessing()); + mapData.updateMapThumbnail(); + } + //mapDisplay.updateMapLayerGL(state.getLayerIndex()); - handler.getMainFrame().getThumbnailLayerSelector().drawAllLayerThumbnails(); - handler.getMainFrame().getThumbnailLayerSelector().repaint(); - } + handler.getMapMatrix().removeUnusedMaps(); + if (!handler.mapSelectedExists()) { + handler.setDefaultMapSelected(); - mapDisplay.repaint(); - updateMapMatrixDisplay(); - thumbnailLayerSelector.drawLayerThumbnail(state.getLayerIndex()); - thumbnailLayerSelector.repaint(); - updateViewMapInfo(); + handler.getMainFrame().getThumbnailLayerSelector().drawAllLayerThumbnails(); + handler.getMainFrame().getThumbnailLayerSelector().repaint(); } + + mapDisplay.repaint(); + updateMapMatrixDisplay(); + thumbnailLayerSelector.drawLayerThumbnail(state.getLayerIndex()); + thumbnailLayerSelector.repaint(); + updateViewMapInfo(); } public void redoMapState() { StateHandler mapStateHandler = handler.getMapStateHandler(); - if (mapStateHandler.canGetNextState()) { - MapLayerState state = (MapLayerState) mapStateHandler.getNextState(); - state.revertState(); - jbUndo.setEnabled(true); - for (Point mapCoord : state.getKeySet()) { - MapData mapData = handler.getMapMatrix().getMap(mapCoord); - mapData.getGrid().updateMapLayerGL(state.getLayerIndex(), handler.useRealTimePostProcessing()); - mapData.updateMapThumbnail(); - } - handler.getMapMatrix().removeUnusedMaps(); + if (!mapStateHandler.canGetNextState()) { + return; + } + MapLayerState state = (MapLayerState) mapStateHandler.getNextState(); + state.revertState(); + jbUndo.setEnabled(true); + for (Point mapCoord : state.getKeySet()) { + MapData mapData = handler.getMapMatrix().getMap(mapCoord); + mapData.getGrid().updateMapLayerGL(state.getLayerIndex(), handler.useRealTimePostProcessing()); + mapData.updateMapThumbnail(); + } + handler.getMapMatrix().removeUnusedMaps(); - //mapDisplay.updateMapLayerGL(state.getLayerIndex()); - mapDisplay.repaint(); - updateMapMatrixDisplay(); - thumbnailLayerSelector.drawLayerThumbnail(state.getLayerIndex()); - thumbnailLayerSelector.repaint(); - if (!mapStateHandler.canGetNextState()) { - jbRedo.setEnabled(false); - } - updateViewMapInfo(); + //mapDisplay.updateMapLayerGL(state.getLayerIndex()); + mapDisplay.repaint(); + updateMapMatrixDisplay(); + thumbnailLayerSelector.drawLayerThumbnail(state.getLayerIndex()); + thumbnailLayerSelector.repaint(); + if (!mapStateHandler.canGetNextState()) { + jbRedo.setEnabled(false); } + updateViewMapInfo(); } public void moveTilesUp() { @@ -1935,7 +1949,7 @@ private void updateRecentMapsMenu() { for (String item : recentMaps) { JMenuItem m = new JMenuItem(); m.setText(recentMaps.get(recentMaps.indexOf(item))); - m.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1 + recentMaps.indexOf(item), InputEvent.CTRL_MASK)); + m.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1 + recentMaps.indexOf(item), InputEvent.CTRL_DOWN_MASK)); m.addActionListener(e -> { if (opened_map) { @@ -1962,12 +1976,11 @@ private void clearRecentMaps() { public void updateMapDisplaySize(){ if(mapDisplay.getViewMode() == ViewMode.VIEW_3D_MODE){ mapDisplay.setPreferredSize(mapDisplayContainer.getSize()); - mapDisplayContainer.revalidate(); }else{ int size = Math.min(mapDisplayContainer.getWidth(), mapDisplayContainer.getHeight()); mapDisplay.setPreferredSize(new Dimension(size, size)); - mapDisplayContainer.revalidate(); } + mapDisplayContainer.revalidate(); } private static void loadRecentMaps() { @@ -2008,14 +2021,6 @@ public void updateViewAllMapData() { thumbnailLayerSelector.repaint(); } - - - - - - - - private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents jmMainMenu = new JMenuBar(); diff --git a/src/main/java/editor/about/AboutDialog.java b/src/main/java/editor/about/AboutDialog.java index dab1451..b9415e0 100644 --- a/src/main/java/editor/about/AboutDialog.java +++ b/src/main/java/editor/about/AboutDialog.java @@ -10,7 +10,7 @@ import java.net.URI; import java.net.URISyntaxException; import javax.swing.*; -import javax.swing.GroupLayout; + import net.miginfocom.swing.*; /** diff --git a/src/main/java/editor/bordermap/BorderMapsDisplay.java b/src/main/java/editor/bordermap/BorderMapsDisplay.java index 28e9dd5..04125e3 100644 --- a/src/main/java/editor/bordermap/BorderMapsDisplay.java +++ b/src/main/java/editor/bordermap/BorderMapsDisplay.java @@ -10,7 +10,6 @@ import java.io.File; import java.io.IOException; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.filechooser.FileNameExtensionFilter; /** @@ -116,7 +115,7 @@ public void paintComponent(Graphics g) { } g.setColor(Color.white); - g.fillRect(1 * mapSize, 1 * mapSize, mapSize, mapSize); + g.fillRect(mapSize, mapSize, mapSize, mapSize); if (handler != null) { for (int i = 0; i < BorderMapsGrid.cols; i++) { diff --git a/src/main/java/editor/bordermap/BorderMapsGrid.java b/src/main/java/editor/bordermap/BorderMapsGrid.java index 462abe5..7a4d2fe 100644 --- a/src/main/java/editor/bordermap/BorderMapsGrid.java +++ b/src/main/java/editor/bordermap/BorderMapsGrid.java @@ -1,6 +1,8 @@ package editor.bordermap; +import java.util.Arrays; + /** * @author Trifindo */ @@ -24,11 +26,9 @@ public BorderMapsGrid() { } public boolean isTileInGrid(int tileIndex) { - for (int i = 0; i < grid.length; i++) { - for (int j = 0; j < grid[i].length; j++) { - if (grid[i][j] == tileIndex) { - return true; - } + for (int[] ints : grid) { + if (Arrays.stream(ints).anyMatch(i -> i == tileIndex)) { + return true; } } return false; @@ -43,5 +43,4 @@ public void decreaseFromIndex(int tileIndex) { } } } - } diff --git a/src/main/java/editor/buildingeditor/BuildHandler.java b/src/main/java/editor/buildingeditor/BuildHandler.java index 26a4897..7ca5193 100644 --- a/src/main/java/editor/buildingeditor/BuildHandler.java +++ b/src/main/java/editor/buildingeditor/BuildHandler.java @@ -12,7 +12,6 @@ public class BuildHandler { private BuildTilesetList bTilesetList; public void BuildEditorHandler() { - } public void loadBuildModelMashup(String path) throws IOException { diff --git a/src/main/java/editor/buildingeditor/BuildModelMatshp.java b/src/main/java/editor/buildingeditor/BuildModelMatshp.java index 3fd3715..3828bd9 100644 --- a/src/main/java/editor/buildingeditor/BuildModelMatshp.java +++ b/src/main/java/editor/buildingeditor/BuildModelMatshp.java @@ -1,9 +1,10 @@ package editor.buildingeditor; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; +import java.util.List; +import java.util.Objects; import utils.BinaryReader; import utils.BinaryWriter; @@ -13,18 +14,17 @@ */ public class BuildModelMatshp { - private ArrayList> materials; + private final List> materials; - public BuildModelMatshp(String path) throws FileNotFoundException, - IOException { + public BuildModelMatshp(String path) throws IOException { BinaryReader br = new BinaryReader(path); int numBuildings = br.readUInt16(); int numMaterials = br.readUInt16(); - ArrayList> newMaterials = new ArrayList<>(numBuildings); - ArrayList offsets = new ArrayList<>(numBuildings); - ArrayList matsPerBuild = new ArrayList<>(numBuildings); + List> newMaterials = new ArrayList<>(numBuildings); + List offsets = new ArrayList<>(numBuildings); + List matsPerBuild = new ArrayList<>(numBuildings); for (int i = 0; i < numBuildings; i++) { int nMatsPerBuild = br.readUInt16(); int offset = br.readUInt16(); @@ -40,7 +40,7 @@ public BuildModelMatshp(String path) throws FileNotFoundException, for (int i = 0; i < numBuildings; i++) { if (offsets.get(i) != null) { int nMats = matsPerBuild.get(i); - ArrayList matInBuild = new ArrayList<>(nMats); + List matInBuild = new ArrayList<>(nMats); for (int j = 0; j < nMats; j++) { matInBuild.add(0); } @@ -56,32 +56,31 @@ public BuildModelMatshp(String path) throws FileNotFoundException, br.close(); materials = newMaterials; - } - public void saveToFile(String path) throws FileNotFoundException, IOException { + public void saveToFile(String path) throws IOException { BinaryWriter bw = new BinaryWriter(path); bw.writeUInt16(materials.size()); bw.writeUInt16(countNumberOfMaterials()); int offset = 0; - for (int i = 0; i < materials.size(); i++) { - if (materials.get(i) != null) { - bw.writeUInt16(materials.get(i).size()); + for (List material : materials) { + if (material != null) { + bw.writeUInt16(material.size()); bw.writeUInt16(offset); - offset += materials.get(i).size(); + offset += material.size(); } else { bw.writeUInt16(0); bw.writeUInt16(65535); } } - for (int i = 0; i < materials.size(); i++) { - if (materials.get(i) != null) { - for (int j = 0; j < materials.get(i).size(); j++) { + for (List material : materials) { + if (material != null) { + for (int j = 0; j < material.size(); j++) { bw.writeUInt16(j); - bw.writeUInt16(materials.get(i).get(j)); + bw.writeUInt16(material.get(j)); } } } @@ -90,26 +89,21 @@ public void saveToFile(String path) throws FileNotFoundException, IOException { } public int countNumberOfMaterials() { - int count = 0; - for (int i = 0; i < materials.size(); i++) { - if (materials.get(i) != null) { - count += materials.get(i).size(); - } - } - return count; + return materials.stream() + .filter(Objects::nonNull) + .mapToInt(List::size) + .sum(); } - public ArrayList> getAllMaterials() { + public List> getAllMaterials() { return materials; } - public ArrayList getMaterials(int buildingID) { + public List getMaterials(int buildingID) { return materials.get(buildingID); } public int getMaterial(int buildingID, int materialIndex) { return materials.get(buildingID).get(materialIndex); } - - } diff --git a/src/main/java/editor/buildingeditor/BuildTilesetList.java b/src/main/java/editor/buildingeditor/BuildTilesetList.java index 7316f5f..e2d50ab 100644 --- a/src/main/java/editor/buildingeditor/BuildTilesetList.java +++ b/src/main/java/editor/buildingeditor/BuildTilesetList.java @@ -1,9 +1,9 @@ package editor.buildingeditor; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; +import java.util.List; import utils.BinaryReader; import utils.BinaryWriter; @@ -13,10 +13,9 @@ */ public class BuildTilesetList { - private ArrayList buildingIDs; + private final List buildingIDs; - public BuildTilesetList(String path) throws FileNotFoundException, - IOException { + public BuildTilesetList(String path) throws IOException { BinaryReader br = new BinaryReader(path); int numberOfBuildings = br.readUInt16(); buildingIDs = new ArrayList<>(numberOfBuildings); @@ -26,20 +25,17 @@ public BuildTilesetList(String path) throws FileNotFoundException, br.close(); } - public void saveToFile(String path) throws FileNotFoundException, IOException { + public void saveToFile(String path) throws IOException { BinaryWriter bw = new BinaryWriter(path); bw.writeUInt16(buildingIDs.size()); - for (int i = 0; i < buildingIDs.size(); i++) { - bw.writeUInt16(buildingIDs.get(i)); + for (Integer buildingID : buildingIDs) { + bw.writeUInt16(buildingID); } bw.close(); - } - public ArrayList getBuildingIDs() { + public List getBuildingIDs() { return buildingIDs; } - - } diff --git a/src/main/java/editor/buildingeditor/BuildingEditorDialog.java b/src/main/java/editor/buildingeditor/BuildingEditorDialog.java index 54f6368..346cc31 100644 --- a/src/main/java/editor/buildingeditor/BuildingEditorDialog.java +++ b/src/main/java/editor/buildingeditor/BuildingEditorDialog.java @@ -9,9 +9,8 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.List; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import javax.swing.event.*; @@ -104,7 +103,6 @@ private void jbRemoveBuildingTblActionPerformed(ActionEvent e) { public void init(MapEditorHandler handler) { this.handler = handler; this.buildHandler = new BuildHandler(); - } public void openMatshpWithDialog() { @@ -199,13 +197,11 @@ public void updateViewBmm() { } public void updateViewBmm(int indexSelected) { - System.out.println("Index selected: " + indexSelected); jlBuildingIDsEnabled = false; - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < buildHandler.getBuildModelMatshp().getAllMaterials().size(); i++) { - String name = "Building " + String.format("%03d", i); - demoList.addElement(name); + demoList.addElement("Building " + String.format("%03d", i)); } jlBuildingIDs.setModel(demoList); jlBuildingIDs.setSelectedIndex(indexSelected); @@ -215,13 +211,12 @@ public void updateViewBmm(int indexSelected) { } public void updateViewMaterialOrder() { - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); int buildingSelected = jlBuildingIDs.getSelectedIndex(); - ArrayList materials = buildHandler.getBuildModelMatshp().getMaterials(buildingSelected); + List materials = buildHandler.getBuildModelMatshp().getMaterials(buildingSelected); if (materials != null) { - for (int i = 0; i < materials.size(); i++) { - String name = "Material " + materials.get(i); - demoList.addElement(name); + for (Integer material : materials) { + demoList.addElement("Material " + material); } } else { demoList.addElement("Undefined"); @@ -238,11 +233,10 @@ public void updateViewBtl() { } public void updateViewBtl(int indexSelected) { - DefaultListModel demoList = new DefaultListModel(); - ArrayList buildingIDs = buildHandler.getBuildTilesetList().getBuildingIDs(); + DefaultListModel demoList = new DefaultListModel<>(); + List buildingIDs = buildHandler.getBuildTilesetList().getBuildingIDs(); for (int i = 0; i < buildHandler.getBuildTilesetList().getBuildingIDs().size(); i++) { - String name = "Building " + String.format("%03d", buildingIDs.get(i)); - demoList.addElement(name); + demoList.addElement("Building " + String.format("%03d", buildingIDs.get(i))); } jlBuildTilesetList.setModel(demoList); jlBuildTilesetList.setSelectedIndex(indexSelected); @@ -255,8 +249,8 @@ public void addBuildingBmmWithDialog() { dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == IntegerRequestDialog.ACEPTED) { - ArrayList newMaterials; + if (dialog.getReturnValue() == IntegerRequestDialog.ACCEPTED) { + List newMaterials; if (dialog.useUndefined()) { newMaterials = null; } else { @@ -269,7 +263,6 @@ public void addBuildingBmmWithDialog() { buildHandler.getBuildModelMatshp().getAllMaterials().add(newMaterials); updateViewBmm(buildHandler.getBuildModelMatshp().getAllMaterials().size() - 1); updateViewMaterialOrder(); - } } @@ -279,7 +272,7 @@ public void addBuildingTblWithDialog() { dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == IntegerRequestDialog.ACEPTED) { + if (dialog.getReturnValue() == IntegerRequestDialog.ACCEPTED) { int buildingID = dialog.getIntegerRequested(); if (!buildHandler.getBuildTilesetList().getBuildingIDs().contains(buildingID)) { @@ -298,7 +291,7 @@ public void replaceBuildingBmmWithDialog() { dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == IntegerRequestDialog.ACEPTED) { + if (dialog.getReturnValue() == IntegerRequestDialog.ACCEPTED) { ArrayList newMaterials; if (dialog.useUndefined()) { newMaterials = null; @@ -312,7 +305,6 @@ public void replaceBuildingBmmWithDialog() { buildHandler.getBuildModelMatshp().getAllMaterials().set(jlBuildingIDs.getSelectedIndex(), newMaterials); updateViewBmm(buildHandler.getBuildModelMatshp().getAllMaterials().size() - 1); updateViewMaterialOrder(); - } } @@ -322,7 +314,7 @@ public void replaceBuildingTblWithDialog() { dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == IntegerRequestDialog.ACEPTED) { + if (dialog.getReturnValue() == IntegerRequestDialog.ACCEPTED) { int buildingID = dialog.getIntegerRequested(); if (!buildHandler.getBuildTilesetList().getBuildingIDs().contains(buildingID)) { diff --git a/src/main/java/editor/buildingeditor/BuildingMaterialRequestDialog.java b/src/main/java/editor/buildingeditor/BuildingMaterialRequestDialog.java index 2849c1a..a7ea0b1 100644 --- a/src/main/java/editor/buildingeditor/BuildingMaterialRequestDialog.java +++ b/src/main/java/editor/buildingeditor/BuildingMaterialRequestDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import net.miginfocom.swing.*; @@ -12,7 +10,7 @@ * @author Trifindo, JackHack96 */ public class BuildingMaterialRequestDialog extends JDialog { - public static final int ACEPTED = 0, CANCELED = 1; + public static final int ACCEPTED = 0, CANCELED = 1; private int returnValue = CANCELED; private int value = 0; private int min = 1; @@ -26,19 +24,19 @@ public BuildingMaterialRequestDialog(Window owner) { private void jbAcceptActionPerformed(ActionEvent e) { if (useUndefined) { - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } else { try { value = Integer.parseInt(jTextField1.getText()); if (value >= min && value <= max) { - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } else { JOptionPane.showMessageDialog(this, "The number must be inside the bounds [" - + String.valueOf(min) + ", " - + String.valueOf(max) + "]", + + min + ", " + + max + "]", "Number is out of bounds", JOptionPane.ERROR_MESSAGE); } diff --git a/src/main/java/editor/buildingeditor/IntegerRequestDialog.java b/src/main/java/editor/buildingeditor/IntegerRequestDialog.java index 65f5205..a66ff7b 100644 --- a/src/main/java/editor/buildingeditor/IntegerRequestDialog.java +++ b/src/main/java/editor/buildingeditor/IntegerRequestDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import net.miginfocom.swing.*; @@ -12,7 +10,7 @@ * @author Trifindo, JackHack96 */ public class IntegerRequestDialog extends JDialog { - public static final int ACEPTED = 0, CANCELED = 1; + public static final int ACCEPTED = 0, CANCELED = 1; private int returnValue = CANCELED; private int value = 0; private int min = 1; @@ -27,13 +25,13 @@ private void jbAcceptActionPerformed(ActionEvent e) { try { value = Integer.parseInt(jTextField1.getText()); if (value >= min && value <= max) { - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } else { JOptionPane.showMessageDialog(this, "The number must be inside the bounds [" - + String.valueOf(min) + ", " - + String.valueOf(max) + "]", + + min + ", " + + max + "]", "Number is out of bounds", JOptionPane.ERROR_MESSAGE); } diff --git a/src/main/java/editor/buildingeditor2/BuildHandlerDPPt.java b/src/main/java/editor/buildingeditor2/BuildHandlerDPPt.java index 65c4bdf..49ba174 100644 --- a/src/main/java/editor/buildingeditor2/BuildHandlerDPPt.java +++ b/src/main/java/editor/buildingeditor2/BuildHandlerDPPt.java @@ -133,7 +133,7 @@ public void addBuilding(String path) throws IOException { try { byte[] data = buildModelList.getModelsData().get(buildModelList.getSize() - 1); - ArrayList materials = BuildHandlerDPPt.getMaterialOrder(data); + List materials = BuildHandlerDPPt.getMaterialOrder(data); buildModelMatshp.addBuildingMaterials(materials); } catch (Exception ex) { buildModelMatshp.addBuildingMaterials(new ArrayList<>()); @@ -284,7 +284,7 @@ public AreaBuildList getAreaBuildList() { return areaBuildList; } - public static ArrayList getMaterialOrder(byte[] nsbmdData) { + public static List getMaterialOrder(byte[] nsbmdData) { NSBMD nsbmd = new NSBMD(nsbmdData); List sbc = nsbmd.getMLD0().getModels().get(0).getSBC(); @@ -306,9 +306,9 @@ public static ArrayList getMaterialOrder(byte[] nsbmdData) { polyLookup[materialIDs.get(i)] = shapeIDs.get(i); } - ArrayList materials = new ArrayList<>(polyLookup.length); - for (int i = 0; i < polyLookup.length; i++) { - materials.add(polyLookup[i]); + List materials = new ArrayList<>(polyLookup.length); + for (int j : polyLookup) { + materials.add(j); } if (Utils.hasDuplicates(materials)) { @@ -317,5 +317,4 @@ public static ArrayList getMaterialOrder(byte[] nsbmdData) { return materials; } - } diff --git a/src/main/java/editor/buildingeditor2/BuildHandlerHGSS.java b/src/main/java/editor/buildingeditor2/BuildHandlerHGSS.java index e0da183..5c6d53b 100644 --- a/src/main/java/editor/buildingeditor2/BuildHandlerHGSS.java +++ b/src/main/java/editor/buildingeditor2/BuildHandlerHGSS.java @@ -18,7 +18,9 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import nitroreader.nsbmd.NSBMD; import nitroreader.nsbmd.sbccommands.MAT; @@ -38,16 +40,15 @@ public class BuildHandlerHGSS { private int buildBlockIndexSelected = 0; private final int numBuildBlocks = 2; - private BuildModelList[] buildModelList = new BuildModelList[numBuildBlocks]; //2 - private BuildModelMatshp[] buildModelMatshp = new BuildModelMatshp[numBuildBlocks]; //2 - private BuildAnimeListHGSS[] buildModelAnimeList = new BuildAnimeListHGSS[numBuildBlocks]; //2 + private final BuildModelList[] buildModelList = new BuildModelList[numBuildBlocks]; //2 + private final BuildModelMatshp[] buildModelMatshp = new BuildModelMatshp[numBuildBlocks]; //2 + private final BuildAnimeListHGSS[] buildModelAnimeList = new BuildAnimeListHGSS[numBuildBlocks]; //2 private BuildAnimations buildModelAnims; private AreaDataListHGSS areaDataList; private BuildTilesetList buildTilesetList; private AreaBuildList areaBuildList; private MapAnimations mapAnimations; - public BuildHandlerHGSS(String gameFolderPath) { this.gameFolderPath = gameFolderPath; this.gameFileSystem = new GameFileSystemHGSS(); @@ -111,8 +112,6 @@ public void loadAllFiles() throws Exception { Narc mapAnimsNarc = NarcIO.loadNarc(getGameFilePath(gameFileSystem.getMapAnimationsPath())); mapAnimations = new MapAnimations(mapAnimsNarc); - - } catch (Exception ex) { buildModelList[0] = null; buildModelList[1] = null; @@ -161,7 +160,7 @@ public void addBuilding(String path) throws IOException { try { byte[] data = getBuildModelList().getModelsData().get(getBuildModelList().getSize() - 1); - ArrayList materials = BuildHandlerHGSS.getMaterialOrder(data); + List materials = BuildHandlerHGSS.getMaterialOrder(data); getBuildModelMatshp().addBuildingMaterials(materials); } catch (Exception ex) { getBuildModelMatshp().addBuildingMaterials(new ArrayList<>()); @@ -324,7 +323,7 @@ public AreaBuildList getAreaBuildList() { return areaBuildList; } - public static ArrayList getMaterialOrder(byte[] nsbmdData) { + public static List getMaterialOrder(byte[] nsbmdData) { NSBMD nsbmd = new NSBMD(nsbmdData); List sbc = nsbmd.getMLD0().getModels().get(0).getSBC(); @@ -346,10 +345,8 @@ public static ArrayList getMaterialOrder(byte[] nsbmdData) { polyLookup[materialIDs.get(i)] = shapeIDs.get(i); } - ArrayList materials = new ArrayList<>(polyLookup.length); - for (int i = 0; i < polyLookup.length; i++) { - materials.add(polyLookup[i]); - } + List materials = Arrays.stream(polyLookup).boxed() + .collect(Collectors.toCollection(() -> new ArrayList<>(polyLookup.length))); if (Utils.hasDuplicates(materials)) { return new ArrayList<>(); @@ -365,6 +362,4 @@ public void setBuildBlockIndexSelected(int buildBlockIndexSelected) { public MapAnimations getMapAnimations() { return mapAnimations; } - - } diff --git a/src/main/java/editor/buildingeditor2/BuildingEditorChooser.java b/src/main/java/editor/buildingeditor2/BuildingEditorChooser.java index e00ad44..e7c31bd 100644 --- a/src/main/java/editor/buildingeditor2/BuildingEditorChooser.java +++ b/src/main/java/editor/buildingeditor2/BuildingEditorChooser.java @@ -69,5 +69,4 @@ private static boolean isBWFolder(String folderPath) { File folder = new File(folderPath + File.separator + "data" + File.separator + "dl_rom"); return folder.exists(); } - } diff --git a/src/main/java/editor/buildingeditor2/BuildingEditorDialogDPPt.java b/src/main/java/editor/buildingeditor2/BuildingEditorDialogDPPt.java index a3cab37..12086af 100644 --- a/src/main/java/editor/buildingeditor2/BuildingEditorDialogDPPt.java +++ b/src/main/java/editor/buildingeditor2/BuildingEditorDialogDPPt.java @@ -3,10 +3,10 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; +import editor.mapmatrix.MapMatrix; import formats.nsbtx2.*; import net.miginfocom.swing.*; import editor.buildingeditor2.animations.AddBuildAnimationDialog; @@ -18,38 +18,23 @@ import editor.buildingeditor2.buildfile.Build; import editor.buildingeditor2.buildfile.BuildFile; import editor.handler.MapEditorHandler; -import formats.nsbtx2.Nsbtx2; -import formats.nsbtx2.NsbtxLoader2; -import formats.nsbtx2.NsbtxPalette; -import formats.nsbtx2.NsbtxTexture; -import formats.nsbtx2.NsbtxWriter; - -import java.awt.Color; import utils.Utils.MutableBoolean; -import java.awt.Component; import java.awt.image.BufferedImage; import java.io.File; -import java.io.FilenameFilter; import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; -import javax.swing.DefaultListCellRenderer; -import javax.swing.DefaultListModel; -import javax.swing.ImageIcon; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JOptionPane; +import java.util.stream.Collectors; import javax.swing.filechooser.FileNameExtensionFilter; -import nitroreader.nsbca.NSBCA; import nitroreader.nsbca.NSBCAreader; import nitroreader.nsbta.NSBTA; import nitroreader.nsbta.NSBTAreader; @@ -71,26 +56,26 @@ public class BuildingEditorDialogDPPt extends JDialog { private ImageIcon nsbmdIcon; private ImageIcon nsbtxIcon; private ImageIcon areaDataIcon; - private ArrayList animIcons; - private ArrayList selectedAnimIconIndices; - private ArrayList animIconIndices; - - private MutableBoolean jlBuildModelEnabled = new MutableBoolean(true); - private MutableBoolean jlMaterialOrderEnabled = new MutableBoolean(true); - private MutableBoolean jlBuildAnimeListEnabled = new MutableBoolean(true); - private MutableBoolean jlAreaDataListEnabled = new MutableBoolean(true); - private MutableBoolean jlBuildTsetListEnabled = new MutableBoolean(true); - private MutableBoolean jlAreaBuildListEnabled = new MutableBoolean(true); - private MutableBoolean jlAnimationsListEnabled = new MutableBoolean(true); - private MutableBoolean jlBuildFileEnabled = new MutableBoolean(true); - - private MutableBoolean jcbAnimationTypeEnabled = new MutableBoolean(true); - - private MutableBoolean jtfBuildTsetEnabled = new MutableBoolean(true); - private MutableBoolean jtfMapTsetEnabled = new MutableBoolean(true); - private MutableBoolean jtfUnknown1Enabled = new MutableBoolean(true); - private MutableBoolean jcbAreaTypeEnabled = new MutableBoolean(true); - private MutableBoolean buildPropertiesEnabled = new MutableBoolean(true); + private List animIcons; + private List selectedAnimIconIndices; + private List animIconIndices; + + private final MutableBoolean jlBuildModelEnabled = new MutableBoolean(true); + private final MutableBoolean jlMaterialOrderEnabled = new MutableBoolean(true); + private final MutableBoolean jlBuildAnimeListEnabled = new MutableBoolean(true); + private final MutableBoolean jlAreaDataListEnabled = new MutableBoolean(true); + private final MutableBoolean jlBuildTsetListEnabled = new MutableBoolean(true); + private final MutableBoolean jlAreaBuildListEnabled = new MutableBoolean(true); + private final MutableBoolean jlAnimationsListEnabled = new MutableBoolean(true); + private final MutableBoolean jlBuildFileEnabled = new MutableBoolean(true); + + private final MutableBoolean jcbAnimationTypeEnabled = new MutableBoolean(true); + + private final MutableBoolean jtfBuildTsetEnabled = new MutableBoolean(true); + private final MutableBoolean jtfMapTsetEnabled = new MutableBoolean(true); + private final MutableBoolean jtfUnknown1Enabled = new MutableBoolean(true); + private final MutableBoolean jcbAreaTypeEnabled = new MutableBoolean(true); + private final MutableBoolean buildPropertiesEnabled = new MutableBoolean(true); private static final Color redColor = new Color(255, 200, 200); private static final Color greenColor = new Color(200, 255, 200); @@ -99,21 +84,21 @@ public class BuildingEditorDialogDPPt extends JDialog { public BuildingEditorDialogDPPt(Window owner) { super(owner); initComponents(); - jTabbedPane1.setIconAt(0, new ImageIcon(getClass().getResource("/icons/BuildingIcon.png"))); - jTabbedPane1.setIconAt(1, new ImageIcon(getClass().getResource("/icons/AreaDataIcon.png"))); - jTabbedPane1.setIconAt(2, new ImageIcon(getClass().getResource("/icons/NsbtxIcon.png"))); - jTabbedPane1.setIconAt(3, new ImageIcon(getClass().getResource("/icons/AnimationIcon.png"))); - jTabbedPane1.setIconAt(4, new ImageIcon(getClass().getResource("/icons/mapIcon.png"))); + jTabbedPane1.setIconAt(0, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/BuildingIcon.png")))); + jTabbedPane1.setIconAt(1, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/AreaDataIcon.png")))); + jTabbedPane1.setIconAt(2, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtxIcon.png")))); + jTabbedPane1.setIconAt(3, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/AnimationIcon.png")))); + jTabbedPane1.setIconAt(4, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/mapIcon.png")))); - nsbmdIcon = new ImageIcon(getClass().getResource("/icons/NsbmdIcon.png")); - nsbtxIcon = new ImageIcon(getClass().getResource("/icons/NsbtxIcon.png")); - areaDataIcon = new ImageIcon(getClass().getResource("/icons/AreaDataIcon.png")); + nsbmdIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbmdIcon.png"))); + nsbtxIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtxIcon.png"))); + areaDataIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/AreaDataIcon.png"))); animIcons = new ArrayList<>(4); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbcaIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbtaIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbtpIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbmaIcon.png"))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbcaIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtaIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtpIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbmaIcon.png")))); selectedAnimIconIndices = new ArrayList<>(); animIconIndices = new ArrayList<>(); @@ -289,21 +274,21 @@ private void jbExportBuildingActionPerformed(ActionEvent evt) { private void jbRemoveBuildingActionPerformed(ActionEvent evt) { if (buildHandler.getBuildModelList() != null) { - ArrayList occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); + List occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); if (!occurrences.isEmpty()) { - String occurenceIDs = ""; + String occurrenceIDs = ""; for (int i = 0; i < occurrences.size() - 1; i++) { - occurenceIDs += String.valueOf(occurrences.get(i)) + ", "; + occurrenceIDs += occurrences.get(i) + ", "; } - occurenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); + occurrenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); int returnVal2 = JOptionPane.showConfirmDialog(this.getContentPane(), - "This building is being used in the following tilesets: \n" + occurenceIDs + "\n" + "This building is being used in the following tilesets: \n" + occurrenceIDs + "\n" + "Do you want to remove it and its occurences? \n" + "(Removing buildings is NOT RECOMMENDED because the building IDs will be shifted)", "Confirm remove building and occurrences", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if (returnVal2 == JOptionPane.YES_OPTION) { - buildHandler.getAreaBuildList().removeBuildingOccurences(jlBuildModel.getSelectedIndex()); + buildHandler.getAreaBuildList().removeBuildingOccurrences(jlBuildModel.getSelectedIndex()); buildHandler.removeBuilding(jlBuildModel.getSelectedIndex()); updateViewBuildModelList(jlBuildModel.getSelectedIndex()); @@ -359,7 +344,7 @@ private void jbAddAnimToBuildActionPerformed(ActionEvent evt) { if (buildHandler.getBuildModelList() != null && buildHandler.getBuildModelAnimeList() != null && buildHandler.getBuildModelAnims() != null) { - ArrayList animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()); + List animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()); if (animations.isEmpty() || animations.size() < BuildAnimeListDPPt.MAX_ANIMS_PER_BUILDING) { final AddBuildAnimationDialog dialog = new AddBuildAnimationDialog(handler.getMainFrame()); dialog.init(buildHandler.getBuildModelList().getModelsData().get(jlBuildModel.getSelectedIndex()), @@ -367,13 +352,13 @@ private void jbAddAnimToBuildActionPerformed(ActionEvent evt) { buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex())); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildAnimationDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildAnimationDialog.ACCEPTED) { buildHandler.addBuildingAnimation(jlBuildModel.getSelectedIndex(), dialog.getIndexSelected()); updateViewSelectedBuildAnimationsList(jlSelectedAnimationsList.getSelectedIndex() + 1); } } else { JOptionPane.showMessageDialog(this, "Buildings can't have more than " - + String.valueOf(BuildAnimeListDPPt.MAX_ANIMS_PER_BUILDING) + " animations.", + + BuildAnimeListDPPt.MAX_ANIMS_PER_BUILDING + " animations.", "Can't add animation", JOptionPane.ERROR_MESSAGE); } } @@ -390,7 +375,7 @@ private void jbReplaceAnimToBuildActionPerformed(ActionEvent evt) { buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex())); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildAnimationDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildAnimationDialog.ACCEPTED) { buildHandler.replaceBuildingAnimation(jlBuildModel.getSelectedIndex(), dialog.getIndexSelected(), jlSelectedAnimationsList.getSelectedIndex()); updateViewSelectedBuildAnimationsList(jlSelectedAnimationsList.getSelectedIndex()); } @@ -413,7 +398,7 @@ private void jbAddBuildToTsetActionPerformed(ActionEvent evt) { dialog.init(buildHandler.getBuildModelList(), buildHandler.getAreaBuildList().getAreaBuilds().get(jlBuildTsetList.getSelectedIndex()).getBuildingIDs()); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { buildHandler.addBuildToAreaBuild(jlBuildTsetList.getSelectedIndex(), dialog.getIndexSelected()); updateViewAreaBuildList(jlAreaBuildList.getModel().getSize()); } @@ -426,7 +411,7 @@ private void jbReplaceBuildToTsetActionPerformed(ActionEvent evt) { dialog.init(buildHandler.getBuildModelList(), buildHandler.getAreaBuildList().getAreaBuilds().get(jlBuildTsetList.getSelectedIndex()).getBuildingIDs()); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { buildHandler.replaceBuildToAreaBuild(jlBuildTsetList.getSelectedIndex(), dialog.getIndexSelected(), jlAreaBuildList.getSelectedIndex()); updateViewAreaBuildList(jlAreaBuildList.getSelectedIndex()); } @@ -441,88 +426,94 @@ private void jbRemoveBuildToTsetActionPerformed(ActionEvent evt) { } private void jbAddAnimActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelAnims() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Add a new Animation"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelAnims() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Add a new Animation"); - buildHandler.addAnimationFile(fc.getSelectedFile().getPath()); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - updateViewAnimationsList(jlAnimationsList.getModel().getSize()); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", - "Error opening animation file", JOptionPane.ERROR_MESSAGE); - } - } + buildHandler.addAnimationFile(fc.getSelectedFile().getPath()); + + updateViewAnimationsList(jlAnimationsList.getModel().getSize()); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", + "Error opening animation file", JOptionPane.ERROR_MESSAGE); } } private void jbReplaceAnimActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelAnims() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Select the new Animation"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelAnims() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Select the new Animation"); - buildHandler.replaceAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - updateViewAnimationsList(jlAnimationsList.getSelectedIndex()); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", - "Error opening animation file", JOptionPane.ERROR_MESSAGE); - } - } + buildHandler.replaceAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); + + updateViewAnimationsList(jlAnimationsList.getSelectedIndex()); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", + "Error opening animation file", JOptionPane.ERROR_MESSAGE); } } private void jbExportAnimationActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelAnims() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - String type = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getExtensionName(); + if (buildHandler.getBuildModelAnims() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + String type = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getExtensionName(); - fc.setFileFilter(new FileNameExtensionFilter(type.toUpperCase() + " (*." + type + ")", type)); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save the Animation"); - try {//TODO: Replace this with some index bounds cheking? - String fileName = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getName(); - fc.setSelectedFile(new File(fileName + "." + type)); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + fc.setFileFilter(new FileNameExtensionFilter(type.toUpperCase() + " (*." + type + ")", type)); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save the Animation"); + try {//TODO: Replace this with some index bounds cheking? + String fileName = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getName(); + fc.setSelectedFile(new File(fileName + "." + type)); + } catch (Exception ex) { + ex.printStackTrace(); + } - if (!fc.getSelectedFile().getPath().isEmpty()) { - buildHandler.saveAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the Animation file", - "Error writing Animation file", JOptionPane.ERROR_MESSAGE); - } + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + + if (!fc.getSelectedFile().getPath().isEmpty()) { + buildHandler.saveAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the Animation file", + "Error writing Animation file", JOptionPane.ERROR_MESSAGE); } } @@ -531,42 +522,43 @@ private void jbRemoveAnimActionPerformed(ActionEvent evt) { } private void jbSaveAllActionPerformed(ActionEvent evt) { - if (buildHandler.areAllFilesLoaded()) { - try { - buildHandler.saveAllFiles(); + if (!buildHandler.areAllFilesLoaded()) { + return; + } + try { + buildHandler.saveAllFiles(); - JOptionPane.showMessageDialog(this, - "All files were succesfully saved.\n" - + "Open the ROM with SDSME or similar and save it to apply the changes.", - "Files succesfully saved", JOptionPane.INFORMATION_MESSAGE); - } catch (Exception ex) { - JOptionPane.showMessageDialog(this, - "There was a problem saving the files.", - "Problem saving files", JOptionPane.ERROR_MESSAGE); - Logger.getLogger(BuildingEditorDialogDPPt.class.getName()).log(Level.SEVERE, null, ex); + JOptionPane.showMessageDialog(this, + "All files were succesfully saved.\n" + + "Open the ROM with SDSME or similar and save it to apply the changes.", + "Files succesfully saved", JOptionPane.INFORMATION_MESSAGE); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, + "There was a problem saving the files.", + "Problem saving files", JOptionPane.ERROR_MESSAGE); + Logger.getLogger(BuildingEditorDialogDPPt.class.getName()).log(Level.SEVERE, null, ex); - } } } private void jbFindBuildingActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - ArrayList occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); - if (!occurrences.isEmpty()) { - String occurenceIDs = ""; - for (int i = 0; i < occurrences.size() - 1; i++) { - occurenceIDs += String.valueOf(occurrences.get(i)) + ", "; - } - occurenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); - - JOptionPane.showMessageDialog(this, - "This building is being used in the following building tilesets: \n" + occurenceIDs, - String.valueOf(occurrences.size()) + " occurrences found", JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(this, - "This building is not included in any building tileset.", - "No occurrences found", JOptionPane.INFORMATION_MESSAGE); + if (buildHandler.getBuildModelList() == null) { + return; + } + List occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); + if (!occurrences.isEmpty()) { + String occurrenceIDs = ""; + for (int i = 0; i < occurrences.size() - 1; i++) { + occurrenceIDs += occurrences.get(i) + ", "; } + occurrenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); + + JOptionPane.showMessageDialog(this, + "This building is being used in the following building tilesets: \n" + occurrenceIDs, occurrences.size() + " occurrences found", JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(this, + "This building is not included in any building tileset.", + "No occurrences found", JOptionPane.INFORMATION_MESSAGE); } } @@ -650,18 +642,16 @@ private void jbApplyUnknown1ActionPerformed(ActionEvent evt) { } private void jcbAreaTypeActionPerformed(ActionEvent evt) { - if (buildHandler.getAreaDataList() != null) { - if (jcbAreaTypeEnabled.value) { - AreaDataDPPt areaData = buildHandler.getAreaDataList().getAreaDatas().get(jlAreaDataList.getSelectedIndex()); - areaData.setAreaType(jcbAreaType.getSelectedIndex()); - } + if (buildHandler.getAreaDataList() != null && jcbAreaTypeEnabled.value) { + AreaDataDPPt areaData = buildHandler.getAreaDataList().getAreaDatas().get(jlAreaDataList.getSelectedIndex()); + areaData.setAreaType(jcbAreaType.getSelectedIndex()); } } private void jbPlayActionPerformed(ActionEvent evt) { if (buildHandler.getBuildModelAnimeList() != null) { try { - ArrayList animIDs = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()); + List animIDs = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()); ModelAnimation anim = buildHandler.getBuildModelAnims().getAnimations().get(animIDs.get(jlSelectedAnimationsList.getSelectedIndex())); loadAnimationInNitroDisplay(nitroDisplayGL, 0, anim); @@ -689,7 +679,6 @@ private void jbPlayActionPerformed(ActionEvent evt) { //ex.printStackTrace(); } } - } private void jbImportMaterialsFromNsbmdActionPerformed(ActionEvent evt) { @@ -698,7 +687,7 @@ private void jbImportMaterialsFromNsbmdActionPerformed(ActionEvent evt) { int buildIndex = jlBuildModel.getSelectedIndex(); byte[] data = buildHandler.getBuildModelList().getModelsData().get(buildIndex); - ArrayList materials = BuildHandlerDPPt.getMaterialOrder(data); + List materials = BuildHandlerDPPt.getMaterialOrder(data); buildHandler.getBuildModelMatshp().setMaterials(buildIndex, materials); updateViewMaterialOrderList(jlMaterialOrder.getSelectedIndex()); @@ -787,14 +776,14 @@ private void jbAddTexToNsbtxActionPerformed(ActionEvent evt) { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully imported.\n" + "(Some textures or palettes were already in the tileset)\n" - + "- " + String.valueOf(addedTextures) + " textures added\n" - + "- " + String.valueOf(addedPalettes) + " palettes added", + + "- " + addedTextures + " textures added\n" + + "- " + addedPalettes + " palettes added", "Data imported", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully imported.\n" - + "- " + String.valueOf(addedTextures) + " textures added\n" - + "- " + String.valueOf(addedPalettes) + " palettes added", + + "- " + addedTextures + " textures added\n" + + "- " + addedPalettes + " palettes added", "Data imported", JOptionPane.INFORMATION_MESSAGE); } } else { @@ -814,103 +803,104 @@ private void jbAddTexToNsbtxActionPerformed(ActionEvent evt) { + "Make sure that you have the converter program in the converter folder.", "Can't import textures and palettes", JOptionPane.ERROR_MESSAGE); } - } private void jbAddTsetActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildTilesetList() != null && buildHandler.getAreaBuildList() != null) { + if (buildHandler.getBuildTilesetList() == null || buildHandler.getAreaBuildList() == null) { + return; + } - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Add a new Building NSBTX"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Add a new Building NSBTX"); + + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); + byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); - buildHandler.addBuildingTileset(data); + buildHandler.addBuildingTileset(data); - updateViewBuildTsetList(buildHandler.getBuildTilesetList().getTilesets().size() - 1); - updateViewAreaBuildList(buildHandler.getAreaBuildList().getAreaBuilds().size() - 1); + updateViewBuildTsetList(buildHandler.getBuildTilesetList().getTilesets().size() - 1); + updateViewAreaBuildList(buildHandler.getAreaBuildList().getAreaBuilds().size() - 1); - } catch (Exception ex) { - ex.printStackTrace(); - JOptionPane.showMessageDialog(this, - "There was a problem adding the NSBTX", - "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); - } - } + } catch (Exception ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(this, + "There was a problem adding the NSBTX", + "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); } } private void jbReplaceTsetActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildTilesetList() != null && buildHandler.getAreaBuildList() != null) { - - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Replace the Building NSBTX"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - - byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); + if (buildHandler.getBuildTilesetList() == null || buildHandler.getAreaBuildList() == null) { + return; + } - buildHandler.replaceBuildingTileset(jlBuildTsetList.getSelectedIndex(), data); + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Replace the Building NSBTX"); - updateViewBuildTsetList(jlBuildTsetList.getSelectedIndex()); - } catch (Exception ex) { - ex.printStackTrace(); - JOptionPane.showMessageDialog(this, - "There was a problem adding the NSBTX", - "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); - } - } + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; } + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); + buildHandler.replaceBuildingTileset(jlBuildTsetList.getSelectedIndex(), data); + + updateViewBuildTsetList(jlBuildTsetList.getSelectedIndex()); + } catch (Exception ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(this, + "There was a problem adding the NSBTX", + "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); + } } private void jbExportTilesetActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save Building's NSBTX"); - try {//TODO: Replace this with some index bounds cheking? - String fileName = "Building Tileset " + String.valueOf(jlBuildTsetList.getSelectedIndex()); - fc.setSelectedFile(new File(fileName + ".nsbtx")); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelList() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save Building's NSBTX"); + try {//TODO: Replace this with some index bounds cheking? + String fileName = "Building Tileset " + jlBuildTsetList.getSelectedIndex(); + fc.setSelectedFile(new File(fileName + ".nsbtx")); + } catch (Exception ex) { + ex.printStackTrace(); + } + if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - if (!fc.getSelectedFile().getPath().isEmpty()) { - buildHandler.saveBuildingTileset(jlBuildTsetList.getSelectedIndex(), fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the NSBTX file", - "Error writing NSBTX file", JOptionPane.ERROR_MESSAGE); + if (!fc.getSelectedFile().getPath().isEmpty()) { + buildHandler.saveBuildingTileset(jlBuildTsetList.getSelectedIndex(), fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the NSBTX file", + "Error writing NSBTX file", JOptionPane.ERROR_MESSAGE); } } } @@ -958,8 +948,8 @@ private void jbRemoveTexturesActionPerformed(ActionEvent evt) { if (removedTexs > 0 || removedPals > 0) { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully removed.\n" - + "- " + String.valueOf(removedTexs) + " textures removed\n" - + "- " + String.valueOf(removedPals) + " palettes removed", + + "- " + removedTexs + " textures removed\n" + + "- " + removedPals + " palettes removed", "Data removed", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, @@ -986,7 +976,6 @@ private void jbRemoveTexturesActionPerformed(ActionEvent evt) { "There was a problem removing the textures and palettes.", "Can't remove textures and palettes", JOptionPane.ERROR_MESSAGE); } - } private void jbAddEmptyTilesetActionPerformed(ActionEvent evt) { @@ -1027,8 +1016,8 @@ private void jbImportBldActionPerformed(ActionEvent evt) { fc.setFileFilter(new FileNameExtensionFilter("BLD (*.bld)", "bld")); fc.setApproveButtonText("Open"); fc.setDialogTitle("Import Buildings File"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { + + if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { try { handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); @@ -1047,66 +1036,66 @@ private void jbImportBldActionPerformed(ActionEvent evt) { } private void jbExportBldActionPerformed(ActionEvent evt) { - if (handler.getBuildings() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastMapDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("BLD (*.bld)", "bld")); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save Building File"); - try {//TODO: Replace this with some index bounds cheking? - File file = new File(handler.getMapMatrix().filePath); - String fileName = Utils.removeExtensionFromPath(file.getName()) + "." + BuildFile.fileExtension; - fc.setSelectedFile(new File(fileName)); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); + if (handler.getBuildings() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastMapDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("BLD (*.bld)", "bld")); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save Building File"); + try {//TODO: Replace this with some index bounds cheking? + File file = new File(handler.getMapMatrix().filePath); + String fileName = Utils.removeExtensionFromPath(file.getName()) + "." + BuildFile.fileExtension; + fc.setSelectedFile(new File(fileName)); + } catch (Exception ex) { + ex.printStackTrace(); + } - if (!fc.getSelectedFile().getPath().isEmpty()) { - handler.getBuildings().saveToFile(fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the BLD file", - "Error writing BLD file", JOptionPane.ERROR_MESSAGE); + if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); + + if (!fc.getSelectedFile().getPath().isEmpty()) { + handler.getBuildings().saveToFile(fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the BLD file", + "Error writing BLD file", JOptionPane.ERROR_MESSAGE); } } } private void jbAddBuildBldActionPerformed(ActionEvent evt) { - if (handler.getBuildings() != null) { - final AddBuildModelDialog dialog = new AddBuildModelDialog(handler.getMainFrame()); - dialog.init(buildHandler.getBuildModelList(), null); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { - Build build = new Build(); - build.setModelID(dialog.getIndexSelected()); - handler.getBuildings().getBuilds().add(build); + if (handler.getBuildings() == null) { + return; + } + final AddBuildModelDialog dialog = new AddBuildModelDialog(handler.getMainFrame()); + dialog.init(buildHandler.getBuildModelList(), null); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { + Build build = new Build(); + build.setModelID(dialog.getIndexSelected()); + handler.getBuildings().getBuilds().add(build); - updateViewBuildFileList(handler.getBuildings().getBuilds().size() - 1); - updateViewNitroDisplayMap(); - } + updateViewBuildFileList(handler.getBuildings().getBuilds().size() - 1); + updateViewNitroDisplayMap(); } } private void jbRemoveBldActionPerformed(ActionEvent evt) { - if (handler.getBuildings() != null) { - if (handler.getBuildings().getBuilds().size() > 0) { - int index = jlBuildFile.getSelectedIndex(); - handler.getBuildings().getBuilds().remove(index); + if (handler.getBuildings() != null && handler.getBuildings().getBuilds().size() > 0) { + int index = jlBuildFile.getSelectedIndex(); + handler.getBuildings().getBuilds().remove(index); - updateViewBuildFileList(index); - updateViewNitroDisplayMap(); - } + updateViewBuildFileList(index); + updateViewNitroDisplayMap(); } } @@ -1217,7 +1206,7 @@ private void jbChooseModelBldActionPerformed(ActionEvent evt) { dialog.init(buildHandler.getBuildModelList(), null); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { Build build = handler.getBuildings().getBuilds().get(jlBuildFile.getSelectedIndex()); build.setModelID(dialog.getIndexSelected()); @@ -1235,8 +1224,8 @@ private void jbOpenMapActionPerformed(ActionEvent evt) { fc.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); fc.setApproveButtonText("Open"); fc.setDialogTitle("Open Map's NSBMD"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { + + if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { try { handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); @@ -1250,7 +1239,6 @@ private void jbOpenMapActionPerformed(ActionEvent evt) { "Can't import map", JOptionPane.ERROR_MESSAGE); } } - } private void jbCancelActionPerformed(ActionEvent evt) { @@ -1324,8 +1312,8 @@ private void jbRemoveAllUnusedTexPalsActionPerformed(ActionEvent evt) { if (removedTexs > 0 || removedPals > 0) { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully removed.\n" - + "- " + String.valueOf(removedTexs) + " textures removed\n" - + "- " + String.valueOf(removedPals) + " palettes removed", + + "- " + removedTexs + " textures removed\n" + + "- " + removedPals + " palettes removed", "Data removed", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, @@ -1384,28 +1372,28 @@ private void updateViewBuildModelList(int indexSelected) { } private void updateViewBuildFileList(int indexSelected) { - if (handler.getBuildings() != null) { - jlBuildFileEnabled.value = false; + if (handler.getBuildings() == null) { + return; + } + jlBuildFileEnabled.value = false; - List builds = handler.getBuildings().getBuilds(); + List builds = handler.getBuildings().getBuilds(); - DefaultListModel listModel = new DefaultListModel(); - for (int i = 0; i < builds.size(); i++) { - Build build = builds.get(i); - int buildID = build.getModeID(); - if (buildID >= 0 && buildID < buildHandler.getBuildModelList().getSize()) { - listModel.addElement(String.valueOf(buildID) + ": " + buildHandler.getBuildModelList().getModelsName().get(buildID)); - } else { - listModel.addElement(String.valueOf(buildID) + ": " + "NOT FOUND"); - } + DefaultListModel listModel = new DefaultListModel<>(); + for (Build build : builds) { + int buildID = build.getModeID(); + if (buildID >= 0 && buildID < buildHandler.getBuildModelList().getSize()) { + listModel.addElement(buildID + ": " + buildHandler.getBuildModelList().getModelsName().get(buildID)); + } else { + listModel.addElement(buildID + ": " + "NOT FOUND"); } - jlBuildFile.setModel(listModel); - jlBuildFileEnabled.value = true; - - indexSelected = Math.max(Math.min(jlBuildFile.getModel().getSize() - 1, indexSelected), 0); - jlBuildFile.setSelectedIndex(indexSelected); - jlBuildFile.ensureIndexIsVisible(indexSelected); } + jlBuildFile.setModel(listModel); + jlBuildFileEnabled.value = true; + + indexSelected = Math.max(Math.min(jlBuildFile.getModel().getSize() - 1, indexSelected), 0); + jlBuildFile.setSelectedIndex(indexSelected); + jlBuildFile.ensureIndexIsVisible(indexSelected); } private void updateViewBuildProperties() { @@ -1427,13 +1415,10 @@ private void updateViewBuildProperties() { private void updateViewMaterialOrderList(int indexSelected) { if (buildHandler.getBuildModelMatshp() != null) { - ArrayList materials = buildHandler.getBuildModelMatshp().getAllMaterials().get(jlBuildModel.getSelectedIndex()); - ArrayList names; + List materials = buildHandler.getBuildModelMatshp().getAllMaterials().get(jlBuildModel.getSelectedIndex()); + List names; if (!materials.isEmpty()) { - names = new ArrayList<>(materials.size()); - for (Integer material : materials) { - names.add("Material " + String.valueOf(material)); - } + names = materials.stream().map(m -> "Material " + m).collect(Collectors.toList()); } else { names = new ArrayList<>(); names.add("Undefined (Animation)"); @@ -1443,30 +1428,31 @@ private void updateViewMaterialOrderList(int indexSelected) { } private void updateViewSelectedBuildAnimationsList(int indexSelected) { - if (buildHandler.getBuildModelAnimeList() != null && buildHandler.getBuildModelAnims() != null) { - jcbAnimationTypeEnabled.value = false; - ArrayList names = new ArrayList<>(); - //System.out.println("Build model index: " + jlBuildModel.getSelectedIndex()); - ArrayList animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()); - if (!animations.isEmpty()) { - selectedAnimIconIndices = new ArrayList<>(animations.size()); - for (Integer animID : animations) { - names.add(String.valueOf(animID) + ": " - + buildHandler.getBuildModelAnims().getAnimations().get(animID).getName() + " [" - + buildHandler.getBuildModelAnims().getAnimationTypeName(animID) + "]"); - selectedAnimIconIndices.add(buildHandler.getBuildModelAnims().getAnimationType(animID)); - } + if (buildHandler.getBuildModelAnimeList() == null || buildHandler.getBuildModelAnims() == null) { + return; + } + jcbAnimationTypeEnabled.value = false; + List names = new ArrayList<>(); + //System.out.println("Build model index: " + jlBuildModel.getSelectedIndex()); + List animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()); + if (!animations.isEmpty()) { + selectedAnimIconIndices = new ArrayList<>(animations.size()); + for (Integer animID : animations) { + names.add(animID + ": " + + buildHandler.getBuildModelAnims().getAnimations().get(animID).getName() + " [" + + buildHandler.getBuildModelAnims().getAnimationTypeName(animID) + "]"); + selectedAnimIconIndices.add(buildHandler.getBuildModelAnims().getAnimationType(animID)); } - addElementsToList(jlSelectedAnimationsList, names, indexSelected); + } + addElementsToList(jlSelectedAnimationsList, names, indexSelected); - int animType = buildHandler.getBuildModelAnimeList().getSecondBytes().get(jlBuildModel.getSelectedIndex()); + int animType = buildHandler.getBuildModelAnimeList().getSecondBytes().get(jlBuildModel.getSelectedIndex()); - jcbAnimationType.setSelectedIndex(animType + 1); - jcbAnimationTypeEnabled.value = true; + jcbAnimationType.setSelectedIndex(animType + 1); + jcbAnimationTypeEnabled.value = true; - boolean slopeAnim = buildHandler.getBuildModelAnimeList().getSlopeAnimations().get(jlBuildModel.getSelectedIndex()).booleanValue(); - jcbSlope.setSelected(slopeAnim); - } + boolean slopeAnim = buildHandler.getBuildModelAnimeList().getSlopeAnimations().get(jlBuildModel.getSelectedIndex()); + jcbSlope.setSelected(slopeAnim); } private void updateViewAreaDataList(int indexSelected) { @@ -1476,28 +1462,29 @@ private void updateViewAreaDataList(int indexSelected) { } private void updateViewAreaDataProperties() { - if (buildHandler.getAreaDataList() != null) { - AreaDataDPPt areaData = buildHandler.getAreaDataList().getAreaDatas().get(jlAreaDataList.getSelectedIndex()); - jtfBuildTsetEnabled.value = false; - jtfMapTsetEnabled.value = false; - jtfUnknown1Enabled.value = false; - jcbAreaTypeEnabled.value = false; + if (buildHandler.getAreaDataList() == null) { + return; + } + AreaDataDPPt areaData = buildHandler.getAreaDataList().getAreaDatas().get(jlAreaDataList.getSelectedIndex()); + jtfBuildTsetEnabled.value = false; + jtfMapTsetEnabled.value = false; + jtfUnknown1Enabled.value = false; + jcbAreaTypeEnabled.value = false; - jtfBuildTset.setText(String.valueOf(areaData.getBuildingTilesetID())); - jtfMapTset.setText(String.valueOf(areaData.getMapTilesetID())); - jtfUnknown1.setText(String.valueOf(areaData.getUnknown1())); - jcbAreaType.setSelectedIndex(Math.max(Math.min(1, areaData.getUnknown2()), 0)); + jtfBuildTset.setText(String.valueOf(areaData.getBuildingTilesetID())); + jtfMapTset.setText(String.valueOf(areaData.getMapTilesetID())); + jtfUnknown1.setText(String.valueOf(areaData.getUnknown1())); + jcbAreaType.setSelectedIndex(Math.max(Math.min(1, areaData.getUnknown2()), 0)); - jtfBuildTset.setBackground(defaultTextPaneBackground); - jtfMapTset.setBackground(defaultTextPaneBackground); - jtfUnknown1.setBackground(defaultTextPaneBackground); - jcbAreaType.setBackground(defaultTextPaneBackground); + jtfBuildTset.setBackground(defaultTextPaneBackground); + jtfMapTset.setBackground(defaultTextPaneBackground); + jtfUnknown1.setBackground(defaultTextPaneBackground); + jcbAreaType.setBackground(defaultTextPaneBackground); - jtfBuildTsetEnabled.value = true; - jtfMapTsetEnabled.value = true; - jtfUnknown1Enabled.value = true; - jcbAreaTypeEnabled.value = true; - } + jtfBuildTsetEnabled.value = true; + jtfMapTsetEnabled.value = true; + jtfUnknown1Enabled.value = true; + jcbAreaTypeEnabled.value = true; } private void updateViewBuildTsetList(int indexSelected) { @@ -1507,34 +1494,35 @@ private void updateViewBuildTsetList(int indexSelected) { } private void updateViewAreaBuildList(int indexSelected) { - if (buildHandler.getAreaBuildList() != null && buildHandler.getBuildModelList() != null) { - jlAreaBuildListEnabled.value = false; - final int selectedTileset = jlBuildTsetList.getSelectedIndex(); - ArrayList IDs = buildHandler.getAreaBuildList().getAreaBuilds().get(selectedTileset).getBuildingIDs(); - DefaultListModel listModel = new DefaultListModel(); - for (int i = 0; i < IDs.size(); i++) { - try { - listModel.addElement(String.valueOf(IDs.get(i)) + ": " + buildHandler.getBuildModelList().getModelsName().get(IDs.get(i))); - } catch (Exception ex) { - listModel.addElement(String.valueOf(IDs.get(i)) + ": " + "NOT FOUND"); - } + if (buildHandler.getAreaBuildList() == null || buildHandler.getBuildModelList() == null) { + return; + } + jlAreaBuildListEnabled.value = false; + final int selectedTileset = jlBuildTsetList.getSelectedIndex(); + List IDs = buildHandler.getAreaBuildList().getAreaBuilds().get(selectedTileset).getBuildingIDs(); + DefaultListModel listModel = new DefaultListModel<>(); + for (Integer id : IDs) { + try { + listModel.addElement(id + ": " + buildHandler.getBuildModelList().getModelsName().get(id)); + } catch (Exception ex) { + listModel.addElement(id + ": " + "NOT FOUND"); } - jlAreaBuildList.setModel(listModel); - jlAreaBuildListEnabled.value = true; - - indexSelected = Math.max(Math.min(jlAreaBuildList.getModel().getSize() - 1, indexSelected), 0); - jlAreaBuildList.setSelectedIndex(indexSelected); - jlAreaBuildList.ensureIndexIsVisible(indexSelected); } + jlAreaBuildList.setModel(listModel); + jlAreaBuildListEnabled.value = true; + + indexSelected = Math.max(Math.min(jlAreaBuildList.getModel().getSize() - 1, indexSelected), 0); + jlAreaBuildList.setSelectedIndex(indexSelected); + jlAreaBuildList.ensureIndexIsVisible(indexSelected); } private void updateViewAnimationsList(int indexSelected) { if (buildHandler.getBuildModelAnims() != null) { - ArrayList names = new ArrayList<>(); - ArrayList animations = buildHandler.getBuildModelAnims().getAnimations(); + List names = new ArrayList<>(); + List animations = buildHandler.getBuildModelAnims().getAnimations(); animIconIndices = new ArrayList<>(animations.size()); for (int i = 0; i < animations.size(); i++) { - names.add(String.valueOf(i) + ": " + names.add(i + ": " + animations.get(i).getName() + " [" + animations.get(i).getAnimationTypeName() + "]"); animIconIndices.add(animations.get(i).getAnimationType()); @@ -1571,7 +1559,6 @@ public void loadGame(String folderPath) { + "Make sure that you select the main game folder.", "Error finding game files", JOptionPane.ERROR_MESSAGE); } - } public void setBoundingBoxes() { @@ -1706,7 +1693,7 @@ public void loadCurrentNsbmd() { private void loadAnimationInNitroDisplay(NitroDisplayGL display, int objectIndex, ModelAnimation anim) { if (anim.getAnimationType() == ModelAnimation.TYPE_NSBCA) { NSBCAreader reader = new NSBCAreader(new ByteReader(anim.getData())); - display.getObjectGL(objectIndex).setNsbca((NSBCA) reader.readFile()); + display.getObjectGL(objectIndex).setNsbca(reader.readFile()); display.requestUpdate(); } else if (anim.getAnimationType() == ModelAnimation.TYPE_NSBTA) { NSBTAreader reader = new NSBTAreader(new ByteReader(anim.getData())); @@ -1726,7 +1713,7 @@ private void loadAnimationInNitroDisplay(NitroDisplayGL display, int objectIndex public void tryLoadBuildFile() { try { - String filePath = handler.getMapMatrix().getFilePathWithCoords(handler.getMapMatrix().getMatrix(), + String filePath = MapMatrix.getFilePathWithCoords(handler.getMapMatrix().getMatrix(), new File(handler.getMapMatrix().filePath).getParent(), new File(handler.getMapMatrix().filePath).getName(), handler.getMapSelected(), "nsbmd"); @@ -1773,18 +1760,14 @@ private void saveBuildings() throws IOException { private static File[] findFilesWithExtension(String folderPath, String extension) { File dir = new File(folderPath); - return dir.listFiles(new FilenameFilter() { - public boolean accept(File dir, String filename) { - return filename.endsWith(extension); - } - }); + return dir.listFiles((dir1, filename) -> filename.endsWith(extension)); } - private static void addElementsToList(JList list, MutableBoolean listEnabled, String name, int numElements, int indexSelected) { + private static void addElementsToList(JList list, MutableBoolean listEnabled, String name, int numElements, int indexSelected) { listEnabled.value = false; - DefaultListModel listModel = new DefaultListModel(); + DefaultListModel listModel = new DefaultListModel<>(); for (int i = 0; i < numElements; i++) { - listModel.addElement(name + " " + String.valueOf(i)); + listModel.addElement(name + " " + i); } list.setModel(listModel); listEnabled.value = true; @@ -1795,11 +1778,11 @@ private static void addElementsToList(JList list, MutableBoolean listEnabled, St } - private static void addElementsToListWithIndices(JList list, MutableBoolean listEnabled, ArrayList elements, int indexSelected) { + private static void addElementsToListWithIndices(JList list, MutableBoolean listEnabled, List elements, int indexSelected) { listEnabled.value = false; - DefaultListModel listModel = new DefaultListModel(); + DefaultListModel listModel = new DefaultListModel<>(); for (int i = 0; i < elements.size(); i++) { - listModel.addElement(String.valueOf(i) + ": " + elements.get(i)); + listModel.addElement(i + ": " + elements.get(i)); } list.setModel(listModel); listEnabled.value = true; @@ -1807,13 +1790,12 @@ private static void addElementsToListWithIndices(JList list, MutableBoolean list indexSelected = Math.max(Math.min(list.getModel().getSize() - 1, indexSelected), 0); list.setSelectedIndex(indexSelected); list.ensureIndexIsVisible(indexSelected); - } - private static void addElementsToList(JList list, ArrayList elements, int indexSelected) { - DefaultListModel listModel = new DefaultListModel(); - for (int i = 0; i < elements.size(); i++) { - listModel.addElement(elements.get(i)); + private static void addElementsToList(JList list, List elements, int indexSelected) { + DefaultListModel listModel = new DefaultListModel<>(); + for (String element : elements) { + listModel.addElement(element); } list.setModel(listModel); @@ -1821,7 +1803,7 @@ private static void addElementsToList(JList list, ArrayList elements, in list.setSelectedIndex(indexSelected); } - private static void addIconToJList(JList list, ImageIcon icon) { + private static void addIconToJList(JList list, ImageIcon icon) { list.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { diff --git a/src/main/java/editor/buildingeditor2/BuildingEditorDialogHGSS.java b/src/main/java/editor/buildingeditor2/BuildingEditorDialogHGSS.java index 0e328aa..8e2addc 100644 --- a/src/main/java/editor/buildingeditor2/BuildingEditorDialogHGSS.java +++ b/src/main/java/editor/buildingeditor2/BuildingEditorDialogHGSS.java @@ -3,10 +3,10 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; +import editor.mapmatrix.MapMatrix; import formats.nsbtx2.*; import net.miginfocom.swing.*; import editor.buildingeditor2.animations.AddBuildAnimationDialog; @@ -18,38 +18,21 @@ import editor.buildingeditor2.buildfile.Build; import editor.buildingeditor2.buildfile.BuildFile; import editor.handler.MapEditorHandler; -import formats.nsbtx2.Nsbtx2; -import formats.nsbtx2.NsbtxLoader2; -import formats.nsbtx2.NsbtxPalette; -import formats.nsbtx2.NsbtxTexture; -import formats.nsbtx2.NsbtxWriter; - -import java.awt.Color; import utils.Utils.MutableBoolean; -import java.awt.Component; import java.awt.image.BufferedImage; import java.io.File; -import java.io.FilenameFilter; import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; -import javax.swing.DefaultComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.DefaultListModel; -import javax.swing.ImageIcon; -import javax.swing.JComboBox; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JOptionPane; import javax.swing.filechooser.FileNameExtensionFilter; import nitroreader.nsbca.NSBCA; @@ -71,37 +54,37 @@ public class BuildingEditorDialogHGSS extends JDialog { private MapEditorHandler handler; private BuildHandlerHGSS buildHandler; - private ImageIcon nsbmdIcon; - private ImageIcon nsbtxIcon; - private ImageIcon areaDataIcon; - private ArrayList animIcons; - private ArrayList selectedAnimIconIndices; - private ArrayList animIconIndices; - private ArrayList mapAnimIconIndices; - - private MutableBoolean jlBuildModelEnabled = new MutableBoolean(true); - private MutableBoolean jlMaterialOrderEnabled = new MutableBoolean(true); - private MutableBoolean jlBuildAnimeListEnabled = new MutableBoolean(true); - private MutableBoolean jlAreaDataListEnabled = new MutableBoolean(true); - private MutableBoolean jlBuildTsetListEnabled = new MutableBoolean(true); - private MutableBoolean jlAreaBuildListEnabled = new MutableBoolean(true); - private MutableBoolean jlAnimationsListEnabled = new MutableBoolean(true); - private MutableBoolean jlBuildFileEnabled = new MutableBoolean(true); - - private MutableBoolean jcbAnimationTypeEnabled = new MutableBoolean(true); - - private MutableBoolean jtfBuildTsetEnabled = new MutableBoolean(true); - private MutableBoolean jtfMapTsetEnabled = new MutableBoolean(true); - private MutableBoolean jcbAreaTypeEnabled = new MutableBoolean(true); - private MutableBoolean buildPropertiesEnabled = new MutableBoolean(true); - private MutableBoolean jcbDynamicTexEnabled = new MutableBoolean(true); - private MutableBoolean jcbAreaLightEnabled = new MutableBoolean(true); - - private MutableBoolean jcbAnimType1Enabled = new MutableBoolean(true); - private MutableBoolean jcbAnimType2Enabled = new MutableBoolean(true); - private MutableBoolean jcbLoopEnabled = new MutableBoolean(true); - private MutableBoolean jcbUnknown1Enabled = new MutableBoolean(true); - private MutableBoolean jcbNumAnimsEnabled = new MutableBoolean(true); + private final ImageIcon nsbmdIcon; + private final ImageIcon nsbtxIcon; + private final ImageIcon areaDataIcon; + private final List animIcons; + private List selectedAnimIconIndices; + private List animIconIndices; + private List mapAnimIconIndices; + + private final MutableBoolean jlBuildModelEnabled = new MutableBoolean(true); + private final MutableBoolean jlMaterialOrderEnabled = new MutableBoolean(true); + private final MutableBoolean jlBuildAnimeListEnabled = new MutableBoolean(true); + private final MutableBoolean jlAreaDataListEnabled = new MutableBoolean(true); + private final MutableBoolean jlBuildTsetListEnabled = new MutableBoolean(true); + private final MutableBoolean jlAreaBuildListEnabled = new MutableBoolean(true); + private final MutableBoolean jlAnimationsListEnabled = new MutableBoolean(true); + private final MutableBoolean jlBuildFileEnabled = new MutableBoolean(true); + + private final MutableBoolean jcbAnimationTypeEnabled = new MutableBoolean(true); + + private final MutableBoolean jtfBuildTsetEnabled = new MutableBoolean(true); + private final MutableBoolean jtfMapTsetEnabled = new MutableBoolean(true); + private final MutableBoolean jcbAreaTypeEnabled = new MutableBoolean(true); + private final MutableBoolean buildPropertiesEnabled = new MutableBoolean(true); + private final MutableBoolean jcbDynamicTexEnabled = new MutableBoolean(true); + private final MutableBoolean jcbAreaLightEnabled = new MutableBoolean(true); + + private final MutableBoolean jcbAnimType1Enabled = new MutableBoolean(true); + private final MutableBoolean jcbAnimType2Enabled = new MutableBoolean(true); + private final MutableBoolean jcbLoopEnabled = new MutableBoolean(true); + private final MutableBoolean jcbUnknown1Enabled = new MutableBoolean(true); + private final MutableBoolean jcbNumAnimsEnabled = new MutableBoolean(true); private static final Color redColor = new Color(255, 200, 200); private static final Color greenColor = new Color(200, 255, 200); @@ -111,21 +94,21 @@ public BuildingEditorDialogHGSS(Window owner) { super(owner); initComponents(); - jTabbedPane1.setIconAt(0, new ImageIcon(getClass().getResource("/icons/BuildingIcon.png"))); - jTabbedPane1.setIconAt(1, new ImageIcon(getClass().getResource("/icons/AreaDataIcon.png"))); - jTabbedPane1.setIconAt(2, new ImageIcon(getClass().getResource("/icons/NsbtxIcon.png"))); - jTabbedPane1.setIconAt(3, new ImageIcon(getClass().getResource("/icons/AnimationIcon.png"))); - jTabbedPane1.setIconAt(4, new ImageIcon(getClass().getResource("/icons/mapIcon.png"))); + jTabbedPane1.setIconAt(0, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/BuildingIcon.png")))); + jTabbedPane1.setIconAt(1, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/AreaDataIcon.png")))); + jTabbedPane1.setIconAt(2, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtxIcon.png")))); + jTabbedPane1.setIconAt(3, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/AnimationIcon.png")))); + jTabbedPane1.setIconAt(4, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/mapIcon.png")))); - nsbmdIcon = new ImageIcon(getClass().getResource("/icons/NsbmdIcon.png")); - nsbtxIcon = new ImageIcon(getClass().getResource("/icons/NsbtxIcon.png")); - areaDataIcon = new ImageIcon(getClass().getResource("/icons/AreaDataIcon.png")); + nsbmdIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbmdIcon.png"))); + nsbtxIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtxIcon.png"))); + areaDataIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/AreaDataIcon.png"))); animIcons = new ArrayList<>(4); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbcaIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbtaIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbtpIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbmaIcon.png"))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbcaIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtaIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtpIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbmaIcon.png")))); selectedAnimIconIndices = new ArrayList<>(); animIconIndices = new ArrayList<>(); @@ -235,130 +218,134 @@ private void jlBuildTsetListValueChanged(ListSelectionEvent evt) { } private void jbAddBuildingActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Add a new NSBMD Building Model"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelList() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Add a new NSBMD Building Model"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - buildHandler.addBuilding(fc.getSelectedFile().getPath()); + buildHandler.addBuilding(fc.getSelectedFile().getPath()); - updateViewBuildModelList(buildHandler.getBuildModelList().getSize() - 1); - updateViewSelectedBuildAnimationsList(0); - updateViewMaterialOrderList(0); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the NSBMD file", - "Error opening NSBMD file", JOptionPane.ERROR_MESSAGE); - } + updateViewBuildModelList(buildHandler.getBuildModelList().getSize() - 1); + updateViewSelectedBuildAnimationsList(0); + updateViewMaterialOrderList(0); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the NSBMD file", + "Error opening NSBMD file", JOptionPane.ERROR_MESSAGE); } } } private void jbReplaceBuildingActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Select the new NSBMD Building Model (material order will be deleted)"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelList() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Select the new NSBMD Building Model (material order will be deleted)"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - buildHandler.replaceBuilding(jlBuildModel.getSelectedIndex(), fc.getSelectedFile().getPath()); + buildHandler.replaceBuilding(jlBuildModel.getSelectedIndex(), fc.getSelectedFile().getPath()); - updateViewBuildModelList(jlBuildModel.getSelectedIndex()); - updateViewSelectedBuildAnimationsList(0); - updateViewMaterialOrderList(0); + updateViewBuildModelList(jlBuildModel.getSelectedIndex()); + updateViewSelectedBuildAnimationsList(0); + updateViewMaterialOrderList(0); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the NSBMD file", - "Error opening NSBMD file", JOptionPane.ERROR_MESSAGE); - } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the NSBMD file", + "Error opening NSBMD file", JOptionPane.ERROR_MESSAGE); } } } private void jbExportBuildingActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save the NSBMD Building Model"); - try {//TODO: Replace this with some index bounds cheking? - String fileName = buildHandler.getBuildModelList().getModelsName().get(jlBuildModel.getSelectedIndex()); - fc.setSelectedFile(new File(fileName + ".nsbmd")); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelList() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBMD (*.nsbmd)", "nsbmd")); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save the NSBMD Building Model"); + try {//TODO: Replace this with some index bounds cheking? + String fileName = buildHandler.getBuildModelList().getModelsName().get(jlBuildModel.getSelectedIndex()); + fc.setSelectedFile(new File(fileName + ".nsbmd")); + } catch (Exception ex) { + ex.printStackTrace(); + } + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - if (!fc.getSelectedFile().getPath().isEmpty()) { - buildHandler.saveBuilding(jlBuildModel.getSelectedIndex(), fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the NSBMD file", - "Error writing NSBMD file", JOptionPane.ERROR_MESSAGE); + if (!fc.getSelectedFile().getPath().isEmpty()) { + buildHandler.saveBuilding(jlBuildModel.getSelectedIndex(), fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the NSBMD file", + "Error writing NSBMD file", JOptionPane.ERROR_MESSAGE); } } } private void jbRemoveBuildingActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - ArrayList occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); - if (!occurrences.isEmpty()) { - String occurenceIDs = ""; - for (int i = 0; i < occurrences.size() - 1; i++) { - occurenceIDs += String.valueOf(occurrences.get(i)) + ", "; - } - occurenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); - - int returnVal2 = JOptionPane.showConfirmDialog(this.getContentPane(), - "This building is being used in the following tilesets: \n" + occurenceIDs + "\n" - + "Do you want to remove it and its occurences? \n" - + "(Removing buildings is NOT RECOMMENDED because the building IDs will be shifted)", - "Confirm remove building and occurrences", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (returnVal2 == JOptionPane.YES_OPTION) { - buildHandler.getAreaBuildList().removeBuildingOccurences(jlBuildModel.getSelectedIndex()); - - buildHandler.removeBuilding(jlBuildModel.getSelectedIndex()); - updateViewBuildModelList(jlBuildModel.getSelectedIndex()); - updateViewSelectedBuildAnimationsList(0); - updateViewMaterialOrderList(0); - updateViewAreaBuildList(jlAreaBuildList.getSelectedIndex()); - } - } else { - int returnVal = JOptionPane.showConfirmDialog(this.getContentPane(), - "Are you sure you want to remove the selected building?\n" - + "(Removing buildings is NOT RECOMMENDED because the building IDs will be shifted)", - "Confirm remove building", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (returnVal == JOptionPane.YES_OPTION) { - buildHandler.removeBuilding(jlBuildModel.getSelectedIndex()); - updateViewBuildModelList(jlBuildModel.getSelectedIndex()); - updateViewSelectedBuildAnimationsList(0); - updateViewMaterialOrderList(0); - updateViewAreaBuildList(jlAreaBuildList.getSelectedIndex()); - } + if (buildHandler.getBuildModelList() == null) { + return; + } + List occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); + if (!occurrences.isEmpty()) { + String occurrenceIDs = ""; + for (int i = 0; i < occurrences.size() - 1; i++) { + occurrenceIDs += occurrences.get(i) + ", "; + } + occurrenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); + + int returnVal2 = JOptionPane.showConfirmDialog(this.getContentPane(), + "This building is being used in the following tilesets: \n" + occurrenceIDs + "\n" + + "Do you want to remove it and its occurences? \n" + + "(Removing buildings is NOT RECOMMENDED because the building IDs will be shifted)", + "Confirm remove building and occurrences", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + if (returnVal2 == JOptionPane.YES_OPTION) { + buildHandler.getAreaBuildList().removeBuildingOccurrences(jlBuildModel.getSelectedIndex()); + + buildHandler.removeBuilding(jlBuildModel.getSelectedIndex()); + updateViewBuildModelList(jlBuildModel.getSelectedIndex()); + updateViewSelectedBuildAnimationsList(0); + updateViewMaterialOrderList(0); + updateViewAreaBuildList(jlAreaBuildList.getSelectedIndex()); + } + } else { + int returnVal = JOptionPane.showConfirmDialog(this.getContentPane(), + "Are you sure you want to remove the selected building?\n" + + "(Removing buildings is NOT RECOMMENDED because the building IDs will be shifted)", + "Confirm remove building", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + if (returnVal == JOptionPane.YES_OPTION) { + buildHandler.removeBuilding(jlBuildModel.getSelectedIndex()); + updateViewBuildModelList(jlBuildModel.getSelectedIndex()); + updateViewSelectedBuildAnimationsList(0); + updateViewMaterialOrderList(0); + updateViewAreaBuildList(jlAreaBuildList.getSelectedIndex()); } } } @@ -392,44 +379,42 @@ private void jbMoveMaterialDownActionPerformed(ActionEvent evt) { } private void jbAddAnimToBuildActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null - && buildHandler.getBuildModelAnimeList() != null - && buildHandler.getBuildModelAnims() != null) { - ArrayList animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs(); - if (animations.isEmpty() || animations.size() < BuildAnimInfoHGSS.MAX_ANIMS_PER_BUILDING) { - final AddBuildAnimationDialog dialog = new AddBuildAnimationDialog(handler.getMainFrame()); - dialog.init(buildHandler.getBuildModelList().getModelsData().get(jlBuildModel.getSelectedIndex()), - buildHandler.getBuildModelAnims(), - buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs()); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildAnimationDialog.ACEPTED) { - buildHandler.addBuildingAnimation(jlBuildModel.getSelectedIndex(), dialog.getIndexSelected()); - updateViewSelectedBuildAnimationsList(jlSelectedAnimationsList.getSelectedIndex() + 1); - } - } else { - JOptionPane.showMessageDialog(this, "Buildings can't have more than " - + String.valueOf(BuildAnimInfoHGSS.MAX_ANIMS_PER_BUILDING) + " animations.", - "Can't add animation", JOptionPane.ERROR_MESSAGE); + if (buildHandler.getBuildModelList() == null || buildHandler.getBuildModelAnimeList() == null || buildHandler.getBuildModelAnims() == null) { + return; + } + List animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs(); + if (animations.isEmpty() || animations.size() < BuildAnimInfoHGSS.MAX_ANIMS_PER_BUILDING) { + final AddBuildAnimationDialog dialog = new AddBuildAnimationDialog(handler.getMainFrame()); + dialog.init(buildHandler.getBuildModelList().getModelsData().get(jlBuildModel.getSelectedIndex()), + buildHandler.getBuildModelAnims(), + buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs()); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); + if (dialog.getReturnValue() == AddBuildAnimationDialog.ACCEPTED) { + buildHandler.addBuildingAnimation(jlBuildModel.getSelectedIndex(), dialog.getIndexSelected()); + updateViewSelectedBuildAnimationsList(jlSelectedAnimationsList.getSelectedIndex() + 1); } + } else { + JOptionPane.showMessageDialog(this, "Buildings can't have more than " + + BuildAnimInfoHGSS.MAX_ANIMS_PER_BUILDING + " animations.", + "Can't add animation", JOptionPane.ERROR_MESSAGE); } } private void jbReplaceAnimToBuildActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null - && buildHandler.getBuildModelAnimeList() != null - && buildHandler.getBuildModelAnims() != null) { - if (buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs().size() > 0) { - final AddBuildAnimationDialog dialog = new AddBuildAnimationDialog(handler.getMainFrame()); - dialog.init(buildHandler.getBuildModelList().getModelsData().get(jlBuildModel.getSelectedIndex()), - buildHandler.getBuildModelAnims(), - buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs()); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildAnimationDialog.ACEPTED) { - buildHandler.replaceBuildingAnimation(jlBuildModel.getSelectedIndex(), dialog.getIndexSelected(), jlSelectedAnimationsList.getSelectedIndex()); - updateViewSelectedBuildAnimationsList(jlSelectedAnimationsList.getSelectedIndex()); - } + if (buildHandler.getBuildModelList() == null || buildHandler.getBuildModelAnimeList() == null || buildHandler.getBuildModelAnims() == null) { + return; + } + if (buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs().size() > 0) { + final AddBuildAnimationDialog dialog = new AddBuildAnimationDialog(handler.getMainFrame()); + dialog.init(buildHandler.getBuildModelList().getModelsData().get(jlBuildModel.getSelectedIndex()), + buildHandler.getBuildModelAnims(), + buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs()); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); + if (dialog.getReturnValue() == AddBuildAnimationDialog.ACCEPTED) { + buildHandler.replaceBuildingAnimation(jlBuildModel.getSelectedIndex(), dialog.getIndexSelected(), jlSelectedAnimationsList.getSelectedIndex()); + updateViewSelectedBuildAnimationsList(jlSelectedAnimationsList.getSelectedIndex()); } } } @@ -449,7 +434,7 @@ private void jbAddBuildToTsetActionPerformed(ActionEvent evt) { dialog.init(buildHandler.getBuildModelList(), buildHandler.getAreaBuildList().getAreaBuilds().get(jlBuildTsetList.getSelectedIndex()).getBuildingIDs()); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { buildHandler.addBuildToAreaBuild(jlBuildTsetList.getSelectedIndex(), dialog.getIndexSelected()); updateViewAreaBuildList(jlAreaBuildList.getModel().getSize()); } @@ -462,7 +447,7 @@ private void jbReplaceBuildToTsetActionPerformed(ActionEvent evt) { dialog.init(buildHandler.getBuildModelList(), buildHandler.getAreaBuildList().getAreaBuilds().get(jlBuildTsetList.getSelectedIndex()).getBuildingIDs()); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { buildHandler.replaceBuildToAreaBuild(jlBuildTsetList.getSelectedIndex(), dialog.getIndexSelected(), jlAreaBuildList.getSelectedIndex()); updateViewAreaBuildList(jlAreaBuildList.getSelectedIndex()); } @@ -477,132 +462,134 @@ private void jbRemoveBuildToTsetActionPerformed(ActionEvent evt) { } private void jbAddAnimActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelAnims() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Add a new Animation"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelAnims() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Add a new Animation"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - buildHandler.addAnimationFile(fc.getSelectedFile().getPath()); + buildHandler.addAnimationFile(fc.getSelectedFile().getPath()); - updateViewAnimationsList(jlAnimationsList.getModel().getSize()); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", - "Error opening animation file", JOptionPane.ERROR_MESSAGE); - } + updateViewAnimationsList(jlAnimationsList.getModel().getSize()); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", + "Error opening animation file", JOptionPane.ERROR_MESSAGE); } } } private void jbReplaceAnimActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelAnims() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Select the new Animation"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelAnims() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Select the new Animation"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - buildHandler.replaceAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); + buildHandler.replaceAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); - updateViewAnimationsList(jlAnimationsList.getSelectedIndex()); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", - "Error opening animation file", JOptionPane.ERROR_MESSAGE); - } + updateViewAnimationsList(jlAnimationsList.getSelectedIndex()); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", + "Error opening animation file", JOptionPane.ERROR_MESSAGE); } } } private void jbExportAnimationActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelAnims() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - String type = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getExtensionName(); - - fc.setFileFilter(new FileNameExtensionFilter(type.toUpperCase() + " (*." + type + ")", type)); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save the Animation"); - try {//TODO: Replace this with some index bounds cheking? - String fileName = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getName(); - fc.setSelectedFile(new File(fileName + "." + type)); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelAnims() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + String type = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getExtensionName(); - if (!fc.getSelectedFile().getPath().isEmpty()) { - buildHandler.saveAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the Animation file", - "Error writing Animation file", JOptionPane.ERROR_MESSAGE); + fc.setFileFilter(new FileNameExtensionFilter(type.toUpperCase() + " (*." + type + ")", type)); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save the Animation"); + try {//TODO: Replace this with some index bounds cheking? + String fileName = buildHandler.getBuildModelAnims().getAnimations().get(jlAnimationsList.getSelectedIndex()).getName(); + fc.setSelectedFile(new File(fileName + "." + type)); + } catch (Exception ex) { + ex.printStackTrace(); + } + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + + if (!fc.getSelectedFile().getPath().isEmpty()) { + buildHandler.saveAnimationFile(jlAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the Animation file", + "Error writing Animation file", JOptionPane.ERROR_MESSAGE); } } } private void jbRemoveAnimActionPerformed(ActionEvent evt) { - } private void jbSaveAllActionPerformed(ActionEvent evt) { - if (buildHandler.areAllFilesLoaded()) { - try { - buildHandler.saveAllFiles(); - - JOptionPane.showMessageDialog(this, - "All files were succesfully saved.\n" - + "Open the ROM with SDSME or similar and save it to apply the changes.", - "Files succesfully saved", JOptionPane.INFORMATION_MESSAGE); - } catch (Exception ex) { - JOptionPane.showMessageDialog(this, - "There was a problem saving the files.", - "Problem saving files", JOptionPane.ERROR_MESSAGE); - Logger.getLogger(BuildingEditorDialogHGSS.class.getName()).log(Level.SEVERE, null, ex); + if (!buildHandler.areAllFilesLoaded()) { + return; + } + try { + buildHandler.saveAllFiles(); - } + JOptionPane.showMessageDialog(this, + "All files were succesfully saved.\n" + + "Open the ROM with SDSME or similar and save it to apply the changes.", + "Files succesfully saved", JOptionPane.INFORMATION_MESSAGE); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, + "There was a problem saving the files.", + "Problem saving files", JOptionPane.ERROR_MESSAGE); + Logger.getLogger(BuildingEditorDialogHGSS.class.getName()).log(Level.SEVERE, null, ex); } } private void jbFindBuildingActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - ArrayList occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); - if (!occurrences.isEmpty()) { - String occurenceIDs = ""; - for (int i = 0; i < occurrences.size() - 1; i++) { - occurenceIDs += String.valueOf(occurrences.get(i)) + ", "; - } - occurenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); - - JOptionPane.showMessageDialog(this, - "This building is being used in the following building tilesets: \n" + occurenceIDs, - String.valueOf(occurrences.size()) + " occurrences found", JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(this, - "This building is not included in any building tileset.", - "No occurrences found", JOptionPane.INFORMATION_MESSAGE); + if (buildHandler.getBuildModelList() == null) { + return; + } + List occurrences = buildHandler.getAreaBuildList().getBuildingOccurrences(jlBuildModel.getSelectedIndex()); + if (!occurrences.isEmpty()) { + String occurrenceIDs = ""; + for (int i = 0; i < occurrences.size() - 1; i++) { + occurrenceIDs += occurrences.get(i) + ", "; } + occurrenceIDs += String.valueOf(occurrences.get(occurrences.size() - 1)); + + JOptionPane.showMessageDialog(this, + "This building is being used in the following building tilesets: \n" + occurrenceIDs, occurrences.size() + " occurrences found", JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(this, + "This building is not included in any building tileset.", + "No occurrences found", JOptionPane.INFORMATION_MESSAGE); } } @@ -679,16 +666,14 @@ private void jcbAreaTypeActionPerformed(ActionEvent evt) { private void jbPlayActionPerformed(ActionEvent evt) { if (buildHandler.getBuildModelAnimeList() != null) { try { - ArrayList animIDs = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs(); + List animIDs = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs(); ModelAnimation anim = buildHandler.getBuildModelAnims().getAnimations().get(animIDs.get(jlSelectedAnimationsList.getSelectedIndex())); loadAnimationInNitroDisplay(nitroDisplayGL, 0, anim); - } catch (Exception ex) { //ex.printStackTrace(); } } - } private void jbImportMaterialsFromNsbmdActionPerformed(ActionEvent evt) { @@ -697,7 +682,7 @@ private void jbImportMaterialsFromNsbmdActionPerformed(ActionEvent evt) { int buildIndex = jlBuildModel.getSelectedIndex(); byte[] data = buildHandler.getBuildModelList().getModelsData().get(buildIndex); - ArrayList materials = BuildHandlerHGSS.getMaterialOrder(data); + List materials = BuildHandlerHGSS.getMaterialOrder(data); buildHandler.getBuildModelMatshp().setMaterials(buildIndex, materials); updateViewMaterialOrderList(jlMaterialOrder.getSelectedIndex()); @@ -710,26 +695,27 @@ private void jbImportMaterialsFromNsbmdActionPerformed(ActionEvent evt) { } private void jlAreaBuildListValueChanged(ListSelectionEvent evt) { - if (buildHandler.getAreaBuildList() != null) { - if (jlAreaBuildListEnabled.value) { - try { - AreaBuild areaBuild = buildHandler.getAreaBuildList().getAreaBuilds().get(jlBuildTsetList.getSelectedIndex()); - int buildIndex = areaBuild.getBuildingIDs().get(jlAreaBuildList.getSelectedIndex()); - byte[] data = buildHandler.getBuildModelList().getModelsData().get(buildIndex); - nitroDisplayAreaData.getObjectGL(0).setNsbmdData(data); - } catch (Exception ex) { - nitroDisplayAreaData.getObjectGL(0).setNsbmd(null); - } - try { - nitroDisplayAreaData.getObjectGL(0).setNsbca(null); - nitroDisplayAreaData.getObjectGL(0).setNsbtp(null); - nitroDisplayAreaData.getObjectGL(0).setNsbta(null); - nitroDisplayAreaData.getObjectGL(0).setNsbva(null); - nitroDisplayAreaData.fitCameraToModel(0); - nitroDisplayAreaData.requestUpdate(); - } catch (Exception ex) { - ex.printStackTrace(); - } + if (buildHandler.getAreaBuildList() == null) { + return; + } + if (jlAreaBuildListEnabled.value) { + try { + AreaBuild areaBuild = buildHandler.getAreaBuildList().getAreaBuilds().get(jlBuildTsetList.getSelectedIndex()); + int buildIndex = areaBuild.getBuildingIDs().get(jlAreaBuildList.getSelectedIndex()); + byte[] data = buildHandler.getBuildModelList().getModelsData().get(buildIndex); + nitroDisplayAreaData.getObjectGL(0).setNsbmdData(data); + } catch (Exception ex) { + nitroDisplayAreaData.getObjectGL(0).setNsbmd(null); + } + try { + nitroDisplayAreaData.getObjectGL(0).setNsbca(null); + nitroDisplayAreaData.getObjectGL(0).setNsbtp(null); + nitroDisplayAreaData.getObjectGL(0).setNsbta(null); + nitroDisplayAreaData.getObjectGL(0).setNsbva(null); + nitroDisplayAreaData.fitCameraToModel(0); + nitroDisplayAreaData.requestUpdate(); + } catch (Exception ex) { + ex.printStackTrace(); } } } @@ -786,14 +772,14 @@ private void jbAddTexToNsbtxActionPerformed(ActionEvent evt) { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully imported.\n" + "(Some textures or palettes were already in the tileset)\n" - + "- " + String.valueOf(addedTextures) + " textures added\n" - + "- " + String.valueOf(addedPalettes) + " palettes added", + + "- " + addedTextures + " textures added\n" + + "- " + addedPalettes + " palettes added", "Data imported", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully imported.\n" - + "- " + String.valueOf(addedTextures) + " textures added\n" - + "- " + String.valueOf(addedPalettes) + " palettes added", + + "- " + addedTextures + " textures added\n" + + "- " + addedPalettes + " palettes added", "Data imported", JOptionPane.INFORMATION_MESSAGE); } } else { @@ -817,99 +803,100 @@ private void jbAddTexToNsbtxActionPerformed(ActionEvent evt) { } private void jbAddTsetActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildTilesetList() != null && buildHandler.getAreaBuildList() != null) { + if (buildHandler.getBuildTilesetList() == null || buildHandler.getAreaBuildList() == null) { + return; + } - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Add a new Building NSBTX"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Add a new Building NSBTX"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); + byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); - buildHandler.addBuildingTileset(data); + buildHandler.addBuildingTileset(data); - updateViewBuildTsetList(buildHandler.getBuildTilesetList().getTilesets().size() - 1); - updateViewAreaBuildList(buildHandler.getAreaBuildList().getAreaBuilds().size() - 1); + updateViewBuildTsetList(buildHandler.getBuildTilesetList().getTilesets().size() - 1); + updateViewAreaBuildList(buildHandler.getAreaBuildList().getAreaBuilds().size() - 1); - } catch (Exception ex) { - ex.printStackTrace(); - JOptionPane.showMessageDialog(this, - "There was a problem adding the NSBTX", - "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); - } + } catch (Exception ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(this, + "There was a problem adding the NSBTX", + "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); } } } private void jbReplaceTsetActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildTilesetList() != null && buildHandler.getAreaBuildList() != null) { + if (buildHandler.getBuildTilesetList() == null || buildHandler.getAreaBuildList() == null) { + return; + } - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Replace the Building NSBTX"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Replace the Building NSBTX"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); + byte[] data = Files.readAllBytes(fc.getSelectedFile().toPath()); - buildHandler.replaceBuildingTileset(jlBuildTsetList.getSelectedIndex(), data); + buildHandler.replaceBuildingTileset(jlBuildTsetList.getSelectedIndex(), data); - updateViewBuildTsetList(jlBuildTsetList.getSelectedIndex()); - } catch (Exception ex) { - ex.printStackTrace(); - JOptionPane.showMessageDialog(this, - "There was a problem adding the NSBTX", - "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); - } + updateViewBuildTsetList(jlBuildTsetList.getSelectedIndex()); + } catch (Exception ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(this, + "There was a problem adding the NSBTX", + "Can't add NSBTX", JOptionPane.ERROR_MESSAGE); } } - - } private void jbExportTilesetActionPerformed(ActionEvent evt) { - if (buildHandler.getBuildModelList() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save Building's NSBTX"); - try {//TODO: Replace this with some index bounds cheking? - String fileName = "Building Tileset " + String.valueOf(jlBuildTsetList.getSelectedIndex()); - fc.setSelectedFile(new File(fileName + ".nsbtx")); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getBuildModelList() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("NSBTX (*.nsbtx)", "nsbtx")); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save Building's NSBTX"); + try {//TODO: Replace this with some index bounds cheking? + String fileName = "Building Tileset " + jlBuildTsetList.getSelectedIndex(); + fc.setSelectedFile(new File(fileName + ".nsbtx")); + } catch (Exception ex) { + ex.printStackTrace(); + } + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - if (!fc.getSelectedFile().getPath().isEmpty()) { - buildHandler.saveBuildingTileset(jlBuildTsetList.getSelectedIndex(), fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the NSBTX file", - "Error writing NSBTX file", JOptionPane.ERROR_MESSAGE); + if (!fc.getSelectedFile().getPath().isEmpty()) { + buildHandler.saveBuildingTileset(jlBuildTsetList.getSelectedIndex(), fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the NSBTX file", + "Error writing NSBTX file", JOptionPane.ERROR_MESSAGE); } } } @@ -932,17 +919,16 @@ private void jbRemoveTexturesActionPerformed(ActionEvent evt) { Nsbtx2 nsbtx = nsbtxPanel.getNsbtx(); int removedTexs = 0; - int removedPals = 0; + int removedPals; for (NsbtxTexture tex : nsbtxBuild.getTextures()) { if (nsbtx.getTextures().size() > 1) { removedTexs += nsbtx.removeTexture(tex.getName()); } } - for (NsbtxPalette pal : nsbtxBuild.getPalettes()) { - if (nsbtx.getPalettes().size() > 1) { - removedPals += nsbtx.removePalette(pal.getName()); - } - } + removedPals = nsbtxBuild.getPalettes().stream() + .filter(pal -> nsbtx.getPalettes().size() > 1) + .mapToInt(pal -> nsbtx.removePalette(pal.getName())) + .sum(); byte[] newNsbtxData = NsbtxWriter.writeNsbtx(nsbtx, ""); @@ -957,8 +943,8 @@ private void jbRemoveTexturesActionPerformed(ActionEvent evt) { if (removedTexs > 0 || removedPals > 0) { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully removed.\n" - + "- " + String.valueOf(removedTexs) + " textures removed\n" - + "- " + String.valueOf(removedPals) + " palettes removed", + + "- " + removedTexs + " textures removed\n" + + "- " + removedPals + " palettes removed", "Data removed", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, @@ -985,7 +971,6 @@ private void jbRemoveTexturesActionPerformed(ActionEvent evt) { "There was a problem removing the textures and palettes.", "Can't remove textures and palettes", JOptionPane.ERROR_MESSAGE); } - } private void jbAddEmptyTilesetActionPerformed(ActionEvent evt) { @@ -1046,36 +1031,37 @@ private void jbImportBldActionPerformed(ActionEvent evt) { } private void jbExportBldActionPerformed(ActionEvent evt) { - if (handler.getBuildings() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastMapDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("BLD (*.bld)", "bld")); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save Building File"); - try {//TODO: Replace this with some index bounds cheking? - File file = new File(handler.getMapMatrix().filePath); - String fileName = Utils.removeExtensionFromPath(file.getName()) + "." + BuildFile.fileExtension; - fc.setSelectedFile(new File(fileName)); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); + if (handler.getBuildings() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastMapDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastMapDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("BLD (*.bld)", "bld")); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save Building File"); + try {//TODO: Replace this with some index bounds cheking? + File file = new File(handler.getMapMatrix().filePath); + String fileName = Utils.removeExtensionFromPath(file.getName()) + "." + BuildFile.fileExtension; + fc.setSelectedFile(new File(fileName)); + } catch (Exception ex) { + ex.printStackTrace(); + } + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastMapDirectoryUsed(fc.getSelectedFile().getParent()); - if (!fc.getSelectedFile().getPath().isEmpty()) { - handler.getBuildings().saveToFile(fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the BLD file", - "Error writing BLD file", JOptionPane.ERROR_MESSAGE); + if (!fc.getSelectedFile().getPath().isEmpty()) { + handler.getBuildings().saveToFile(fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the BLD file", + "Error writing BLD file", JOptionPane.ERROR_MESSAGE); } } } @@ -1086,7 +1072,7 @@ private void jbAddBuildBldActionPerformed(ActionEvent evt) { dialog.init(buildHandler.getBuildModelList(), null); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { Build build = new Build(); build.setModelID(dialog.getIndexSelected()); handler.getBuildings().getBuilds().add(build); @@ -1154,7 +1140,6 @@ private void jsBuildYStateChanged(ChangeEvent evt) { ex.printStackTrace(); } } - } private void jsBuildZStateChanged(ChangeEvent evt) { @@ -1216,7 +1201,7 @@ private void jbChooseModelBldActionPerformed(ActionEvent evt) { dialog.init(buildHandler.getBuildModelList(), null); dialog.setLocationRelativeTo(this); dialog.setVisible(true); - if (dialog.getReturnValue() == AddBuildModelDialog.ACEPTED) { + if (dialog.getReturnValue() == AddBuildModelDialog.ACCEPTED) { Build build = handler.getBuildings().getBuilds().get(jlBuildFile.getSelectedIndex()); build.setModelID(dialog.getIndexSelected()); @@ -1378,8 +1363,8 @@ private void jbRemoveAllUnusedTexPalsActionPerformed(ActionEvent evt) { if (removedTexs > 0 || removedPals > 0) { JOptionPane.showMessageDialog(this, "Textures and palettes succesfully removed.\n" - + "- " + String.valueOf(removedTexs) + " textures removed\n" - + "- " + String.valueOf(removedPals) + " palettes removed", + + "- " + removedTexs + " textures removed\n" + + "- " + removedPals + " palettes removed", "Data removed", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, @@ -1405,89 +1390,92 @@ private void jbRemoveAllUnusedTexPalsActionPerformed(ActionEvent evt) { } private void jbAddMapAnimActionPerformed(ActionEvent evt) { - if (buildHandler.getMapAnimations() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Add a new Animation"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getMapAnimations() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Add a new Animation"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - buildHandler.addMapAnimationFile(fc.getSelectedFile().getPath()); + buildHandler.addMapAnimationFile(fc.getSelectedFile().getPath()); - updateViewMapAnimationsList(jlMapAnimationsList.getModel().getSize()); - updateModelJcbMapAnimations(); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", - "Error opening animation file", JOptionPane.ERROR_MESSAGE); - } + updateViewMapAnimationsList(jlMapAnimationsList.getModel().getSize()); + updateModelJcbMapAnimations(); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", + "Error opening animation file", JOptionPane.ERROR_MESSAGE); } } } private void jbReplaceMapAnimActionPerformed(ActionEvent evt) { - if (buildHandler.getMapAnimations() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Select the new Animation"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getMapAnimations() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Animation Files (*.nsbca, *.nsbta, *.nsbtp, *.nsbma)", "nsbca", "nsbta", "nsbtp", "nsbma")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Select the new Animation"); + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); - buildHandler.replaceMapAnimationFile(jlMapAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); + buildHandler.replaceMapAnimationFile(jlMapAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); - updateViewMapAnimationsList(jlMapAnimationsList.getSelectedIndex()); - updateModelJcbMapAnimations(); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", - "Error opening animation file", JOptionPane.ERROR_MESSAGE); - } + updateViewMapAnimationsList(jlMapAnimationsList.getSelectedIndex()); + updateModelJcbMapAnimations(); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem reading the animation file", + "Error opening animation file", JOptionPane.ERROR_MESSAGE); } } } private void jbExportMapAnimActionPerformed(ActionEvent evt) { - if (buildHandler.getMapAnimations() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastBuildDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); - } - String type = buildHandler.getMapAnimations().getAnimations().get(jlMapAnimationsList.getSelectedIndex()).getExtensionName(); - - fc.setFileFilter(new FileNameExtensionFilter(type.toUpperCase() + " (*." + type + ")", type)); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save the Animation"); - try {//TODO: Replace this with some index bounds cheking? - String fileName = buildHandler.getMapAnimations().getAnimations().get(jlMapAnimationsList.getSelectedIndex()).getName(); - fc.setSelectedFile(new File(fileName + "." + type)); - } catch (Exception ex) { - ex.printStackTrace(); - } - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + if (buildHandler.getMapAnimations() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastBuildDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastBuildDirectoryUsed())); + } + String type = buildHandler.getMapAnimations().getAnimations().get(jlMapAnimationsList.getSelectedIndex()).getExtensionName(); - if (!fc.getSelectedFile().getPath().isEmpty()) { - buildHandler.saveMapAnimationFile(jlMapAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); - } else { - JOptionPane.showMessageDialog(this, "The entered name must be valid", - "Enter a valid name", JOptionPane.ERROR_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem writing the Animation file", - "Error writing Animation file", JOptionPane.ERROR_MESSAGE); + fc.setFileFilter(new FileNameExtensionFilter(type.toUpperCase() + " (*." + type + ")", type)); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save the Animation"); + try {//TODO: Replace this with some index bounds cheking? + String fileName = buildHandler.getMapAnimations().getAnimations().get(jlMapAnimationsList.getSelectedIndex()).getName(); + fc.setSelectedFile(new File(fileName + "." + type)); + } catch (Exception ex) { + ex.printStackTrace(); + } + int returnVal = fc.showOpenDialog(this); + if (returnVal == JFileChooser.APPROVE_OPTION) { + try { + handler.setLastBuildDirectoryUsed(fc.getSelectedFile().getParent()); + + if (!fc.getSelectedFile().getPath().isEmpty()) { + buildHandler.saveMapAnimationFile(jlMapAnimationsList.getSelectedIndex(), fc.getSelectedFile().getPath()); + } else { + JOptionPane.showMessageDialog(this, "The entered name must be valid", + "Enter a valid name", JOptionPane.ERROR_MESSAGE); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem writing the Animation file", + "Error writing Animation file", JOptionPane.ERROR_MESSAGE); } } } @@ -1519,7 +1507,6 @@ private void jbOpenMap1ActionPerformed(ActionEvent evt) { "Can't import map", JOptionPane.ERROR_MESSAGE); } } - } private void jbPlayMapAnimationActionPerformed(ActionEvent evt) { @@ -1541,7 +1528,6 @@ private void jbPlayMapAnimationActionPerformed(ActionEvent evt) { public void init(MapEditorHandler handler, BuildHandlerHGSS buildHandler) { this.handler = handler; this.buildHandler = buildHandler; - } public void updateView() { @@ -1577,14 +1563,13 @@ private void updateViewBuildFileList(int indexSelected) { List builds = handler.getBuildings().getBuilds(); - DefaultListModel listModel = new DefaultListModel(); - for (int i = 0; i < builds.size(); i++) { - Build build = builds.get(i); + DefaultListModel listModel = new DefaultListModel<>(); + for (Build build : builds) { int buildID = build.getModeID(); if (buildID >= 0 && buildID < buildHandler.getBuildModelList().getSize()) { - listModel.addElement(String.valueOf(buildID) + ": " + buildHandler.getBuildModelList().getModelsName().get(buildID)); + listModel.addElement(buildID + ": " + buildHandler.getBuildModelList().getModelsName().get(buildID)); } else { - listModel.addElement(String.valueOf(buildID) + ": " + "NOT FOUND"); + listModel.addElement(buildID + ": " + "NOT FOUND"); } } jlBuildFile.setModel(listModel); @@ -1614,44 +1599,46 @@ private void updateViewBuildProperties() { } private void updateViewMaterialOrderList(int indexSelected) { - if (buildHandler.getBuildModelMatshp() != null) { - ArrayList materials = buildHandler.getBuildModelMatshp().getAllMaterials().get(jlBuildModel.getSelectedIndex()); - ArrayList names; - if (!materials.isEmpty()) { - names = new ArrayList<>(materials.size()); - for (Integer material : materials) { - names.add("Material " + String.valueOf(material)); - } - } else { - names = new ArrayList<>(); - names.add("Undefined (Animation)"); + if (buildHandler.getBuildModelMatshp() == null) { + return; + } + List materials = buildHandler.getBuildModelMatshp().getAllMaterials().get(jlBuildModel.getSelectedIndex()); + List names; + if (!materials.isEmpty()) { + names = new ArrayList<>(materials.size()); + for (Integer material : materials) { + names.add("Material " + material); } - addElementsToList(jlMaterialOrder, names, indexSelected); + } else { + names = new ArrayList<>(); + names.add("Undefined (Animation)"); } + addElementsToList(jlMaterialOrder, names, indexSelected); } private void updateViewSelectedBuildAnimationsList(int indexSelected) { - if (buildHandler.getBuildModelAnimeList() != null && buildHandler.getBuildModelAnims() != null) { - jcbAnimationTypeEnabled.value = false; - ArrayList names = new ArrayList<>(); - //System.out.println("Build model index: " + jlBuildModel.getSelectedIndex()); - ArrayList animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs(); - if (!animations.isEmpty()) { - selectedAnimIconIndices = new ArrayList<>(animations.size()); - for (Integer animID : animations) { - names.add(String.valueOf(animID) + ": " - + buildHandler.getBuildModelAnims().getAnimations().get(animID).getName() + " [" - + buildHandler.getBuildModelAnims().getAnimationTypeName(animID) + "]"); - selectedAnimIconIndices.add(buildHandler.getBuildModelAnims().getAnimationType(animID)); - } + if (buildHandler.getBuildModelAnimeList() == null || buildHandler.getBuildModelAnims() == null) { + return; + } + jcbAnimationTypeEnabled.value = false; + List names = new ArrayList<>(); + //System.out.println("Build model index: " + jlBuildModel.getSelectedIndex()); + List animations = buildHandler.getBuildModelAnimeList().getAnimations().get(jlBuildModel.getSelectedIndex()).getAnimIDs(); + if (!animations.isEmpty()) { + selectedAnimIconIndices = new ArrayList<>(animations.size()); + for (Integer animID : animations) { + names.add(animID + ": " + + buildHandler.getBuildModelAnims().getAnimations().get(animID).getName() + " [" + + buildHandler.getBuildModelAnims().getAnimationTypeName(animID) + "]"); + selectedAnimIconIndices.add(buildHandler.getBuildModelAnims().getAnimationType(animID)); } - addElementsToList(jlSelectedAnimationsList, names, indexSelected); - - //int animType = buildHandler.getBuildModelAnimeList().getSecondBytes().get(jlBuildModel.getSelectedIndex()); - updateViewAnimInfo(); - //jcbAnimationType.setSelectedIndex(animType + 1); - jcbAnimationTypeEnabled.value = true; } + addElementsToList(jlSelectedAnimationsList, names, indexSelected); + + //int animType = buildHandler.getBuildModelAnimeList().getSecondBytes().get(jlBuildModel.getSelectedIndex()); + updateViewAnimInfo(); + //jcbAnimationType.setSelectedIndex(animType + 1); + jcbAnimationTypeEnabled.value = true; } private void updateViewAnimInfo() { @@ -1666,7 +1653,6 @@ private void updateViewAnimInfo() { } catch (Exception ex) { ex.printStackTrace(); } - } private void updateViewJCB(JComboBox jcb, MutableBoolean jcbEnabled, Map map, Integer value) { @@ -1681,7 +1667,7 @@ private void updateViewJCB(JComboBox jcb, MutableBoolean jcbEnabled, Map model = new DefaultComboBoxModel<>(); model.addElement("No Animations"); for (int i = 0; i < buildHandler.getMapAnimations().getAnimations().size(); i++) { model.addElement(buildHandler.getMapAnimations().getAnimations().get(i).getName()); @@ -1711,31 +1697,32 @@ private void updateViewAreaDataList(int indexSelected) { } private void updateViewAreaDataProperties() { - if (buildHandler.getAreaDataList() != null) { - AreaDataHGSS areaData = buildHandler.getAreaDataList().getAreaDatas().get(jlAreaDataList.getSelectedIndex()); - jtfBuildTsetEnabled.value = false; - jtfMapTsetEnabled.value = false; - jcbDynamicTexEnabled.value = false; - jcbAreaTypeEnabled.value = false; - jcbAreaLightEnabled.value = false; - - jtfBuildTset.setText(String.valueOf(areaData.getBuildingTilesetID())); - jtfMapTset.setText(String.valueOf(areaData.getMapTilesetID())); - jcbAreaType.setSelectedIndex(Math.max(Math.min(1, areaData.getAreaType()), 0)); - jcbAreaLight.setSelectedIndex(Math.max(Math.min(2, areaData.getLightType()), 0)); - updateViewJcbMapAnimations(areaData.getDynamicTexType()); - //updateViewJCB(jcbDynamicTex, jcbDynamicTexEnabled, AreaDataHGSS.namesDynamicTexType, areaData.getDynamicTexType()); - - jtfBuildTset.setBackground(defaultTextPaneBackground); - jtfMapTset.setBackground(defaultTextPaneBackground); - jcbAreaType.setBackground(defaultTextPaneBackground); - - jtfBuildTsetEnabled.value = true; - jtfMapTsetEnabled.value = true; - jcbDynamicTexEnabled.value = true; - jcbAreaTypeEnabled.value = true; - jcbAreaLightEnabled.value = true; + if (buildHandler.getAreaDataList() == null) { + return; } + AreaDataHGSS areaData = buildHandler.getAreaDataList().getAreaDatas().get(jlAreaDataList.getSelectedIndex()); + jtfBuildTsetEnabled.value = false; + jtfMapTsetEnabled.value = false; + jcbDynamicTexEnabled.value = false; + jcbAreaTypeEnabled.value = false; + jcbAreaLightEnabled.value = false; + + jtfBuildTset.setText(String.valueOf(areaData.getBuildingTilesetID())); + jtfMapTset.setText(String.valueOf(areaData.getMapTilesetID())); + jcbAreaType.setSelectedIndex(Math.max(Math.min(1, areaData.getAreaType()), 0)); + jcbAreaLight.setSelectedIndex(Math.max(Math.min(2, areaData.getLightType()), 0)); + updateViewJcbMapAnimations(areaData.getDynamicTexType()); + //updateViewJCB(jcbDynamicTex, jcbDynamicTexEnabled, AreaDataHGSS.namesDynamicTexType, areaData.getDynamicTexType()); + + jtfBuildTset.setBackground(defaultTextPaneBackground); + jtfMapTset.setBackground(defaultTextPaneBackground); + jcbAreaType.setBackground(defaultTextPaneBackground); + + jtfBuildTsetEnabled.value = true; + jtfMapTsetEnabled.value = true; + jcbDynamicTexEnabled.value = true; + jcbAreaTypeEnabled.value = true; + jcbAreaLightEnabled.value = true; } private void updateViewBuildTsetList(int indexSelected) { @@ -1745,34 +1732,35 @@ private void updateViewBuildTsetList(int indexSelected) { } private void updateViewAreaBuildList(int indexSelected) { - if (buildHandler.getAreaBuildList() != null && buildHandler.getBuildModelList() != null) { - jlAreaBuildListEnabled.value = false; - final int selectedTileset = jlBuildTsetList.getSelectedIndex(); - ArrayList IDs = buildHandler.getAreaBuildList().getAreaBuilds().get(selectedTileset).getBuildingIDs(); - DefaultListModel listModel = new DefaultListModel(); - for (int i = 0; i < IDs.size(); i++) { - try { - listModel.addElement(String.valueOf(IDs.get(i)) + ": " + buildHandler.getBuildModelList().getModelsName().get(IDs.get(i))); - } catch (Exception ex) { - listModel.addElement(String.valueOf(IDs.get(i)) + ": " + "NOT FOUND"); - } + if (buildHandler.getAreaBuildList() == null || buildHandler.getBuildModelList() == null) { + return; + } + jlAreaBuildListEnabled.value = false; + final int selectedTileset = jlBuildTsetList.getSelectedIndex(); + List IDs = buildHandler.getAreaBuildList().getAreaBuilds().get(selectedTileset).getBuildingIDs(); + DefaultListModel listModel = new DefaultListModel<>(); + for (Integer id : IDs) { + try { + listModel.addElement(id + ": " + buildHandler.getBuildModelList().getModelsName().get(id)); + } catch (Exception ex) { + listModel.addElement(id + ": " + "NOT FOUND"); } - jlAreaBuildList.setModel(listModel); - jlAreaBuildListEnabled.value = true; - - indexSelected = Math.max(Math.min(jlAreaBuildList.getModel().getSize() - 1, indexSelected), 0); - jlAreaBuildList.setSelectedIndex(indexSelected); - jlAreaBuildList.ensureIndexIsVisible(indexSelected); } + jlAreaBuildList.setModel(listModel); + jlAreaBuildListEnabled.value = true; + + indexSelected = Math.max(Math.min(jlAreaBuildList.getModel().getSize() - 1, indexSelected), 0); + jlAreaBuildList.setSelectedIndex(indexSelected); + jlAreaBuildList.ensureIndexIsVisible(indexSelected); } private void updateViewAnimationsList(int indexSelected) { if (buildHandler.getBuildModelAnims() != null) { - ArrayList names = new ArrayList<>(); - ArrayList animations = buildHandler.getBuildModelAnims().getAnimations(); + List names = new ArrayList<>(); + List animations = buildHandler.getBuildModelAnims().getAnimations(); animIconIndices = new ArrayList<>(animations.size()); for (int i = 0; i < animations.size(); i++) { - names.add(String.valueOf(i) + ": " + names.add(i + ": " + animations.get(i).getName() + " [" + animations.get(i).getAnimationTypeName() + "]"); animIconIndices.add(animations.get(i).getAnimationType()); @@ -1784,11 +1772,11 @@ private void updateViewAnimationsList(int indexSelected) { private void updateViewMapAnimationsList(int indexSelected) { if (buildHandler.getMapAnimations() != null) { - ArrayList names = new ArrayList<>(); - ArrayList animations = buildHandler.getMapAnimations().getAnimations(); + List names = new ArrayList<>(); + List animations = buildHandler.getMapAnimations().getAnimations(); mapAnimIconIndices = new ArrayList<>(animations.size()); for (int i = 0; i < animations.size(); i++) { - names.add(String.valueOf(i) + ": " + names.add(i + ": " + animations.get(i).getName() + " [" + animations.get(i).getAnimationTypeName() + "]"); mapAnimIconIndices.add(animations.get(i).getAnimationType()); @@ -1830,7 +1818,6 @@ public void loadGame(String folderPath) { + "Make sure that you select the main game folder.", "Error finding game files", JOptionPane.ERROR_MESSAGE); } - } public void setBoundingBoxes() { @@ -1944,10 +1931,9 @@ private void loadAnimationInNitroDisplay(NitroDisplayGL display, int objectIndex }*/ } - public void tryLoadBuildFile() { try { - String filePath = handler.getMapMatrix().getFilePathWithCoords(handler.getMapMatrix().getMatrix(), + String filePath = MapMatrix.getFilePathWithCoords(handler.getMapMatrix().getMatrix(), new File(handler.getMapMatrix().filePath).getParent(), new File(handler.getMapMatrix().filePath).getName(), handler.getMapSelected(), "nsbmd"); @@ -1988,7 +1974,7 @@ public void tryLoadBuildFile() { public void tryLoadMapAnimFile() { try { - String filePath = handler.getMapMatrix().getFilePathWithCoords(handler.getMapMatrix().getMatrix(), + String filePath = MapMatrix.getFilePathWithCoords(handler.getMapMatrix().getMatrix(), new File(handler.getMapMatrix().filePath).getParent(), new File(handler.getMapMatrix().filePath).getName(), handler.getMapSelected(), "nsbmd"); @@ -2021,18 +2007,14 @@ private void saveBuildings() throws IOException { private static File[] findFilesWithExtension(String folderPath, String extension) { File dir = new File(folderPath); - return dir.listFiles(new FilenameFilter() { - public boolean accept(File dir, String filename) { - return filename.endsWith(extension); - } - }); + return dir.listFiles((dir1, filename) -> filename.endsWith(extension)); } - private static void addElementsToList(JList list, MutableBoolean listEnabled, String name, int numElements, int indexSelected) { + private static void addElementsToList(JList list, MutableBoolean listEnabled, String name, int numElements, int indexSelected) { listEnabled.value = false; - DefaultListModel listModel = new DefaultListModel(); + DefaultListModel listModel = new DefaultListModel<>(); for (int i = 0; i < numElements; i++) { - listModel.addElement(name + " " + String.valueOf(i)); + listModel.addElement(name + " " + i); } list.setModel(listModel); listEnabled.value = true; @@ -2040,14 +2022,13 @@ private static void addElementsToList(JList list, MutableBoolean listEnabled, St indexSelected = Math.max(Math.min(list.getModel().getSize() - 1, indexSelected), 0); list.setSelectedIndex(indexSelected); list.ensureIndexIsVisible(indexSelected); - } - private static void addElementsToListWithIndices(JList list, MutableBoolean listEnabled, ArrayList elements, int indexSelected) { + private static void addElementsToListWithIndices(JList list, MutableBoolean listEnabled, List elements, int indexSelected) { listEnabled.value = false; - DefaultListModel listModel = new DefaultListModel(); + DefaultListModel listModel = new DefaultListModel<>(); for (int i = 0; i < elements.size(); i++) { - listModel.addElement(String.valueOf(i) + ": " + elements.get(i)); + listModel.addElement(i + ": " + elements.get(i)); } list.setModel(listModel); listEnabled.value = true; @@ -2055,13 +2036,12 @@ private static void addElementsToListWithIndices(JList list, MutableBoolean list indexSelected = Math.max(Math.min(list.getModel().getSize() - 1, indexSelected), 0); list.setSelectedIndex(indexSelected); list.ensureIndexIsVisible(indexSelected); - } - private static void addElementsToList(JList list, ArrayList elements, int indexSelected) { - DefaultListModel listModel = new DefaultListModel(); - for (int i = 0; i < elements.size(); i++) { - listModel.addElement(elements.get(i)); + private static void addElementsToList(JList list, List elements, int indexSelected) { + DefaultListModel listModel = new DefaultListModel<>(); + for (String element : elements) { + listModel.addElement(element); } list.setModel(listModel); @@ -2069,7 +2049,7 @@ private static void addElementsToList(JList list, ArrayList elements, in list.setSelectedIndex(indexSelected); } - private static void addIconToJList(JList list, ImageIcon icon) { + private static void addIconToJList(JList list, ImageIcon icon) { list.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { diff --git a/src/main/java/editor/buildingeditor2/NamedFile.java b/src/main/java/editor/buildingeditor2/NamedFile.java index a80f5f2..c392f6e 100644 --- a/src/main/java/editor/buildingeditor2/NamedFile.java +++ b/src/main/java/editor/buildingeditor2/NamedFile.java @@ -5,5 +5,5 @@ * @author Trifindo */ public interface NamedFile { - public abstract String getName(); + String getName(); } diff --git a/src/main/java/editor/buildingeditor2/animations/AddBuildAnimationDialog.java b/src/main/java/editor/buildingeditor2/animations/AddBuildAnimationDialog.java index ab40846..7000653 100644 --- a/src/main/java/editor/buildingeditor2/animations/AddBuildAnimationDialog.java +++ b/src/main/java/editor/buildingeditor2/animations/AddBuildAnimationDialog.java @@ -3,9 +3,9 @@ import java.awt.*; import java.awt.event.*; import java.util.ArrayList; +import java.util.List; +import java.util.Objects; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import javax.swing.event.*; @@ -17,26 +17,26 @@ */ public class AddBuildAnimationDialog extends JDialog { - public static final int ACEPTED = 0, CANCELED = 1; + public static final int ACCEPTED = 0, CANCELED = 1; private int returnValue = CANCELED; private int indexSelected = 0; private byte[] buildModelData; - private ArrayList buildingAnimationIDs; + private List buildingAnimationIDs; private BuildAnimations buildAnimations; - private ArrayList animIconIndices; - private ArrayList animIcons; + private List animIconIndices; + private List animIcons; public AddBuildAnimationDialog(Window owner) { super(owner); initComponents(); animIcons = new ArrayList<>(4); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbcaIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbtaIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbtpIcon.png"))); - animIcons.add(new ImageIcon(getClass().getResource("/icons/NsbmaIcon.png"))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbcaIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtaIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbtpIcon.png")))); + animIcons.add(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbmaIcon.png")))); animIconIndices = new ArrayList<>(); @@ -95,7 +95,7 @@ private void jlAnimationsListValueChanged(ListSelectionEvent e) { private void jbAcceptActionPerformed(ActionEvent e) { if (!buildingAnimationIDs.contains(indexSelected)) { - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } else { JOptionPane.showMessageDialog(this, "The animation selected is already used by the building.", @@ -108,7 +108,7 @@ private void jbCancelActionPerformed(ActionEvent e) { dispose(); } - public void init(byte[] buildModelData, BuildAnimations animations, ArrayList buildingAnimationIDs) { + public void init(byte[] buildModelData, BuildAnimations animations, List buildingAnimationIDs) { this.buildModelData = buildModelData; this.buildAnimations = animations; this.buildingAnimationIDs = buildingAnimationIDs; @@ -118,11 +118,11 @@ public void init(byte[] buildModelData, BuildAnimations animations, ArrayList names = new ArrayList<>(); - ArrayList animations = buildAnimations.getAnimations(); + List names = new ArrayList<>(); + List animations = buildAnimations.getAnimations(); animIconIndices = new ArrayList<>(animations.size()); for (int i = 0; i < animations.size(); i++) { - names.add(String.valueOf(i) + ": " + names.add(i + ": " + animations.get(i).getName() + " [" + animations.get(i).getAnimationTypeName() + "]"); animIconIndices.add(animations.get(i).getAnimationType()); @@ -131,10 +131,10 @@ private void updateViewAnimationsList(int indexSelected) { } } - private static void addElementsToList(JList list, ArrayList elements, int indexSelected) { - DefaultListModel listModel = new DefaultListModel(); - for (int i = 0; i < elements.size(); i++) { - listModel.addElement(elements.get(i)); + private static void addElementsToList(JList list, List elements, int indexSelected) { + DefaultListModel listModel = new DefaultListModel<>(); + for (String element : elements) { + listModel.addElement(element); } list.setModel(listModel); diff --git a/src/main/java/editor/buildingeditor2/animations/BuildAnimInfoHGSS.java b/src/main/java/editor/buildingeditor2/animations/BuildAnimInfoHGSS.java index a1a24b3..5e4f54f 100644 --- a/src/main/java/editor/buildingeditor2/animations/BuildAnimInfoHGSS.java +++ b/src/main/java/editor/buildingeditor2/animations/BuildAnimInfoHGSS.java @@ -1,11 +1,10 @@ - package editor.buildingeditor2.animations; import java.util.ArrayList; -import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.stream.Collectors; +import org.apache.commons.collections4.MapUtils; import utils.BinaryReader; import utils.BinaryWriter; @@ -16,59 +15,41 @@ public class BuildAnimInfoHGSS { public static final int MAX_ANIMS_PER_BUILDING = 4; - public static final Map namesAnimType1 = new HashMap() { - { - put((Integer) 255, "No Animation"); - put((Integer) 0, "Loop"); - put((Integer) 2, "Trigger (?)"); - put((Integer) 3, "Trigger"); - put((Integer) 8, "Day/Night Cycle"); - } - }; - - public static final Map namesLoopType = new HashMap() { - { - put((Integer) 0, "Loop"); - put((Integer) 1, "Trigger"); - } - }; - - public static final Map namesDoorSound = new HashMap() { - { - put((Integer) 0, "No sound"); - put((Integer) 1, "Wooden Door"); - put((Integer) 2, "Automatic Door"); - put((Integer) 3, "Old door (?)"); - put((Integer) 4, "Sliding Door"); - } - }; - - public static final Map namesNumAnims = new HashMap() { - { - put((Integer) 0, "0"); - put((Integer) 1, "1"); - put((Integer) 2, "2"); - put((Integer) 3, "3"); - put((Integer) 4, "4"); - } - }; - - public static final Map namesAnimType2 = new HashMap() { - { - put((Integer) 0, "No Animation"); - put((Integer) 1, "Loop"); - put((Integer) 2, "Trigger"); - } - }; - - public static final Map namesAnimType1Swap = namesAnimType1.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); - public static final Map namesLoopTypeSwap = namesLoopType.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); - public static final Map namesDoorSoundSwap = namesDoorSound.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); - public static final Map namesNumAnimsSwap = namesNumAnims.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); - public static final Map namesAnimType2Swap = namesAnimType2.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); - - - private ArrayList animIDs = new ArrayList<>(); + public static final Map namesAnimType1 = Map.of( + 255, "No Animation", + 0, "Loop", + 2, "Trigger (?)", + 3, "Trigger", + 8, "Day/Night Cycle"); + + public static final Map namesLoopType = Map.of(0, "Loop", 1, "Trigger"); + + public static final Map namesDoorSound = Map.of( + 0, "No sound", + 1, "Wooden Door", + 2, "Automatic Door", + 3, "Old door (?)", + 4, "Sliding Door"); + + public static final Map namesNumAnims = Map.of( + 0, "0", + 1, "1", + 2, "2", + 3, "3", + 4, "4"); + + public static final Map namesAnimType2 = Map.of( + 0, "No Animation", + 1, "Loop", + 2, "Trigger"); + + public static final Map namesAnimType1Swap = MapUtils.invertMap(namesAnimType1); + public static final Map namesLoopTypeSwap = MapUtils.invertMap(namesLoopType); + public static final Map namesDoorSoundSwap = MapUtils.invertMap(namesDoorSound); + public static final Map namesNumAnimsSwap = MapUtils.invertMap(namesNumAnims); + public static final Map namesAnimType2Swap = MapUtils.invertMap(namesAnimType2); + + private List animIDs = new ArrayList<>(); private int animType1;//second byte: FF=no animation, 00=loop, 02=trigger(?), 03=trigger, 08=day/night cycle private int loopType; //fourth byte: 00=Loop, 01=Trigger @@ -85,7 +66,7 @@ public BuildAnimInfoHGSS() { animType2 = 0; } - public BuildAnimInfoHGSS(byte[] data) throws Exception { + public BuildAnimInfoHGSS(byte[] data) { animType1 = BinaryReader.readUInt8(data, 1); loopType = BinaryReader.readUInt8(data, 3); @@ -101,14 +82,11 @@ public BuildAnimInfoHGSS(byte[] data) throws Exception { } } - public byte[] toByteArray() throws Exception { + public byte[] toByteArray() { byte[] data = new byte[24]; - if (animIDs.size() > 0) {//Has animation - BinaryWriter.writeUInt8(data, 0, 0x01); - } else { - BinaryWriter.writeUInt8(data, 0, 0xFF); - } + //Has animation + BinaryWriter.writeUInt8(data, 0, animIDs.size() > 0 ? 0x01 : 0xFF); BinaryWriter.writeUInt8(data, 1, animType1); BinaryWriter.writeUInt8(data, 3, loopType); BinaryWriter.writeUInt8(data, 4, doorSound); @@ -125,11 +103,11 @@ public byte[] toByteArray() throws Exception { return data; } - public ArrayList getAnimIDs() { + public List getAnimIDs() { return animIDs; } - public void setAnimIDs(ArrayList animIDs) { + public void setAnimIDs(List animIDs) { this.animIDs = animIDs; } @@ -153,8 +131,6 @@ public int getLoopType() { return loopType; } - - /* public BuildAnimInfoHGSS() { animType1 = -128; //0xFF diff --git a/src/main/java/editor/buildingeditor2/animations/BuildAnimations.java b/src/main/java/editor/buildingeditor2/animations/BuildAnimations.java index 04568bd..f2da45b 100644 --- a/src/main/java/editor/buildingeditor2/animations/BuildAnimations.java +++ b/src/main/java/editor/buildingeditor2/animations/BuildAnimations.java @@ -7,13 +7,14 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ public class BuildAnimations { - private ArrayList animations; + private final List animations; public BuildAnimations(Narc narc) { final int numAnimations = narc.getRoot().getFiles().size(); @@ -25,7 +26,7 @@ public BuildAnimations(Narc narc) { public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(animations.size()); + List files = new ArrayList<>(animations.size()); for (ModelAnimation animation : animations) { files.add(new NarcFile("", root, animation.getData())); } @@ -42,12 +43,13 @@ public void addAnimation(String path) throws IOException { } public void replaceAnimation(int index, String path) throws IOException { - if (index >= 0 && index < animations.size()) { - try { - animations.set(index, new ModelAnimation(path, animations.size())); - } catch (Exception ex) { - throw new IOException(); - } + if (index < 0 || index >= animations.size()) { + return; + } + try { + animations.set(index, new ModelAnimation(path, animations.size())); + } catch (Exception ex) { + throw new IOException(); } } @@ -57,7 +59,7 @@ public void saveAnimation(int index, String path) throws IOException { } } - public ArrayList getAnimations() { + public List getAnimations() { return animations; } @@ -68,5 +70,4 @@ public String getAnimationTypeName(int index) { public int getAnimationType(int index) { return animations.get(index).getAnimationType(); } - } diff --git a/src/main/java/editor/buildingeditor2/animations/BuildAnimeListDPPt.java b/src/main/java/editor/buildingeditor2/animations/BuildAnimeListDPPt.java index 493d4a7..e54ce85 100644 --- a/src/main/java/editor/buildingeditor2/animations/BuildAnimeListDPPt.java +++ b/src/main/java/editor/buildingeditor2/animations/BuildAnimeListDPPt.java @@ -6,6 +6,7 @@ import formats.narc2.NarcFolder; import java.util.ArrayList; +import java.util.List; import utils.BinaryReader; import utils.BinaryWriter; @@ -16,9 +17,9 @@ public class BuildAnimeListDPPt { public static final int MAX_ANIMS_PER_BUILDING = 4; - private ArrayList> animations; - private ArrayList secondBytes; - private ArrayList slopeAnimations; + private final List> animations; + private final List secondBytes; + private final List slopeAnimations; public BuildAnimeListDPPt(Narc narc) { NarcFolder root = narc.getRoot(); @@ -32,10 +33,10 @@ public BuildAnimeListDPPt(Narc narc) { } } - public Narc toNarc() throws Exception { + public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(animations.size()); + List files = new ArrayList<>(animations.size()); for (int i = 0; i < animations.size(); i++) { files.add(new NarcFile("", root, animationToByteArray(i))); } @@ -43,7 +44,7 @@ public Narc toNarc() throws Exception { return new Narc(root); } - private byte[] animationToByteArray(int animationIndex) throws Exception { + private byte[] animationToByteArray(int animationIndex) { byte[] data = new byte[4 + MAX_ANIMS_PER_BUILDING * 4]; if (animations.get(animationIndex).isEmpty()) { BinaryWriter.writeUInt16(data, 0, 0xFFFF); @@ -65,8 +66,8 @@ private byte[] animationToByteArray(int animationIndex) throws Exception { return data; } - private static ArrayList loadAnimation(byte[] data) { - ArrayList animationIndices; + private static List loadAnimation(byte[] data) { + List animationIndices; try { if (BinaryReader.readUInt8(data, 0) != 255) { //Has animation animationIndices = new ArrayList<>(); @@ -98,7 +99,7 @@ public void addBuildingAnimation(ArrayList newAnimations, byte secondBy public void addBuildingAnimation(int buildIndex, int animationIndex) { if (buildIndex >= 0 && buildIndex < animations.size()) { - ArrayList buildAnimations = animations.get(buildIndex); + List buildAnimations = animations.get(buildIndex); if (buildAnimations.size() < MAX_ANIMS_PER_BUILDING) { buildAnimations.add(animationIndex); } @@ -107,7 +108,7 @@ public void addBuildingAnimation(int buildIndex, int animationIndex) { public void removeBuildingAnimation(int buildIndex, int animationIndex) { if (buildIndex >= 0 && buildIndex < animations.size()) { - ArrayList buildAnimations = animations.get(buildIndex); + List buildAnimations = animations.get(buildIndex); if (!buildAnimations.isEmpty()) { buildAnimations.remove(animationIndex); if (buildAnimations.isEmpty()) { @@ -119,7 +120,7 @@ public void removeBuildingAnimation(int buildIndex, int animationIndex) { public void replaceBuildingAnimation(int buildIndex, int animationIndex, int oldAnimationIndex) { if (buildIndex >= 0 && buildIndex < animations.size()) { - ArrayList buildAnimations = animations.get(buildIndex); + List buildAnimations = animations.get(buildIndex); if (oldAnimationIndex >= 0 && oldAnimationIndex < buildAnimations.size()) { buildAnimations.set(oldAnimationIndex, animationIndex); } @@ -142,14 +143,13 @@ public void removeBuildingAnimation(int index) { } } - public ArrayList> getAnimations() { + public List> getAnimations() { return animations; } - public ArrayList getSecondBytes() { + public List getSecondBytes() { return secondBytes; } - public ArrayList getSlopeAnimations(){return slopeAnimations; } - + public List getSlopeAnimations(){return slopeAnimations; } } diff --git a/src/main/java/editor/buildingeditor2/animations/BuildAnimeListHGSS.java b/src/main/java/editor/buildingeditor2/animations/BuildAnimeListHGSS.java index 74933f2..a3ed59e 100644 --- a/src/main/java/editor/buildingeditor2/animations/BuildAnimeListHGSS.java +++ b/src/main/java/editor/buildingeditor2/animations/BuildAnimeListHGSS.java @@ -1,4 +1,3 @@ - package editor.buildingeditor2.animations; import formats.narc2.Narc; @@ -6,17 +5,17 @@ import formats.narc2.NarcFolder; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ public class BuildAnimeListHGSS { - //private ArrayList> animations; //private ArrayList secondBytes; - private ArrayList animations; + private final List animations; public BuildAnimeListHGSS(Narc narc) { NarcFolder root = narc.getRoot(); @@ -30,10 +29,10 @@ public BuildAnimeListHGSS(Narc narc) { } } - public Narc toNarc() throws Exception { + public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(animations.size()); + List files = new ArrayList<>(animations.size()); for (BuildAnimInfoHGSS anim : animations) { files.add(new NarcFile("", root, anim.toByteArray())); } @@ -86,7 +85,7 @@ private static ArrayList loadAnimation(byte[] data) { } }*/ - public void addBuildingAnimation(ArrayList newAnimations, byte secondByte) { + public void addBuildingAnimation(List newAnimations, byte secondByte) { BuildAnimInfoHGSS anim = new BuildAnimInfoHGSS(); anim.setAnimIDs(newAnimations); animations.add(anim); @@ -94,7 +93,7 @@ public void addBuildingAnimation(ArrayList newAnimations, byte secondBy public void addBuildingAnimation(int buildIndex, int animationIndex) { if (buildIndex >= 0 && buildIndex < animations.size()) { - ArrayList buildAnimations = animations.get(buildIndex).getAnimIDs(); + List buildAnimations = animations.get(buildIndex).getAnimIDs(); if (buildAnimations.size() < BuildAnimInfoHGSS.MAX_ANIMS_PER_BUILDING) { buildAnimations.add(animationIndex); } @@ -103,7 +102,7 @@ public void addBuildingAnimation(int buildIndex, int animationIndex) { public void removeBuildingAnimation(int buildIndex, int animationIndex) { if (buildIndex >= 0 && buildIndex < animations.size()) { - ArrayList buildAnimations = animations.get(buildIndex).getAnimIDs(); + List buildAnimations = animations.get(buildIndex).getAnimIDs(); if (!buildAnimations.isEmpty()) { buildAnimations.remove(animationIndex); if (buildAnimations.isEmpty()) { @@ -115,14 +114,14 @@ public void removeBuildingAnimation(int buildIndex, int animationIndex) { public void replaceBuildingAnimation(int buildIndex, int animationIndex, int oldAnimationIndex) { if (buildIndex >= 0 && buildIndex < animations.size()) { - ArrayList buildAnimations = animations.get(buildIndex).getAnimIDs(); + List buildAnimations = animations.get(buildIndex).getAnimIDs(); if (oldAnimationIndex >= 0 && oldAnimationIndex < buildAnimations.size()) { buildAnimations.set(oldAnimationIndex, animationIndex); } } } - public void replaceBuildingAnimationIDs(int index, ArrayList newAnimations) { + public void replaceBuildingAnimationIDs(int index, List newAnimations) { if (index >= 0 && index < animations.size()) { animations.get(index).setAnimIDs(newAnimations); } @@ -134,8 +133,7 @@ public void removeBuildingAnimation(int index) { } } - public ArrayList getAnimations() { + public List getAnimations() { return animations; } - } diff --git a/src/main/java/editor/buildingeditor2/animations/MapAnimations.java b/src/main/java/editor/buildingeditor2/animations/MapAnimations.java index 4886485..5443906 100644 --- a/src/main/java/editor/buildingeditor2/animations/MapAnimations.java +++ b/src/main/java/editor/buildingeditor2/animations/MapAnimations.java @@ -7,13 +7,14 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ public class MapAnimations { - private ArrayList animations; + private final List animations; public MapAnimations(Narc narc) { final int numAnimations = narc.getRoot().getFiles().size(); @@ -25,7 +26,7 @@ public MapAnimations(Narc narc) { public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(animations.size()); + List files = new ArrayList<>(animations.size()); for (ModelAnimation animation : animations) { files.add(new NarcFile("", root, animation.getData())); } @@ -57,7 +58,7 @@ public void saveAnimation(int index, String path) throws IOException { } } - public ArrayList getAnimations() { + public List getAnimations() { return animations; } @@ -68,5 +69,4 @@ public String getAnimationTypeName(int index) { public int getAnimationType(int index) { return animations.get(index).getAnimationType(); } - } diff --git a/src/main/java/editor/buildingeditor2/animations/ModelAnimation.java b/src/main/java/editor/buildingeditor2/animations/ModelAnimation.java index 65e4636..5dc13ad 100644 --- a/src/main/java/editor/buildingeditor2/animations/ModelAnimation.java +++ b/src/main/java/editor/buildingeditor2/animations/ModelAnimation.java @@ -1,4 +1,3 @@ - package editor.buildingeditor2.animations; import editor.buildingeditor2.NamedFile; @@ -7,7 +6,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.ArrayList; +import java.util.List; import utils.BinaryReader; import utils.Utils; @@ -23,27 +22,12 @@ public class ModelAnimation implements NamedFile { public static final int TYPE_NSBMA = 3; public static final int TYPE_NSBVA = 4; - private static final ArrayList typeFileNames = new ArrayList() { - { - add("BCA0"); - add("BTA0"); - add("BTP0"); - add("BMA0"); - } - }; - - private static final ArrayList typeFileExtensions = new ArrayList() { - { - add("nsbca"); - add("nsbta"); - add("nsbtp"); - add("nsbma"); - } - }; + private static final List typeFileNames = List.of("BCA0", "BTA0", "BTP0", "BMA0"); + private static final List typeFileExtensions = List.of("nsbca", "nsbta", "nsbtp", "nsbma"); private String name; private int type; - private byte[] data; + private final byte[] data; public ModelAnimation(byte[] data, int index) { this.data = data; @@ -56,7 +40,7 @@ public String getName() { return name; } - public ModelAnimation(String path, int index) throws IOException, Exception { + public ModelAnimation(String path, int index) throws Exception { byte[] data = Files.readAllBytes(Paths.get(path)); String signature = BinaryReader.readString(data, 0, 4); if (typeFileNames.contains(signature)) { @@ -79,7 +63,7 @@ public void calculateAnimationName(int index) { try { name = getAnimationName(data); } catch (Exception ex) { - name = "Unknown animation " + String.valueOf(index); + name = "Unknown animation " + index; } } @@ -111,15 +95,14 @@ public byte[] getData() { return data; } - private static String getAnimationName(byte[] data) throws Exception { + private static String getAnimationName(byte[] data) { long nameOffset = BinaryReader.readUInt32(data, 16); String name = BinaryReader.readString(data, (int) (32 + nameOffset), 16); - return Utils.removeLastOcurrences(name, '\u0000'); + return Utils.removeLastOccurrences(name, '\u0000'); } - private static int getAnimationType(byte[] data) throws Exception { + private static int getAnimationType(byte[] data) { String type = BinaryReader.readString(data, 0, 4); return typeFileNames.indexOf(type); } - } diff --git a/src/main/java/editor/buildingeditor2/areabuild/AddBuildModelDialog.java b/src/main/java/editor/buildingeditor2/areabuild/AddBuildModelDialog.java index 165d84c..fe2d5d5 100644 --- a/src/main/java/editor/buildingeditor2/areabuild/AddBuildModelDialog.java +++ b/src/main/java/editor/buildingeditor2/areabuild/AddBuildModelDialog.java @@ -2,10 +2,9 @@ import java.awt.*; import java.awt.event.*; -import java.util.ArrayList; +import java.util.List; +import java.util.Objects; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import javax.swing.event.*; @@ -17,20 +16,18 @@ * @author Trifindo, JackHack96 */ public class AddBuildModelDialog extends JDialog { - public static final int ACEPTED = 0, CANCELED = 1; + public static final int ACCEPTED = 0, CANCELED = 1; private int returnValue = CANCELED; private int indexSelected = 0; private BuildModelList buildings; //private AreaBuild areaBuild; - private ArrayList addedBuildings; - - private ImageIcon nsbmdIcon; + private List addedBuildings; public AddBuildModelDialog(Window owner) { super(owner); initComponents(); - nsbmdIcon = new ImageIcon(getClass().getResource("/icons/NsbmdIcon.png")); + ImageIcon nsbmdIcon = new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/NsbmdIcon.png"))); addIconToJList(jlBuildModelList, nsbmdIcon); @@ -55,14 +52,14 @@ private void jlBuildModelListValueChanged(ListSelectionEvent e) { private void jbAcceptActionPerformed(ActionEvent e) { if (addedBuildings != null) { if (!addedBuildings.contains(indexSelected)) { - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } else { JOptionPane.showMessageDialog(this, "The building selected is already in the list.", "Can't add building", JOptionPane.ERROR_MESSAGE); } } else { - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } } @@ -72,7 +69,7 @@ private void jbCancelActionPerformed(ActionEvent e) { dispose(); } - public void init(BuildModelList buildings, ArrayList addedBuildings) { + public void init(BuildModelList buildings, List addedBuildings) { this.buildings = buildings; this.addedBuildings = addedBuildings; @@ -94,10 +91,10 @@ private void updateViewBuildModelList(int indexSelected) { } - private static void addElementsToListWithIndices(JList list, ArrayList elements, int indexSelected) { - DefaultListModel listModel = new DefaultListModel(); + private static void addElementsToListWithIndices(JList list, List elements, int indexSelected) { + DefaultListModel listModel = new DefaultListModel<>(); for (int i = 0; i < elements.size(); i++) { - listModel.addElement(String.valueOf(i) + ": " + elements.get(i)); + listModel.addElement(i + ": " + elements.get(i)); } list.setModel(listModel); @@ -106,7 +103,7 @@ private static void addElementsToListWithIndices(JList list, ArrayList e list.ensureIndexIsVisible(indexSelected); } - private static void addIconToJList(JList list, ImageIcon icon) { + private static void addIconToJList(JList list, ImageIcon icon) { list.setCellRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { diff --git a/src/main/java/editor/buildingeditor2/areabuild/AreaBuild.java b/src/main/java/editor/buildingeditor2/areabuild/AreaBuild.java index 99a4637..e6e0461 100644 --- a/src/main/java/editor/buildingeditor2/areabuild/AreaBuild.java +++ b/src/main/java/editor/buildingeditor2/areabuild/AreaBuild.java @@ -2,6 +2,7 @@ package editor.buildingeditor2.areabuild; import java.util.ArrayList; +import java.util.List; import utils.BinaryReader; import utils.BinaryWriter; @@ -11,9 +12,9 @@ */ public class AreaBuild { - private ArrayList buildingIDs; + private List buildingIDs; - public AreaBuild(ArrayList buildingIDs) { + public AreaBuild(List buildingIDs) { this.buildingIDs = buildingIDs; } @@ -29,7 +30,7 @@ public AreaBuild(byte[] data) { } } - public byte[] toByteArray() throws Exception { + public byte[] toByteArray() { byte[] data = new byte[2 + buildingIDs.size() * 2]; BinaryWriter.writeUInt16(data, 0, buildingIDs.size()); for (int i = 0; i < buildingIDs.size(); i++) { @@ -38,9 +39,7 @@ public byte[] toByteArray() throws Exception { return data; } - public ArrayList getBuildingIDs() { + public List getBuildingIDs() { return buildingIDs; } - - } diff --git a/src/main/java/editor/buildingeditor2/areabuild/AreaBuildList.java b/src/main/java/editor/buildingeditor2/areabuild/AreaBuildList.java index c68cd68..76ea86f 100644 --- a/src/main/java/editor/buildingeditor2/areabuild/AreaBuildList.java +++ b/src/main/java/editor/buildingeditor2/areabuild/AreaBuildList.java @@ -6,26 +6,26 @@ import formats.narc2.NarcFolder; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ public class AreaBuildList { - private ArrayList areaBuilds; + private final List areaBuilds; public AreaBuildList(Narc narc) { - final int numFiles = narc.getRoot().getFiles().size(); - areaBuilds = new ArrayList<>(numFiles); + areaBuilds = new ArrayList<>(narc.getRoot().getFiles().size()); for (NarcFile file : narc.getRoot().getFiles()) { areaBuilds.add(new AreaBuild(file.getData())); } System.out.println("Donete"); } - public Narc toNarc() throws Exception { + public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(areaBuilds.size()); + List files = new ArrayList<>(areaBuilds.size()); for (AreaBuild areaBuild : areaBuilds) { files.add(new NarcFile("", root, areaBuild.toByteArray())); } @@ -33,8 +33,8 @@ public Narc toNarc() throws Exception { return new Narc(root); } - public ArrayList getBuildingOccurrences(int buildingIndex) { - ArrayList ocurrences = new ArrayList<>(); + public List getBuildingOccurrences(int buildingIndex) { + List ocurrences = new ArrayList<>(); for (int i = 0; i < areaBuilds.size(); i++) { AreaBuild areaBuild = areaBuilds.get(i); for (Integer buildID : areaBuild.getBuildingIDs()) { @@ -47,9 +47,8 @@ public ArrayList getBuildingOccurrences(int buildingIndex) { return ocurrences; } - public void removeBuildingOccurences(int buildingIndex) { - for (int i = 0; i < areaBuilds.size(); i++) { - AreaBuild areaBuild = areaBuilds.get(i); + public void removeBuildingOccurrences(int buildingIndex) { + for (AreaBuild areaBuild : areaBuilds) { for (int j = 0; j < areaBuild.getBuildingIDs().size(); j++) { if (areaBuild.getBuildingIDs().get(j) == buildingIndex) { areaBuild.getBuildingIDs().remove(j); @@ -60,8 +59,7 @@ public void removeBuildingOccurences(int buildingIndex) { } public void shiftBuildingIDsFrom(int buildingIndex) { - for (int i = 0; i < areaBuilds.size(); i++) { - AreaBuild areaBuild = areaBuilds.get(i); + for (AreaBuild areaBuild : areaBuilds) { for (int j = 0; j < areaBuild.getBuildingIDs().size(); j++) { if (areaBuild.getBuildingIDs().get(j) > buildingIndex) { areaBuild.getBuildingIDs().set(j, areaBuild.getBuildingIDs().get(j) - 1); @@ -70,13 +68,13 @@ public void shiftBuildingIDsFrom(int buildingIndex) { } } - public ArrayList getAreaBuilds() { + public List getAreaBuilds() { return areaBuilds; } public void addBuilding(int areaBuildIndex, int buildingIndex) { if (areaBuildIndex >= 0 && areaBuildIndex < areaBuilds.size()) { - ArrayList indices = areaBuilds.get(areaBuildIndex).getBuildingIDs(); + List indices = areaBuilds.get(areaBuildIndex).getBuildingIDs(); if (!indices.contains(buildingIndex)) { indices.add(buildingIndex); } @@ -85,7 +83,7 @@ public void addBuilding(int areaBuildIndex, int buildingIndex) { public void replaceBuilding(int areaBuildIndex, int buildingIndex, int oldBuildingIndex) { if (areaBuildIndex >= 0 && areaBuildIndex < areaBuilds.size()) { - ArrayList indices = areaBuilds.get(areaBuildIndex).getBuildingIDs(); + List indices = areaBuilds.get(areaBuildIndex).getBuildingIDs(); if (!indices.contains(buildingIndex)) { if (oldBuildingIndex >= 0 && oldBuildingIndex < indices.size()) { indices.set(oldBuildingIndex, buildingIndex); @@ -96,11 +94,10 @@ public void replaceBuilding(int areaBuildIndex, int buildingIndex, int oldBuildi public void removeBuilding(int areaBuildIndex, int buildingIndex) { if (areaBuildIndex >= 0 && areaBuildIndex < areaBuilds.size()) { - ArrayList indices = areaBuilds.get(areaBuildIndex).getBuildingIDs(); + List indices = areaBuilds.get(areaBuildIndex).getBuildingIDs(); if (buildingIndex >= 0 && buildingIndex < indices.size()) { indices.remove(buildingIndex); } } } - } diff --git a/src/main/java/editor/buildingeditor2/areadata/AreaDataDPPt.java b/src/main/java/editor/buildingeditor2/areadata/AreaDataDPPt.java index 172a5ea..ce71738 100644 --- a/src/main/java/editor/buildingeditor2/areadata/AreaDataDPPt.java +++ b/src/main/java/editor/buildingeditor2/areadata/AreaDataDPPt.java @@ -14,7 +14,7 @@ public class AreaDataDPPt { private int unknown1; private int areaType; - public AreaDataDPPt(byte[] data) throws Exception { + public AreaDataDPPt(byte[] data) { buildingTilesetID = (int) BinaryReader.readUInt16(data, 0); mapTilesetID = (int) BinaryReader.readUInt16(data, 2); unknown1 = (int) BinaryReader.readUInt16(data, 4); @@ -28,7 +28,7 @@ public AreaDataDPPt() { areaType = 0; } - public byte[] toByteArray() throws Exception { + public byte[] toByteArray() { byte[] data = new byte[8]; BinaryWriter.writeUInt16(data, 0, buildingTilesetID); BinaryWriter.writeUInt16(data, 2, mapTilesetID); @@ -68,6 +68,4 @@ public int getUnknown2() { public void setAreaType(int unknown2) { this.areaType = unknown2; } - - } diff --git a/src/main/java/editor/buildingeditor2/areadata/AreaDataHGSS.java b/src/main/java/editor/buildingeditor2/areadata/AreaDataHGSS.java index 065a6e8..35fbbc9 100644 --- a/src/main/java/editor/buildingeditor2/areadata/AreaDataHGSS.java +++ b/src/main/java/editor/buildingeditor2/areadata/AreaDataHGSS.java @@ -1,10 +1,6 @@ package editor.buildingeditor2.areadata; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Collectors; - import utils.BinaryReader; import utils.BinaryWriter; @@ -30,13 +26,12 @@ public class AreaDataHGSS { private int areaType; private int lightType; - public AreaDataHGSS(byte[] data) throws Exception { + public AreaDataHGSS(byte[] data) { buildingTilesetID = (int) BinaryReader.readUInt16(data, 0); mapTilesetID = (int) BinaryReader.readUInt16(data, 2); dynamicTexType = (int) BinaryReader.readUInt16(data, 4); - areaType = (int) BinaryReader.readUInt8(data, 6); - lightType = (int) BinaryReader.readUInt8(data, 7); - + areaType = BinaryReader.readUInt8(data, 6); + lightType = BinaryReader.readUInt8(data, 7); } public AreaDataHGSS() { @@ -47,7 +42,7 @@ public AreaDataHGSS() { lightType = 1; } - public byte[] toByteArray() throws Exception { + public byte[] toByteArray() { byte[] data = new byte[8]; BinaryWriter.writeUInt16(data, 0, buildingTilesetID); BinaryWriter.writeUInt16(data, 2, mapTilesetID); @@ -104,5 +99,4 @@ public void setDynamicTexType(int dynamicTexType) { public void setLightType(int lightType) { this.lightType = lightType; } - } diff --git a/src/main/java/editor/buildingeditor2/areadata/AreaDataListDPPt.java b/src/main/java/editor/buildingeditor2/areadata/AreaDataListDPPt.java index 63b8f80..518cc2a 100644 --- a/src/main/java/editor/buildingeditor2/areadata/AreaDataListDPPt.java +++ b/src/main/java/editor/buildingeditor2/areadata/AreaDataListDPPt.java @@ -6,15 +6,16 @@ import formats.narc2.NarcFolder; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ public class AreaDataListDPPt { - private ArrayList areaDatas; + private final List areaDatas; - public AreaDataListDPPt(Narc narc) throws Exception { + public AreaDataListDPPt(Narc narc) { final int numFiles = narc.getRoot().getFiles().size(); areaDatas = new ArrayList<>(numFiles); for (int i = 0; i < numFiles; i++) { @@ -22,9 +23,9 @@ public AreaDataListDPPt(Narc narc) throws Exception { } } - public Narc toNarc() throws Exception { + public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(areaDatas.size()); + List files = new ArrayList<>(areaDatas.size()); for (AreaDataDPPt areaData : areaDatas) { files.add(new NarcFile("", root, areaData.toByteArray())); } @@ -32,8 +33,7 @@ public Narc toNarc() throws Exception { return new Narc(root); } - public ArrayList getAreaDatas() { + public List getAreaDatas() { return areaDatas; } - } diff --git a/src/main/java/editor/buildingeditor2/areadata/AreaDataListHGSS.java b/src/main/java/editor/buildingeditor2/areadata/AreaDataListHGSS.java index 8d9f535..31d5606 100644 --- a/src/main/java/editor/buildingeditor2/areadata/AreaDataListHGSS.java +++ b/src/main/java/editor/buildingeditor2/areadata/AreaDataListHGSS.java @@ -6,15 +6,16 @@ import formats.narc2.NarcFolder; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ public class AreaDataListHGSS { - private ArrayList areaDatas; + private final List areaDatas; - public AreaDataListHGSS(Narc narc) throws Exception { + public AreaDataListHGSS(Narc narc) { final int numFiles = narc.getRoot().getFiles().size(); areaDatas = new ArrayList<>(numFiles); for (int i = 0; i < numFiles; i++) { @@ -22,9 +23,9 @@ public AreaDataListHGSS(Narc narc) throws Exception { } } - public Narc toNarc() throws Exception { + public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(areaDatas.size()); + List files = new ArrayList<>(areaDatas.size()); for (AreaDataHGSS areaData : areaDatas) { files.add(new NarcFile("", root, areaData.toByteArray())); } @@ -32,8 +33,7 @@ public Narc toNarc() throws Exception { return new Narc(root); } - public ArrayList getAreaDatas() { + public List getAreaDatas() { return areaDatas; } - } diff --git a/src/main/java/editor/buildingeditor2/buildfile/Build.java b/src/main/java/editor/buildingeditor2/buildfile/Build.java index be964a2..a7f6ae0 100644 --- a/src/main/java/editor/buildingeditor2/buildfile/Build.java +++ b/src/main/java/editor/buildingeditor2/buildfile/Build.java @@ -1,4 +1,3 @@ - package editor.buildingeditor2.buildfile; /** @@ -13,13 +12,7 @@ public class Build { private float scaleX, scaleY, scaleZ; public Build() { - this.modelID = 0; - this.x = 0.0f; - this.y = 0.0f; - this.z = 0.0f; - this.scaleX = 1.0f; - this.scaleY = 1.0f; - this.scaleZ = 1.0f; + this(0, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } public Build(int modelID, float x, float y, float z, float scaleX, float scaleY, float scaleZ) { @@ -87,6 +80,4 @@ public float getScaleZ() { public void setScaleZ(float scaleZ) { this.scaleZ = scaleZ; } - - } diff --git a/src/main/java/editor/buildingeditor2/buildfile/BuildFile.java b/src/main/java/editor/buildingeditor2/buildfile/BuildFile.java index 06db423..15010ce 100644 --- a/src/main/java/editor/buildingeditor2/buildfile/BuildFile.java +++ b/src/main/java/editor/buildingeditor2/buildfile/BuildFile.java @@ -1,4 +1,3 @@ - package editor.buildingeditor2.buildfile; import java.io.File; @@ -18,7 +17,7 @@ public class BuildFile { public static final String fileExtension = "bld"; - private List builds; + private final List builds; public BuildFile() { builds = new ArrayList<>(); @@ -29,7 +28,7 @@ public BuildFile(String path) throws IOException { byte[] data = Files.readAllBytes(new File(path).toPath()); int numBuilds = data.length / Build.dataSize; - builds = new ArrayList(numBuilds); + builds = new ArrayList<>(numBuilds); for (int i = 0, offset = 0; i < numBuilds; i++) { offset = Build.dataSize * i; @@ -49,13 +48,12 @@ public BuildFile(String path) throws IOException { builds.add(new Build(buildID, x, y, z, xScale, yScale, zScale)); } - } catch (Exception ex) { throw new IOException(); } } - public byte[] toByteArray() throws Exception { + public byte[] toByteArray() { byte[] data = new byte[builds.size() * Build.dataSize]; for (int i = 0, offset = 0; i < builds.size(); i++) { @@ -96,5 +94,4 @@ public void saveToFile(String path) throws IOException { public List getBuilds() { return builds; } - } diff --git a/src/main/java/editor/buildingeditor2/buildmodel/BuildModelList.java b/src/main/java/editor/buildingeditor2/buildmodel/BuildModelList.java index d43d847..7310619 100644 --- a/src/main/java/editor/buildingeditor2/buildmodel/BuildModelList.java +++ b/src/main/java/editor/buildingeditor2/buildmodel/BuildModelList.java @@ -10,6 +10,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.List; import utils.BinaryReader; import utils.Utils; @@ -19,8 +20,8 @@ */ public class BuildModelList { - private ArrayList buildModelsData; - private ArrayList buildModelsName; + private final List buildModelsData; + private List buildModelsName; public BuildModelList(Narc narc) { final int numModels = narc.getRoot().getFiles().size(); @@ -33,21 +34,19 @@ public BuildModelList(Narc narc) { public Narc toNarc() { NarcFolder root = new NarcFolder(); - for (int i = 0; i < buildModelsData.size(); i++) { - root.getFiles().add(new NarcFile("", root, buildModelsData.get(i))); + for (byte[] buildModelsDatum : buildModelsData) { + root.getFiles().add(new NarcFile("", root, buildModelsDatum)); } return new Narc(root); } - public void addBuildingModel(String path) throws IOException, Exception { - byte[] data = readBuildingModel(path); - buildModelsData.add(data); + public void addBuildingModel(String path) throws Exception { + buildModelsData.add(readBuildingModel(path)); calculateModelsName(); } - public void replaceBuildingModel(int index, String path) throws IOException, Exception { - byte[] data = readBuildingModel(path); - buildModelsData.set(index, data); + public void replaceBuildingModel(int index, String path) throws Exception { + buildModelsData.set(index, readBuildingModel(path)); calculateModelsName(); } @@ -66,7 +65,7 @@ public void removeBuildingModel(int index) { } } - private static byte[] readBuildingModel(String path) throws IOException, Exception { + private static byte[] readBuildingModel(String path) throws Exception { byte[] data = Files.readAllBytes(Paths.get(path)); if (BinaryReader.readString(data, 0, 4).equals("BMD0")) { return data; @@ -90,11 +89,11 @@ public void removeModel(int index) { calculateModelsName(); } - public ArrayList getModelsData() { + public List getModelsData() { return buildModelsData; } - public ArrayList getModelsName() { + public List getModelsName() { return buildModelsName; } @@ -104,7 +103,7 @@ private void calculateModelsName() { try { buildModelsName.add(getModelName(buildModelsData.get(i))); } catch (Exception ex) { - buildModelsName.add("Unknown model " + String.valueOf(i)); + buildModelsName.add("Unknown model " + i); } } } @@ -113,9 +112,8 @@ public int getSize() { return buildModelsData.size(); } - private static String getModelName(byte[] data) throws Exception { + private static String getModelName(byte[] data) { long nameOffset = BinaryReader.readUInt32(data, 16); - return Utils.removeLastOcurrences(BinaryReader.readString(data, (int) (32 + nameOffset), 16), '\u0000'); + return Utils.removeLastOccurrences(BinaryReader.readString(data, (int) (32 + nameOffset), 16), '\u0000'); } - } diff --git a/src/main/java/editor/buildingeditor2/buildmodel/BuildModelMatshp.java b/src/main/java/editor/buildingeditor2/buildmodel/BuildModelMatshp.java index 6a96941..715d7e2 100644 --- a/src/main/java/editor/buildingeditor2/buildmodel/BuildModelMatshp.java +++ b/src/main/java/editor/buildingeditor2/buildmodel/BuildModelMatshp.java @@ -1,10 +1,12 @@ package editor.buildingeditor2.buildmodel; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import utils.BinaryReader; import utils.BinaryWriter; @@ -14,10 +16,9 @@ */ public class BuildModelMatshp { - private ArrayList> materials; + private final List> materials; - public BuildModelMatshp(String path) throws FileNotFoundException, - IOException { + public BuildModelMatshp(String path) throws IOException { BinaryReader br = new BinaryReader(path); //Read header @@ -25,9 +26,9 @@ public BuildModelMatshp(String path) throws FileNotFoundException, int numMaterials = br.readUInt16(); //Read block 1 - ArrayList> newMaterials = new ArrayList<>(numBuildings); - ArrayList offsets = new ArrayList<>(numBuildings); - ArrayList matsPerBuild = new ArrayList<>(numBuildings); + List> newMaterials = new ArrayList<>(numBuildings); + List offsets = new ArrayList<>(numBuildings); + List matsPerBuild = new ArrayList<>(numBuildings); for (int i = 0; i < numBuildings; i++) { int nMatsPerBuild = br.readUInt16(); int offset = br.readUInt16(); @@ -44,10 +45,9 @@ public BuildModelMatshp(String path) throws FileNotFoundException, for (int i = 0; i < numBuildings; i++) { if (offsets.get(i) != null) { int nMats = matsPerBuild.get(i); - ArrayList matInBuild = new ArrayList<>(nMats); - for (int j = 0; j < nMats; j++) { - matInBuild.add(0); - } + List matInBuild = IntStream.range(0, nMats) + .mapToObj(j -> 0) + .collect(Collectors.toCollection(() -> new ArrayList<>(nMats))); for (int j = 0; j < nMats; j++) { matInBuild.set(br.readUInt16(), br.readUInt16()); @@ -61,32 +61,31 @@ public BuildModelMatshp(String path) throws FileNotFoundException, br.close(); materials = newMaterials; - } - public void saveToFile(String path) throws FileNotFoundException, IOException { + public void saveToFile(String path) throws IOException { BinaryWriter bw = new BinaryWriter(path); bw.writeUInt16(materials.size()); bw.writeUInt16(countNumberOfMaterials()); int offset = 0; - for (int i = 0; i < materials.size(); i++) { - if (!materials.get(i).isEmpty()) { - bw.writeUInt16(materials.get(i).size()); + for (List integers : materials) { + if (!integers.isEmpty()) { + bw.writeUInt16(integers.size()); bw.writeUInt16(offset); - offset += materials.get(i).size(); + offset += integers.size(); } else { bw.writeUInt16(0); bw.writeUInt16(65535); } } - for (int i = 0; i < materials.size(); i++) { - if (!materials.get(i).isEmpty()) { - for (int j = 0; j < materials.get(i).size(); j++) { + for (List material : materials) { + if (!material.isEmpty()) { + for (int j = 0; j < material.size(); j++) { bw.writeUInt16(j); - bw.writeUInt16(materials.get(i).get(j)); + bw.writeUInt16(material.get(j)); } } } @@ -94,11 +93,11 @@ public void saveToFile(String path) throws FileNotFoundException, IOException { bw.close(); } - public void addBuildingMaterials(ArrayList newMaterials) { + public void addBuildingMaterials(List newMaterials) { materials.add(newMaterials); } - public void replaceBuildingMaterials(int index, ArrayList newMaterials) { + public void replaceBuildingMaterials(int index, List newMaterials) { if (index >= 0 && index < materials.size()) { materials.set(index, newMaterials); } @@ -121,7 +120,7 @@ public void addBuildingMaterial(int buildIndex) { public void removeBuildingMaterial(int buildIndex, int materialIndex) { if (buildIndex >= 0 && buildIndex < materials.size()) { - ArrayList buildMaterials = materials.get(buildIndex); + List buildMaterials = materials.get(buildIndex); if (!buildMaterials.isEmpty()) { if (materialIndex >= 0 && materialIndex < buildMaterials.size()) { int materialValue = buildMaterials.get(materialIndex); @@ -142,7 +141,7 @@ public void removeBuildingMaterial(int buildIndex, int materialIndex) { public void moveMaterialUp(int buildIndex, int materialIndex) { if (buildIndex >= 0 && buildIndex < materials.size()) { - ArrayList buildMaterials = materials.get(buildIndex); + List buildMaterials = materials.get(buildIndex); if (!buildMaterials.isEmpty()) { if (materialIndex >= 1 && materialIndex < buildMaterials.size()) { Collections.swap(buildMaterials, materialIndex, materialIndex - 1); @@ -153,7 +152,7 @@ public void moveMaterialUp(int buildIndex, int materialIndex) { public void moveMaterialDown(int buildIndex, int materialIndex) { if (buildIndex >= 0 && buildIndex < materials.size()) { - ArrayList buildMaterials = materials.get(buildIndex); + List buildMaterials = materials.get(buildIndex); if (!buildMaterials.isEmpty()) { if (materialIndex >= 0 && materialIndex < buildMaterials.size() - 1) { Collections.swap(buildMaterials, materialIndex, materialIndex + 1); @@ -163,29 +162,25 @@ public void moveMaterialDown(int buildIndex, int materialIndex) { } public int countNumberOfMaterials() { - int count = 0; - for (int i = 0; i < materials.size(); i++) { - if (!materials.get(i).isEmpty()) { - count += materials.get(i).size(); - } - } - return count; + return materials.stream() + .filter(material -> !material.isEmpty()) + .mapToInt(List::size) + .sum(); } - public ArrayList> getAllMaterials() { + public List> getAllMaterials() { return materials; } - public ArrayList getMaterials(int buildingID) { + public List getMaterials(int buildingID) { return materials.get(buildingID); } - public void setMaterials(int buildingID, ArrayList materials) { + public void setMaterials(int buildingID, List materials) { this.materials.set(buildingID, materials); } public int getMaterial(int buildingID, int materialIndex) { return materials.get(buildingID).get(materialIndex); } - } diff --git a/src/main/java/editor/buildingeditor2/tileset/BuildTileset.java b/src/main/java/editor/buildingeditor2/tileset/BuildTileset.java index d166764..24aeffe 100644 --- a/src/main/java/editor/buildingeditor2/tileset/BuildTileset.java +++ b/src/main/java/editor/buildingeditor2/tileset/BuildTileset.java @@ -1,7 +1,6 @@ package editor.buildingeditor2.tileset; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; @@ -32,6 +31,4 @@ public void save(String path) throws IOException { fos.write(data); fos.close(); } - - } diff --git a/src/main/java/editor/buildingeditor2/tileset/BuildTilesetList.java b/src/main/java/editor/buildingeditor2/tileset/BuildTilesetList.java index 9a1b697..baecaf9 100644 --- a/src/main/java/editor/buildingeditor2/tileset/BuildTilesetList.java +++ b/src/main/java/editor/buildingeditor2/tileset/BuildTilesetList.java @@ -7,13 +7,15 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; /** * @author Trifindo */ public class BuildTilesetList { - private ArrayList tilesets; + private final List tilesets; public BuildTilesetList(Narc narc) { final int numTilesets = narc.getRoot().getFiles().size(); @@ -23,23 +25,20 @@ public BuildTilesetList(Narc narc) { } } - public Narc toNarc() throws Exception { + public Narc toNarc() { NarcFolder root = new NarcFolder(); - ArrayList files = new ArrayList<>(tilesets.size()); - for (BuildTileset tileset : tilesets) { - files.add(new NarcFile("", root, tileset.getData())); - } + List files = tilesets.stream() + .map(tileset -> new NarcFile("", root, tileset.getData())) + .collect(Collectors.toCollection(() -> new ArrayList<>(tilesets.size()))); root.setFiles(files); return new Narc(root); } - public ArrayList getTilesets() { + public List getTilesets() { return tilesets; } public void saveTileset(int index, String path) throws IOException { tilesets.get(index).save(path); } - - } diff --git a/src/main/java/editor/buildingeditor2/tileset/PaletteDisplay.java b/src/main/java/editor/buildingeditor2/tileset/PaletteDisplay.java index 1d43ce8..c7b7fcc 100644 --- a/src/main/java/editor/buildingeditor2/tileset/PaletteDisplay.java +++ b/src/main/java/editor/buildingeditor2/tileset/PaletteDisplay.java @@ -5,9 +5,8 @@ import java.awt.*; import java.awt.image.BufferedImage; -import java.util.ArrayList; +import java.util.List; import javax.swing.*; -import javax.swing.GroupLayout; /** * @author Trifindo, JackHack96 @@ -21,8 +20,8 @@ public class PaletteDisplay extends JPanel { private static final Color borderColor = new Color(102, 102, 102); private static final Color selectionFillColor = new Color(255, 0, 0, 120); private static final Color selectionBorderColor = Color.red; - private BufferedImage backImg; - public ArrayList palette; + private final BufferedImage backImg; + public List palette; public PaletteDisplay() { initComponents(); @@ -54,7 +53,6 @@ public void paintComponent(Graphics g) { g.setColor(borderColor); g.drawRect(0, 0, cols * tileSize - 1, rows * tileSize - 1); - } public void updatePalette(NsbtxTexture nsbtxTex, NsbtxPalette nsbtxPal) { @@ -90,8 +88,7 @@ private BufferedImage createNoPaletteImg() { } private BufferedImage createBackImg(BufferedImage noPalImg) { - BufferedImage img = new BufferedImage(tileSize * cols, tileSize * rows, - BufferedImage.TYPE_INT_RGB); + BufferedImage img = new BufferedImage(tileSize * cols, tileSize * rows, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); for (int i = 0; i < cols; i++) { diff --git a/src/main/java/editor/buildingeditor2/tileset/TextureDisplay.java b/src/main/java/editor/buildingeditor2/tileset/TextureDisplay.java index cff1f75..97af3b9 100644 --- a/src/main/java/editor/buildingeditor2/tileset/TextureDisplay.java +++ b/src/main/java/editor/buildingeditor2/tileset/TextureDisplay.java @@ -1,7 +1,6 @@ package editor.buildingeditor2.tileset; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.*; import java.awt.image.BufferedImage; @@ -57,11 +56,7 @@ public void paintComponent(Graphics g) { } public void updateImage(BufferedImage updatedImage) { - if (updatedImage != null) { - this.img = updatedImage; - } else { - this.img = null; - } + this.img = updatedImage; } public BufferedImage createBackImg() { diff --git a/src/main/java/editor/converter/ConverterErrorDialog.java b/src/main/java/editor/converter/ConverterErrorDialog.java index f9ab0ba..7d55b50 100644 --- a/src/main/java/editor/converter/ConverterErrorDialog.java +++ b/src/main/java/editor/converter/ConverterErrorDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import net.miginfocom.swing.*; diff --git a/src/main/java/editor/converter/ExportNsbmdDialog.java b/src/main/java/editor/converter/ExportNsbmdDialog.java index b6b1d98..9d08d99 100644 --- a/src/main/java/editor/converter/ExportNsbmdDialog.java +++ b/src/main/java/editor/converter/ExportNsbmdDialog.java @@ -3,18 +3,11 @@ import java.awt.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import editor.handler.MapEditorHandler; import java.io.File; -import java.io.FilenameFilter; import java.util.ArrayList; -import javax.swing.DefaultListModel; -import javax.swing.JCheckBox; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; import javax.swing.filechooser.FileFilter; import net.miginfocom.swing.*; @@ -399,14 +392,9 @@ private boolean isFolderPathValid(String folderPath) { private void loadImdFilesFromFolder(String folderPath) { try { File folder = new File(folderPath); - File[] files = folder.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.endsWith(".imd"); - } - }); + File[] files = folder.listFiles((dir, name) -> name.endsWith(".imd")); - DefaultListModel model = new DefaultListModel(); + DefaultListModel model = new DefaultListModel<>(); this.jScrollCheckboxList.getCheckboxList().setModel(model); for (File file : files) { model.addElement(new JCheckBox(file.getName())); @@ -428,8 +416,7 @@ private boolean hasMatrixCoordsInImdName(String imdName) { String name = Utils.removeExtensionFromPath(imdName); try { String[] splitName = name.split("_"); - return (hasCoordInName(splitName[splitName.length - 2]) - && hasCoordInName(splitName[splitName.length - 1])); + return hasCoordInName(splitName[splitName.length - 2]) && hasCoordInName(splitName[splitName.length - 1]); } catch (Exception ex) { return false; } diff --git a/src/main/java/editor/converter/ExportNsbmdResultDialog.java b/src/main/java/editor/converter/ExportNsbmdResultDialog.java index b6957b3..c16de86 100644 --- a/src/main/java/editor/converter/ExportNsbmdResultDialog.java +++ b/src/main/java/editor/converter/ExportNsbmdResultDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import renderer.*; diff --git a/src/main/java/editor/converter/ExportNsbtxDialog.java b/src/main/java/editor/converter/ExportNsbtxDialog.java index 293533b..3217f82 100644 --- a/src/main/java/editor/converter/ExportNsbtxDialog.java +++ b/src/main/java/editor/converter/ExportNsbtxDialog.java @@ -3,21 +3,14 @@ import java.awt.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import editor.handler.MapEditorHandler; import java.io.File; -import java.io.FilenameFilter; import java.util.ArrayList; -import java.util.HashSet; -import javax.swing.DefaultListModel; -import javax.swing.JCheckBox; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; -import javax.swing.filechooser.FileFilter; +import java.util.List; +import java.util.Set; import utils.Utils; import utils.swing.*; @@ -31,8 +24,8 @@ public class ExportNsbtxDialog extends javax.swing.JDialog { private int returnValue = CANCEL_OPTION; private String nsbtxFolderPath = ""; - private ArrayList selectedAreaIndices = new ArrayList<>(); - private ArrayList areaIndices; + private List selectedAreaIndices = new ArrayList<>(); + private List areaIndices; private MapEditorHandler handler; @@ -308,17 +301,16 @@ private boolean isFolderPathValid(String folderPath) { } private void loadAreaIndices() { + Set areaIndicesSet = handler.getMapMatrix().getAreaIndices(); - HashSet areaIndicesSet = handler.getMapMatrix().getAreaIndices(); - - areaIndices = new ArrayList(); + areaIndices = new ArrayList<>(); areaIndices.addAll(areaIndicesSet); try { - DefaultListModel model = new DefaultListModel(); + DefaultListModel model = new DefaultListModel<>(); this.jScrollCheckboxList.getCheckboxList().setModel(model); for (Integer areaIndex : areaIndicesSet) { - model.addElement(new JCheckBox("Area " + String.valueOf(areaIndex))); + model.addElement(new JCheckBox("Area " + areaIndex)); } for (int i = 0; i < model.getSize(); i++) { @@ -334,8 +326,8 @@ private boolean hasMatrixCoordsInImdName(String imdName) { String name = Utils.removeExtensionFromPath(imdName); try { String[] splitName = name.split("_"); - return (hasCoordInName(splitName[splitName.length - 2]) - && hasCoordInName(splitName[splitName.length - 1])); + return hasCoordInName(splitName[splitName.length - 2]) + && hasCoordInName(splitName[splitName.length - 1]); } catch (Exception ex) { return false; } @@ -358,9 +350,7 @@ public String getNsbtxFolderPath() { return nsbtxFolderPath; } - public ArrayList getSelectedAreaIndices() { + public List getSelectedAreaIndices() { return selectedAreaIndices; } - - } diff --git a/src/main/java/editor/converter/ExportNsbtxResultDialog.java b/src/main/java/editor/converter/ExportNsbtxResultDialog.java index 83f6735..f9fee43 100644 --- a/src/main/java/editor/converter/ExportNsbtxResultDialog.java +++ b/src/main/java/editor/converter/ExportNsbtxResultDialog.java @@ -3,11 +3,8 @@ import java.awt.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import formats.nsbtx2.*; -import formats.nsbtx2.Nsbtx2; /** * @author Trifindo @@ -30,7 +27,6 @@ public ExportNsbtxResultDialog(java.awt.Frame parent, boolean modal) { * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ - @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { nsbtxPanel1 = new NsbtxPanel(); @@ -55,7 +51,7 @@ private void initComponents() { //---- jButton1 ---- jButton1.setText("OK"); - jButton1.addActionListener(e -> jButton1ActionPerformed(e)); + jButton1.addActionListener(this::jButton1ActionPerformed); jPanel2.add(jButton1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); diff --git a/src/main/java/editor/converter/NsbmdOutputInfoDialog.java b/src/main/java/editor/converter/NsbmdOutputInfoDialog.java index 4bd3e48..bbddad2 100644 --- a/src/main/java/editor/converter/NsbmdOutputInfoDialog.java +++ b/src/main/java/editor/converter/NsbmdOutputInfoDialog.java @@ -4,16 +4,10 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import editor.handler.MapEditorHandler; -import java.awt.CardLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; import java.awt.font.TextAttribute; import java.io.BufferedReader; import java.io.File; @@ -24,16 +18,12 @@ import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Collections; -import javax.swing.JLabel; -import javax.swing.JTable; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; +import java.util.List; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import net.miginfocom.swing.*; import renderer.*; -import renderer.ObjectGL; import utils.Utils; /** @@ -43,13 +33,13 @@ public class NsbmdOutputInfoDialog extends javax.swing.JDialog { private MapEditorHandler handler; - private ArrayList fileNames; + private List fileNames; private String imdFolderPath; private String nsbFolderPath; private boolean includeNsbtx; - private ArrayList nsbmdModelsData; - private ArrayList errorMsgs; + private List nsbmdModelsData; + private List errorMsgs; private Thread convertingThread; @@ -69,14 +59,12 @@ private enum ConvertStatus { public final String msg; public final Color color; - private ConvertStatus(String msg, Color color) { + ConvertStatus(String msg, Color color) { this.msg = msg; this.color = color; } } - ; - /** * Creates new form ImdOutputInfoDialog */ @@ -92,13 +80,7 @@ public NsbmdOutputInfoDialog(java.awt.Frame parent, boolean modal) { jTable1.getColumnModel().getColumn(1).setCellRenderer(new StatusColumnCellRenderer()); - jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent event) { - int index = jTable1.getSelectedRow(); - updateView(index); - } - }); + jTable1.getSelectionModel().addListSelectionListener(event -> updateView(jTable1.getSelectedRow())); nitroDisplayGL1.getObjectsGL().add(new ObjectGL()); } @@ -108,7 +90,6 @@ public void valueChanged(ListSelectionEvent event) { * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ - @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new JPanel(); @@ -363,12 +344,7 @@ public boolean isCellEditable(int rowIndex, int columnIndex) { private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated if (convertingThread == null) { - convertingThread = new Thread(new Runnable() { - @Override - public void run() { - saveAllNsbs(); - } - }); + convertingThread = new Thread(this::saveAllNsbs); convertingThread.start(); } }//GEN-LAST:event_formWindowActivated @@ -381,7 +357,6 @@ private void jbAcceptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRS dispose(); }//GEN-LAST:event_jbAcceptActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables private JPanel jPanel1; private JButton jbAccept; @@ -504,8 +479,7 @@ public void saveAllNsbs() { File dstFile = new File(nsbPath); if (srcFile.exists()) { try { - Files.move(srcFile.toPath(), dstFile.toPath(), - StandardCopyOption.REPLACE_EXISTING); + Files.move(srcFile.toPath(), dstFile.toPath(), StandardCopyOption.REPLACE_EXISTING); nFilesConverted++; exportStatus = ConvertStatus.SUCCESS_STATUS; @@ -538,19 +512,16 @@ public void saveAllNsbs() { } catch (InterruptedException ex) { nFilesNotConverted++; exportStatus = ConvertStatus.INTERRUPT_ERROR_STATUS; - errorMsgs.set(nFilesProcessed, - "The model was not converted (InterruptedException)"); + errorMsgs.set(nFilesProcessed, "The model was not converted (InterruptedException)"); } } catch (IOException ex) { nFilesNotConverted++; exportStatus = ConvertStatus.IMD_NOT_FOUND_ERROR_STATUS; - errorMsgs.set(nFilesProcessed, - "Could not open IMD file"); + errorMsgs.set(nFilesProcessed, "Could not open IMD file"); } catch (Exception ex) { nFilesNotConverted++; exportStatus = ConvertStatus.UNKNOWN_ERROR_STATUS; - errorMsgs.set(nFilesProcessed, - "Unknown error"); + errorMsgs.set(nFilesProcessed, "Unknown error"); } tableModel.addRow(new Object[]{ @@ -560,7 +531,7 @@ public void saveAllNsbs() { nFilesProcessed++; - jlFilesProcessed.setText(String.valueOf(nFilesProcessed) + "/" + String.valueOf(fileNames.size())); + jlFilesProcessed.setText(nFilesProcessed + "/" + fileNames.size()); jlFilesConverted.setText(String.valueOf(nFilesConverted)); jlFilesNotConverted.setText(String.valueOf(nFilesNotConverted)); @@ -581,7 +552,7 @@ public void saveAllNsbs() { jlStatus.setText("Finished with errors"); jlResult.setForeground(RED); - jlResult.setText(String.valueOf(nFilesNotConverted) + " IMD file(s) could not be converted into NSBMD"); + jlResult.setText(nFilesNotConverted + " IMD file(s) could not be converted into NSBMD"); } else { jlStatus.setForeground(GREEN); jlStatus.setText("Finished"); @@ -633,17 +604,13 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole l.setText(status.msg); Font font = l.getFont(); - font = font.deriveFont( - Collections.singletonMap( - TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); + font = font.deriveFont(Collections.singletonMap(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); l.setFont(font); setHorizontalAlignment(JLabel.CENTER); //Return the JLabel which renders the cell. return l; - } } - } diff --git a/src/main/java/editor/converter/NsbtxOutputInfoDialog.java b/src/main/java/editor/converter/NsbtxOutputInfoDialog.java index 37bce5a..dd72d51 100644 --- a/src/main/java/editor/converter/NsbtxOutputInfoDialog.java +++ b/src/main/java/editor/converter/NsbtxOutputInfoDialog.java @@ -4,19 +4,11 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import editor.handler.MapData; import editor.handler.MapEditorHandler; import formats.nsbtx2.*; -import formats.nsbtx2.Nsbtx2; -import formats.nsbtx2.NsbtxImd; -import java.awt.CardLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; import java.awt.font.TextAttribute; import java.io.BufferedReader; import java.io.File; @@ -26,14 +18,10 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.util.*; -import javax.swing.JLabel; -import javax.swing.JTable; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; +import java.util.List; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; -import formats.nsbtx2.exceptions.NsbtxTextureSizeException; import tileset.TilesetMaterial; import utils.Utils; @@ -44,11 +32,11 @@ public class NsbtxOutputInfoDialog extends javax.swing.JDialog { private MapEditorHandler handler; - private ArrayList areaIndices; + private List areaIndices; private String nsbtxFolderPath; - private ArrayList nsbtxData; - private ArrayList errorMsgs; + private List nsbtxData; + private List errorMsgs; private Thread convertingThread; @@ -70,14 +58,12 @@ private enum ConvertStatus { public final String msg; public final Color color; - private ConvertStatus(String msg, Color color) { + ConvertStatus(String msg, Color color) { this.msg = msg; this.color = color; } } - ; - /** * Creates new form ImdOutputInfoDialog */ @@ -93,14 +79,10 @@ public NsbtxOutputInfoDialog(java.awt.Frame parent, boolean modal) { jTable1.getColumnModel().getColumn(1).setCellRenderer(new StatusColumnCellRenderer()); - jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent event) { - int index = jTable1.getSelectedRow(); - updateView(index); - } + jTable1.getSelectionModel().addListSelectionListener(event -> { + int index = jTable1.getSelectedRow(); + updateView(index); }); - } /** @@ -402,12 +384,7 @@ public boolean isCellEditable(int rowIndex, int columnIndex) { private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated if (convertingThread == null) { - convertingThread = new Thread(new Runnable() { - @Override - public void run() { - saveAllNsbtx(); - } - }); + convertingThread = new Thread(this::saveAllNsbtx); convertingThread.start(); } }//GEN-LAST:event_formWindowActivated @@ -449,8 +426,7 @@ private void jbAcceptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRS private JLabel jLabel6; // End of variables declaration//GEN-END:variables - public void init(MapEditorHandler handler, ArrayList areaIndices, - String nsbtxFolderPath) { + public void init(MapEditorHandler handler, List areaIndices, String nsbtxFolderPath) { this.handler = handler; this.areaIndices = areaIndices; this.nsbtxFolderPath = nsbtxFolderPath; @@ -475,7 +451,7 @@ public void saveAllNsbtx() { boolean textureMissed = false; if (!Thread.currentThread().isInterrupted()) { try { - HashSet usedMaterialIndices = new HashSet<>(); + Set usedMaterialIndices = new HashSet<>(); // Add materials always included for (int i = 0; i < handler.getTileset().getMaterials().size(); i++) { @@ -484,7 +460,7 @@ public void saveAllNsbtx() { } } - HashSet usedTileIndices = new HashSet<>(); + Set usedTileIndices = new HashSet<>(); for (MapData mapData : handler.getMapMatrix().getMatrix().values()) { if (mapData.getAreaIndex() == areaIndex) { mapData.getGrid().addTileIndicesUsed(usedTileIndices); @@ -492,10 +468,8 @@ public void saveAllNsbtx() { } for (Integer tileIndex : usedTileIndices) { - ArrayList texIDs = handler.getTileset().get(tileIndex).getTextureIDs(); - for (Integer texID : texIDs) { - usedMaterialIndices.add(texID); - } + List texIDs = handler.getTileset().get(tileIndex).getTextureIDs(); + usedMaterialIndices.addAll(texIDs); } //Map used for knowing which palette is used by a certain texture @@ -524,8 +498,7 @@ public void saveAllNsbtx() { boolean isTransparent = Utils.hasTransparentColor(mat.getTextureImg()); - if ((!nsbtx.isTextureNameUsed(mat.getTextureNameImd()) - && (!nsbtx.isPaletteNameUsed(mat.getPaletteNameImd())))) { + if (!nsbtx.isTextureNameUsed(mat.getTextureNameImd()) && !nsbtx.isPaletteNameUsed(mat.getPaletteNameImd())) { nsbtx.addTextureAndPalette(-1, -1, mat.getTextureImg(), Nsbtx2.jcbToFormatLookup[mat.getColorFormat()], @@ -563,7 +536,7 @@ public void saveAllNsbtx() { NsbtxImd imd = new NsbtxImd(nsbtx); - String pathSave = nsbtxFolderPath + File.separator + "Area_" + String.valueOf(areaIndex) + ".imd"; + String pathSave = nsbtxFolderPath + File.separator + "Area_" + areaIndex + ".imd"; imd.saveToFile(pathSave); File file = new File(pathSave); @@ -609,8 +582,7 @@ public void saveAllNsbtx() { File dstFile = new File(nsbPath); if (srcFile.exists()) { try { - Files.move(srcFile.toPath(), dstFile.toPath(), - StandardCopyOption.REPLACE_EXISTING); + Files.move(srcFile.toPath(), dstFile.toPath(), StandardCopyOption.REPLACE_EXISTING); //srcFile.renameTo(new File(nsbPath)); if (paletteMissed) { exportStatus = ConvertStatus.PALETTE_MISSED_STATUS; @@ -652,8 +624,7 @@ public void saveAllNsbtx() { } catch (InterruptedException ex) { nFilesNotConverted++; exportStatus = ConvertStatus.INTERRUPT_ERROR_STATUS; - errorMsgs.set(nFilesProcessed, - "The model was not converted (InterruptedException)"); + errorMsgs.set(nFilesProcessed, "The model was not converted (InterruptedException)"); } } else { nFilesNotConverted++; @@ -679,7 +650,7 @@ public void saveAllNsbtx() { jlStatus.setText("Finished with errors"); jlResult.setForeground(RED); - jlResult.setText(String.valueOf(nFilesNotConverted) + " Area(s) could not be converted into NSBTX"); + jlResult.setText(nFilesNotConverted + " Area(s) could not be converted into NSBTX"); } else { jlStatus.setForeground(GREEN); jlStatus.setText("Finished"); @@ -689,13 +660,13 @@ public void saveAllNsbtx() { } tableModel.addRow(new Object[]{ - "Area_" + String.valueOf(areaIndex), + "Area_" + areaIndex, exportStatus }); nFilesProcessed++; - jlFilesProcessed.setText(String.valueOf(nFilesProcessed) + "/" + String.valueOf(areaIndices.size())); + jlFilesProcessed.setText(nFilesProcessed + "/" + areaIndices.size()); jlFilesConverted.setText(String.valueOf(nFilesConverted)); jlFilesNotConverted.setText(String.valueOf(nFilesNotConverted)); @@ -758,8 +729,6 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole //Return the JLabel which renders the cell. return l; - } } - } diff --git a/src/main/java/editor/game/Game.java b/src/main/java/editor/game/Game.java index bfbd294..fd9bf64 100644 --- a/src/main/java/editor/game/Game.java +++ b/src/main/java/editor/game/Game.java @@ -53,5 +53,4 @@ public String getName() { public int getMaxTileableSize() { return maxTileableSize[gameSelected]; } - } diff --git a/src/main/java/editor/game/GameFileSystem.java b/src/main/java/editor/game/GameFileSystem.java index ee00d61..b5ad4c4 100644 --- a/src/main/java/editor/game/GameFileSystem.java +++ b/src/main/java/editor/game/GameFileSystem.java @@ -2,19 +2,18 @@ package editor.game; import java.io.File; +import java.util.StringJoiner; /** * @author Trifindo */ public abstract class GameFileSystem { - protected static String getPath(String[] splittedPath) { - String path = ""; - for (int i = 0; i < splittedPath.length - 1; i++) { - path += splittedPath[i] + File.separator; + protected static String getPath(String[] splitPath) { + StringJoiner path = new StringJoiner(File.separator); + for (String s : splitPath) { + path.add(s); } - path += splittedPath[splittedPath.length - 1]; - return path; + return path.toString(); } - } diff --git a/src/main/java/editor/game/GameFileSystemDPPt.java b/src/main/java/editor/game/GameFileSystemDPPt.java index b4bc5a9..f9bfa7a 100644 --- a/src/main/java/editor/game/GameFileSystemDPPt.java +++ b/src/main/java/editor/game/GameFileSystemDPPt.java @@ -1,8 +1,6 @@ package editor.game; -import java.io.File; - /** * @author Trifindo */ diff --git a/src/main/java/editor/game/GameFileSystemHGSS.java b/src/main/java/editor/game/GameFileSystemHGSS.java index 265769d..529bb18 100644 --- a/src/main/java/editor/game/GameFileSystemHGSS.java +++ b/src/main/java/editor/game/GameFileSystemHGSS.java @@ -1,8 +1,6 @@ package editor.game; -import java.io.File; - /** * @author Trifindo */ @@ -81,6 +79,4 @@ public String getBuildModelRoomPath() { public String getMapAnimationsPath() { return mapAnimationsPath; } - - } diff --git a/src/main/java/editor/game/patches/GamePatch.java b/src/main/java/editor/game/patches/GamePatch.java index a261eb9..a71b1f5 100644 --- a/src/main/java/editor/game/patches/GamePatch.java +++ b/src/main/java/editor/game/patches/GamePatch.java @@ -13,8 +13,9 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; public class GamePatch { @@ -60,8 +61,7 @@ public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { - data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) - + Character.digit(s.charAt(i+1), 16)); + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); } return data; } @@ -72,8 +72,7 @@ private static byte[] textBytesToByteArray(String textBytes){ for(String s : splitString){ try { bytes.add(Byte.parseByte(s)); - }catch(NumberFormatException ex){ - + } catch (NumberFormatException ex){ } } return Utils.toArray(bytes); @@ -81,40 +80,26 @@ private static byte[] textBytesToByteArray(String textBytes){ private static Node getSubnode(Node node, String name){ NodeList nodeList = node.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node subnode = nodeList.item(i); - if (subnode.getNodeType() == Node.ELEMENT_NODE) { - if(subnode.getNodeName().equals(name)){ - return subnode; - } - } - } - return null; + return IntStream.range(0, nodeList.getLength()) + .mapToObj(nodeList::item) + .filter(subnode -> subnode.getNodeType() == Node.ELEMENT_NODE && subnode.getNodeName().equals(name)) + .findFirst() + .orElse(null); } private static List getSubnodes(Node node, String name){ - List nodes = new ArrayList<>(); NodeList nodeList = node.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node subnode = nodeList.item(i); - if (subnode.getNodeType() == Node.ELEMENT_NODE) { - if(subnode.getNodeName().equals(name)){ - nodes.add(subnode); - } - } - } - return nodes; + return IntStream.range(0, nodeList.getLength()) + .mapToObj(nodeList::item) + .filter(subnode -> subnode.getNodeType() == Node.ELEMENT_NODE && subnode.getNodeName().equals(name)) + .collect(Collectors.toList()); } private static List getSubnodes(Node node){ - List nodes = new ArrayList<>(); NodeList nodeList = node.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node subnode = nodeList.item(i); - if (subnode.getNodeType() == Node.ELEMENT_NODE) { - nodes.add(subnode); - } - } - return nodes; + return IntStream.range(0, nodeList.getLength()) + .mapToObj(nodeList::item) + .filter(subnode -> subnode.getNodeType() == Node.ELEMENT_NODE) + .collect(Collectors.toList()); } } diff --git a/src/main/java/editor/game/patches/MultiFilePatch.java b/src/main/java/editor/game/patches/MultiFilePatch.java index 4005fa2..ff1c592 100644 --- a/src/main/java/editor/game/patches/MultiFilePatch.java +++ b/src/main/java/editor/game/patches/MultiFilePatch.java @@ -3,7 +3,6 @@ import formats.narc2.Narc; import formats.narc2.NarcFile; import formats.narc2.NarcIO; -import utils.BinaryArrayReader; import utils.BinaryReader; import utils.Utils; @@ -15,43 +14,43 @@ public class MultiFilePatch { private static final String headerPath = "header.bin"; - private String gameCode; - private List patches; + private final String gameCode; + private final List patches; public MultiFilePatch(String gameCode, List patches) { this.gameCode = gameCode; this.patches = patches; } - public boolean canApplyPatch(String gameFolderPath) throws Exception{ + public boolean canApplyPatch(String gameFolderPath) throws Exception { byte[] headerData = Files.readAllBytes(new File(gameFolderPath + File.separator + headerPath).toPath()); if (!Utils.containsArray(headerData, gameCode.getBytes(), 12)) { return false; } - for(FilePatch patch : patches){ + for (FilePatch patch : patches) { byte[] gameData = loadGameData(gameFolderPath + File.separator + patch.getFilePath()); //byte[] gameData = Files.readAllBytes(new File(patch.getFilePath()).toPath()); - if(!patch.canApplyPatch(gameData)){ + if (!patch.canApplyPatch(gameData)) { return false; } } return true; } - public boolean isPatched(String gameFolderPath) throws Exception{ - for(FilePatch patch : patches){ + public boolean isPatched(String gameFolderPath) throws Exception { + for (FilePatch patch : patches) { //byte[] gameData = Files.readAllBytes(new File(patch.getFilePath()).toPath()); byte[] gameData = loadGameData(gameFolderPath + File.separator + patch.getFilePath()); - if(!Utils.containsArray(gameData, patch.getNewData(), patch.getDataOffset())){ + if (!Utils.containsArray(gameData, patch.getNewData(), patch.getDataOffset())) { return false; } } return false; } - public void applyPatch(String gameFolderPath) throws Exception{ - for(FilePatch patch : patches){ + public void applyPatch(String gameFolderPath) throws Exception { + for (FilePatch patch : patches) { //byte[] gameData = Files.readAllBytes(new File(patch.getFilePath()).toPath()); byte[] gameData = loadGameData(gameFolderPath + File.separator + patch.getFilePath()); System.arraycopy(patch.getNewData(), 0, gameData, patch.getDataOffset(), patch.getNewData().length); @@ -59,24 +58,24 @@ public void applyPatch(String gameFolderPath) throws Exception{ } private static byte[] loadGameData(String path) throws IOException { - if(new File(path).exists()){ + if (new File(path).exists()) { return Files.readAllBytes(new File(path).toPath()); - }else{ + } else { String[] splitPath = path.split(File.separator); String fullPath = splitPath[0]; - for(int i = 1; i < splitPath.length; i++){ + for (int i = 1; i < splitPath.length; i++) { fullPath += File.separator + splitPath[i]; - if(new File(fullPath).isFile()){ + if (new File(fullPath).isFile()) { try { Narc narc = NarcIO.loadNarc(fullPath); NarcFile narcFile = narc.getFileByPath(path.substring(fullPath.length())); - if(narcFile != null){ + if (narcFile != null) { return narcFile.getData(); - }else{ + } else { throw new IOException("NARC internal file not found Exception"); } - }catch(Exception ex){ + } catch (Exception ex) { throw new IOException("File and NARC not found Exception"); } } @@ -89,9 +88,8 @@ private static boolean isNarc(String filePath) { try { byte[] data = Files.readAllBytes(new File(filePath).toPath()); return BinaryReader.readString(data, 0, 4).equals("NARC"); - }catch(Exception ex){ + } catch (Exception ex) { return false; } } - } diff --git a/src/main/java/editor/game/patches/PatchArmExpansion.java b/src/main/java/editor/game/patches/PatchArmExpansion.java index 4f9d95d..6ca392d 100644 --- a/src/main/java/editor/game/patches/PatchArmExpansion.java +++ b/src/main/java/editor/game/patches/PatchArmExpansion.java @@ -1,12 +1,4 @@ package editor.game.patches; -import editor.game.Game; - -import java.util.ArrayList; -import java.util.List; - public class PatchArmExpansion { - - - } diff --git a/src/main/java/editor/gameselector/GameChangerDialog.java b/src/main/java/editor/gameselector/GameChangerDialog.java index fdb456f..e54dcc3 100644 --- a/src/main/java/editor/gameselector/GameChangerDialog.java +++ b/src/main/java/editor/gameselector/GameChangerDialog.java @@ -1,14 +1,11 @@ package editor.gameselector; -import formats.collisions.Collisions; import editor.game.Game; import editor.handler.MapEditorHandler; import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; /** @@ -17,7 +14,7 @@ public class GameChangerDialog extends JDialog { private MapEditorHandler handler; - public static final int ACEPTED = 0, CANCELED = 1; + public static final int ACCEPTED = 0, CANCELED = 1; private int returnValue = CANCELED; private int newGame = Game.DIAMOND; private int oldGame; @@ -44,12 +41,12 @@ private void jbFinishActionPerformed(ActionEvent e) { if(Game.isGenV(newGame)){ handler.setCollisions2(null); }*/ - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } } else { handler.setGameIndex(newGame); - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } } diff --git a/src/main/java/editor/gameselector/GameSelectorDialog.java b/src/main/java/editor/gameselector/GameSelectorDialog.java index 2cd36b5..476c2f4 100644 --- a/src/main/java/editor/gameselector/GameSelectorDialog.java +++ b/src/main/java/editor/gameselector/GameSelectorDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import tileset.TilesetRenderer; @@ -14,9 +12,7 @@ import java.awt.image.BufferedImage; import java.io.IOException; -import javax.swing.ImageIcon; -import tileset.TextureNotFoundException; import tileset.Tileset; import tileset.TilesetIO; import utils.Utils; @@ -28,7 +24,7 @@ public class GameSelectorDialog extends JDialog { private MapEditorHandler handler; - public static final int ACEPTED = 0, CANCELED = 1; + public static final int ACCEPTED = 0, CANCELED = 1; private int returnValue = CANCELED; private int newGame = Game.DIAMOND; @@ -82,7 +78,7 @@ private void jbFinishActionPerformed(ActionEvent e) { ex.printStackTrace(); } tr.destroy(); - } catch (NullPointerException | TextureNotFoundException | IOException ex) { + } catch (NullPointerException | IOException ex) { System.out.println("Tileset not found"); tileset = new Tileset(); tileset.getSmartGridArray().add(new SmartGrid()); @@ -93,7 +89,7 @@ private void jbFinishActionPerformed(ActionEvent e) { } handler.setTileset(tileset); - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } @@ -126,7 +122,6 @@ private void loadTilesetThumbnail(int tilesetIndex) { tilesetThumbnailDisplay1.setImage(null); tilesetThumbnailDisplay1.repaint(); } - } private void initComponents() { diff --git a/src/main/java/editor/gameselector/GameTsetSelectorDialog.java b/src/main/java/editor/gameselector/GameTsetSelectorDialog.java index 018d504..a0c99d4 100644 --- a/src/main/java/editor/gameselector/GameTsetSelectorDialog.java +++ b/src/main/java/editor/gameselector/GameTsetSelectorDialog.java @@ -9,17 +9,15 @@ import java.awt.event.ActionEvent; import java.awt.image.BufferedImage; import java.io.File; -import java.io.FileFilter; -import java.io.FilenameFilter; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; +import java.util.List; import javax.swing.*; import javax.swing.border.SoftBevelBorder; import javax.swing.event.ListSelectionEvent; -import tileset.TextureNotFoundException; import tileset.Tileset; import tileset.TilesetIO; import utils.Utils; @@ -31,7 +29,7 @@ public class GameTsetSelectorDialog extends JDialog { private MapEditorHandler handler; - public static final int ACEPTED = 0, CANCELED = 1; + public static final int ACCEPTED = 0, CANCELED = 1; private int returnValue = CANCELED; private int newGame = Game.DIAMOND; @@ -40,9 +38,9 @@ public class GameTsetSelectorDialog extends JDialog { private static final String rootFolderPath = "/" + "tilesets"; private static final String none = "None"; - private ArrayList folderPaths; - private ArrayList> subfolderPaths; - private ArrayList> tsetNames; + private List folderPaths; + private List> subfolderPaths; + private List> tsetNames; public GameTsetSelectorDialog(Window owner) { super(owner); @@ -54,19 +52,16 @@ public GameTsetSelectorDialog(Window owner) { //Load subfolder paths subfolderPaths = new ArrayList<>(folderPaths.size()); for (int i = 0; i < folderPaths.size() - 1; i++) { - ArrayList subfolders = new ArrayList<>(); - subfolders = getSubfolderNamesAsResource(rootFolderPath + s + folderPaths.get(i)); - subfolderPaths.add(subfolders); + subfolderPaths.add(getSubfolderNamesAsResource(rootFolderPath + s + folderPaths.get(i))); } //Load tileset filenames tsetNames = new ArrayList<>(subfolderPaths.size()); for (int i = 0; i < subfolderPaths.size(); i++) { - ArrayList subfiles = new ArrayList<>(); + List subfiles = new ArrayList<>(); for (int j = 0; j < subfolderPaths.get(i).size(); j++) { - ArrayList names; - names = getSubfileNamesAsResource(rootFolderPath + s - + folderPaths.get(i) + s + subfolderPaths.get(i).get(j)); + List names; + names = getSubfileNamesAsResource(rootFolderPath + s + folderPaths.get(i) + s + subfolderPaths.get(i).get(j)); if (names != null) { subfiles.add(names.get(0)); } @@ -100,7 +95,6 @@ public GameTsetSelectorDialog(Window owner) { } } - addItemsToJList(jlTsetFolder, folderPaths); jlTsetFolder.setSelectedIndex(0); addItemsToJList(jlTsetName, subfolderPaths.get(0)); @@ -129,7 +123,7 @@ private void jbFinishActionPerformed(ActionEvent e) { ex.printStackTrace(); } tr.destroy(); - } catch (NullPointerException | TextureNotFoundException | IOException | IndexOutOfBoundsException ex) { + } catch (NullPointerException | IOException | IndexOutOfBoundsException ex) { System.out.println("Tileset not found"); tileset = new Tileset(); tileset.getSmartGridArray().add(new SmartGrid()); @@ -140,7 +134,7 @@ private void jbFinishActionPerformed(ActionEvent e) { } handler.setTileset(tileset); - returnValue = ACEPTED; + returnValue = ACCEPTED; dispose(); } @@ -158,11 +152,10 @@ private void jlTsetFolderValueChanged(ListSelectionEvent e) { if (subfolderPaths != null) { if (jlTsetFolder.getSelectedIndex() < jlTsetFolder.getModel().getSize() - 1) { addItemsToJList(jlTsetName, subfolderPaths.get(jlTsetFolder.getSelectedIndex())); - jlTsetName.setSelectedIndex(0); } else { addItemsToJList(jlTsetName, new ArrayList<>()); - jlTsetName.setSelectedIndex(0); } + jlTsetName.setSelectedIndex(0); } } @@ -176,7 +169,6 @@ public void init(MapEditorHandler handler) { this.handler = handler; updateViewGameIcon(); loadTilesetThumbnail(0, 0); - } public void updateViewGameIcon() { @@ -200,10 +192,9 @@ private void loadTilesetThumbnail(int folderIndex, int tilesetIndex) { tilesetThumbnailDisplay.setImage(null); tilesetThumbnailDisplay.repaint(); } - } - private void addItemsToJList(JList list, ArrayList items) { + private void addItemsToJList(JList list, List items) { DefaultListModel model = new DefaultListModel<>(); for (String item : items) { model.addElement(item.replace("_", " ")); @@ -211,7 +202,7 @@ private void addItemsToJList(JList list, ArrayList items) { list.setModel(model); } - private ArrayList getSubfolderNamesAsResource(String root) { + private List getSubfolderNamesAsResource(String root) { System.out.println("Folder root: " + root); File mainFolder; /* @@ -226,18 +217,14 @@ private ArrayList getSubfolderNamesAsResource(String root) { return new ArrayList<>(); } //} - File[] subdirs = mainFolder.listFiles(new FileFilter() { - public boolean accept(File f) { - return f.isDirectory(); - } - }); + File[] subdirs = mainFolder.listFiles(File::isDirectory); if (subdirs != null) { if (subdirs.length > 0) { - ArrayList paths = new ArrayList<>(subdirs.length); - for (int i = 0; i < subdirs.length; i++) { - System.out.println(" " + subdirs[i].getName()); - paths.add(subdirs[i].getName()); + List paths = new ArrayList<>(subdirs.length); + for (File subdir : subdirs) { + System.out.println(" " + subdir.getName()); + paths.add(subdir.getName()); } return paths; } @@ -246,7 +233,7 @@ public boolean accept(File f) { return new ArrayList<>(); } - private ArrayList getSubfileNamesAsResource(String root) { + private List getSubfileNamesAsResource(String root) { System.out.println("File root folder: " + root); File mainFolder; /*try { @@ -260,19 +247,15 @@ private ArrayList getSubfileNamesAsResource(String root) { return null; } //} - File[] subdirs = mainFolder.listFiles(new FilenameFilter() { - public boolean accept(File mainFloder, String filename) { - return filename.endsWith(".pdsts"); - } - }); + File[] subdirs = mainFolder.listFiles((mainFloder, filename) -> filename.endsWith(".pdsts")); if (subdirs != null) { if (subdirs.length > 0) { System.out.println(" " + subdirs[0].getName()); - ArrayList paths = new ArrayList<>(subdirs.length); - for (int i = 0; i < subdirs.length; i++) { + List paths = new ArrayList<>(subdirs.length); + for (File subdir : subdirs) { //System.out.println(subdirs[i].getName()); - paths.add(subdirs[i].getName()); + paths.add(subdir.getName()); } return paths; } @@ -288,9 +271,8 @@ private File getFileFromURL(String path) { file = new File(url.toURI()); } catch (URISyntaxException e) { file = new File(url.getPath()); - } finally { - return file; } + return file; } private void initComponents() { diff --git a/src/main/java/editor/gameselector/GameTsetSelectorDialog2.java b/src/main/java/editor/gameselector/GameTsetSelectorDialog2.java index 91414fc..91a2192 100644 --- a/src/main/java/editor/gameselector/GameTsetSelectorDialog2.java +++ b/src/main/java/editor/gameselector/GameTsetSelectorDialog2.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import javax.swing.event.*; @@ -15,11 +13,7 @@ import java.awt.image.BufferedImage; import java.io.IOException; -import javax.swing.DefaultListModel; -import javax.swing.ImageIcon; -import javax.swing.JList; -import tileset.TextureNotFoundException; import tileset.Tileset; import tileset.TilesetIO; import utils.Utils; @@ -40,7 +34,7 @@ public class GameTsetSelectorDialog2 extends JDialog { private static final String rootFolderPath = "/" + "tilesets"; private static final String none = "None"; - private String[] folderPaths = { + private final String[] folderPaths = { "Diamond_-_Pearl", "Platinum", "Heart_Gold_-_Soul_Silver", @@ -49,7 +43,7 @@ public class GameTsetSelectorDialog2 extends JDialog { "Various", "None" }; - private String[][] subfolderPaths = { + private final String[][] subfolderPaths = { {"Overworld"}, { "Tileset_6_-_Overworld_(by_Jiboule)", @@ -92,7 +86,7 @@ public class GameTsetSelectorDialog2 extends JDialog { } }; - private String[][] tsetNames = { + private final String[][] tsetNames = { {"DiamondPearlTileset.pdsts"}, { "Tileset_6_PT_Jiboule.pdsts", @@ -167,7 +161,7 @@ private void jbFinishActionPerformed(ActionEvent e) { ex.printStackTrace(); } tr.destroy();//NEW CODE - } catch (NullPointerException | TextureNotFoundException | IOException | IndexOutOfBoundsException ex) { + } catch (NullPointerException | IOException | IndexOutOfBoundsException ex) { System.out.println("Tileset not found"); tileset = new Tileset(); tileset.getSmartGridArray().add(new SmartGrid()); @@ -196,11 +190,10 @@ private void jlTsetFolderValueChanged(ListSelectionEvent e) { if (subfolderPaths != null) { if (jlTsetFolder.getSelectedIndex() < jlTsetFolder.getModel().getSize() - 1) { addItemsToJList(jlTsetName, subfolderPaths[jlTsetFolder.getSelectedIndex()]); - jlTsetName.setSelectedIndex(0); } else { addItemsToJList(jlTsetName, null); - jlTsetName.setSelectedIndex(0); } + jlTsetName.setSelectedIndex(0); } } @@ -214,7 +207,6 @@ public void init(MapEditorHandler handler) { this.handler = handler; updateViewGameIcon(); loadTilesetThumbnail(0, 0); - } public void updateViewGameIcon() { @@ -238,10 +230,9 @@ private void loadTilesetThumbnail(int folderIndex, int tilesetIndex) { tilesetThumbnailDisplay.setImage(null); tilesetThumbnailDisplay.repaint(); } - } - private void addItemsToJList(JList list, String[] items) { + private void addItemsToJList(JList list, String[] items) { DefaultListModel model = new DefaultListModel<>(); if (items != null) { for (String item : items) { diff --git a/src/main/java/editor/gameselector/TilesetThumbnailDisplay.java b/src/main/java/editor/gameselector/TilesetThumbnailDisplay.java index 6fa3166..bf704d4 100644 --- a/src/main/java/editor/gameselector/TilesetThumbnailDisplay.java +++ b/src/main/java/editor/gameselector/TilesetThumbnailDisplay.java @@ -1,7 +1,6 @@ package editor.gameselector; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.*; import java.awt.image.BufferedImage; @@ -23,19 +22,16 @@ public void paintComponent(Graphics g) { if (img != null) { g.drawImage(img, 0, 0, null); } - } public void setImage(BufferedImage img) { this.img = img; if (img != null) { setPreferredSize(new Dimension(img.getWidth(), img.getHeight())); - revalidate(); } else { setPreferredSize(new Dimension(128, 10)); - revalidate(); } - + revalidate(); } private void initComponents() { diff --git a/src/main/java/editor/grid/GeometryGL.java b/src/main/java/editor/grid/GeometryGL.java index 34482f4..ed77e9a 100644 --- a/src/main/java/editor/grid/GeometryGL.java +++ b/src/main/java/editor/grid/GeometryGL.java @@ -69,7 +69,6 @@ public GeometryGL(int textureID, int numTris, int numQuads) { this.tCoordsQuad = new float[numQuads * verticesPerQuad * coordsPerT]; this.nCoordsQuad = new float[numQuads * verticesPerQuad * coordsPerN]; this.colorsQuad = new float[numQuads * verticesPerQuad * coordsPerColor]; - } public void updateBuffers() { @@ -84,7 +83,6 @@ public void updateBuffers() { this.colorsQuadBuffer = Buffers.newDirectFloatBuffer(colorsQuad); } - public boolean hasTriData() { return vCoordsTri != null && vCoordsTri.length > 0 && tCoordsTri != null && tCoordsTri.length > 0 @@ -112,5 +110,4 @@ public boolean hasQuadBufferData() { && nCoordsQuadBuffer != null && nCoordsQuadBuffer.hasRemaining() && colorsQuadBuffer != null && colorsQuadBuffer.hasRemaining(); } - } diff --git a/src/main/java/editor/grid/MapGrid.java b/src/main/java/editor/grid/MapGrid.java index a9fdcd2..0ad5d9f 100644 --- a/src/main/java/editor/grid/MapGrid.java +++ b/src/main/java/editor/grid/MapGrid.java @@ -8,7 +8,10 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; +import java.util.Arrays; import java.util.HashSet; +import java.util.Objects; +import java.util.Set; import tileset.Tile; import tileset.Tileset; @@ -19,7 +22,7 @@ */ public class MapGrid { - private MapEditorHandler handler; + private final MapEditorHandler handler; //public String filePath = ""; //public String tilesetFilePath = ""; @@ -53,9 +56,7 @@ public MapGrid(MapEditorHandler handler) { for (int k = 0; k < numLayers; k++) { //int[][] tileGrid = new int[cols][rows]; for (int i = 0; i < cols; i++) { - for (int j = 0; j < rows; j++) { - tileLayers[k][i][j] = -1; - } + Arrays.fill(tileLayers[k][i], -1); } } @@ -121,17 +122,16 @@ public void loadFromFile(String path) throws FileNotFoundException, IOException }*/ public void saveMapToOBJ(Tileset tset, String path, boolean saveTextures, boolean saveVertexColors, float tileUpscale) throws FileNotFoundException { - ObjWriter writer = new ObjWriter(tset, this, path, handler.getGameIndex(), - saveTextures, saveVertexColors, tileUpscale); + ObjWriter writer = new ObjWriter(tset, this, path, handler.getGameIndex(), saveTextures, saveVertexColors, tileUpscale); writer.writeMapObj(); } public static void loadMatrixFromFile(BufferedReader br, int[][] matrix) throws IOException { for (int i = 0; i < rows; i++) { String line = br.readLine(); - String[] lineSplitted = line.split(" "); + String[] lineSplit = line.split(" "); for (int j = 0; j < cols; j++) { - matrix[j][i] = Integer.parseInt(lineSplitted[j]); + matrix[j][i] = Integer.parseInt(lineSplit[j]); } } } @@ -140,9 +140,9 @@ private Integer[][] loadLayerFromFile(BufferedReader br) throws IOException { Integer[][] layer = new Integer[cols][rows]; for (int i = 0; i < rows; i++) { String line = br.readLine(); - String[] lineSplitted = line.split(" "); + String[] lineSplit = line.split(" "); for (int j = 0; j < cols; j++) { - layer[j][i] = Integer.parseInt(lineSplitted[j]); + layer[j][i] = Integer.parseInt(lineSplit[j]); } } return layer; @@ -222,7 +222,7 @@ public void clearAllLayers() { } public void moveTilesUp(int layerIndex) { - for (int i = 0; i < (cols - 0); i++) { + for (int i = 0; i < cols; i++) { for (int j = (rows - 1); j > 0; j--) { tileLayers[layerIndex][i][j] = tileLayers[layerIndex][i][j - 1]; heightLayers[layerIndex][i][j] = heightLayers[layerIndex][i][j - 1]; @@ -233,7 +233,7 @@ public void moveTilesUp(int layerIndex) { } public void moveTilesDown(int layerIndex) { - for (int i = 0; i < (cols - 0); i++) { + for (int i = 0; i < cols; i++) { for (int j = 0; j < (rows - 1); j++) { tileLayers[layerIndex][i][j] = tileLayers[layerIndex][i][j + 1]; heightLayers[layerIndex][i][j] = heightLayers[layerIndex][i][j + 1]; @@ -244,7 +244,7 @@ public void moveTilesDown(int layerIndex) { } public void moveTilesRight(int layerIndex) { - for (int i = 0; i < (rows - 0); i++) { + for (int i = 0; i < rows; i++) { for (int j = (cols - 1); j > 0; j--) { tileLayers[layerIndex][j][i] = tileLayers[layerIndex][j - 1][i]; heightLayers[layerIndex][j][i] = heightLayers[layerIndex][j - 1][i]; @@ -255,7 +255,7 @@ public void moveTilesRight(int layerIndex) { } public void moveTilesLeft(int layerIndex) { - for (int i = 0; i < (rows - 0); i++) { + for (int i = 0; i < rows; i++) { for (int j = 0; j < (cols - 1); j++) { tileLayers[layerIndex][j][i] = tileLayers[layerIndex][j + 1][i]; heightLayers[layerIndex][j][i] = heightLayers[layerIndex][j + 1][i]; @@ -300,9 +300,7 @@ public void floodFillTileGrid(int x, int y, int value, int tileWidth, int tileHe //Generate mask boolean[][] mask = new boolean[MapGrid.cols][MapGrid.rows]; for (int i = 0; i < MapGrid.cols; i++) { - for (int j = 0; j < MapGrid.rows; j++) { - mask[i][j] = true; - } + Arrays.fill(mask[i], true); } for (int i = 0; i < MapGrid.cols; i++) { @@ -399,16 +397,10 @@ public void setHeightLayer(int index, int[][] heightLayer) { } public boolean isEmpty() { - for (int i = 0; i < tileLayers.length; i++) { - for (int j = 0; j < tileLayers[i].length; j++) { - for (int k = 0; k < tileLayers[i][j].length; k++) { - if (tileLayers[i][j][k] != -1) { - return false; - } - } - } - } - return true; + return Arrays.stream(tileLayers) + .flatMap(Arrays::stream) + .flatMapToInt(Arrays::stream) + .noneMatch(anInt -> anInt != -1); } public void updateAllMapLayers(boolean realTimePostProcessing) { @@ -424,42 +416,36 @@ public void updateMapLayerGL(int layerIndex, boolean realTimePostProcessing) { realTimePostProcessing, handler.getGame().getMaxTileableSize()); } - public void addTileIndicesUsed(HashSet indices) { - for (int i = 0; i < tileLayers.length; i++) { - for (int j = 0; j < tileLayers[i].length; j++) { - for (int k = 0; k < tileLayers[i][j].length; k++) { - if (tileLayers[i][j][k] != -1) { - indices.add(tileLayers[i][j][k]); + public void addTileIndicesUsed(Set indices) { + for (int[][] tileLayer : tileLayers) { + for (int[] ints : tileLayer) { + for (int anInt : ints) { + if (anInt != -1) { + indices.add(anInt); } } } } } - public HashSet getTileIndicesUsed() { - HashSet indices = new HashSet<>(); + public Set getTileIndicesUsed() { + Set indices = new HashSet<>(); addTileIndicesUsed(indices); return indices; } public int getNumTriangles() { - int numTriangles = 0; - for (MapLayerGL mapLayerGL : mapLayersGL) { - if (mapLayerGL != null) { - numTriangles += mapLayerGL.getNumTriangles(); - } - } - return numTriangles; + return Arrays.stream(mapLayersGL) + .filter(Objects::nonNull) + .mapToInt(MapLayerGL::getNumTriangles) + .sum(); } public int getNumQuads() { - int numQuads = 0; - for (MapLayerGL mapLayerGL : mapLayersGL) { - if (mapLayerGL != null) { - numQuads += mapLayerGL.getNumQuads(); - } - } - return numQuads; + return Arrays.stream(mapLayersGL) + .filter(Objects::nonNull) + .mapToInt(MapLayerGL::getNumQuads) + .sum(); } public int getNumPolygons() { @@ -467,13 +453,10 @@ public int getNumPolygons() { } public int getNumMaterials() { - int numMaterials = 0; - for (MapLayerGL mapLayerGL : mapLayersGL) { - if (mapLayerGL != null) { - numMaterials += mapLayerGL.getNumGeometryGL(); - } - } - return numMaterials; + return Arrays.stream(mapLayersGL) + .filter(Objects::nonNull) + .mapToInt(MapLayerGL::getNumGeometryGL) + .sum(); } public void applyLookupTable(int[] tileIndices) { @@ -489,5 +472,4 @@ public void applyLookupTable(int[] tileIndices) { } } } - } diff --git a/src/main/java/editor/grid/MapLayerGL.java b/src/main/java/editor/grid/MapLayerGL.java index 9f74b52..1b1b8be 100644 --- a/src/main/java/editor/grid/MapLayerGL.java +++ b/src/main/java/editor/grid/MapLayerGL.java @@ -3,8 +3,9 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; -import java.util.Objects; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import tileset.Tile; import tileset.Tileset; @@ -14,7 +15,7 @@ */ public class MapLayerGL { - private HashMap geometryGL; + private final Map geometryGL; public MapLayerGL(int[][] tileGrid, int[][] heightGrid, Tileset tset, boolean realTimePostProcessing, int maxTileableSize) { if (realTimePostProcessing) { @@ -24,25 +25,21 @@ public MapLayerGL(int[][] tileGrid, int[][] heightGrid, Tileset tset, boolean re } } - private static HashMap generateGeometryMap( - int[][] tileGrid, int[][] heightGrid, Tileset tset) { - + private static Map generateGeometryMap(int[][] tileGrid, int[][] heightGrid, Tileset tset) { //Calculate geometry sizes - HashMap infoMap = calculateGeometrySizes(tileGrid, tset); + Map infoMap = calculateGeometrySizes(tileGrid, tset); //Calculate texture IDs and info array - ArrayList sizeArray = new ArrayList<>(infoMap.values()); + List sizeArray = new ArrayList<>(infoMap.values()); //Generate geometry - HashMap geometryMap = new HashMap<>(sizeArray.size()); - for (GeometrySize sizes : sizeArray) { - GeometryGL geometry = new GeometryGL(sizes.getID(), sizes.getNumTris(), sizes.getNumQuads()); - geometryMap.put(sizes.getID(), geometry); - } + Map geometryMap = sizeArray.stream() + .collect(Collectors.toMap(GeometrySize::getID, sizes -> new GeometryGL(sizes.getID(), sizes.getNumTris(), sizes.getNumQuads()), + (a, b) -> b, () -> new HashMap<>(sizeArray.size()))); //Generate map model - HashMap trisAdded = new HashMap<>(geometryMap.size()); - HashMap quadsAdded = new HashMap<>(geometryMap.size()); + Map trisAdded = new HashMap<>(geometryMap.size()); + Map quadsAdded = new HashMap<>(geometryMap.size()); for (Integer ID : geometryMap.keySet()) { trisAdded.put(ID, 0); quadsAdded.put(ID, 0); @@ -74,15 +71,14 @@ private static HashMap generateGeometryMap( return geometryMap; } - private static HashMap generateGeometryMapPostProcessed( - int[][] tileGrid, int[][] heightGrid, Tileset tset, int maxTileableSize) { + private static Map generateGeometryMapPostProcessed(int[][] tileGrid, int[][] heightGrid, Tileset tset, int maxTileableSize) { int[][] scaleMatrixX = new int[MapGrid.cols][MapGrid.rows]; int[][] scaleMatrixY = new int[MapGrid.cols][MapGrid.rows]; boolean[][] writtenGrid = new boolean[MapGrid.cols][MapGrid.rows]; - HashMap infoMap = new HashMap<>(tset.getMaterials().size()); + Map infoMap = new HashMap<>(tset.getMaterials().size()); for (int i = 0; i < MapGrid.cols; i++) { for (int j = 0; j < MapGrid.rows; j++) { if (!writtenGrid[i][j] && tileGrid[i][j] != -1) { @@ -112,18 +108,18 @@ private static HashMap generateGeometryMapPostProcessed( } //Calculate texture IDs and info array - ArrayList sizeArray = new ArrayList<>(infoMap.values()); + List sizeArray = new ArrayList<>(infoMap.values()); //Generate geometry - HashMap geometryMap = new HashMap<>(sizeArray.size()); + Map geometryMap = new HashMap<>(sizeArray.size()); for (GeometrySize sizes : sizeArray) { GeometryGL geometry = new GeometryGL(sizes.getID(), sizes.getNumTris(), sizes.getNumQuads()); geometryMap.put(sizes.getID(), geometry); } //Generate map model - HashMap trisAdded = new HashMap<>(geometryMap.size()); - HashMap quadsAdded = new HashMap<>(geometryMap.size()); + Map trisAdded = new HashMap<>(geometryMap.size()); + Map quadsAdded = new HashMap<>(geometryMap.size()); for (Integer ID : geometryMap.keySet()) { trisAdded.put(ID, 0); quadsAdded.put(ID, 0); @@ -211,8 +207,7 @@ private static int getNumEqualTilesX(int[][] tileGrid, int[][] heightGrid, int n = 1; for (int i = width, limit = cols - c; i < limit && n < maxTileableSize; i += width) { int nextC = c + i; - int nextR = r; - if (sameHeightAndType(tileGrid, heightGrid, c, r, nextC, nextR) && !writtenGrid[nextC][nextR]) { + if (sameHeightAndType(tileGrid, heightGrid, c, r, nextC, r) && !writtenGrid[nextC][r]) { n++; } else { return n; @@ -225,9 +220,8 @@ private static int getNumEqualTilesY(int[][] tileGrid, int[][] heightGrid, int c, int r, boolean[][] writtenGrid, int height, int rows, int maxTileableSize) { int n = 1; for (int i = height, limit = rows - r; i < limit && n < maxTileableSize; i += height) { - int nextC = c; int nextR = r + i; - if (sameHeightAndType(tileGrid, heightGrid, c, r, nextC, nextR) && !writtenGrid[nextC][nextR]) { + if (sameHeightAndType(tileGrid, heightGrid, c, r, c, nextR) && !writtenGrid[c][nextR]) { n++; } else { return n; @@ -271,7 +265,7 @@ private static int getExpansionX(int[][] tileGrid, int[][] heightGrid, return n; } - private static boolean sameHeightAndType(int[][] tileGrid, int heightGrid[][], int c1, int r1, int c2, int r2) { + private static boolean sameHeightAndType(int[][] tileGrid, int[][] heightGrid, int c1, int r1, int c2, int r2) { return (tileGrid[c1][r1] == tileGrid[c2][r2] && heightGrid[c1][r1] == heightGrid[c2][r2]); } @@ -312,9 +306,9 @@ private static void updateWrittenGrid(boolean[][] writtenGrid, int c, int r, } } - private static void addTileToMap(Tile tile, HashMap geometryMap, float[] offsets, - HashMap trisAdded, - HashMap quadsAdded) { + private static void addTileToMap(Tile tile, Map geometryMap, float[] offsets, + Map trisAdded, + Map quadsAdded) { for (int i = 0; i < tile.getTextureIDs().size(); i++) { int ID = tile.getTextureIDs().get(i); @@ -342,10 +336,10 @@ private static void addTileToMap(Tile tile, HashMap geometr } } - private static void addTileToMap(Tile tile, HashMap geometryMap, + private static void addTileToMap(Tile tile, Map geometryMap, float[] offsets, float[] scales, float[] scalesTex, - HashMap trisAdded, - HashMap quadsAdded) { + Map trisAdded, + Map quadsAdded) { for (int i = 0; i < tile.getTextureIDs().size(); i++) { int ID = tile.getTextureIDs().get(i); @@ -381,7 +375,6 @@ private static void addTileToMap(Tile tile, HashMap geometr applyScalesToArray(geometry.tCoordsQuad, scalesTex, numQuadsAdded * GeometryGL.tPerQuad, numQuads * GeometryGL.tPerQuad); } - trisAdded.put(ID, numTrisAdded + numTris); quadsAdded.put(ID, numQuadsAdded + numQuads); } @@ -406,13 +399,13 @@ private static void applyGlobalTexMapping(float[] tCoords, float[] vCoords, floa } } - private static HashMap calculateGeometrySizes(int[][] tileGrid, Tileset tset) { - HashMap infoMap = new HashMap<>(tset.getMaterials().size()); - for (int i = 0; i < tileGrid.length; i++) { - for (int j = 0; j < tileGrid[i].length; j++) { - if (tileGrid[i][j] != -1) { + private static Map calculateGeometrySizes(int[][] tileGrid, Tileset tset) { + Map infoMap = new HashMap<>(tset.getMaterials().size()); + for (int[] ints : tileGrid) { + for (int anInt : ints) { + if (anInt != -1) { try { - Tile tile = tset.get(tileGrid[i][j]); + Tile tile = tset.get(anInt); for (int k = 0; k < tile.getTextureIDs().size(); k++) { int ID = tile.getTextureIDs().get(k); int numTris = getNumPolygons(k, tile.getTexOffsetsTri(), tile.getVCoordsTri(), 3, tile.getTextureIDs().size()); @@ -436,7 +429,7 @@ private static HashMap calculateGeometrySizes(int[][] til return infoMap; } - private static int getNumPolygons(int index, ArrayList offsets, float[] vCoords, + private static int getNumPolygons(int index, List offsets, float[] vCoords, int vPerPolygon, int numTexIDs) { int start, end; start = offsets.get(index); @@ -482,7 +475,7 @@ public int getID() { } } - public HashMap getGeometryGL() { + public Map getGeometryGL() { return geometryGL; } @@ -491,23 +484,16 @@ public int getNumGeometryGL() { } public int getNumTriangles() { - int numVCoords = 0; - for (GeometryGL geom : geometryGL.values()) { - numVCoords += geom.vCoordsTri.length; - } + int numVCoords = geometryGL.values().stream().mapToInt(geom -> geom.vCoordsTri.length).sum(); return numVCoords / GeometryGL.vPerTri; } public int getNumQuads() { - int numVCoords = 0; - for (GeometryGL geom : geometryGL.values()) { - numVCoords += geom.vCoordsQuad.length; - } + int numVCoords = geometryGL.values().stream().mapToInt(geom -> geom.vCoordsQuad.length).sum(); return numVCoords / GeometryGL.vPerQuad; } public int getNumPolygons() { return getNumTriangles() + getNumQuads(); } - } diff --git a/src/main/java/editor/handler/MapData.java b/src/main/java/editor/handler/MapData.java index 2a980c4..996817a 100644 --- a/src/main/java/editor/handler/MapData.java +++ b/src/main/java/editor/handler/MapData.java @@ -18,7 +18,7 @@ public class MapData { //Map Editor Handler - private MapEditorHandler handler; + private final MapEditorHandler handler; //Map grid private MapGrid grid; @@ -54,7 +54,7 @@ public MapData(MapEditorHandler handler) { bdhc = new Bdhc(); backsound = new Backsound(); collisions = new Collisions(handler.getGameIndex()); - collisions2 = new Collisions(handler.getGameIndex());; + collisions2 = new Collisions(handler.getGameIndex()); buildings = new BuildFile(); bdhcam = new Bdhcam(); diff --git a/src/main/java/editor/handler/MapEditorHandler.java b/src/main/java/editor/handler/MapEditorHandler.java index f9d4ef8..b74f539 100644 --- a/src/main/java/editor/handler/MapEditorHandler.java +++ b/src/main/java/editor/handler/MapEditorHandler.java @@ -19,11 +19,13 @@ import java.awt.Point; import java.awt.image.BufferedImage; import java.io.File; -import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Set; import java.util.TreeSet; +import java.util.stream.IntStream; import tileset.Tile; import tileset.Tileset; @@ -38,10 +40,10 @@ public class MapEditorHandler { public static final String versionName = "Pokemon DS Map Studio 2.2"; //Main frame - private MainFrame mainFrame; + private final MainFrame mainFrame; //Game - private Game game; + private final Game game; //Working directory private String lastTilesetDirectoryUsed = null; @@ -84,7 +86,7 @@ public class MapEditorHandler { private int[][] tileLayerCopy = null; private int[][] heightLayerCopy = null; - //Map State Hanlder + //Map State Handler private StateHandler mapStateHandler = new StateHandler(); private boolean layerChanged = false; @@ -101,10 +103,7 @@ public MapEditorHandler(MainFrame frame) { mapMatrix = new MapMatrix(this); //Active layer - for (int i = 0; i < renderLayers.length; i++) { - renderLayers[i] = true; - } - + Arrays.fill(renderLayers, true); } private void initHeights() { @@ -112,7 +111,6 @@ private void initHeights() { for (int i = 0; i < numHeights; i++) { heights[i] = minHeight + i; } - } public MapData getCurrentMap() { @@ -219,11 +217,10 @@ public void setGrid(MapGrid grid) { getCurrentMap().setGrid(grid); } - public ArrayList getSmartGridArray() { + public List getSmartGridArray() { return tset.getSmartGridArray(); } - public SmartGrid getSmartGrid(int index) { return tset.getSmartGridArray().get(index); } @@ -294,15 +291,15 @@ public int[][] getActiveHeightLayer() { public void setActiveTileLayer(int index) { MapGrid grid = getCurrentMap().getGrid(); - if (index >= 0 && index < grid.numLayers) { + if (index >= 0 && index < MapGrid.numLayers) { activeLayer = index; } } public void setOnlyActiveTileLayer(int index) { MapGrid grid = getCurrentMap().getGrid(); - if (index >= 0 && index < grid.numLayers) { - for (int i = 0; i < grid.numLayers; i++) { + if (index >= 0 && index < MapGrid.numLayers) { + for (int i = 0; i < MapGrid.numLayers; i++) { renderLayers[i] = false; } renderLayers[index] = true; @@ -312,18 +309,12 @@ public void setOnlyActiveTileLayer(int index) { } public boolean isLayerTheOnlyActive(int index) { - MapGrid grid = getCurrentMap().getGrid(); - for(int i = 0; i < grid.numLayers; i++){ - if(renderLayers[i] && i != index){ - return false; - } - } - return true; + return IntStream.range(0, MapGrid.numLayers) + .noneMatch(i -> renderLayers[i] && i != index); } public void setLayersEnabled(boolean enabled) { - MapGrid grid = getCurrentMap().getGrid(); - for(int i = 0; i< grid.numLayers; i++){ + for(int i = 0; i < MapGrid.numLayers; i++){ renderLayers[i] = enabled; } } @@ -464,7 +455,7 @@ public void moveSelectedSmartGridDown() { public boolean mapHasVertexColors() { //Get indices of tiles used in map MapGrid grid = getGrid(); - TreeSet tileIndicesInGrid = new TreeSet(); + TreeSet tileIndicesInGrid = new TreeSet<>(); for (int i = 0; i < grid.tileLayers.length; i++) { for (int j = 0; j < grid.tileLayers[i].length; j++) { for (int k = 0; k < grid.tileLayers[i][j].length; k++) { @@ -477,21 +468,15 @@ public boolean mapHasVertexColors() { } //Get indices of materials used in tiles - TreeSet materialIndicesInGrid = new TreeSet(); + TreeSet materialIndicesInGrid = new TreeSet<>(); for (Integer tileIndex : tileIndicesInGrid) { Tile tile = tset.get(tileIndex); - for (Integer materialIndex : tile.getTextureIDs()) { - materialIndicesInGrid.add(materialIndex); - } + materialIndicesInGrid.addAll(tile.getTextureIDs()); } //Check if materials in map use vertex colors - for (Integer materialIndex : materialIndicesInGrid) { - if (tset.getMaterial(materialIndex).vertexColorsEnabled()) { - return true; - } - } - return false; + return materialIndicesInGrid.stream() + .anyMatch(materialIndex -> tset.getMaterial(materialIndex).vertexColorsEnabled()); } public void updateAllMapThumbnails() { @@ -563,7 +548,6 @@ public void setMapSelected(Point mapCoords) { setMapSelected(mapCoords, true); } - public void setDefaultMapSelected() { if (mapMatrix.getMatrix().isEmpty()) { //|| mapMatrix.getMatrix().get(new Point(0, 0)) == null) { mapSelected = new Point(0, 0); @@ -573,7 +557,7 @@ public void setDefaultMapSelected() { } public boolean mapExists(Point mapCoords) { - return mapMatrix.getMatrix().keySet().contains(mapCoords); + return mapMatrix.getMatrix().containsKey(mapCoords); } public boolean mapSelectedExists() { @@ -650,7 +634,6 @@ public void pasteLayerHeights(int index) { } } - public void copySelectedLayer() { copyLayer(getActiveLayerIndex()); } diff --git a/src/main/java/editor/heightselector/HeightSelector.java b/src/main/java/editor/heightselector/HeightSelector.java index 40bf093..d11472a 100644 --- a/src/main/java/editor/heightselector/HeightSelector.java +++ b/src/main/java/editor/heightselector/HeightSelector.java @@ -5,7 +5,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; /** * @author Trifindo, JackHack96 @@ -14,7 +13,7 @@ public class HeightSelector extends JPanel { private MapEditorHandler handler; - private int tileSize = 16; + private final int tileSize = 16; public HeightSelector() { initComponents(); diff --git a/src/main/java/editor/keyboard/KeyInfo.java b/src/main/java/editor/keyboard/KeyInfo.java index 7074713..aeb9c81 100644 --- a/src/main/java/editor/keyboard/KeyInfo.java +++ b/src/main/java/editor/keyboard/KeyInfo.java @@ -1,7 +1,6 @@ package editor.keyboard; import javax.swing.*; -import javax.swing.GroupLayout; /** * @author Trifindo, JackHack96 diff --git a/src/main/java/editor/keyboard/KeyboardInfoDialog.java b/src/main/java/editor/keyboard/KeyboardInfoDialog.java index 09c589c..2cb9da8 100644 --- a/src/main/java/editor/keyboard/KeyboardInfoDialog.java +++ b/src/main/java/editor/keyboard/KeyboardInfoDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; /** diff --git a/src/main/java/editor/keyboard/KeyboardInfoDialog2.java b/src/main/java/editor/keyboard/KeyboardInfoDialog2.java index f381058..5a5b38d 100644 --- a/src/main/java/editor/keyboard/KeyboardInfoDialog2.java +++ b/src/main/java/editor/keyboard/KeyboardInfoDialog2.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; /** * @author Trifindo, JackHack96 diff --git a/src/main/java/editor/layerselector/LayerSelector.java b/src/main/java/editor/layerselector/LayerSelector.java index 986c7f5..822cfa9 100644 --- a/src/main/java/editor/layerselector/LayerSelector.java +++ b/src/main/java/editor/layerselector/LayerSelector.java @@ -2,21 +2,14 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.handler.MapEditorHandler; import editor.grid.MapGrid; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; -import java.awt.Font; -import java.awt.FontMetrics; import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; import java.awt.image.BufferedImage; -import javax.swing.SwingUtilities; import utils.Utils; @@ -32,8 +25,7 @@ public class LayerSelector extends JPanel { public LayerSelector() { initComponents(); - setPreferredSize(new Dimension(MapGrid.tileSize, - MapGrid.tileSize * MapGrid.numLayers)); + setPreferredSize(new Dimension(MapGrid.tileSize, MapGrid.tileSize * MapGrid.numLayers)); } private void formMousePressed(MouseEvent evt) { @@ -67,25 +59,17 @@ public void paintComponent(Graphics g) { g.drawImage(img, 0, i * MapGrid.tileSize, null); } g.setColor(new Color(255, 100, 100, 100)); - g.fillRect(0, handler.getActiveLayerIndex() * MapGrid.tileSize, - MapGrid.tileSize - 1, MapGrid.tileSize - 1); + g.fillRect(0, handler.getActiveLayerIndex() * MapGrid.tileSize, MapGrid.tileSize - 1, MapGrid.tileSize - 1); g.setColor(Color.red); - g.drawRect(0, handler.getActiveLayerIndex() * MapGrid.tileSize, - MapGrid.tileSize - 1, MapGrid.tileSize - 1); - + g.drawRect(0, handler.getActiveLayerIndex() * MapGrid.tileSize, MapGrid.tileSize - 1, MapGrid.tileSize - 1); } } public void init(MapEditorHandler handler) { this.handler = handler; - layersOnImgs = Utils.loadVerticalImageArrayAsResource( - "/imgs/layersSelected.png", - MapGrid.numLayers); - - layersOffImgs = Utils.loadVerticalImageArrayAsResource( - "/imgs/layersNoSelected.png", - MapGrid.numLayers); + layersOnImgs = Utils.loadVerticalImageArrayAsResource("/imgs/layersSelected.png", MapGrid.numLayers); + layersOffImgs = Utils.loadVerticalImageArrayAsResource("/imgs/layersNoSelected.png", MapGrid.numLayers); } private void initComponents() { diff --git a/src/main/java/editor/layerselector/ThumbnailLayerSelector.java b/src/main/java/editor/layerselector/ThumbnailLayerSelector.java index e435165..016789f 100644 --- a/src/main/java/editor/layerselector/ThumbnailLayerSelector.java +++ b/src/main/java/editor/layerselector/ThumbnailLayerSelector.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.handler.MapEditorHandler; import editor.grid.MapGrid; @@ -13,14 +12,8 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.image.BufferedImage; -import javax.swing.AbstractAction; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.JSeparator; -import javax.swing.SwingUtilities; +import java.util.Objects; /** * @author Trifindo, JackHack96 @@ -29,7 +22,7 @@ public class ThumbnailLayerSelector extends JPanel { private MapEditorHandler handler; - private BufferedImage[] layerThumbnails = new BufferedImage[MapGrid.numLayers]; + private final BufferedImage[] layerThumbnails = new BufferedImage[MapGrid.numLayers]; private static final int layerWidth = 64, layerHeight = 64; private static final int smallTileSize = 2; private static final Color backColor = new Color(0, 127, 127, 255); @@ -41,16 +34,14 @@ public ThumbnailLayerSelector() { initComponents(); for (int i = 0; i < layerThumbnails.length; i++) { - BufferedImage img = new BufferedImage( - layerWidth, layerHeight, BufferedImage.TYPE_INT_RGB); + BufferedImage img = new BufferedImage(layerWidth, layerHeight, BufferedImage.TYPE_INT_RGB); layerThumbnails[i] = img; Graphics g = img.getGraphics(); g.setColor(backColor); g.fillRect(0, 0, img.getWidth(), img.getHeight()); } - setPreferredSize(new Dimension(layerWidth, - layerHeight * MapGrid.numLayers)); + setPreferredSize(new Dimension(layerWidth, layerHeight * MapGrid.numLayers)); } private void formMouseMoved(MouseEvent evt) { @@ -93,79 +84,58 @@ private void formMousePressed(MouseEvent evt) { JMenuItem itemPasteTiles = new JMenuItem("Paste Tiles"); JMenuItem itemPasteHeights = new JMenuItem("Paste Heights"); - itemShowLayer.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - handler.setLayerState(index, true); - repaint(); - handler.getMainFrame().repaintMapDisplay(); - } + itemShowLayer.addActionListener(e -> { + handler.setLayerState(index, true); + repaint(); + handler.getMainFrame().repaintMapDisplay(); }); - itemHideLayer.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - handler.setLayerState(index, false); - repaint(); - handler.getMainFrame().repaintMapDisplay(); - } + itemHideLayer.addActionListener(e -> { + handler.setLayerState(index, false); + repaint(); + handler.getMainFrame().repaintMapDisplay(); }); - itemClearLayer.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (handler.getTileset().size() > 0) { - handler.clearLayer(index); - //handler.getMainFrame().repaintMapDisplay(); - } + itemClearLayer.addActionListener(e -> { + if (handler.getTileset().size() > 0) { + handler.clearLayer(index); + //handler.getMainFrame().repaintMapDisplay(); } }); - itemCopyLayer.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (handler.getTileset().size() > 0) { - handler.copyLayer(index); - //handler.getMainFrame().repaintMapDisplay(); - } + itemCopyLayer.addActionListener(e -> { + if (handler.getTileset().size() > 0) { + handler.copyLayer(index); + //handler.getMainFrame().repaintMapDisplay(); } }); - itemPasteLayer.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (handler.getTileset().size() > 0) { - handler.pasteLayer(index); - //handler.getGrid().pasteTileLayer(index); - //handler.getGrid().pasteHeightLayer(index); - //handler.getMainFrame().repaintMapDisplay(); - } + itemPasteLayer.addActionListener(e -> { + if (handler.getTileset().size() > 0) { + handler.pasteLayer(index); + //handler.getGrid().pasteTileLayer(index); + //handler.getGrid().pasteHeightLayer(index); + //handler.getMainFrame().repaintMapDisplay(); } }); - itemPasteTiles.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (handler.getTileset().size() > 0) { - handler.pasteLayerTiles(index); - //handler.getGrid().pasteTileLayer(index); - //handler.getMainFrame().repaintMapDisplay(); - } + itemPasteTiles.addActionListener(e -> { + if (handler.getTileset().size() > 0) { + handler.pasteLayerTiles(index); + //handler.getGrid().pasteTileLayer(index); + //handler.getMainFrame().repaintMapDisplay(); } }); - itemPasteHeights.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (handler.getTileset().size() > 0) { - handler.pasteLayerHeights(index); - //handler.getGrid().pasteHeightLayer(index); - //handler.getMainFrame().repaintMapDisplay(); - } + itemPasteHeights.addActionListener(e -> { + if (handler.getTileset().size() > 0) { + handler.pasteLayerHeights(index); + //handler.getGrid().pasteHeightLayer(index); + //handler.getMainFrame().repaintMapDisplay(); } }); - itemShowLayer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/turnOnIcon.png"))); - itemHideLayer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/turnOffIcon.png"))); - itemClearLayer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/RemoveIcon.png"))); - itemCopyLayer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/copyIcon.png"))); - itemPasteLayer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/pasteIcon.png"))); - itemPasteTiles.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/pasteTileIcon.png"))); - itemPasteHeights.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/pasteHeightIcon.png"))); + itemShowLayer.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/turnOnIcon.png")))); + itemHideLayer.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/turnOffIcon.png")))); + itemClearLayer.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/RemoveIcon.png")))); + itemCopyLayer.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/copyIcon.png")))); + itemPasteLayer.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/pasteIcon.png")))); + itemPasteTiles.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/pasteTileIcon.png")))); + itemPasteHeights.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/pasteHeightIcon.png")))); menu.add(itemShowLayer); menu.add(itemHideLayer); @@ -189,7 +159,6 @@ public void actionPerformed(ActionEvent e) { } repaint(); handler.getMainFrame().repaintMapDisplay(); - } } } @@ -221,8 +190,7 @@ public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setStroke(new BasicStroke(2)); g.setColor(Color.red); - g.drawRect(1, handler.getActiveLayerIndex() * layerHeight + 1, - layerWidth - 2, layerHeight - 2); + g.drawRect(1, handler.getActiveLayerIndex() * layerHeight + 1, layerWidth - 2, layerHeight - 2); } @@ -230,7 +198,6 @@ public void paintComponent(Graphics g) { g.setColor(new Color(0.7f, 0.7f, 1.0f, 0.2f)); g.fillRect(0, hoverIndex * layerHeight, layerWidth - 1, layerHeight - 1); } - } public void drawAllLayerThumbnails() { @@ -270,27 +237,20 @@ class LayerPopupMenu extends JPopupMenu { public LayerPopupMenu(int layerIndex) { JMenuItem showLayer = new JMenuItem("Show Layer"); - showLayer.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - handler.setLayerState(layerIndex, true); - repaint(); - } + showLayer.addActionListener(e -> { + handler.setLayerState(layerIndex, true); + repaint(); }); showLayer.setEnabled(!handler.renderLayers[layerIndex]); add(showLayer); JMenuItem hideLayer = new JMenuItem("Hide Layer"); - hideLayer.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - handler.setLayerState(layerIndex, false); - repaint(); - } + hideLayer.addActionListener(e -> { + handler.setLayerState(layerIndex, false); + repaint(); }); hideLayer.setEnabled(handler.renderLayers[layerIndex]); add(hideLayer); - } } diff --git a/src/main/java/editor/mapdisplay/MapDisplay.java b/src/main/java/editor/mapdisplay/MapDisplay.java index 040d468..4ce2583 100644 --- a/src/main/java/editor/mapdisplay/MapDisplay.java +++ b/src/main/java/editor/mapdisplay/MapDisplay.java @@ -13,12 +13,10 @@ import static com.jogamp.opengl.GL.GL_GREATER; import static com.jogamp.opengl.GL.GL_LEQUAL; import static com.jogamp.opengl.GL.GL_LESS; -import static com.jogamp.opengl.GL.GL_LINEAR_MIPMAP_LINEAR; import static com.jogamp.opengl.GL.GL_LINES; import static com.jogamp.opengl.GL.GL_NEAREST; import static com.jogamp.opengl.GL.GL_NOTEQUAL; import static com.jogamp.opengl.GL.GL_NO_ERROR; -import static com.jogamp.opengl.GL.GL_ONE; import static com.jogamp.opengl.GL.GL_ONE_MINUS_DST_ALPHA; import static com.jogamp.opengl.GL.GL_ONE_MINUS_SRC_ALPHA; import static com.jogamp.opengl.GL.GL_REPEAT; @@ -47,15 +45,12 @@ import com.jogamp.opengl.glu.GLU; import com.jogamp.opengl.util.GLBuffers; import com.jogamp.opengl.util.texture.Texture; -import editor.bordermap.BorderMapsGrid; import editor.grid.GeometryGL; import editor.grid.MapGrid; import editor.grid.MapLayerGL; import editor.handler.MapData; import editor.state.MapLayerState; import geometry.Generator; -import graphicslib3D.Matrix3D; -import graphicslib3D.Vector3D; import java.awt.AlphaComposite; import java.awt.BasicStroke; @@ -79,13 +74,11 @@ import java.awt.image.BufferedImage; import java.nio.ByteBuffer; import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; -import javax.swing.SwingUtilities; import math.mat.Mat4f; import math.transf.TransfMat; @@ -178,7 +171,7 @@ public class MapDisplay extends GLJPanel implements GLEventListener, MouseListen protected ViewMode viewMode = ViewMode.VIEW_ORTHO_MODE; //Edit Modes - public static enum EditMode { + public enum EditMode { MODE_EDIT(new Cursor(Cursor.DEFAULT_CURSOR)), MODE_MOVE(new Cursor(Cursor.MOVE_CURSOR)), @@ -189,13 +182,11 @@ public static enum EditMode { public final Cursor cursor; - private EditMode(Cursor cursor) { + EditMode(Cursor cursor) { this.cursor = cursor; } - } - ; protected EditMode editMode = EditMode.MODE_EDIT; public MapDisplay() { @@ -242,7 +233,6 @@ public void init(GLAutoDrawable drawable) { cameraRotX = 0.0f; cameraRotY = 0.0f; cameraRotZ = 0.0f; - } @Override @@ -324,17 +314,14 @@ public void display(GLAutoDrawable drawable) { } catch (GLException ex) { ex.printStackTrace(); } - } @Override public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { - } @Override public void mouseClicked(MouseEvent e) { - } @Override @@ -349,12 +336,10 @@ public void mouseReleased(MouseEvent e) { @Override public void mouseEntered(MouseEvent e) { - } @Override public void mouseExited(MouseEvent e) { - } @Override @@ -373,7 +358,6 @@ public void mouseMoved(MouseEvent e) { @Override public void keyTyped(KeyEvent e) { - } @Override @@ -426,12 +410,12 @@ public void keyPressed(KeyEvent e) { } break; case KeyEvent.VK_Z: - if ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0) { + if ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0) { handler.getMainFrame().undoMapState(); } break; case KeyEvent.VK_Y: - if ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0) { + if ((e.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) != 0) { handler.getMainFrame().redoMapState(); } break; @@ -472,7 +456,6 @@ public void keyPressed(KeyEvent e) { repaint(); break; } - } @Override @@ -482,7 +465,6 @@ public void keyReleased(KeyEvent e) { //disableCameraMove(); repaint(); } - } @Override @@ -501,7 +483,6 @@ public void paintComponent(Graphics g) { drawBackImage(g); } } - } protected void applyGraphicsTransform(Graphics2D g2d) { @@ -523,7 +504,6 @@ protected void applyGraphicsTransform(Graphics2D g2d) { //float aspect = getAspectRatio(); //g2d.translate((aspect - 1.0f) * width / 2, 1.0f); - float xScaleFactor = orthoScale; float yScaleFactor = orthoScale; @@ -614,7 +594,7 @@ protected void drawAllMapBounds(Graphics g) { } protected void drawAllMapContours(Graphics g) { - HashMap> allContourPoints = handler.getMapMatrix().getContourPoints(); + Map> allContourPoints = handler.getMapMatrix().getContourPoints(); Graphics2D g2d = (Graphics2D) g; g2d.setStroke(new BasicStroke(4)); @@ -622,8 +602,8 @@ protected void drawAllMapContours(Graphics g) { g2d.translate(tileSize, tileSize); - for (HashMap.Entry> entry : allContourPoints.entrySet()) { - ArrayList contourPoints = entry.getValue(); + for (Map.Entry> entry : allContourPoints.entrySet()) { + List contourPoints = entry.getValue(); for (int i = 0; i < contourPoints.size(); i += 2) { try { g.setColor(handler.getMapMatrix().getAreaColors().get(entry.getKey())); @@ -721,9 +701,7 @@ protected void drawOpaqueMaps(GL2 gl, HashMap maps) { gl.glAlphaFunc(GL_GREATER, 0.9f); //long before = System.nanoTime(); - drawAllMaps(gl, maps, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawAllMaps(gl, maps, this::drawGeometryGL); //System.out.println("Elapsed: " + (System.nanoTime() - before)); } @@ -739,9 +717,7 @@ protected void drawTransparentMaps(GL2 gl, HashMap maps) { gl.glEnable(GL_ALPHA_TEST); gl.glAlphaFunc(GL_NOTEQUAL, 0.0f); - drawAllMaps(gl, maps, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawAllMaps(gl, maps, this::drawGeometryGL); } protected void drawWireframeMaps(GL2 gl, HashMap maps) { @@ -758,9 +734,7 @@ protected void drawWireframeMaps(GL2 gl, HashMap maps) { gl.glDisable(GL_TEXTURE_2D); gl.glLineWidth(1.5f); - drawAllMaps(gl, maps, (gl2, geometryGL, textures) -> { - drawWireframeGeometryGL(gl2, geometryGL, textures); - }); + drawAllMaps(gl, maps, this::drawWireframeGeometryGL); gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } @@ -861,7 +835,7 @@ protected void drawMapLayerGL(GL2 gl, DrawGeometryGLFunction drawFunction, MapLa gl.glPopMatrix(); } - protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, ArrayList textures) { + protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, List textures) { try { gl.glBindTexture(GL_TEXTURE_2D, textures.get(geometryGL.textureID).getTextureObject()); gl.glEnable(GL_TEXTURE_2D); @@ -943,7 +917,7 @@ protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, ArrayList } } - protected void drawWireframeGeometryGL(GL2 gl, GeometryGL geometryGL, ArrayList textures) { + protected void drawWireframeGeometryGL(GL2 gl, GeometryGL geometryGL, List textures) { try { //Draw Tris if (geometryGL.hasTriBufferData()) { @@ -1534,7 +1508,7 @@ public boolean isSphereInsideFrustum(Vec3f spherePos, float radius, Vec3f[][] fr public HashMap getMapsInsideFrustum(Vec3f[][] frustum){ float radius = (float) Math.sqrt((MapGrid.cols * MapGrid.cols) / 2.0f); - HashMap maps = new HashMap(); + HashMap maps = new HashMap<>(); for (HashMap.Entry map : handler.getMapMatrix().getMatrix().entrySet()) { Point p = map.getKey(); Vec3f center = new Vec3f(p.x * MapGrid.cols, -p.y * MapGrid.rows, 0.0f); @@ -1624,7 +1598,7 @@ public void updateLastMapState() { } protected void changeLayerWithNumKey(KeyEvent e, int layerIndex) { - if ((e.getModifiers() & KeyEvent.SHIFT_MASK) != 0) { + if ((e.getModifiersEx() & KeyEvent.SHIFT_DOWN_MASK) != 0) { handler.renderLayers[layerIndex] = !handler.renderLayers[layerIndex]; } else { handler.setActiveTileLayer(layerIndex); @@ -1707,9 +1681,7 @@ public void setDrawGridBorderMaps(boolean drawGridBorderMaps) { this.drawGridBorderMaps = drawGridBorderMaps; } - protected static interface DrawGeometryGLFunction { - - public void draw(GL2 gl, GeometryGL geometryGL, ArrayList textures); + protected interface DrawGeometryGLFunction { + void draw(GL2 gl, GeometryGL geometryGL, List textures); } - } diff --git a/src/main/java/editor/mapdisplay/View3dMode.java b/src/main/java/editor/mapdisplay/View3dMode.java index 9ede209..db752d5 100644 --- a/src/main/java/editor/mapdisplay/View3dMode.java +++ b/src/main/java/editor/mapdisplay/View3dMode.java @@ -22,16 +22,14 @@ public class View3dMode extends ViewMode { public void mousePressed(MapDisplay d, MouseEvent e) { d.lastMouseX = e.getX(); d.lastMouseY = e.getY(); - switch (d.editMode) { - case MODE_ZOOM: - if (SwingUtilities.isLeftMouseButton(e)) { - d.cameraZ /= 1.5; - d.repaint(); - } else if (SwingUtilities.isRightMouseButton(e)) { - d.cameraZ *= 1.5; - d.repaint(); - } - break; + if (d.editMode == MapDisplay.EditMode.MODE_ZOOM) { + if (SwingUtilities.isLeftMouseButton(e)) { + d.cameraZ /= 1.5; + d.repaint(); + } else if (SwingUtilities.isRightMouseButton(e)) { + d.cameraZ *= 1.5; + d.repaint(); + } } } @@ -133,9 +131,9 @@ public void applyCameraTransform(MapDisplay d, GL2 gl) { @Override public void setCameraAtMap(MapDisplay d) { - d.cameraRotX = d.defaultCamRotX; - d.cameraRotY = d.defaultCamRotY; - d.cameraRotZ = d.defaultCamRotZ; + d.cameraRotX = MapDisplay.defaultCamRotX; + d.cameraRotY = MapDisplay.defaultCamRotY; + d.cameraRotZ = MapDisplay.defaultCamRotZ; d.cameraZ = 40.0f; } @@ -167,8 +165,8 @@ public float getZFar(MapDisplay d) { public Vec3f[][] getFrustumPlanes(MapDisplay d) { Vec3f camAngles = new Vec3f(d.cameraRotX, d.cameraRotY, d.cameraRotZ); Vec3f tarPos = new Vec3f(d.cameraX, d.cameraY, 0.0f); - Vec3f camDir = d.rotToDir_(camAngles); - Vec3f camUp = d.rotToUp_(camAngles); + Vec3f camDir = MapDisplay.rotToDir_(camAngles); + Vec3f camUp = MapDisplay.rotToUp_(camAngles); Vec3f camRight = camDir.cross_(camUp); Vec3f camPos = tarPos.add_(camDir.negate_().scale_(d.cameraZ)); diff --git a/src/main/java/editor/mapdisplay/ViewHeightMode.java b/src/main/java/editor/mapdisplay/ViewHeightMode.java index 2afc3ea..f054551 100644 --- a/src/main/java/editor/mapdisplay/ViewHeightMode.java +++ b/src/main/java/editor/mapdisplay/ViewHeightMode.java @@ -69,10 +69,8 @@ public void mousePressed(MapDisplay d, MouseEvent e) { @Override public void mouseReleased(MapDisplay d, MouseEvent e) { - switch (d.editMode) { - case MODE_CLEAR: - d.handler.getMapMatrix().removeUnusedMaps(); - break; + if (d.editMode == MapDisplay.EditMode.MODE_CLEAR) { + d.handler.getMapMatrix().removeUnusedMaps(); } d.handler.updateLayerThumbnail(d.handler.getActiveLayerIndex()); d.handler.repaintThumbnailLayerSelector(); @@ -173,9 +171,6 @@ public void mouseWheelMoved(MapDisplay d, MouseWheelEvent e) { d.repaint(); break; case MODE_MOVE: - d.zoomCameraOrtho(e); - d.repaint(); - break; case MODE_ZOOM: d.zoomCameraOrtho(e); d.repaint(); @@ -247,8 +242,8 @@ public float getZFar(MapDisplay d) { public Vec3f[][] getFrustumPlanes(MapDisplay d) { Vec3f camAngles = new Vec3f(d.cameraRotX, d.cameraRotY, d.cameraRotZ); Vec3f tarPos = new Vec3f(d.cameraX, d.cameraY, 0.0f); - Vec3f camDir = d.rotToDir_(camAngles); - Vec3f camUp = d.rotToUp_(camAngles); + Vec3f camDir = MapDisplay.rotToDir_(camAngles); + Vec3f camUp = MapDisplay.rotToUp_(camAngles); Vec3f camRight = camDir.cross_(camUp); //Vec3f camPos = tarPos.add_(camDir.negate_().scale_(d.cameraZ)); Vec3f camPos = tarPos.add_(camDir.negate_().scale_(40.0f)); diff --git a/src/main/java/editor/mapdisplay/ViewMode.java b/src/main/java/editor/mapdisplay/ViewMode.java index e3126a3..bf7d297 100644 --- a/src/main/java/editor/mapdisplay/ViewMode.java +++ b/src/main/java/editor/mapdisplay/ViewMode.java @@ -2,17 +2,12 @@ package editor.mapdisplay; import com.jogamp.opengl.GL2; -import editor.state.MapLayerState; -import graphicslib3D.Matrix3D; -import graphicslib3D.Vector3D; import math.vec.Vec3f; import java.awt.Graphics; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; -import java.util.HashSet; -import javax.swing.SwingUtilities; /** * @author Trifindo diff --git a/src/main/java/editor/mapdisplay/ViewOrthoMode.java b/src/main/java/editor/mapdisplay/ViewOrthoMode.java index 7ced2dd..3fec0a1 100644 --- a/src/main/java/editor/mapdisplay/ViewOrthoMode.java +++ b/src/main/java/editor/mapdisplay/ViewOrthoMode.java @@ -128,16 +128,14 @@ public void mousePressed(MapDisplay d, MouseEvent e) { @Override public void mouseReleased(MapDisplay d, MouseEvent e) { - switch (d.editMode) { - case MODE_CLEAR: - d.handler.getMapMatrix().removeUnusedMaps(); - if (!d.handler.mapSelectedExists()) { - d.handler.setDefaultMapSelected(); - - d.handler.getMainFrame().getThumbnailLayerSelector().drawAllLayerThumbnails(); - d.handler.getMainFrame().getThumbnailLayerSelector().repaint(); - } - break; + if (d.editMode == MapDisplay.EditMode.MODE_CLEAR) { + d.handler.getMapMatrix().removeUnusedMaps(); + if (!d.handler.mapSelectedExists()) { + d.handler.setDefaultMapSelected(); + + d.handler.getMainFrame().getThumbnailLayerSelector().drawAllLayerThumbnails(); + d.handler.getMainFrame().getThumbnailLayerSelector().repaint(); + } } d.handler.updateLayerThumbnail(d.handler.getActiveLayerIndex()); d.handler.repaintThumbnailLayerSelector(); @@ -147,7 +145,6 @@ public void mouseReleased(MapDisplay d, MouseEvent e) { d.editedMapCoords = new HashSet<>(); d.handler.getMainFrame().updateMapMatrixDisplay(); - d.handler.getMainFrame().updateViewGeometryCount(); } @@ -261,9 +258,6 @@ public void mouseWheelMoved(MapDisplay d, MouseWheelEvent e) { d.repaint(); break; case MODE_MOVE: - d.zoomCameraOrtho(e); - d.repaint(); - break; case MODE_ZOOM: d.zoomCameraOrtho(e); d.repaint(); @@ -289,11 +283,7 @@ public void paintComponent(MapDisplay d, Graphics g) { d.drawTileThumbnail(g); break; case MODE_CLEAR: - d.drawUnitTileBounds(g); - break; case MODE_SMART_PAINT: - d.drawUnitTileBounds(g); - break; case MODE_INV_SMART_PAINT: d.drawUnitTileBounds(g); break; @@ -352,8 +342,8 @@ public float getZFar(MapDisplay d) { public Vec3f[][] getFrustumPlanes(MapDisplay d) { Vec3f camAngles = new Vec3f(d.cameraRotX, d.cameraRotY, d.cameraRotZ); Vec3f tarPos = new Vec3f(d.cameraX, d.cameraY, 0.0f); - Vec3f camDir = d.rotToDir_(camAngles); - Vec3f camUp = d.rotToUp_(camAngles); + Vec3f camDir = MapDisplay.rotToDir_(camAngles); + Vec3f camUp = MapDisplay.rotToUp_(camAngles); Vec3f camRight = camDir.cross_(camUp); //Vec3f camPos = tarPos.add_(camDir.negate_().scale_(d.cameraZ)); Vec3f camPos = tarPos.add_(camDir.negate_().scale_(40.0f)); diff --git a/src/main/java/editor/mapmatrix/MapImportDisplay.java b/src/main/java/editor/mapmatrix/MapImportDisplay.java index bd3a55b..f9ef95c 100644 --- a/src/main/java/editor/mapmatrix/MapImportDisplay.java +++ b/src/main/java/editor/mapmatrix/MapImportDisplay.java @@ -2,24 +2,13 @@ import java.awt.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.handler.MapData; import editor.handler.MapEditorHandler; -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; -import java.util.HashMap; -import java.util.Set; +import java.util.Map; /** * @author Trifindo, JackHack96 @@ -36,23 +25,22 @@ public class MapImportDisplay extends JPanel { private Point newMapMin = new Point(); private Point newMapPos = new Point(); private Dimension newMapSize = new Dimension(); - private HashMap maps; + private Map maps; private Point globalMin = new Point(); - private float scale = 0.5f; + private final float scale = 0.5f; - private Point lastMouse = new Point(); + private final Point lastMouse = new Point(); public MapImportDisplay() { initComponents(); } - public void init(MapEditorHandler handler, HashMap maps) { + public void init(MapEditorHandler handler, Map maps) { this.handler = handler; this.maps = maps; - mapMin = handler.getMapMatrix().getMinCoords(); mapMax = handler.getMapMatrix().getMaxCoords(); mapSize = handler.getMapMatrix().getMatrixSize(); @@ -135,8 +123,7 @@ public void updateSize() { } public void moveMap(Point dp) { - Point newPos = new Point(newMapPos.x + dp.x, newMapPos.y + dp.y); - this.newMapPos = newPos; + this.newMapPos = new Point(newMapPos.x + dp.x, newMapPos.y + dp.y); updateSize(); } diff --git a/src/main/java/editor/mapmatrix/MapMatrix.java b/src/main/java/editor/mapmatrix/MapMatrix.java index 74955c0..dd538b4 100644 --- a/src/main/java/editor/mapmatrix/MapMatrix.java +++ b/src/main/java/editor/mapmatrix/MapMatrix.java @@ -17,7 +17,6 @@ import editor.grid.MapGrid; import editor.handler.MapData; import editor.handler.MapEditorHandler; -import formats.mapbin.MapBinHGSS; import formats.obj.ObjWriter; import java.awt.BasicStroke; @@ -31,7 +30,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -41,9 +39,11 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; -import tileset.TextureNotFoundException; import tileset.Tile; import tileset.Tileset; import tileset.TilesetIO; @@ -65,16 +65,16 @@ public class MapMatrix { private static final String tilesetTag = "tileset"; private static final String bdhcTag = "bdhc"; - private MapEditorHandler handler; - private HashMap matrix; //Key is map coords + private final MapEditorHandler handler; + private Map matrix; //Key is map coords //Border maps - private HashSet borderMaps; + private Set borderMaps; //Contours - private HashMap> contourPoints; - private HashMap contourPointsBuffer; - private HashMap areaColors; + private Map> contourPoints; + private Map contourPointsBuffer; + private Map areaColors; public String filePath = ""; public String tilesetFilePath = ""; @@ -102,7 +102,7 @@ public MapMatrix(MapEditorHandler handler) { public void updateBordersData() { updateBorderMaps(); - final HashSet areaIndices = getAreaIndices(); + final Set areaIndices = getAreaIndices(); updateContourPoints(areaIndices); updateAreaColors(areaIndices); @@ -113,7 +113,6 @@ public void saveGridsToFile(String path) throws FileNotFoundException { path = path.concat("." + fileExtension); } - removeUnusedMaps(); removeAllUnusedMapFiles(); @@ -127,7 +126,7 @@ public void saveGridsToFile(String path) throws FileNotFoundException { out.println(filename + "." + Tileset.fileExtension); Point minCoords = getMinCoords(); - for (HashMap.Entry map : matrix.entrySet()) { + for (Map.Entry map : matrix.entrySet()) { out.println(mapTag); out.println((map.getKey().x - minCoords.x) + " " + (map.getKey().y - minCoords.y)); @@ -149,7 +148,7 @@ public void saveGridsToFile(String path) throws FileNotFoundException { out.close(); } - public void loadGridsFromFile(String path) throws FileNotFoundException, IOException, Exception { + public void loadGridsFromFile(String path) throws Exception { filePath = ""; tilesetFilePath = ""; @@ -158,7 +157,7 @@ public void loadGridsFromFile(String path) throws FileNotFoundException, IOExcep borderMaps = new HashSet<>(); updateBordersData(); - InputStream input = new FileInputStream(new File(path)); + InputStream input = new FileInputStream(path); BufferedReader br = new BufferedReader(new InputStreamReader(input)); int numMapsRead = 0; @@ -171,15 +170,15 @@ public void loadGridsFromFile(String path) throws FileNotFoundException, IOExcep String line; while ((line = br.readLine()) != null) { if (line.startsWith(gameIndexTag)) { - handler.setGameIndex(Integer.valueOf(br.readLine())); + handler.setGameIndex(Integer.parseInt(br.readLine())); } else if (line.startsWith(tilesetTag)) { String folderPath = new File(path).getParent(); tilesetFilePath = folderPath + File.separator + br.readLine(); System.out.println("Tileset path: " + tilesetFilePath); } else if (line.startsWith(mapTag)) { - String[] splittedLine = br.readLine().split(" "); - int x = Integer.parseInt(splittedLine[0]); - int y = Integer.parseInt(splittedLine[1]); + String[] splitLine = br.readLine().split(" "); + int x = Integer.parseInt(splitLine[0]); + int y = Integer.parseInt(splitLine[1]); currentMapCoords = new Point(x, y); currentGrid = new MapGrid(handler); } else if (line.startsWith(areaIndexTag)) { @@ -210,8 +209,8 @@ public void loadGridsFromFile(String path) throws FileNotFoundException, IOExcep input.close(); } - public static HashMap getGridsFromFile(String path, MapEditorHandler handler) throws FileNotFoundException, IOException, Exception { - HashMap matrix = new HashMap<>(expectedMaxNumMaps); + public static Map getGridsFromFile(String path, MapEditorHandler handler) throws Exception { + Map matrix = new HashMap<>(expectedMaxNumMaps); InputStream input = new FileInputStream(new File(path)); BufferedReader br = new BufferedReader(new InputStreamReader(input)); @@ -234,9 +233,9 @@ public static HashMap getGridsFromFile(String path, MapEditorHan tilesetFilePath = folderPath + File.separator + br.readLine(); } else if (line.startsWith(mapTag)) { - String[] splittedLine = br.readLine().split(" "); - int x = Integer.parseInt(splittedLine[0]); - int y = Integer.parseInt(splittedLine[1]); + String[] splitLine = br.readLine().split(" "); + int x = Integer.parseInt(splitLine[0]); + int y = Integer.parseInt(splitLine[1]); currentMapCoords = new Point(x, y); currentGrid = new MapGrid(handler); } else if (line.startsWith(areaIndexTag)) { @@ -269,11 +268,11 @@ public static HashMap getGridsFromFile(String path, MapEditorHan return matrix; } - public void addMapsFromFile(HashMap newMaps, Point offset, String folderPath, String fileName) throws IOException, NullPointerException, TextureNotFoundException { + public void addMapsFromFile(Map newMaps, Point offset, String folderPath, String fileName) throws IOException, NullPointerException { fileName = Utils.removeExtensionFromPath(fileName); Tileset tileset = TilesetIO.readTilesetFromFile(folderPath + File.separator + fileName + "." + Tileset.fileExtension); - ArrayList newTiles = new ArrayList<>(); + List newTiles = new ArrayList<>(); int[] tileLookupTable = new int[tileset.size()]; for (int i = 0; i < tileset.size(); i++) { @@ -296,19 +295,16 @@ public void addMapsFromFile(HashMap newMaps, Point offset, Strin handler.getTileset().importTiles(newTiles); //handler.getTileset().removeUnusedTextures(); - loadBDHCsFromFile(newMaps, folderPath, fileName, handler.getGameIndex()); loadBdhcamsFromFile(newMaps, folderPath, fileName, handler.getGameIndex()); loadCollisionsFromFile(newMaps, folderPath, fileName, handler.getGameIndex()); loadBacksoundsFromFile(newMaps, folderPath, fileName, handler.getGameIndex()); loadBuildingsFromFile(newMaps, folderPath, fileName); - - for (HashMap.Entry entry : newMaps.entrySet()) { + for (Map.Entry entry : newMaps.entrySet()) { Point coords = new Point(entry.getKey().x + offset.x, entry.getKey().y + offset.y); matrix.put(coords, entry.getValue()); } - } public void saveMapsAsObj(String path, boolean saveTextures, boolean includeVertexColors, float tileUpscale) throws FileNotFoundException { @@ -317,7 +313,7 @@ public void saveMapsAsObj(String path, boolean saveTextures, boolean includeVert String folderPath = new File(path).getParent(); String fileName = Utils.removeExtensionFromPath(new File(path).getName()); - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { String objFilePath = getFilePathWithCoords(matrix, folderPath, fileName, mapEntry.getKey(), "obj"); mapEntry.getValue().getGrid().saveMapToOBJ(handler.getTileset(), objFilePath, saveTextures, includeVertexColors, tileUpscale); } @@ -335,12 +331,11 @@ public void saveMapsAsObjJoined(String path, boolean saveTextures, boolean inclu ObjWriter writer = new ObjWriter(handler.getTileset(), generateGridHashMap(), objFilePath, handler.getGameIndex(), saveTextures, includeVertexColors, tileUpscale); writer.writeMapObj(); - } public void saveBDHCs() throws IOException { int game = handler.getGameIndex(); - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { String path = getFilePathWithCoords(matrix, new File(filePath).getParent(), new File(filePath).getName(), mapEntry.getKey(), Bdhc.fileExtension); if (game == Game.DIAMOND || game == Game.PEARL) { @@ -353,7 +348,7 @@ public void saveBDHCs() throws IOException { public void saveBacksounds() throws IOException { int game = handler.getGameIndex(); - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { String path = getFilePathWithCoords(matrix, new File(filePath).getParent(), new File(filePath).getName(), mapEntry.getKey(), Backsound.fileExtension); if (game == Game.HEART_GOLD || game == Game.SOUL_SILVER) { @@ -364,7 +359,7 @@ public void saveBacksounds() throws IOException { public void saveBdhcams() throws IOException { int game = handler.getGameIndex(); - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { String path = getFilePathWithCoords(matrix, new File(filePath).getParent(), new File(filePath).getName(), mapEntry.getKey(), Bdhcam.fileExtension); if (game == Game.PLATINUM || game == Game.HEART_GOLD || game == Game.SOUL_SILVER) { @@ -374,7 +369,7 @@ public void saveBdhcams() throws IOException { } public void saveCollisions() throws IOException { - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { String path = getFilePathWithCoords(matrix, new File(filePath).getParent(), new File(filePath).getName(), mapEntry.getKey(), Collisions.fileExtension); mapEntry.getValue().getCollisions().saveToFile(path); @@ -390,7 +385,7 @@ public void saveCollisions() throws IOException { } public void saveBuildings() throws IOException { - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { String path = getFilePathWithCoords(matrix, new File(filePath).getParent(), new File(filePath).getName(), mapEntry.getKey(), BuildFile.fileExtension); mapEntry.getValue().getBuildings().saveToFile(path); @@ -401,7 +396,7 @@ public void saveBuildings() throws IOException { public void saveBinaryMaps() { System.out.println("Saving Binary maps..."); int game = handler.getGameIndex(); - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { Point p = mapEntry.getKey(); try { if (game == Game.HEART_GOLD || game == Game.SOUL_SILVER) { @@ -423,9 +418,9 @@ public void saveBinaryMaps() { }*/ - public void loadBDHCsFromFile(HashMap matrix, String folderPath, String mapFileName, int game) { + public void loadBDHCsFromFile(Map matrix, String folderPath, String mapFileName, int game) { if (matrix.size() == 1) {//OLD MAP TYPE - HashMap.Entry mapEntry = matrix.entrySet().iterator().next(); + Map.Entry mapEntry = matrix.entrySet().iterator().next(); try { String bdhcPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), Bdhc.fileExtension); loadBDHC(bdhcPath, mapEntry.getValue(), game); @@ -438,7 +433,7 @@ public void loadBDHCsFromFile(HashMap matrix, String folderPath, } } } else { - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { try { String bdhcPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), Bdhc.fileExtension); loadBDHC(bdhcPath, mapEntry.getValue(), game); @@ -461,14 +456,13 @@ public void loadBDHC(String path, MapData mapData, int game) throws IOException } } - public static void loadBdhcamsFromFile(HashMap matrix, String folderPath, String mapFileName, int game) { - for (HashMap.Entry mapEntry : matrix.entrySet()) { + public static void loadBdhcamsFromFile(Map matrix, String folderPath, String mapFileName, int game) { + for (Map.Entry mapEntry : matrix.entrySet()) { try { String bdhcamPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), Bdhcam.fileExtension); loadBdhcam(bdhcamPath, mapEntry.getValue(), game); } catch (Exception ex) { mapEntry.getValue().setBdhcam(new Bdhcam()); - } } } @@ -485,9 +479,9 @@ public void loadBdhcamsFromFile(String folderPath, String mapFileName) { loadBdhcamsFromFile(matrix, folderPath, mapFileName, handler.getGameIndex()); } - public static void loadBacksoundsFromFile(HashMap matrix, String folderPath, String mapFileName, int game) { + public static void loadBacksoundsFromFile(Map matrix, String folderPath, String mapFileName, int game) { if (matrix.size() == 1) {//OLD MAP TYPE - HashMap.Entry mapEntry = matrix.entrySet().iterator().next(); + Map.Entry mapEntry = matrix.entrySet().iterator().next(); try { String backsoundPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), Backsound.fileExtension); loadBacksound(backsoundPath, mapEntry.getValue(), game); @@ -500,13 +494,12 @@ public static void loadBacksoundsFromFile(HashMap matrix, String } } } else { - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { try { String backsoundPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), Backsound.fileExtension); loadBacksound(backsoundPath, mapEntry.getValue(), game); } catch (Exception ex) { mapEntry.getValue().setBacksound(new Backsound()); - } } } @@ -524,9 +517,9 @@ private static void loadBacksound(String path, MapData mapData, int game) throws } } - public static void loadCollisionsFromFile(HashMap matrix, String folderPath, String mapFileName, int gameIndex) { + public static void loadCollisionsFromFile(Map matrix, String folderPath, String mapFileName, int gameIndex) { if (matrix.size() == 1) {//OLD MAP TYPE - HashMap.Entry mapEntry = matrix.entrySet().iterator().next(); + Map.Entry mapEntry = matrix.entrySet().iterator().next(); try { String collisionsPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), Collisions.fileExtension); mapEntry.getValue().setCollisions(new Collisions(collisionsPath)); @@ -548,7 +541,7 @@ public static void loadCollisionsFromFile(HashMap matrix, String } } } else { - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { try { String collisionsPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), Collisions.fileExtension); mapEntry.getValue().setCollisions(new Collisions(collisionsPath)); @@ -572,9 +565,9 @@ public void loadCollisionsFromFile(String folderPath, String mapFileName) { loadCollisionsFromFile(matrix, folderPath, mapFileName, handler.getGameIndex()); } - public static void loadBuildingsFromFile(HashMap matrix, String folderPath, String mapFileName) { + public static void loadBuildingsFromFile(Map matrix, String folderPath, String mapFileName) { if (matrix.size() == 1) {//OLD MAP TYPE - HashMap.Entry mapEntry = matrix.entrySet().iterator().next(); + Map.Entry mapEntry = matrix.entrySet().iterator().next(); try { String buildingsPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), BuildFile.fileExtension); mapEntry.getValue().setBuildings(new BuildFile(buildingsPath)); @@ -590,7 +583,7 @@ public static void loadBuildingsFromFile(HashMap matrix, String } } } else { - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { try { String buildingsPath = getFilePathWithCoords(matrix, folderPath, mapFileName, mapEntry.getKey(), BuildFile.fileExtension); mapEntry.getValue().setBuildings(new BuildFile(buildingsPath)); @@ -607,11 +600,11 @@ public void loadBuildingsFromFile(String folderPath, String mapFileName) { loadBuildingsFromFile(matrix, folderPath, mapFileName); } - public static String getFilePathWithCoords(HashMap matrix, String folderPath, String mapFileName, Point mapCoords, String extensionName) { + public static String getFilePathWithCoords(Map matrix, String folderPath, String mapFileName, Point mapCoords, String extensionName) { return getFilePathWithCoords(matrix, folderPath, mapFileName, "", mapCoords, extensionName); } - public static String getFilePathWithCoords(HashMap matrix, String folderPath, String mapFileName, String nameEnd, Point mapCoords, String extensionName) { + public static String getFilePathWithCoords(Map matrix, String folderPath, String mapFileName, String nameEnd, Point mapCoords, String extensionName) { //String filename = Utils.removeExtensionFromPath(mapFileName) + nameEnd; //Point minCoords = getMinCoords(matrix); //filename += "_" + String.format("%02d", mapCoords.x - minCoords.x) + "_" + String.format("%02d", mapCoords.y - minCoords.y); @@ -619,7 +612,7 @@ public static String getFilePathWithCoords(HashMap matrix, Strin return folderPath + File.separator + filename + "." + extensionName; } - public static String getMapName(HashMap matrix, String mapFileName, String nameEnd, Point mapCoords){ + public static String getMapName(Map matrix, String mapFileName, String nameEnd, Point mapCoords){ String mapName = Utils.removeExtensionFromPath(mapFileName) + nameEnd; Point minCoords = getMinCoords(matrix); mapName += "_" + String.format("%02d", mapCoords.x - minCoords.x) + "_" + String.format("%02d", mapCoords.y - minCoords.y); @@ -672,20 +665,20 @@ public void updateBorderMaps() { //System.out.println("Border maps updated! " + borderMaps.size()); } - public void updateContourPoints(HashSet areaIndices) { + public void updateContourPoints(Set areaIndices) { contourPoints = generateAllContourPoints(new Point(0, 0), areaIndices); contourPointsBuffer = generateAllContourPointsGL(contourPoints); } - public HashMap generateAreaColors(HashSet areaIndices) { - HashMap colors = new HashMap<>(areaIndices.size()); + public Map generateAreaColors(Set areaIndices) { + Map colors = new HashMap<>(areaIndices.size()); for (Integer areaIndex : areaIndices) { colors.put(areaIndex, new Color(Color.HSBtoRGB((areaIndex * 45.0f + 155f) / 255f, 0.8f, 1.0f))); } return colors; } - public void updateAreaColors(HashSet areaIndices) { + public void updateAreaColors(Set areaIndices) { areaColors = generateAreaColors(areaIndices); } @@ -693,11 +686,11 @@ public MapData getMapAndCreate(int x, int y) { return getMapAndCreate(new Point(x, y)); } - public HashMap getMatrix() { + public Map getMatrix() { return matrix; } - public HashSet getBorderMaps() { + public Set getBorderMaps() { return borderMaps; } @@ -705,7 +698,7 @@ public Point getMinCoords() { return getMinCoords(matrix); } - public static Point getMinCoords(HashMap matrix) { + public static Point getMinCoords(Map matrix) { if (matrix.size() > 0) { Point min = new Point(Integer.MAX_VALUE, Integer.MAX_VALUE); Set coords = matrix.keySet(); @@ -727,7 +720,7 @@ public Point getMaxCoords() { return getMaxCoords(matrix); } - public static Point getMaxCoords(HashMap matrix) { + public static Point getMaxCoords(Map matrix) { if (matrix.size() > 0) { Point max = new Point(Integer.MIN_VALUE, Integer.MIN_VALUE); Set coords = matrix.keySet(); @@ -749,7 +742,7 @@ public Dimension getMatrixSize() { return getMatrixSize(matrix); } - public static Dimension getMatrixSize(HashMap matrix) { + public static Dimension getMatrixSize(Map matrix) { Point min = getMinCoords(matrix); Point max = getMaxCoords(matrix); return new Dimension(max.x - min.x + 1, max.y - min.y + 1); @@ -788,12 +781,7 @@ private void removeUnusedMapFiles(String folderPath, String fileExtension) { if (folderPath != null) { File folder = new File(folderPath); - File[] filesToRemove = folder.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return canRemoveMapFile(name, fileExtension, minCoords); - } - }); + File[] filesToRemove = folder.listFiles((dir, name) -> canRemoveMapFile(name, fileExtension, minCoords)); for (File file : filesToRemove) { try { @@ -812,8 +800,8 @@ public void clearAllCollisions() { } } - public ArrayList generateContourPoints(Point min) { - ArrayList contourPoints = new ArrayList(matrix.size() * 3);//Approximation + public List generateContourPoints(Point min) { + List contourPoints = new ArrayList<>(matrix.size() * 3);//Approximation for (Point p : matrix.keySet()) { if (!matrix.containsKey(new Point(p.x - 1, p.y))) { contourPoints.add(new Point(p.x - min.x, p.y - min.y)); @@ -835,30 +823,28 @@ public ArrayList generateContourPoints(Point min) { return contourPoints; } - public HashSet getAreaIndices() { - HashSet areaIndices = new HashSet<>(); - for (MapData map : matrix.values()) { - areaIndices.add(map.getAreaIndex()); - } - return areaIndices; + public Set getAreaIndices() { + return matrix.values().stream() + .map(MapData::getAreaIndex) + .collect(Collectors.toSet()); } public int getNumAreas() { return getAreaIndices().size(); } - public HashMap> generateAllContourPoints(Point min, HashSet areaIndices) { + public Map> generateAllContourPoints(Point min, Set areaIndices) { - HashMap> allContours = new HashMap<>(areaIndices.size()); + Map> allContours = new HashMap<>(areaIndices.size()); for (Integer areaIndex : areaIndices) { allContours.put(areaIndex, new ArrayList<>()); } - for (HashMap.Entry mapEntry : matrix.entrySet()) { + for (Map.Entry mapEntry : matrix.entrySet()) { Point p = mapEntry.getKey(); MapData map = mapEntry.getValue(); - ArrayList contourPoints = allContours.get(map.getAreaIndex()); + List contourPoints = allContours.get(map.getAreaIndex()); if (canAddContour(p, new Point(p.x - 1, p.y))) { contourPoints.add(new Point(p.x - min.x, p.y - min.y)); contourPoints.add(new Point(p.x - min.x, p.y + 1 - min.y)); @@ -875,21 +861,15 @@ public HashMap> generateAllContourPoints(Point min, Ha contourPoints.add(new Point(p.x - min.x, p.y + 1 - min.y)); contourPoints.add(new Point(p.x + 1 - min.x, p.y + 1 - min.y)); } - } return allContours; } private boolean canAddContour(Point p, Point nearP) { - if (!matrix.containsKey(nearP)) { - return true; - } else if (matrix.get(p).getAreaIndex() != matrix.get(nearP).getAreaIndex()) { - return true; - } - return false; + return !matrix.containsKey(nearP) || matrix.get(p).getAreaIndex() != matrix.get(nearP).getAreaIndex(); } - public float[] generateContourPointsGL(ArrayList points) { + public float[] generateContourPointsGL(List points) { float[] contourPointsGL = new float[points.size() * 3]; int i = 0; for (Point p : points) { @@ -901,10 +881,10 @@ public float[] generateContourPointsGL(ArrayList points) { return contourPointsGL; } - public HashMap generateAllContourPointsGL(HashMap> contourPoints) { - HashMap allContourPoints = new HashMap<>(contourPoints.size()); - for (HashMap.Entry> entry : contourPoints.entrySet()) { - ArrayList points = entry.getValue(); + public Map generateAllContourPointsGL(Map> contourPoints) { + Map allContourPoints = new HashMap<>(contourPoints.size()); + for (Map.Entry> entry : contourPoints.entrySet()) { + List points = entry.getValue(); float[] contourPointsGL = new float[points.size() * 3]; int i = 0; for (Point p : points) { @@ -937,23 +917,21 @@ private boolean isMapFileUsed(String fileName, Point minCoords) { mapCoords.y += minCoords.y; //System.out.println(mapCoords.x + " " + mapCoords.y + " " + fileName + " USED: " + matrix.keySet().contains(mapCoords)); - return matrix.keySet().contains(mapCoords); + return matrix.containsKey(mapCoords); } private Point geMapCoordsFromName(String fileName) { String name = Utils.removeExtensionFromPath(fileName); - String[] splittedName = name.split("_"); - return new Point(Integer.parseInt(splittedName[splittedName.length - 2]), - Integer.parseInt(splittedName[splittedName.length - 1])); + String[] splitName = name.split("_"); + return new Point(Integer.parseInt(splitName[splitName.length - 2]), Integer.parseInt(splitName[splitName.length - 1])); } private boolean nameHasMapCoords(String fileName) { //System.out.println(fileName); String name = Utils.removeExtensionFromPath(fileName); try { - String[] splittedName = name.split("_"); - return canParseInteger(splittedName[splittedName.length - 1]) - && canParseInteger(splittedName[splittedName.length - 2]); + String[] splitName = name.split("_"); + return canParseInteger(splitName[splitName.length - 1]) && canParseInteger(splitName[splitName.length - 2]); } catch (Exception ex) { return false; } @@ -968,15 +946,15 @@ private boolean canParseInteger(String string) { } } - public HashMap getContourPointsGL() { + public Map getContourPointsGL() { return contourPointsBuffer; } - public HashMap> getContourPoints() { + public Map> getContourPoints() { return contourPoints; } - public HashMap getAreaColors() { + public Map getAreaColors() { return areaColors; } @@ -991,16 +969,13 @@ public void moveMap(Point src, Point dst) { } } - public HashMap generateGridHashMap() { - HashMap map = new HashMap<>(matrix.size()); - for (HashMap.Entry mapEntry : matrix.entrySet()) { - map.put(mapEntry.getKey(), mapEntry.getValue().getGrid()); - } - return map; + public Map generateGridHashMap() { + return matrix.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, mapEntry -> mapEntry.getValue().getGrid(), + (a, b) -> b, () -> new HashMap<>(matrix.size()))); } public BufferedImage getMapMatrixImage() { - try { Point min = handler.getMapMatrix().getMinCoords(); Dimension size = handler.getMapMatrix().getMatrixSize(); @@ -1012,7 +987,7 @@ public BufferedImage getMapMatrixImage() { Graphics g = mapsImg.getGraphics(); - for (HashMap.Entry map : handler.getMapMatrix().getMatrix().entrySet()) { + for (Map.Entry map : handler.getMapMatrix().getMatrix().entrySet()) { Point p = map.getKey(); int x = (p.x - min.x) * MapData.mapThumbnailSize; int y = (p.y - min.y) * MapData.mapThumbnailSize; @@ -1030,12 +1005,12 @@ public BufferedImage getMapMatrixImage() { g.drawRect(x, y, MapData.mapThumbnailSize - 1, MapData.mapThumbnailSize - 1); } - //ArrayList contourPoints = handler.getMapMatrix().generateContourPoints(handler.getMapMatrix().getMinCoords()); - HashMap> allContourPoints = handler.getMapMatrix().getContourPoints(); + //List contourPoints = handler.getMapMatrix().generateContourPoints(handler.getMapMatrix().getMinCoords()); + Map> allContourPoints = handler.getMapMatrix().getContourPoints(); Graphics2D g2d = (Graphics2D) g; g2d.setStroke(new BasicStroke(8)); - for (HashMap.Entry> entry : allContourPoints.entrySet()) { - ArrayList contourPoints = entry.getValue(); + for (Map.Entry> entry : allContourPoints.entrySet()) { + List contourPoints = entry.getValue(); for (int i = 0; i < contourPoints.size(); i += 2) { try { g.setColor(handler.getMapMatrix().getAreaColors().get(entry.getKey())); @@ -1055,7 +1030,5 @@ public BufferedImage getMapMatrixImage() { } catch (Exception ex) { return null; } - } - } diff --git a/src/main/java/editor/mapmatrix/MapMatrixDisplay.java b/src/main/java/editor/mapmatrix/MapMatrixDisplay.java index 8f22bf4..e35a70a 100644 --- a/src/main/java/editor/mapmatrix/MapMatrixDisplay.java +++ b/src/main/java/editor/mapmatrix/MapMatrixDisplay.java @@ -3,26 +3,12 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import editor.grid.MapGrid; import editor.handler.MapData; import editor.handler.MapEditorHandler; -import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.RenderingHints; -import java.awt.Stroke; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; import java.util.Set; /** @@ -37,7 +23,7 @@ public class MapMatrixDisplay extends JPanel { private Dimension matrixSize; private Point matrixMin = new Point(); - private float scale = 0.5f; + private final float scale = 0.5f; public MapMatrixDisplay() { initComponents(); @@ -53,23 +39,20 @@ private void formMousePressed(MouseEvent evt) { Point mapCoords = new Point(mapX + matrixMin.x, mapY + matrixMin.y); //System.out.println("Point pressed: " + mapCoords.x + " " + mapCoords.y); - if (handler != null) { - Set maps = handler.getMapMatrix().getMatrix().keySet(); - if (maps.contains(mapCoords)) { - //System.out.println("Map selected: " + mapCoords.x + " " + mapCoords.y); - - if (!mapCoords.equals(handler.getMapSelected())) { - handler.setMapSelected(mapCoords, false); - handler.getMainFrame().getMapDisplay().setCameraAtMap(mapCoords); - - handler.getMainFrame().getMapDisplay().repaint(); - } else { - handler.getMainFrame().getMapDisplay().setCameraAtMap(mapCoords); - handler.getMainFrame().getMapDisplay().repaint(); - } + if (handler == null) { + return; + } + Set maps = handler.getMapMatrix().getMatrix().keySet(); + if (maps.contains(mapCoords)) { + //System.out.println("Map selected: " + mapCoords.x + " " + mapCoords.y); - repaint(); + if (!mapCoords.equals(handler.getMapSelected())) { + handler.setMapSelected(mapCoords, false); } + handler.getMainFrame().getMapDisplay().setCameraAtMap(mapCoords); + handler.getMainFrame().getMapDisplay().repaint(); + + repaint(); } } @@ -118,7 +101,6 @@ public void paintComponent(Graphics g) { (selectedMap.y - matrixMin.y) * MapData.mapThumbnailSize - 3, MapData.mapThumbnailSize + 6, MapData.mapThumbnailSize + 6); g2d.setStroke(new BasicStroke(1)); - } g2d.setTransform(transform); diff --git a/src/main/java/editor/mapmatrix/MapMatrixImportDialog.java b/src/main/java/editor/mapmatrix/MapMatrixImportDialog.java index ba00526..f9932cf 100644 --- a/src/main/java/editor/mapmatrix/MapMatrixImportDialog.java +++ b/src/main/java/editor/mapmatrix/MapMatrixImportDialog.java @@ -3,17 +3,13 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import editor.handler.MapData; import editor.handler.MapEditorHandler; -import java.awt.Point; import java.io.File; -import java.util.HashMap; -import javax.swing.JOptionPane; +import java.util.Map; /** * @author Trifindo, JackHack96 @@ -22,7 +18,7 @@ public class MapMatrixImportDialog extends JDialog { private MapEditorHandler handler; private String mapPath; - private HashMap maps; + private Map maps; public MapMatrixImportDialog(Window owner) { super(owner); @@ -74,7 +70,7 @@ private void jbCancelActionPerformed(ActionEvent e) { dispose(); } - public void init(MapEditorHandler handler, String mapPath, HashMap maps) { + public void init(MapEditorHandler handler, String mapPath, Map maps) { this.handler = handler; this.mapPath = mapPath; this.maps = maps; @@ -86,13 +82,8 @@ public void init(MapEditorHandler handler, String mapPath, HashMap handler.getMapMatrix().getMatrix().containsKey(new Point(p.x + pos.x, p.y + pos.y))); } public void importMaps() { diff --git a/src/main/java/editor/mapmatrix/MoveMapPanel.java b/src/main/java/editor/mapmatrix/MoveMapPanel.java index b6b119f..b530304 100644 --- a/src/main/java/editor/mapmatrix/MoveMapPanel.java +++ b/src/main/java/editor/mapmatrix/MoveMapPanel.java @@ -3,13 +3,8 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.handler.MapEditorHandler; -import editor.state.MapLayerState; - -import java.awt.Point; -import net.miginfocom.swing.*; /** * @author Trifindo, JackHack96 @@ -55,8 +50,6 @@ public void moveMap(Point p, Point dp) { handler.getMapMatrix().updateBordersData(); handler.getMainFrame().updateMapMatrixDisplay(); - - } private void initComponents() { diff --git a/src/main/java/editor/smartdrawing/SmartGrid.java b/src/main/java/editor/smartdrawing/SmartGrid.java index c6a4120..a66d4bd 100644 --- a/src/main/java/editor/smartdrawing/SmartGrid.java +++ b/src/main/java/editor/smartdrawing/SmartGrid.java @@ -4,7 +4,9 @@ import editor.handler.MapEditorHandler; import editor.grid.MapGrid; -import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.IntStream; import tileset.Tile; @@ -17,46 +19,41 @@ public class SmartGrid { public static final int height = 3; public int[][] sgrid = new int[width][height]; - private static ArrayList smartUnits = new ArrayList() { - { - add(new SmartUnit(true, false, false, true, false, false, false, false)); - add(new SmartUnit(true, false, true, true, false, false, false, false)); - add(new SmartUnit(true, false, true, false, false, false, false, false)); - add(new SmartUnit(true, true, true, true, true, false, true, true)); - add(new SmartUnit(true, true, true, true, false, true, true, true)); - - add(new SmartUnit(true, true, false, true, false, false, false, false)); - add(new SmartUnit(true, true, true, true, true, true, true, true)); - add(new SmartUnit(true, true, true, false, false, false, false, false)); - add(new SmartUnit(true, true, true, true, true, true, true, false)); - add(new SmartUnit(true, true, true, true, true, true, false, true)); - - add(new SmartUnit(false, true, false, true, false, false, false, false)); - add(new SmartUnit(false, true, true, true, false, false, false, false)); - add(new SmartUnit(false, true, true, false, false, false, false, false)); - } - }; - - private static ArrayList invertedSmartUnits = new ArrayList() { - { - add(new SmartUnit(true, true, true, true, true, false, true, true));//3 - add(new SmartUnit(false, true, true, true, false, false, false, false));//12 - add(new SmartUnit(true, true, true, true, false, true, true, true));//4 - add(new SmartUnit(true, false, false, true, false, false, false, false));//0 - add(new SmartUnit(true, false, true, false, false, false, false, false));//2 - - add(new SmartUnit(true, true, true, false, false, false, false, false));//7 - add(new SmartUnit(true, true, true, true, true, true, true, true));//6 - add(new SmartUnit(true, true, false, true, false, false, false, false));//5 - add(new SmartUnit(false, true, false, true, false, false, false, false));//11 - add(new SmartUnit(false, true, true, false, false, false, false, false));//13 - - add(new SmartUnit(true, true, true, true, true, true, true, false));//8 - add(new SmartUnit(true, false, true, true, false, false, false, false));//1 - add(new SmartUnit(true, true, true, true, true, true, false, true));//9 - - } - }; + private static List smartUnits = List.of( + new SmartUnit(true, false, false, true, false, false, false, false), + new SmartUnit(true, false, true, true, false, false, false, false), + new SmartUnit(true, false, true, false, false, false, false, false), + new SmartUnit(true, true, true, true, true, false, true, true), + new SmartUnit(true, true, true, true, false, true, true, true), + + new SmartUnit(true, true, false, true, false, false, false, false), + new SmartUnit(true, true, true, true, true, true, true, true), + new SmartUnit(true, true, true, false, false, false, false, false), + new SmartUnit(true, true, true, true, true, true, true, false), + new SmartUnit(true, true, true, true, true, true, false, true), + + new SmartUnit(false, true, false, true, false, false, false, false), + new SmartUnit(false, true, true, true, false, false, false, false), + new SmartUnit(false, true, true, false, false, false, false, false) + ); + + private static List invertedSmartUnits = List.of( + new SmartUnit(true, true, true, true, true, false, true, true), //3 + new SmartUnit(false, true, true, true, false, false, false, false), //12 + new SmartUnit(true, true, true, true, false, true, true, true), //4 + new SmartUnit(true, false, false, true, false, false, false, false), //0 + new SmartUnit(true, false, true, false, false, false, false, false), //2 + + new SmartUnit(true, true, true, false, false, false, false, false), //7 + new SmartUnit(true, true, true, true, true, true, true, true), //6 + new SmartUnit(true, true, false, true, false, false, false, false), //5 + new SmartUnit(false, true, false, true, false, false, false, false), //11 + new SmartUnit(false, true, true, false, false, false, false, false), //13 + + new SmartUnit(true, true, true, true, true, true, true, false), //8 + new SmartUnit(true, false, true, true, false, false, false, false), //1 + new SmartUnit(true, true, true, true, true, true, false, true) //9 + ); public SmartGrid(int[][] data) { this.sgrid = data; @@ -64,9 +61,7 @@ public SmartGrid(int[][] data) { public SmartGrid() { for (int i = 0; i < width; i++) { - for (int j = 0; j < height; j++) { - sgrid[i][j] = -1; - } + Arrays.fill(sgrid[i], -1); } /* @@ -93,11 +88,7 @@ public void replaceTilesUsingIndices(int[] indices) { for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int index = oldGrid[i][j]; - if (index == -1) { - sgrid[i][j] = -1; - } else { - sgrid[i][j] = indices[index]; - } + sgrid[i][j] = index == -1 ? -1 : indices[index]; } } } @@ -150,38 +141,28 @@ public void useSmartFill(MapEditorHandler handler, int x, int y, boolean invert) } else { floodFillUtil(handler.getActiveTileLayer(), gridToEdit, remainingGrid, x, y, prevC, W, H, smartUnits); } - } - private void floodFillUtil( - int screen[][], boolean[][] gridToEdit, boolean[][] remainingGrid, - int x, int y, int prevC, int W, int H, ArrayList units) { + private void floodFillUtil(int[][] screen, boolean[][] gridToEdit, boolean[][] remainingGrid, + int x, int y, int prevC, int W, int H, List units) { // Base cases if (x < 0 || x >= W || y < 0 || y >= H) { return; } - if (!gridToEdit[x][y]) { - return; - } - - if (!remainingGrid[x][y]) { + if (!gridToEdit[x][y] || !remainingGrid[x][y]) { return; } SmartUnit unit = generateSmartUnit(gridToEdit, x, y, W, H); int index; if (unit.fullCrossNeighbours()) { - index = indexOfSameCorner(units, unit); - if (index == -1) { - index = 6; - } } else { index = indexOfSameCross(units, unit); - if (index == -1) { - index = 6; - } + } + if (index == -1) { + index = 6; } screen[x][y] = sgrid[index % width][index / width]; @@ -197,54 +178,44 @@ private void floodFillUtil( private SmartUnit generateSmartUnit(boolean[][] screen, int x, int y, int M, int N) { boolean[] corners = new boolean[4]; boolean[] cross = new boolean[4]; - cross[0] = hasSameNeigbour(screen, x, y - 1, M, N); - cross[1] = hasSameNeigbour(screen, x, y + 1, M, N); - cross[2] = hasSameNeigbour(screen, x - 1, y, M, N); - cross[3] = hasSameNeigbour(screen, x + 1, y, M, N); + cross[0] = hasSameNeighbor(screen, x, y - 1, M, N); + cross[1] = hasSameNeighbor(screen, x, y + 1, M, N); + cross[2] = hasSameNeighbor(screen, x - 1, y, M, N); + cross[3] = hasSameNeighbor(screen, x + 1, y, M, N); - corners[0] = hasSameNeigbour(screen, x - 1, y - 1, M, N); - corners[1] = hasSameNeigbour(screen, x + 1, y - 1, M, N); - corners[2] = hasSameNeigbour(screen, x - 1, y + 1, M, N); - corners[3] = hasSameNeigbour(screen, x + 1, y + 1, M, N); + corners[0] = hasSameNeighbor(screen, x - 1, y - 1, M, N); + corners[1] = hasSameNeighbor(screen, x + 1, y - 1, M, N); + corners[2] = hasSameNeighbor(screen, x - 1, y + 1, M, N); + corners[3] = hasSameNeighbor(screen, x + 1, y + 1, M, N); return new SmartUnit(cross, corners); } - private boolean hasSameNeigbour(boolean[][] screen, int x, int y, int M, int N) { + private boolean hasSameNeighbor(boolean[][] screen, int x, int y, int M, int N) { if (x < 0 || x >= M || y < 0 || y >= N) { - return true; //flase + return true; //false } else { return screen[x][y]; } } - private int indexOfSameCross(ArrayList units, SmartUnit unit) { - for (int i = 0; i < units.size(); i++) { - if (units.get(i).sameCross(unit)) { - return i; - } - } - return -1; + private int indexOfSameCross(List units, SmartUnit unit) { + return IntStream.range(0, units.size()) + .filter(i -> units.get(i).sameCross(unit)) + .findFirst().orElse(-1); } - private int indexOfSameCorner(ArrayList units, SmartUnit unit) { - for (int i = 0; i < units.size(); i++) { - if (units.get(i).sameCorners(unit)) { - return i; - } - } - return -1; + private int indexOfSameCorner(List units, SmartUnit unit) { + return IntStream.range(0, units.size()) + .filter(i -> units.get(i).sameCorners(unit)) + .findFirst().orElse(-1); } private static class SmartUnit { - public boolean[] cross; public boolean[] corners; - public SmartUnit( - boolean t, boolean b, boolean l, boolean r, - boolean tl, boolean tr, boolean bl, boolean br) { - + public SmartUnit(boolean t, boolean b, boolean l, boolean r, boolean tl, boolean tr, boolean bl, boolean br) { cross = new boolean[4]; corners = new boolean[4]; cross[0] = t; @@ -255,7 +226,6 @@ public SmartUnit( corners[1] = tr; corners[2] = bl; corners[3] = br; - } public SmartUnit(boolean[] cross, boolean[] corners) { @@ -268,21 +238,11 @@ public boolean fullCrossNeighbours() { } public boolean sameCross(SmartUnit unit) { - for (int i = 0; i < cross.length; i++) { - if (this.cross[i] != unit.cross[i]) { - return false; - } - } - return true; + return IntStream.range(0, cross.length).noneMatch(i -> this.cross[i] != unit.cross[i]); } public boolean sameCorners(SmartUnit unit) { - for (int i = 0; i < corners.length; i++) { - if (this.corners[i] != unit.corners[i]) { - return false; - } - } - return true; + return IntStream.range(0, corners.length).noneMatch(i -> this.corners[i] != unit.corners[i]); } public void printUnit() { @@ -290,7 +250,5 @@ public void printUnit() { System.out.println(cross[2] + " " + " " + " " + cross[3]); System.out.println(corners[2] + " " + cross[1] + " " + corners[3]); } - } - } diff --git a/src/main/java/editor/smartdrawing/SmartGridDisplay.java b/src/main/java/editor/smartdrawing/SmartGridDisplay.java index de5043c..0b2cc4f 100644 --- a/src/main/java/editor/smartdrawing/SmartGridDisplay.java +++ b/src/main/java/editor/smartdrawing/SmartGridDisplay.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.handler.MapEditorHandler; import editor.grid.MapGrid; @@ -14,13 +13,7 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.image.BufferedImage; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; import utils.Utils; @@ -29,7 +22,7 @@ */ public class SmartGridDisplay extends JPanel { - private static BufferedImage gridImage = Utils.loadTexImageAsResource("/imgs/smartGrid.png"); + private static final BufferedImage gridImage = Utils.loadTexImageAsResource("/imgs/smartGrid.png"); private MapEditorHandler handler; private boolean editable = true; @@ -50,7 +43,6 @@ private void formMouseMoved(MouseEvent evt) { int y = evt.getY() / MapGrid.tileSize; int gridIndex = y / SmartGrid.height; y %= SmartGrid.height; - ; System.out.println(x + " " + y); if (gridIndex < handler.getSmartGridArray().size() && gridIndex >= 0) { if (!((y == 2) && (x == 4 || x == 3))) { @@ -77,7 +69,7 @@ private void formMousePressed(MouseEvent evt) { y %= SmartGrid.height; //System.out.println(x + " " + y); if (gridIndex < handler.getSmartGridArray().size() && gridIndex >= 0) { - if (!((y == 2) && (x == 4 || x == 3))) { + if (!(y == 2 && (x == 4 || x == 3))) { int[][] grid = handler.getSmartGrid(gridIndex).sgrid; if (new Rectangle(SmartGrid.width, SmartGrid.height).contains(x, y)) { if (SwingUtilities.isLeftMouseButton(evt)) { @@ -104,31 +96,25 @@ private void formMousePressed(MouseEvent evt) { JPopupMenu menu = new JPopupMenu(); JMenuItem item1 = new JMenuItem("Add Smart Painter"); JMenuItem item2 = new JMenuItem("Remove Smart Painter"); - item1.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - handler.getSmartGridArray().add(new SmartGrid()); - updateSize(); - repaint(); - } + item1.addActionListener(e -> { + handler.getSmartGridArray().add(new SmartGrid()); + updateSize(); + repaint(); }); - item2.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (handler.getSmartGridArray().size() > 1) { - if (gridIndex >= 0 && gridIndex < handler.getSmartGridArray().size()) { - handler.getSmartGridArray().remove(gridIndex); - handler.setSmartGridIndexSelected(Math.max(0, gridIndex - 1)); - updateSize(); - repaint(); - } - } else { - System.out.println("No se puede"); - JOptionPane.showMessageDialog(menu, - "There must me at least one Smart Painter", - "Can't delete Smart Painter", - JOptionPane.ERROR_MESSAGE); + item2.addActionListener(e -> { + if (handler.getSmartGridArray().size() > 1) { + if (gridIndex >= 0 && gridIndex < handler.getSmartGridArray().size()) { + handler.getSmartGridArray().remove(gridIndex); + handler.setSmartGridIndexSelected(Math.max(0, gridIndex - 1)); + updateSize(); + repaint(); } + } else { + System.out.println("No se puede"); + JOptionPane.showMessageDialog(menu, + "There must me at least one Smart Painter", + "Can't delete Smart Painter", + JOptionPane.ERROR_MESSAGE); } }); menu.add(item1); @@ -162,10 +148,8 @@ public void paintComponent(Graphics g) { if (gridImage != null && handler != null) { for (int k = 0; k < handler.getSmartGridArray().size(); k++) { - g.drawImage(gridImage, 0, - SmartGrid.height * k * MapGrid.tileSize, null); + g.drawImage(gridImage, 0, SmartGrid.height * k * MapGrid.tileSize, null); } - } if (handler != null) { diff --git a/src/main/java/editor/smartdrawing/SmartGridEditable.java b/src/main/java/editor/smartdrawing/SmartGridEditable.java index 8ea5654..a2bc9bf 100644 --- a/src/main/java/editor/smartdrawing/SmartGridEditable.java +++ b/src/main/java/editor/smartdrawing/SmartGridEditable.java @@ -7,6 +7,8 @@ import tileset.Tile; import tileset.Tileset; +import java.util.Arrays; + /** * @author Trifindo */ @@ -28,9 +30,7 @@ public SmartGridEditable(int[][] data, Tileset tset) { public SmartGridEditable() { for (int i = 0; i < width; i++) { - for (int j = 0; j < height; j++) { - sgrid[i][j] = null; - } + Arrays.fill(sgrid[i], null); } } diff --git a/src/main/java/editor/smartdrawing/SmartGridEditableDisplay.java b/src/main/java/editor/smartdrawing/SmartGridEditableDisplay.java index ff7733a..15f4cbe 100644 --- a/src/main/java/editor/smartdrawing/SmartGridEditableDisplay.java +++ b/src/main/java/editor/smartdrawing/SmartGridEditableDisplay.java @@ -3,20 +3,14 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.grid.MapGrid; import editor.handler.MapEditorHandler; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; +import java.util.List; import tileset.Tile; import utils.Utils; @@ -26,7 +20,7 @@ */ public class SmartGridEditableDisplay extends JPanel { - private static BufferedImage gridImage = Utils.loadTexImageAsResource("/imgs/smartGrid.png"); + private static final BufferedImage gridImage = Utils.loadTexImageAsResource("/imgs/smartGrid.png"); private MapEditorHandler handler; @@ -49,7 +43,7 @@ private void formMouseMoved(MouseEvent evt) { y %= SmartGrid.height; System.out.println(x + " " + y); if (gridIndex < smartGridArray.size() && gridIndex >= 0) { - if (!((y == 2) && (x == 4 || x == 3))) { + if (!(y == 2 && (x == 4 || x == 3))) { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); setToolTipText(null); } else { @@ -72,7 +66,7 @@ private void formMousePressed(MouseEvent evt) { y %= SmartGrid.height; //System.out.println(x + " " + y); if (gridIndex < smartGridArray.size() && gridIndex >= 0) { - if (!((y == 2) && (x == 4 || x == 3))) { + if (!(y == 2 && (x == 4 || x == 3))) { Tile[][] grid = smartGridArray.get(gridIndex).sgrid; if (new Rectangle(SmartGrid.width, SmartGrid.height).contains(x, y)) { if (SwingUtilities.isLeftMouseButton(evt)) { @@ -96,31 +90,25 @@ private void formMousePressed(MouseEvent evt) { JPopupMenu menu = new JPopupMenu(); JMenuItem item1 = new JMenuItem("Add Smart Painter"); JMenuItem item2 = new JMenuItem("Remove Smart Painter"); - item1.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - smartGridArray.add(new SmartGridEditable()); - updateSize(); - repaint(); - } + item1.addActionListener(e -> { + smartGridArray.add(new SmartGridEditable()); + updateSize(); + repaint(); }); - item2.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (smartGridArray.size() > 1) { - if (gridIndex >= 0 && gridIndex < smartGridArray.size()) { - smartGridArray.remove(gridIndex); - handler.setSmartGridIndexSelected(Math.max(0, gridIndex - 1)); - updateSize(); - repaint(); - } - } else { - System.out.println("No se puede"); - JOptionPane.showMessageDialog(menu, - "There must me at least one Smart Painter", - "Can't delete Smart Painter", - JOptionPane.ERROR_MESSAGE); + item2.addActionListener(e -> { + if (smartGridArray.size() > 1) { + if (gridIndex >= 0 && gridIndex < smartGridArray.size()) { + smartGridArray.remove(gridIndex); + handler.setSmartGridIndexSelected(Math.max(0, gridIndex - 1)); + updateSize(); + repaint(); } + } else { + System.out.println("No se puede"); + JOptionPane.showMessageDialog(menu, + "There must me at least one Smart Painter", + "Can't delete Smart Painter", + JOptionPane.ERROR_MESSAGE); } }); menu.add(item1); @@ -141,10 +129,8 @@ public void paintComponent(Graphics g) { if (gridImage != null && handler != null) { for (int k = 0; k < smartGridArray.size(); k++) { - g.drawImage(gridImage, 0, - SmartGrid.height * k * MapGrid.tileSize, null); + g.drawImage(gridImage, 0, SmartGrid.height * k * MapGrid.tileSize, null); } - } if (handler != null) { @@ -172,8 +158,7 @@ public void paintComponent(Graphics g) { int index = handler.getSmartGridIndexSelected(); g.setColor(Color.red); - g.drawRect( - 0, + g.drawRect(0, index * SmartGrid.height * MapGrid.tileSize, SmartGrid.width * MapGrid.tileSize - 1, SmartGrid.height * MapGrid.tileSize - 1); @@ -224,7 +209,7 @@ public void init(MapEditorHandler handler) { SmartGrid.height * MapGrid.tileSize * handler.getSmartGridArray().size())); } - public ArrayList getSmartGridArray() { + public List getSmartGridArray() { return smartGridArray; } diff --git a/src/main/java/editor/state/CollisionLayerState.java b/src/main/java/editor/state/CollisionLayerState.java index cdca3ac..54bac48 100644 --- a/src/main/java/editor/state/CollisionLayerState.java +++ b/src/main/java/editor/state/CollisionLayerState.java @@ -8,9 +8,9 @@ */ public class CollisionLayerState extends State { - private CollisionHandler collisionHandler; - private int layerIndex; - private byte[][] layer; + private final CollisionHandler collisionHandler; + private final int layerIndex; + private final byte[][] layer; public CollisionLayerState(String name, CollisionHandler collisionHandler) { super(name); @@ -28,6 +28,4 @@ public void revertState() { public int getLayerIndex() { return layerIndex; } - - } diff --git a/src/main/java/editor/state/MapLayerState.java b/src/main/java/editor/state/MapLayerState.java index 4084980..81b33cc 100644 --- a/src/main/java/editor/state/MapLayerState.java +++ b/src/main/java/editor/state/MapLayerState.java @@ -6,6 +6,7 @@ import java.awt.Point; import java.util.HashMap; +import java.util.Map; import java.util.Set; /** @@ -13,11 +14,11 @@ */ public class MapLayerState extends State { - private MapEditorHandler handler; - private int layerIndex; + private final MapEditorHandler handler; + private final int layerIndex; - private HashMap mapTileLayers; - private HashMap mapHeightLayers; + private final Map mapTileLayers; + private final Map mapHeightLayers; //private int[][] tileLayer; //private int[][] heightLayer; @@ -34,7 +35,7 @@ public MapLayerState(String name, MapEditorHandler handler, boolean fullState) { mapTileLayers = new HashMap<>(); mapHeightLayers = new HashMap<>(); if (fullState) { - for (HashMap.Entry mapEntry : handler.getMapMatrix().getMatrix().entrySet()) { + for (Map.Entry mapEntry : handler.getMapMatrix().getMatrix().entrySet()) { mapTileLayers.put(mapEntry.getKey(), mapEntry.getValue().getGrid().cloneTileLayer(layerIndex)); mapHeightLayers.put(mapEntry.getKey(), mapEntry.getValue().getGrid().cloneHeightLayer(layerIndex)); } @@ -42,17 +43,16 @@ public MapLayerState(String name, MapEditorHandler handler, boolean fullState) { mapTileLayers.put(handler.getMapSelected(), handler.getGrid().cloneTileLayer(layerIndex)); mapHeightLayers.put(handler.getMapSelected(), handler.getGrid().cloneHeightLayer(layerIndex)); } - } @Override public void revertState() { //TODO: This function doesnt recover extra file data like PER or BDHC files - for (HashMap.Entry mapEntry : mapTileLayers.entrySet()) { + for (Map.Entry mapEntry : mapTileLayers.entrySet()) { handler.getMapMatrix().getMapAndCreate(mapEntry.getKey()).getGrid().setTileLayer(layerIndex, mapEntry.getValue()); } - for (HashMap.Entry mapEntry : mapHeightLayers.entrySet()) { + for (Map.Entry mapEntry : mapHeightLayers.entrySet()) { handler.getMapMatrix().getMapAndCreate(mapEntry.getKey()).getGrid().setHeightLayer(layerIndex, mapEntry.getValue()); } @@ -76,7 +76,6 @@ public void updateState() { if (!mapHeightLayers.containsKey(handler.getMapSelected())) { mapHeightLayers.put(handler.getMapSelected(), handler.getGrid().cloneHeightLayer(layerIndex)); } - } public int getLayerIndex() { @@ -86,5 +85,4 @@ public int getLayerIndex() { public Set getKeySet() { return mapTileLayers.keySet(); } - } diff --git a/src/main/java/editor/state/State.java b/src/main/java/editor/state/State.java index 1eb4434..ae3f2fd 100644 --- a/src/main/java/editor/state/State.java +++ b/src/main/java/editor/state/State.java @@ -13,5 +13,4 @@ public State(String name) { } public abstract void revertState(); - } diff --git a/src/main/java/editor/state/StateHandler.java b/src/main/java/editor/state/StateHandler.java index c0449d9..830fd35 100644 --- a/src/main/java/editor/state/StateHandler.java +++ b/src/main/java/editor/state/StateHandler.java @@ -2,6 +2,7 @@ package editor.state; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -12,7 +13,7 @@ public class StateHandler { private int stateIndex; private boolean stateAdded = false; - private ArrayList states; + private final List states; public StateHandler() { states = new ArrayList<>(maxNumStates + 1); @@ -65,5 +66,4 @@ public State getLastState() { return null; } } - } diff --git a/src/main/java/editor/tileselector/TileMultiSelector.java b/src/main/java/editor/tileselector/TileMultiSelector.java index 1d38f79..0ef607a 100644 --- a/src/main/java/editor/tileselector/TileMultiSelector.java +++ b/src/main/java/editor/tileselector/TileMultiSelector.java @@ -2,18 +2,16 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; - -import editor.handler.MapEditorHandler; -import editor.tileseteditor.TilesetEditorDialog; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; -import java.awt.event.KeyEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import tileset.Tile; import tileset.Tileset; @@ -42,11 +40,10 @@ private void formMousePressed(MouseEvent evt) { if (index != -1) { if (multiselecting) { setSelected(true, Math.min(index, lastIndex), Math.max(index, lastIndex)); - repaint(); } else { selection[index] = !selection[index]; - repaint(); } + repaint(); lastIndex = index; } } @@ -97,7 +94,6 @@ public void init(Tileset tileset) { display = new BufferedImage(maxCols * tilePixelSize, rows * tilePixelSize, BufferedImage.TYPE_4BYTE_ABGR); paintTiles(); - updateSize(); } } @@ -113,17 +109,12 @@ public void updateLayout() { display = new BufferedImage(maxCols * tilePixelSize, 1 * tilePixelSize, BufferedImage.TYPE_4BYTE_ABGR); } paintTiles(); - updateSize(); } private void updateSize() { - this.setPreferredSize(new Dimension( - display.getWidth(), - display.getHeight())); - this.setSize(new Dimension( - display.getWidth(), - display.getHeight())); + this.setPreferredSize(new Dimension(display.getWidth(), display.getHeight())); + this.setSize(new Dimension(display.getWidth(), display.getHeight())); } public void updateTile(int index) { @@ -179,7 +170,6 @@ private void paintTiles() { } } } - } private int countRows() { @@ -210,15 +200,10 @@ private int countRows() { } private int getIndexSelected(java.awt.event.MouseEvent evt) { - int index = -1; - for (int i = 0; i < boundingBoxes.size(); i++) { - Rectangle bounds = boundingBoxes.get(i); - if (bounds.contains(evt.getX(), evt.getY())) { - index = i; - break; - } - } - return index; + return IntStream.range(0, boundingBoxes.size()) + .filter(i -> boundingBoxes.get(i).contains(evt.getX(), evt.getY())) + .findFirst() + .orElse(-1); } private void drawTileBounds(Graphics g, int tileIndex) { @@ -246,20 +231,16 @@ private void setSelected(boolean selected, int start, int end) { } } - public ArrayList getTilesSelected() { - ArrayList tiles = new ArrayList(); - for (int i = 0; i < selection.length; i++) { - if (selection[i]) { - tiles.add(tileset.get(i)); - } - } - return tiles; + public List getTilesSelected() { + return IntStream.range(0, selection.length) + .filter(i -> selection[i]).mapToObj(i -> tileset.get(i)) + .collect(Collectors.toList()); } public int getNumTilesSelected() { int count = 0; - for (int i = 0; i < selection.length; i++) { - if (selection[i]) { + for (boolean b : selection) { + if (b) { count++; } } diff --git a/src/main/java/editor/tileselector/TileSelector.java b/src/main/java/editor/tileselector/TileSelector.java index b0a627b..9175785 100644 --- a/src/main/java/editor/tileselector/TileSelector.java +++ b/src/main/java/editor/tileselector/TileSelector.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.handler.MapEditorHandler; import editor.mapdisplay.MapDisplay; @@ -15,7 +14,9 @@ import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.util.ArrayList; -import javax.swing.SwingUtilities; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import tileset.Tile; @@ -101,50 +102,49 @@ private void formMousePressed(MouseEvent evt) { } private void formMouseReleased(MouseEvent evt) { - if (multiSelectionEnabled) { - canDrag = false; - if (dragging) { - dragging = false; - - int index = getIndexSelected(evt); - if (index != -1) { - /*if (indexSecondTileSelected == handler.getTileIndexSelected()) { - handler.getTileset().swapTiles(index, handler.getTileIndexSelected()); - dialog.getTileDisplay().swapVBOs(index, handler.getTileIndexSelected()); + if (!multiSelectionEnabled) { + return; + } + canDrag = false; + if (!dragging) { + return; + } + dragging = false; - handler.setIndexTileSelected(index); - updateLayout(); - dialog.updateViewTileIndex(); - } else */ - if (index < handler.getTileIndexSelected() || index > indexSecondTileSelected) { - ArrayList indices = new ArrayList<>(handler.getTileset().size()); - for (int i = 0; i < handler.getTileset().size(); i++) { - indices.add(i); - } - ArrayList selectionIndices = new ArrayList( - indices.subList(handler.getTileIndexSelected(), - indexSecondTileSelected + 1)); - for (int i = 0; i < selectionIndices.size(); i++) { - indices.remove(handler.getTileIndexSelected()); - } - - if (index > handler.getTileIndexSelected()) { - index -= selectionIndices.size(); - } - - indices.addAll(index, selectionIndices); - //indices.addAll(Math.min(index, indices.size()), selectionIndices); - - handler.getTileset().moveTiles(indices); + int index = getIndexSelected(evt); + if (index != -1) { + /*if (indexSecondTileSelected == handler.getTileIndexSelected()) { + handler.getTileset().swapTiles(index, handler.getTileIndexSelected()); + dialog.getTileDisplay().swapVBOs(index, handler.getTileIndexSelected()); + + handler.setIndexTileSelected(index); + updateLayout(); + dialog.updateViewTileIndex(); + } else */ + if (index < handler.getTileIndexSelected() || index > indexSecondTileSelected) { + List indices = IntStream.range(0, handler.getTileset().size()) + .boxed() + .collect(Collectors.toList()); + List selectionIndices = new ArrayList<>(indices.subList(handler.getTileIndexSelected(), indexSecondTileSelected + 1)); + for (int i = 0; i < selectionIndices.size(); i++) { + indices.remove(handler.getTileIndexSelected()); + } - handler.setIndexTileSelected(index); - updateLayout(); - dialog.updateViewTileIndex(); - } + if (index > handler.getTileIndexSelected()) { + index -= selectionIndices.size(); } - repaint(); + + indices.addAll(index, selectionIndices); + //indices.addAll(Math.min(index, indices.size()), selectionIndices); + + handler.getTileset().moveTiles(indices); + + handler.setIndexTileSelected(index); + updateLayout(); + dialog.updateViewTileIndex(); } } + repaint(); } @Override @@ -164,7 +164,7 @@ public void paintComponent(Graphics g) { if (multiSelectionEnabled && (multiselecting || dragging || canDrag) && boundingBoxes.size() > 0) { int limit = Math.min(indexSecondTileSelected, handler.getTileset().size() - 1); for (int i = handler.getTileIndexSelected() + 1; i <= limit; i++) { - g.setColor(Color.red); + g.setColor(Color.RED); drawTileBounds(g, i); } } @@ -174,8 +174,7 @@ public void paintComponent(Graphics g) { drawTileBounds(g, indexTileHovering); } - g.drawImage(multiSelectImg, - mouseX, mouseY, null); + g.drawImage(multiSelectImg, mouseX, mouseY, null); /* g.drawImage(handler.getTileSelected().getThumbnail(), mouseX, mouseY, null);*/ @@ -196,7 +195,6 @@ public void init(MapEditorHandler handler, TilesetEditorDialog dialog) { paintTiles(); } - } public void init(MapEditorHandler handler) { @@ -210,7 +208,6 @@ public void init(MapEditorHandler handler) { paintTiles(); } - } public void updateLayout() { @@ -221,21 +218,15 @@ public void updateLayout() { System.out.println("Num rows: " + rows); display = new BufferedImage(maxCols * tilePixelSize, rows * tilePixelSize, BufferedImage.TYPE_4BYTE_ABGR); } else { - display = new BufferedImage(maxCols * tilePixelSize, 1 * tilePixelSize, BufferedImage.TYPE_4BYTE_ABGR); + display = new BufferedImage(maxCols * tilePixelSize, tilePixelSize, BufferedImage.TYPE_4BYTE_ABGR); } paintTiles(); - updateSize(); - } private void updateSize() { - this.setPreferredSize(new Dimension( - display.getWidth(), - display.getHeight())); - this.setSize(new Dimension( - display.getWidth(), - display.getHeight())); + this.setPreferredSize(new Dimension(display.getWidth(), display.getHeight())); + this.setSize(new Dimension(display.getWidth(), display.getHeight())); } public void updateTile(int index) { @@ -252,14 +243,9 @@ public void updateTile(int index) { public void updateTiles(ArrayList indices) { Graphics g = display.getGraphics(); - for (int i = 0; i < indices.size(); i++) { - int index = indices.get(i); + for (int index : indices) { Tile tile = handler.getTileset().get(index); - g.drawImage( - tile.getThumbnail(), - boundingBoxes.get(index).x, - boundingBoxes.get(index).y, - null); + g.drawImage(tile.getThumbnail(), boundingBoxes.get(index).x, boundingBoxes.get(index).y, null); } } @@ -305,7 +291,6 @@ private void paintTiles() { } } } - } private int countRows() { @@ -335,20 +320,15 @@ private int countRows() { return rowIndex + maxHeight; } - private int getIndexSelected(java.awt.event.MouseEvent evt) { - int index = -1; - for (int i = 0; i < boundingBoxes.size(); i++) { - Rectangle bounds = boundingBoxes.get(i); - if (bounds.contains(evt.getX(), evt.getY())) { - index = i; - break; - } - } - return index; + private int getIndexSelected(MouseEvent evt) { + return IntStream.range(0, boundingBoxes.size()) + .filter(i -> boundingBoxes.get(i).contains(evt.getX(), evt.getY())) + .findFirst() + .orElse(-1); } - public ArrayList getIndicesSelected() { - ArrayList indices; + public List getIndicesSelected() { + List indices; if (multiselecting) { int indexStart = handler.getTileIndexSelected(); int indexEnd = indexSecondTileSelected; diff --git a/src/main/java/editor/tileseteditor/AddTileDialog.java b/src/main/java/editor/tileseteditor/AddTileDialog.java index ab253d1..768ec91 100644 --- a/src/main/java/editor/tileseteditor/AddTileDialog.java +++ b/src/main/java/editor/tileseteditor/AddTileDialog.java @@ -3,10 +3,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; -import java.awt.Color; import utils.swing.SwingUtils; import utils.swing.SwingUtils.MutableBoolean; @@ -16,7 +13,7 @@ */ public class AddTileDialog extends JDialog { - private MutableBoolean jtfScaleEnabled = new MutableBoolean(true); + private final MutableBoolean jtfScaleEnabled = new MutableBoolean(true); public static final int APPROVE_OPTION = 1, CANCEL_OPTION = 0; private int returnValue = CANCEL_OPTION; private float scale = 1.0f; @@ -47,7 +44,7 @@ private void jcbFlipActionPerformed(ActionEvent e) { private void jbApplyScaleActionPerformed(ActionEvent e) { float value; try { - value = Float.valueOf(jtfScale.getText()); + value = Float.parseFloat(jtfScale.getText()); if (value < minScale) { value = minScale; } diff --git a/src/main/java/editor/tileseteditor/ExportTileDialog.java b/src/main/java/editor/tileseteditor/ExportTileDialog.java index 5e0e180..e668c48 100644 --- a/src/main/java/editor/tileseteditor/ExportTileDialog.java +++ b/src/main/java/editor/tileseteditor/ExportTileDialog.java @@ -3,10 +3,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; -import java.awt.Color; import utils.swing.SwingUtils; import utils.swing.SwingUtils.MutableBoolean; @@ -16,7 +13,7 @@ */ public class ExportTileDialog extends JDialog { - private MutableBoolean jtfScaleEnabled = new MutableBoolean(true); + private final MutableBoolean jtfScaleEnabled = new MutableBoolean(true); public static final int APPROVE_OPTION = 1, CANCEL_OPTION = 0; private int returnValue = CANCEL_OPTION; private float scale = 1.0f; @@ -48,7 +45,7 @@ private void jcbFlipActionPerformed(ActionEvent e) { private void jbApplyScaleActionPerformed(ActionEvent e) { float value; try { - value = Float.valueOf(jtfScale.getText()); + value = Float.parseFloat(jtfScale.getText()); if (value < minScale) { value = minScale; } diff --git a/src/main/java/editor/tileseteditor/ImportTilesDialog.java b/src/main/java/editor/tileseteditor/ImportTilesDialog.java index 52e1a5f..c9282ce 100644 --- a/src/main/java/editor/tileseteditor/ImportTilesDialog.java +++ b/src/main/java/editor/tileseteditor/ImportTilesDialog.java @@ -3,15 +3,12 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import editor.tileselector.*; import tileset.TilesetRenderer; -import java.util.ArrayList; -import javax.swing.JOptionPane; +import java.util.List; import tileset.Tile; import tileset.Tileset; @@ -78,7 +75,7 @@ public int getReturnValue() { return returnValue; } - public ArrayList getTilesSelected() { + public List getTilesSelected() { return tileMultiSelector.getTilesSelected(); } diff --git a/src/main/java/editor/tileseteditor/ReplaceMaterialDialog.java b/src/main/java/editor/tileseteditor/ReplaceMaterialDialog.java index 5369391..1ef45d2 100644 --- a/src/main/java/editor/tileseteditor/ReplaceMaterialDialog.java +++ b/src/main/java/editor/tileseteditor/ReplaceMaterialDialog.java @@ -3,20 +3,12 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import editor.handler.MapEditorHandler; -import java.awt.Component; -import java.awt.Image; import java.util.ArrayList; -import javax.swing.DefaultComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.ImageIcon; -import javax.swing.JLabel; -import javax.swing.JList; +import java.util.Arrays; /** * @author Trifindo, JackHack96 @@ -69,15 +61,12 @@ public void init(MapEditorHandler handler, TilesetEditorHandler tileHandler, Til jtfMaterialName.setText(tileHandler.getMaterialSelected().getImageName()); textureDisplayToDelete.setImageIndex(tileHandler.getMaterialIndexSelected()); textureDisplayNew.setImageIndex(0); - } private void initJComboBox() { - Object[] names = new String[handler.getTileset().getMaterials().size()]; - for (int i = 0; i < names.length; i++) { - names[i] = handler.getTileset().getMaterials().get(i).getImageName(); - } - DefaultComboBoxModel model = new DefaultComboBoxModel(names); + String[] names = new String[handler.getTileset().getMaterials().size()]; + Arrays.setAll(names, i -> handler.getTileset().getMaterials().get(i).getImageName()); + DefaultComboBoxModel model = new DefaultComboBoxModel<>(names); jcbNewMaterialEnabled = false; jcbNewMaterial.setModel(model); jcbNewMaterialEnabled = true; @@ -97,7 +86,6 @@ public Component getListCellRendererComponent(JList list, Object value, int inde return label; } }); - } public int getReturnValue() { diff --git a/src/main/java/editor/tileseteditor/TextureDisplay.java b/src/main/java/editor/tileseteditor/TextureDisplay.java index d6f41bb..6acb643 100644 --- a/src/main/java/editor/tileseteditor/TextureDisplay.java +++ b/src/main/java/editor/tileseteditor/TextureDisplay.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Desktop; import java.awt.Graphics; @@ -10,9 +9,6 @@ import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.JOptionPane; import tileset.Tile; import tileset.Tileset; diff --git a/src/main/java/editor/tileseteditor/TextureDisplayConfigurable.java b/src/main/java/editor/tileseteditor/TextureDisplayConfigurable.java index d00f997..ed7aa0f 100644 --- a/src/main/java/editor/tileseteditor/TextureDisplayConfigurable.java +++ b/src/main/java/editor/tileseteditor/TextureDisplayConfigurable.java @@ -1,13 +1,11 @@ package editor.tileseteditor; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.image.BufferedImage; -import tileset.Tile; import tileset.TilesetMaterial; /** diff --git a/src/main/java/editor/tileseteditor/TextureDisplayMaterial.java b/src/main/java/editor/tileseteditor/TextureDisplayMaterial.java index 4aaab4e..f835e45 100644 --- a/src/main/java/editor/tileseteditor/TextureDisplayMaterial.java +++ b/src/main/java/editor/tileseteditor/TextureDisplayMaterial.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Desktop; import java.awt.Graphics; @@ -10,7 +9,6 @@ import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import javax.swing.JOptionPane; import tileset.Tile; import tileset.Tileset; diff --git a/src/main/java/editor/tileseteditor/TileDisplay.java b/src/main/java/editor/tileseteditor/TileDisplay.java index eae6634..3ef941f 100644 --- a/src/main/java/editor/tileseteditor/TileDisplay.java +++ b/src/main/java/editor/tileseteditor/TileDisplay.java @@ -1,31 +1,13 @@ package editor.tileseteditor; -import static com.jogamp.opengl.GL.GL_BACK; import static com.jogamp.opengl.GL.GL_COLOR_BUFFER_BIT; import static com.jogamp.opengl.GL.GL_CULL_FACE; -import static com.jogamp.opengl.GL.GL_CW; -import static com.jogamp.opengl.GL.GL_DEPTH_BUFFER_BIT; -import static com.jogamp.opengl.GL.GL_DEPTH_TEST; -import static com.jogamp.opengl.GL.GL_FRONT; import static com.jogamp.opengl.GL.GL_GREATER; -import static com.jogamp.opengl.GL.GL_LEQUAL; -import static com.jogamp.opengl.GL.GL_LINES; -import static com.jogamp.opengl.GL.GL_NEAREST; import static com.jogamp.opengl.GL.GL_NOTEQUAL; -import static com.jogamp.opengl.GL.GL_REPEAT; -import static com.jogamp.opengl.GL.GL_TEXTURE_2D; -import static com.jogamp.opengl.GL.GL_TEXTURE_MAG_FILTER; -import static com.jogamp.opengl.GL.GL_TEXTURE_MIN_FILTER; -import static com.jogamp.opengl.GL.GL_TEXTURE_WRAP_S; -import static com.jogamp.opengl.GL.GL_TEXTURE_WRAP_T; -import static com.jogamp.opengl.GL.GL_TRIANGLES; -import static com.jogamp.opengl.GL.GL_TRUE; -import static com.jogamp.opengl.GL2.GL_ARRAY_BUFFER; import static com.jogamp.opengl.GL2.GL_BLEND; import static com.jogamp.opengl.GL2.GL_DEPTH_BUFFER_BIT; import static com.jogamp.opengl.GL2.GL_DEPTH_TEST; -import static com.jogamp.opengl.GL2.GL_FLOAT; import static com.jogamp.opengl.GL2.GL_FRONT_AND_BACK; import static com.jogamp.opengl.GL2.GL_LEQUAL; import static com.jogamp.opengl.GL2.GL_LESS; @@ -35,8 +17,6 @@ import static com.jogamp.opengl.GL2.GL_ONE_MINUS_SRC_ALPHA; import static com.jogamp.opengl.GL2.GL_REPEAT; import static com.jogamp.opengl.GL2.GL_SRC_ALPHA; -import static com.jogamp.opengl.GL2.GL_STATIC_DRAW; -import static com.jogamp.opengl.GL2.GL_TEXTURE0; import static com.jogamp.opengl.GL2.GL_TEXTURE_2D; import static com.jogamp.opengl.GL2.GL_TEXTURE_MAG_FILTER; import static com.jogamp.opengl.GL2.GL_TEXTURE_MIN_FILTER; @@ -47,9 +27,6 @@ import com.jogamp.opengl.GL2; import static com.jogamp.opengl.GL2ES1.GL_ALPHA_TEST; -import static com.jogamp.opengl.GL2ES1.GL_LIGHT_MODEL_AMBIENT; -import static com.jogamp.opengl.GL2ES1.GL_LIGHT_MODEL_TWO_SIDE; -import static com.jogamp.opengl.GL2ES3.GL_COLOR; import static com.jogamp.opengl.GL2ES3.GL_QUADS; import static com.jogamp.opengl.GL2GL3.GL_FILL; import static com.jogamp.opengl.GL2GL3.GL_LINE; @@ -60,14 +37,8 @@ import com.jogamp.opengl.GLProfile; import com.jogamp.opengl.awt.GLJPanel; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_AMBIENT; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_DIFFUSE; import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_LIGHT0; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_LIGHT1; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_LIGHT2; import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_LIGHTING; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_NORMALIZE; -import static com.jogamp.opengl.fixedfunc.GLLightingFunc.GL_POSITION; import com.jogamp.opengl.glu.GLU; import com.jogamp.opengl.util.awt.ImageUtil; @@ -75,7 +46,6 @@ import com.jogamp.opengl.util.texture.awt.AWTTextureIO; import editor.handler.MapEditorHandler; import geometry.Generator; -import graphicslib3D.Matrix3D; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @@ -85,14 +55,13 @@ import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.image.BufferedImage; -import java.nio.FloatBuffer; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import javax.swing.SwingUtilities; import tileset.Tile; import tileset.Tileset; -import utils.GlUtils; import utils.Utils; /** @@ -111,7 +80,7 @@ public class TileDisplay extends GLJPanel implements GLEventListener, MouseListe 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f}; - private ArrayList textures = new ArrayList<>(); + private List textures = new ArrayList<>(); //Scene private float cameraX, cameraY, cameraZ; @@ -197,13 +166,9 @@ public void display(GLAutoDrawable drawable) { //Load Textures into OpenGL //handler.getTileset().loadTextures("res/tileset"); updateRequested = false; - } - //Draw grid drawGrid(); - - //Draw axis drawAxis(); //Draw tiles @@ -308,11 +273,7 @@ public void keyTyped(KeyEvent e) { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SPACE) { - if (orthoEnabled) { - orthoEnabled = false; - } else { - orthoEnabled = true; - } + orthoEnabled = !orthoEnabled; repaint(); } @@ -437,7 +398,6 @@ public void drawTile(boolean useWireframe) { drawQuads(gl, tile, useWireframe); drawTris(gl, tile, useWireframe); - } private void drawQuads(GL2 gl, Tile tile, boolean useWireframe) { @@ -481,7 +441,6 @@ private void drawQuads(GL2 gl, Tile tile, boolean useWireframe) { gl.glVertex3fv(tile.getVCoordsQuad(), (i * vPerPolygon + j) * 3); } } - gl.glEnd(); } else { gl.glBegin(GL_QUADS); for (int i = start; i < end; i++) { @@ -490,8 +449,8 @@ private void drawQuads(GL2 gl, Tile tile, boolean useWireframe) { gl.glVertex3fv(tile.getVCoordsQuad(), (i * vPerPolygon + j) * 3); } } - gl.glEnd(); } + gl.glEnd(); } } @@ -514,7 +473,6 @@ private void drawTris(GL2 gl, Tile tile, boolean useWireframe) { gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - } //Draw polygons @@ -537,7 +495,6 @@ private void drawTris(GL2 gl, Tile tile, boolean useWireframe) { gl.glVertex3fv(tile.getVCoordsTri(), (i * vPerPolygon + j) * 3); } } - gl.glEnd(); } else { gl.glBegin(GL_TRIANGLES); for (int i = start; i < end; i++) { @@ -546,11 +503,9 @@ private void drawTris(GL2 gl, Tile tile, boolean useWireframe) { gl.glVertex3fv(tile.getVCoordsTri(), (i * vPerPolygon + j) * 3); } } - gl.glEnd(); } - + gl.glEnd(); } - } public void drawOpaque() { @@ -577,7 +532,6 @@ public void drawOpaque() { if (backfaceCullingEnabled) { gl.glDisable(GL_CULL_FACE); } - } public void drawTransparent() { @@ -604,7 +558,6 @@ public void drawTransparent() { if (backfaceCullingEnabled) { gl.glDisable(GL_CULL_FACE); } - } public void drawWireframe() { @@ -628,7 +581,6 @@ public void drawWireframe() { drawTile(true); gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } public void drawNormals(GL2 gl){ @@ -672,12 +624,11 @@ public void drawNormals(GL2 gl){ final int vPerPolygon = 3; start = tile.getTexOffsetsTri().get(k); if (k + 1 < tile.getTextureIDs().size()) { - end = (tile.getTexOffsetsTri().get(k + 1)); + end = tile.getTexOffsetsTri().get(k + 1); } else { end = tile.getVCoordsTri().length / (3 * vPerPolygon); } - gl.glBegin(GL_LINES); for (int i = start; i < end; i++) { for (int j = 0; j < vPerPolygon; j++) { @@ -700,7 +651,7 @@ public void drawNormals(GL2 gl){ final int vPerPolygon = 4; start = tile.getTexOffsetsQuad().get(k); if (k + 1 < tile.getTextureIDs().size()) { - end = (tile.getTexOffsetsQuad().get(k + 1)); + end = tile.getTexOffsetsQuad().get(k + 1); } else { end = tile.getVCoordsQuad().length / (3 * vPerPolygon); } @@ -719,9 +670,7 @@ public void drawNormals(GL2 gl){ } } gl.glEnd(); - } - } private void loadTexturesGL() { @@ -778,5 +727,4 @@ public boolean isTexturesEnabled() { public void setNormalsEnabled(boolean normalsEnabled){ this.normalsEnabled = normalsEnabled; } - } diff --git a/src/main/java/editor/tileseteditor/TilesetEditorDialog.java b/src/main/java/editor/tileseteditor/TilesetEditorDialog.java index b0f2f83..0672b44 100644 --- a/src/main/java/editor/tileseteditor/TilesetEditorDialog.java +++ b/src/main/java/editor/tileseteditor/TilesetEditorDialog.java @@ -3,40 +3,23 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; import editor.smartdrawing.*; import editor.tileselector.*; import com.jogamp.opengl.GLContext; -import tileset.TilesetRenderer; import editor.handler.MapEditorHandler; import formats.obj.ObjWriter; -import editor.smartdrawing.SmartGrid; -import editor.smartdrawing.SmartGridEditable; import editor.vertexcolors.VColorEditorDialog; -import java.awt.Color; -import java.awt.Component; -import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; -import javax.swing.DefaultComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.DefaultListModel; -import javax.swing.ImageIcon; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JOptionPane; -import javax.swing.JTextField; -import javax.swing.SpinnerNumberModel; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; +import java.util.List; +import java.util.Objects; import javax.swing.filechooser.FileNameExtensionFilter; import net.miginfocom.swing.*; @@ -58,13 +41,13 @@ public class TilesetEditorDialog extends JDialog { private boolean jcbTexTilingUListenerActive = true; private boolean jcbTexTilingVListenerActive = true; private boolean jcbColorFormatListenerActive = true; - private MutableBoolean jtfMaterialNameActive = new MutableBoolean(true); - private MutableBoolean jtfTextureNameActive = new MutableBoolean(true); - private MutableBoolean jtfPaletteNameActive = new MutableBoolean(true); + private boolean jtfMaterialNameActive = true; + private boolean jtfTextureNameActive = true; + private boolean jtfPaletteNameActive = true; private boolean jsAlphaActive = true; - private MutableBoolean jtfGlobalTexScaleActive = new MutableBoolean(true); - private MutableBoolean jtfXOffsetActive = new MutableBoolean(true); - private MutableBoolean jtfYOffsetActive = new MutableBoolean(true); + private boolean jtfGlobalTexScaleActive = true; + private boolean jtfXOffsetActive = true; + private boolean jtfYOffsetActive = true; private boolean jlTileMaterialsEnabled = true; private static final Color redColor = new Color(255, 200, 200); @@ -80,14 +63,12 @@ public TilesetEditorDialog(Window owner) { super(owner); initComponents(); - jTabbedPane1.setIconAt(0, new ImageIcon(getClass().getResource("/icons/TileIcon.png"))); - jTabbedPane1.setIconAt(1, new ImageIcon(getClass().getResource("/icons/MaterialIcon2.png"))); + jTabbedPane1.setIconAt(0, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/TileIcon.png")))); + jTabbedPane1.setIconAt(1, new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/MaterialIcon2.png")))); jScrollPane2.getVerticalScrollBar().setUnitIncrement(16); jScrollPaneSmartGrid.getVerticalScrollBar().setUnitIncrement(16); - Color redColor = new Color(255, 200, 200); - addListenerToJTextField(jtfMaterialName, jtfMaterialNameActive); addListenerToJTextField(jtfTextureName, jtfTextureNameActive); addListenerToJTextField(jtfPaletteName, jtfPaletteNameActive); @@ -201,7 +182,7 @@ private void jbMoreSizeYActionPerformed(ActionEvent evt) { private void jbRemoveTileActionPerformed(ActionEvent evt) { if (handler.getTileset().size() > 1) { - ArrayList indices = tileSelector.getIndicesSelected(); + List indices = tileSelector.getIndicesSelected(); for (int i = 0; i < indices.size(); i++) { handler.getTileset().removeTile(indices.get(0)); } @@ -231,8 +212,7 @@ private void jbRemoveTileActionPerformed(ActionEvent evt) { } private void jbAddTileActionPerformed(ActionEvent evt) { - final AddTileDialog addTileDialog = new AddTileDialog(handler.getMainFrame(), - "Import Tile Settings"); + final AddTileDialog addTileDialog = new AddTileDialog(handler.getMainFrame(), "Import Tile Settings"); addTileDialog.setLocationRelativeTo(this); addTileDialog.setVisible(true); if (addTileDialog.getReturnValue() == AddTileDialog.APPROVE_OPTION) { @@ -252,10 +232,9 @@ private void jbAddTileActionPerformed(ActionEvent evt) { try { handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); File[] files = fc.getSelectedFiles(); - ArrayList newTiles = new ArrayList<>(); + List newTiles = new ArrayList<>(); boolean exceptionFound = false; - for (int i = 0; i < files.length; i++) { - File file = files[i]; + for (File file : files) { try { Tile tile = new Tile(handler.getTileset(), file.getAbsolutePath()); @@ -270,14 +249,10 @@ private void jbAddTileActionPerformed(ActionEvent evt) { newTiles.add(tile); } catch (TextureNotFoundException ex) { exceptionFound = true; - JOptionPane.showMessageDialog(this, ex.getMessage(), - "Error reading texture", - JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, ex.getMessage(), "Error reading texture", JOptionPane.ERROR_MESSAGE); } catch (NormalsNotFoundException ex) { exceptionFound = true; - JOptionPane.showMessageDialog(this, ex.getMessage(), - "Error reading normals", - JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(this, ex.getMessage(), "Error reading normals", JOptionPane.ERROR_MESSAGE); } } @@ -352,49 +327,47 @@ private void jbMoveDownActionPerformed(ActionEvent evt) { } private void jbAddTextureActionPerformed(ActionEvent evt) { - if (handler.getTileset().size() > 0) { - final ThumbnailFileChooser fc = new ThumbnailFileChooser(); //Check for a better alternative - if (handler.getLastTilesetDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastTilesetDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("Portable Network Graphics (*.PNG)", "png")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Open"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - File file = fc.getSelectedFile(); - handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); + if (handler.getTileset().size() <= 0) { + return; + } + final ThumbnailFileChooser fc = new ThumbnailFileChooser(); //Check for a better alternative + if (handler.getLastTilesetDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastTilesetDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("Portable Network Graphics (*.PNG)", "png")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Open"); + int returnVal = fc.showOpenDialog(this); + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } - String path = file.getAbsolutePath(); - boolean textureAdded = handler.getTileset().addTexture(path); - if (textureAdded) { - handler.getTileSelected().getTextureIDs().set( - tileHandler.getTextureIdIndexSelected(), - handler.getTileset().getMaterials().size() - 1); - updateJComboBox(); - updateViewTextNames(); - jComboBoxListenerActive = false; - jcbMaterial.setSelectedItem(tileHandler.getTextureSelectedName()); - jComboBoxListenerActive = true; - updateViewJLTileMaterials(jlTileMaterials.getSelectedIndex()); - tileDisplay.requestUpdate(); - tileDisplay.repaint(); - updateSelectedTileThumbnail(); - //tileHandler.updateTileThumbnail(handler.getTileIndexSelected()); - tileSelector.updateTile(handler.getTileIndexSelected()); - tileSelector.repaint(); - textureDisplay.repaint(); - } else { - JOptionPane.showMessageDialog(this, - "A texture with the same name is already in the tileset", - "Texture already loaded", JOptionPane.INFORMATION_MESSAGE); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "Can't open file", "Error opening the file", JOptionPane.INFORMATION_MESSAGE); - } - } + File file = fc.getSelectedFile(); + handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); + String path = file.getAbsolutePath(); + boolean textureAdded = handler.getTileset().addTexture(path); + if (textureAdded) { + handler.getTileSelected().getTextureIDs().set( + tileHandler.getTextureIdIndexSelected(), + handler.getTileset().getMaterials().size() - 1); + updateJComboBox(); + updateViewTextNames(); + jComboBoxListenerActive = false; + jcbMaterial.setSelectedItem(tileHandler.getTextureSelectedName()); + jComboBoxListenerActive = true; + updateViewJLTileMaterials(jlTileMaterials.getSelectedIndex()); + tileDisplay.requestUpdate(); + tileDisplay.repaint(); + updateSelectedTileThumbnail(); + //tileHandler.updateTileThumbnail(handler.getTileIndexSelected()); + tileSelector.updateTile(handler.getTileIndexSelected()); + tileSelector.repaint(); + textureDisplay.repaint(); + } else { + JOptionPane.showMessageDialog(this, + "A texture with the same name is already in the tileset", + "Texture already loaded", JOptionPane.INFORMATION_MESSAGE); } } @@ -466,12 +439,10 @@ private void jbMaterialNameActionPerformed(ActionEvent evt) { } private void jSpinner2StateChanged(ChangeEvent evt) { - if (handler.getTileset().size() > 0) { - if (jsAlphaActive) { - int alpha = (Integer) jSpinner2.getValue(); - if (alpha >= 0 && alpha < 32) { - tileHandler.getMaterialSelected().setAlpha(alpha); - } + if (handler.getTileset().size() > 0 && jsAlphaActive) { + int alpha = (Integer) jSpinner2.getValue(); + if (alpha >= 0 && alpha < 32) { + tileHandler.getMaterialSelected().setAlpha(alpha); } } } @@ -491,20 +462,20 @@ private void jcbTexGenModeActionPerformed(ActionEvent evt) { } private void jbDuplicateTileActionPerformed(ActionEvent evt) { - if (handler.getTileset().size() > 0) { - ArrayList indices = tileSelector.getIndicesSelected(); - - handler.getTileset().duplicateTiles(indices); - //int index = handler.getTileIndexSelected(); - //handler.getTileset().duplicateTile(index); - tileDisplay.requestUpdate(); - //tileDisplay.swapVBOs(handler.getTileIndexSelected(), newIndex); - //handler.setIndexTileSelected(indices.get(indices.get(0))); - tileSelector.updateLayout(); - tileSelector.repaint(); - updateViewTileIndex(); + if (handler.getTileset().size() <= 0) { + return; } + List indices = tileSelector.getIndicesSelected(); + handler.getTileset().duplicateTiles(indices); + //int index = handler.getTileIndexSelected(); + //handler.getTileset().duplicateTile(index); + tileDisplay.requestUpdate(); + //tileDisplay.swapVBOs(handler.getTileIndexSelected(), newIndex); + //handler.setIndexTileSelected(indices.get(indices.get(0))); + tileSelector.updateLayout(); + tileSelector.repaint(); + updateViewTileIndex(); } private void jbFlipModelActionPerformed(ActionEvent evt) { @@ -638,26 +609,20 @@ private void jbMoveModelDown1ActionPerformed(ActionEvent evt) { } private void jcbTexTilingUActionPerformed(ActionEvent evt) { - if (handler.getTileset().size() > 0) { - if (jcbTexTilingUListenerActive) { - tileHandler.getMaterialSelected().setTexTilingU(jcbTexTilingU.getSelectedIndex()); - } + if (handler.getTileset().size() > 0 && jcbTexTilingUListenerActive) { + tileHandler.getMaterialSelected().setTexTilingU(jcbTexTilingU.getSelectedIndex()); } } private void jcbTexTilingVActionPerformed(ActionEvent evt) { - if (handler.getTileset().size() > 0) { - if (jcbTexTilingVListenerActive) { - tileHandler.getMaterialSelected().setTexTilingV(jcbTexTilingV.getSelectedIndex()); - } + if (handler.getTileset().size() > 0 && jcbTexTilingVListenerActive) { + tileHandler.getMaterialSelected().setTexTilingV(jcbTexTilingV.getSelectedIndex()); } } private void jcbColorFormatActionPerformed(ActionEvent evt) { - if (handler.getTileset().size() > 0) { - if (jcbColorFormatListenerActive) { - tileHandler.getMaterialSelected().setColorFormat(jcbColorFormat.getSelectedIndex()); - } + if (handler.getTileset().size() > 0 && jcbColorFormatListenerActive) { + tileHandler.getMaterialSelected().setColorFormat(jcbColorFormat.getSelectedIndex()); } } @@ -686,40 +651,44 @@ private void jcbL3ActionPerformed(ActionEvent evt) { } private void jbExportTileAsObjActionPerformed(ActionEvent evt) { - if (handler.getTileset().size() > 0) { - final ExportTileDialog exportTileDialog = new ExportTileDialog(handler.getMainFrame(), "Export Tile Settings"); - exportTileDialog.setLocationRelativeTo(this); - exportTileDialog.setVisible(true); - if (exportTileDialog.getReturnValue() == AddTileDialog.APPROVE_OPTION) { - float scale = exportTileDialog.getScale(); - boolean flip = exportTileDialog.flip(); - boolean includeVertexColors = exportTileDialog.includeVertexColors(); - - final JFileChooser fc = new JFileChooser(); - if (handler.getLastTileObjDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastTileObjDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("OBJ (*.obj)", "obj")); - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save tile as OBJ"); - fc.setSelectedFile(new File(handler.getTileSelected().getObjFilename())); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - String path = fc.getSelectedFile().getPath(); - handler.setLastTileObjDirectoryUsed(fc.getSelectedFile().getParent()); - - ObjWriter objWriter = new ObjWriter(handler.getTileset(), - handler.getGrid(), path, handler.getGameIndex(), true, includeVertexColors, 1.0f); - try { - objWriter.writeTileObj(handler.getTileIndexSelected(), scale, flip); - JOptionPane.showMessageDialog(this, "Tile succesfully exported as OBJ", - "Tile saved", JOptionPane.INFORMATION_MESSAGE); - } catch (FileNotFoundException ex) { - JOptionPane.showMessageDialog(this, "There was a problem saving the tile as OBJ", - "Can't save tile", JOptionPane.ERROR_MESSAGE); - } - } - } + if (handler.getTileset().size() <= 0) { + return; + } + final ExportTileDialog exportTileDialog = new ExportTileDialog(handler.getMainFrame(), "Export Tile Settings"); + exportTileDialog.setLocationRelativeTo(this); + exportTileDialog.setVisible(true); + if (exportTileDialog.getReturnValue() != AddTileDialog.APPROVE_OPTION) { + return; + } + + float scale = exportTileDialog.getScale(); + boolean flip = exportTileDialog.flip(); + boolean includeVertexColors = exportTileDialog.includeVertexColors(); + + final JFileChooser fc = new JFileChooser(); + if (handler.getLastTileObjDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastTileObjDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("OBJ (*.obj)", "obj")); + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save tile as OBJ"); + fc.setSelectedFile(new File(handler.getTileSelected().getObjFilename())); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + + String path = fc.getSelectedFile().getPath(); + handler.setLastTileObjDirectoryUsed(fc.getSelectedFile().getParent()); + + ObjWriter objWriter = new ObjWriter(handler.getTileset(), + handler.getGrid(), path, handler.getGameIndex(), true, includeVertexColors, 1.0f); + try { + objWriter.writeTileObj(handler.getTileIndexSelected(), scale, flip); + JOptionPane.showMessageDialog(this, "Tile succesfully exported as OBJ", + "Tile saved", JOptionPane.INFORMATION_MESSAGE); + } catch (FileNotFoundException ex) { + JOptionPane.showMessageDialog(this, "There was a problem saving the tile as OBJ", + "Can't save tile", JOptionPane.ERROR_MESSAGE); } } @@ -730,79 +699,76 @@ private void jbReplaceTextureActionPerformed(ActionEvent evt) { } private void jbImportTileAsObjActionPerformed(ActionEvent evt) { - if (handler.getTileset().size() > 0) { - final AddTileDialog addTileDialog = new AddTileDialog(handler.getMainFrame(), "Import Tile Settings"); - addTileDialog.setLocationRelativeTo(this); - addTileDialog.setVisible(true); - if (addTileDialog.getReturnValue() == AddTileDialog.APPROVE_OPTION) { - float scale = addTileDialog.getScale(); - boolean flip = addTileDialog.flip(); - - final JFileChooser fc = new JFileChooser(); - if (handler.getLastTilesetDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastTilesetDirectoryUsed())); - } - fc.setFileFilter(new FileNameExtensionFilter("OBJ (*.obj)", "obj")); - fc.setApproveButtonText("Open"); - fc.setDialogTitle("Open OBJ"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); - File file = fc.getSelectedFile(); - boolean exceptionFound = false; - try { - Tile tile = new Tile(handler.getTileset(), - file.getAbsolutePath(), - handler.getTileSelected()); + if (handler.getTileset().size() <= 0) { + return; + } + final AddTileDialog addTileDialog = new AddTileDialog(handler.getMainFrame(), "Import Tile Settings"); + addTileDialog.setLocationRelativeTo(this); + addTileDialog.setVisible(true); + if (addTileDialog.getReturnValue() != AddTileDialog.APPROVE_OPTION) { + return; + } + float scale = addTileDialog.getScale(); + boolean flip = addTileDialog.flip(); - if (scale != 1.0f) { - tile.scaleModel(scale); - } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastTilesetDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastTilesetDirectoryUsed())); + } + fc.setFileFilter(new FileNameExtensionFilter("OBJ (*.obj)", "obj")); + fc.setApproveButtonText("Open"); + fc.setDialogTitle("Open OBJ"); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } - if (flip) { - tile.flipModelYZ(); - } + try { + handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); + File file = fc.getSelectedFile(); + boolean exceptionFound = false; + try { + Tile tile = new Tile(handler.getTileset(), file.getAbsolutePath(), handler.getTileSelected()); - handler.getTileset().getTiles().set(handler.getTileIndexSelected(), tile); + if (scale != 1.0f) { + tile.scaleModel(scale); + } - //Remove unused textures - handler.getTileset().removeUnusedTextures(); + if (flip) { + tile.flipModelYZ(); + } - updateSelectedTileThumbnail(); + handler.getTileset().getTiles().set(handler.getTileIndexSelected(), tile); - tileSelector.updateLayout(); - tileDisplay.requestUpdate(); + //Remove unused textures + handler.getTileset().removeUnusedTextures(); - tileDisplay.repaint(); + updateSelectedTileThumbnail(); - updateJComboBox(); - updateView(); - repaint(); + tileSelector.updateLayout(); + tileDisplay.requestUpdate(); - } catch (TextureNotFoundException ex) { - exceptionFound = true; - JOptionPane.showMessageDialog(this, ex.getMessage(), - "Error reading texture", - JOptionPane.ERROR_MESSAGE); - } catch (NormalsNotFoundException ex) { - exceptionFound = true; - JOptionPane.showMessageDialog(this, ex.getMessage(), - "Error reading normals", - JOptionPane.ERROR_MESSAGE); - } - if (exceptionFound) { - BufferedImage image = Utils.loadTexImageAsResource("/imgs/BlenderExportObjSettings.png"); - JLabel picLabel = new JLabel(new ImageIcon(image)); - JOptionPane.showMessageDialog(null, picLabel, - "Use the following Blender export settings", - JOptionPane.PLAIN_MESSAGE, null); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "Can't open file", "Error opening some files", JOptionPane.INFORMATION_MESSAGE); - } - } + tileDisplay.repaint(); + + updateJComboBox(); + updateView(); + repaint(); + + } catch (TextureNotFoundException ex) { + exceptionFound = true; + JOptionPane.showMessageDialog(this, ex.getMessage(), "Error reading texture", JOptionPane.ERROR_MESSAGE); + } catch (NormalsNotFoundException ex) { + exceptionFound = true; + JOptionPane.showMessageDialog(this, ex.getMessage(), "Error reading normals", JOptionPane.ERROR_MESSAGE); + } + if (exceptionFound) { + BufferedImage image = Utils.loadTexImageAsResource("/imgs/BlenderExportObjSettings.png"); + JLabel picLabel = new JLabel(new ImageIcon(image)); + JOptionPane.showMessageDialog(null, picLabel, + "Use the following Blender export settings", + JOptionPane.PLAIN_MESSAGE, null); } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "Can't open file", "Error opening some files", JOptionPane.INFORMATION_MESSAGE); } } @@ -820,41 +786,42 @@ private void jbImportTilesActionPerformed(ActionEvent evt) { fc.setFileFilter(new FileNameExtensionFilter("Pokemon DS Tileset (*.pdsts)", Tileset.fileExtension)); fc.setApproveButtonText("Open"); fc.setDialogTitle("Select a Pokemon DS Map Studio Tileset"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); - String path = fc.getSelectedFile().getPath(); - Tileset tileset = TilesetIO.readTilesetFromFile(path); - int start = handler.getTileset().size(); - final ImportTilesDialog dialog = new ImportTilesDialog(handler.getMainFrame()); - dialog.init(tileset); - dialog.setLocationRelativeTo(this); - dialog.setVisible(true); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } - if (dialog.getReturnValue() == ImportTilesDialog.APPROVE_OPTION) { - ArrayList tiles = dialog.getTilesSelected(); + try { + handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); + String path = fc.getSelectedFile().getPath(); + Tileset tileset = TilesetIO.readTilesetFromFile(path); + int start = handler.getTileset().size(); + + final ImportTilesDialog dialog = new ImportTilesDialog(handler.getMainFrame()); + dialog.init(tileset); + dialog.setLocationRelativeTo(this); + dialog.setVisible(true); - handler.getTileset().importTiles(tiles); + if (dialog.getReturnValue() == ImportTilesDialog.APPROVE_OPTION) { + List tiles = dialog.getTilesSelected(); - handler.getTileset().removeUnusedTextures(); + handler.getTileset().importTiles(tiles); - updateTileThumbnails(start, handler.getTileset().size()); + handler.getTileset().removeUnusedTextures(); - tileSelector.updateLayout(); - tileDisplay.requestUpdate(); - tileDisplay.repaint(); - updateJComboBox(); - updateView(); - repaint(); - } - } catch (NullPointerException | TextureNotFoundException | IOException ex) { - JOptionPane.showMessageDialog(this, "There was a problem opening the tileset", - "Error opening tileset", JOptionPane.ERROR_MESSAGE); + updateTileThumbnails(start, handler.getTileset().size()); + + tileSelector.updateLayout(); + tileDisplay.requestUpdate(); + tileDisplay.repaint(); + updateJComboBox(); + updateView(); + repaint(); } + } catch (NullPointerException | IOException ex) { + JOptionPane.showMessageDialog(this, "There was a problem opening the tileset", + "Error opening tileset", JOptionPane.ERROR_MESSAGE); } - } private void jcbBackfaceCullingActionPerformed(ActionEvent evt) { @@ -883,7 +850,6 @@ private void jbEditVertexColorsActionPerformed(ActionEvent evt) { updateView3DModel(); } - } private void jcbUseVertexColorsActionPerformed(ActionEvent evt) { @@ -956,7 +922,6 @@ private void jlTileMaterialsValueChanged(ListSelectionEvent e) { } } } - } public void init(MapEditorHandler handler) { @@ -974,16 +939,15 @@ public void init(MapEditorHandler handler) { textureDisplayMaterial.init(tileHandler, this); updateJComboBox(); - updateView(); } private void updateJComboBox() { - Object[] names = new String[handler.getTileset().getMaterials().size()]; + String[] names = new String[handler.getTileset().getMaterials().size()]; for (int i = 0; i < names.length; i++) { names[i] = handler.getTileset().getMaterials().get(i).getImageName(); } - DefaultComboBoxModel model = new DefaultComboBoxModel(names); + DefaultComboBoxModel model = new DefaultComboBoxModel<>(names); jComboBoxListenerActive = false; jcbMaterial.setModel(model); @@ -1011,54 +975,54 @@ public Component getListCellRendererComponent(JList list, Object value, int inde } private void updateView() { - if (handler.getTileset().size() > 0) { - Tile tile = handler.getTileSelected(); - - jtfSizeX.setText(String.valueOf(tile.getWidth())); - jtfSizeY.setText(String.valueOf(tile.getHeight())); + if (handler.getTileset().size() <= 0) { + return; + } + Tile tile = handler.getTileSelected(); - //jtfNumTextures.setText(String.valueOf(tile.getTextureIDs().size())); + jtfSizeX.setText(String.valueOf(tile.getWidth())); + jtfSizeY.setText(String.valueOf(tile.getHeight())); - updateViewJLTileMaterials(0); + //jtfNumTextures.setText(String.valueOf(tile.getTextureIDs().size())); - updateViewXOffset(tile); - updateViewYOffset(tile); - updateViewGlobalTexScale(tile); + updateViewJLTileMaterials(0); - jtfObjName.setText(tile.getObjFilename()); + updateViewXOffset(tile); + updateViewYOffset(tile); + updateViewGlobalTexScale(tile); - updateViewTileIndex(); + jtfObjName.setText(tile.getObjFilename()); - //SpinnerNumberModel model = new SpinnerNumberModel(0, 0, tile.getTextureIDs().size() - 1, 1); - //jSpinner1.setModel(model); + updateViewTileIndex(); - tileHandler.setTextureIdIndexSelected(0); - textureDisplay.repaint(); + //SpinnerNumberModel model = new SpinnerNumberModel(0, 0, tile.getTextureIDs().size() - 1, 1); + //jSpinner1.setModel(model); - jComboBoxListenerActive = false; - jcbMaterial.setSelectedItem(tileHandler.getTextureSelectedName()); - jComboBoxListenerActive = true; + tileHandler.setTextureIdIndexSelected(0); + textureDisplay.repaint(); - jcbTileableX.setSelected(tile.isXtileable()); - jcbTileableY.setSelected(tile.isYtileable()); - jcbUtileable.setSelected(tile.isUtileable()); - jcbVtileable.setSelected(tile.isVtileable()); - jcbGlobalTexMapping.setSelected(tile.useGlobalTextureMapping()); + jComboBoxListenerActive = false; + jcbMaterial.setSelectedItem(tileHandler.getTextureSelectedName()); + jComboBoxListenerActive = true; - updateViewTextNames(); + jcbTileableX.setSelected(tile.isXtileable()); + jcbTileableY.setSelected(tile.isYtileable()); + jcbUtileable.setSelected(tile.isUtileable()); + jcbVtileable.setSelected(tile.isVtileable()); + jcbGlobalTexMapping.setSelected(tile.useGlobalTextureMapping()); - updateViewMaterialProperties(); + updateViewTextNames(); - textureDisplayMaterial.repaint(); + updateViewMaterialProperties(); - //updateViewTextNames(); - } + textureDisplayMaterial.repaint(); + //updateViewTextNames(); } private void updateViewJLTileMaterials(int indexSelected){ jlTileMaterialsEnabled = false; - DefaultListModel model = new DefaultListModel(); + DefaultListModel model = new DefaultListModel<>(); for(int texID : handler.getTileSelected().getTextureIDs()){ TilesetMaterial mat = handler.getTileset().getMaterial(texID); @@ -1101,19 +1065,19 @@ private void updateView3DModel() { } private void updateViewXOffset(Tile tile) { - jtfXOffsetActive.value = false; + jtfXOffsetActive = false; jtfXOffset.setText(String.valueOf(tile.getXOffset())); jtfXOffset.setBackground(defaultTextPaneBackground); jtfXOffset.setForeground(defaultTextPaneForeground); - jtfXOffsetActive.value = true; + jtfXOffsetActive = true; } private void updateViewYOffset(Tile tile) { - jtfYOffsetActive.value = false; + jtfYOffsetActive = false; jtfYOffset.setText(String.valueOf(tile.getYOffset())); jtfYOffset.setBackground(defaultTextPaneBackground); jtfYOffset.setForeground(defaultTextPaneForeground); - jtfYOffsetActive.value = true; + jtfYOffsetActive = true; } private void updateViewGlobalTexScale(Tile tile) { @@ -1175,10 +1139,9 @@ public void updateViewTileIndex() { } private void updateViewTextNames() { - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < handler.getTileset().getMaterials().size(); i++) { - String textureName = handler.getTileset().getImageName(i); - demoList.addElement(textureName); + demoList.addElement(handler.getTileset().getImageName(i)); } jlistINames.setSelectedIndex(0); jlistINames.setModel(demoList); @@ -1199,39 +1162,38 @@ public Component getListCellRendererComponent(JList list, Object value, int inde return label; } }); - } public void updateViewMaterialName() { if (jlistINames.getSelectedIndex() != -1) { String mName = handler.getTileset().getMaterialName(jlistINames.getSelectedIndex()); - jtfMaterialNameActive.value = false; + jtfMaterialNameActive = false; jtfMaterialName.setText(mName); jtfMaterialName.setBackground(defaultTextPaneBackground); jtfMaterialName.setForeground(defaultTextPaneForeground); - jtfMaterialNameActive.value = true; + jtfMaterialNameActive = true; } } private void updateViewPaletteNameImd() { if (jlistINames.getSelectedIndex() != -1) { String pName = handler.getTileset().getPaletteNameImd(jlistINames.getSelectedIndex()); - jtfPaletteNameActive.value = false; + jtfPaletteNameActive = false; jtfPaletteName.setText(pName); jtfPaletteName.setBackground(defaultTextPaneBackground); jtfPaletteName.setForeground(defaultTextPaneForeground); - jtfPaletteNameActive.value = true; + jtfPaletteNameActive = true; } } private void updateViewTextureNameImd() { if (jlistINames.getSelectedIndex() != -1) { String tName = handler.getTileset().getTextureNameImd(jlistINames.getSelectedIndex()); - jtfTextureNameActive.value = false; + jtfTextureNameActive = false; jtfTextureName.setText(tName); jtfTextureName.setBackground(defaultTextPaneBackground); jtfTextureName.setForeground(defaultTextPaneForeground); - jtfTextureNameActive.value = true; + jtfTextureNameActive = true; } } @@ -1256,12 +1218,12 @@ private void updateSelectedTileThumbnail() { tileDisplay.requestUpdate(); } - private void updateTileThumbnails(ArrayList indicesTiles) { + private void updateTileThumbnails(List indicesTiles) { GLContext context = tileDisplay.getContext(); TilesetRenderer tr = new TilesetRenderer(handler.getTileset()); - for (int i = 0; i < indicesTiles.size(); i++) { - tr.renderTileThumbnail(indicesTiles.get(i)); + for (Integer indicesTile : indicesTiles) { + tr.renderTileThumbnail(indicesTile); } tr.destroy(); tileDisplay.setContext(context, false); @@ -1276,7 +1238,7 @@ public void replaceMaterial() { if (dialog.getReturnValue() == ReplaceMaterialDialog.APPROVE_OPTION) { int newIndex = dialog.getIndexSelected(); - ArrayList indicesTilesReplaced = handler.getTileset().replaceMaterial(tileHandler.getMaterialIndexSelected(), newIndex); + List indicesTilesReplaced = handler.getTileset().replaceMaterial(tileHandler.getMaterialIndexSelected(), newIndex); updateTileThumbnails(indicesTilesReplaced); tileSelector.updateLayout(); @@ -1288,7 +1250,6 @@ public void replaceMaterial() { //tileHandler.setMaterialIndexSelected(newIndex); } - } private void replaceTextureWithDialog() { @@ -1299,13 +1260,16 @@ private void replaceTextureWithDialog() { fc.setFileFilter(new FileNameExtensionFilter("Portable Network Graphics (*.PNG)", "png")); fc.setApproveButtonText("Open"); fc.setDialogTitle("Open New Texture Image"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = fc.getSelectedFile(); - handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); - String path = file.getAbsolutePath(); - replaceTexture(tileHandler.getMaterialIndexSelected(), path); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + + File file = fc.getSelectedFile(); + handler.setLastTilesetDirectoryUsed(fc.getSelectedFile().getParent()); + + String path = file.getAbsolutePath(); + replaceTexture(tileHandler.getMaterialIndexSelected(), path); /* try { boolean textureAdded = handler.getTileset().replaceTexture(tileHandler.getMaterialIndexSelected(), path); @@ -1341,7 +1305,6 @@ private void replaceTextureWithDialog() { "Error opening image", JOptionPane.ERROR_MESSAGE); } */ - } } public void replaceTexture(int textureIndex, String path) { @@ -1353,8 +1316,7 @@ public void replaceTexture(int textureIndex, String path) { for (int i = 0; i < handler.getTileset().size(); i++) { Tile t = handler.getTileset().get(i); for (int j = 0; j < t.getTextureIDs().size(); j++) { - int id = t.getTextureIDs().get(j); - if (id == textureIndex) { + if (t.getTextureIDs().get(j) == textureIndex) { tileIndsToUpdate.add(i); } } @@ -1384,46 +1346,46 @@ public void replaceTexture(int textureIndex, String path) { private void changeGlobalTexScale() { float value; try { - value = Float.valueOf(jtfGlobalTexScale.getText()); + value = Float.parseFloat(jtfGlobalTexScale.getText()); } catch (NumberFormatException e) { value = handler.getTileSelected().getGlobalTextureScale(); } handler.getTileSelected().setGlobalTextureScale(value); jtfGlobalTexScale.setText(String.valueOf(value)); - jtfGlobalTexScaleActive.value = false; + jtfGlobalTexScaleActive = false; jtfGlobalTexScale.setBackground(greenColor); jtfGlobalTexScale.setForeground(Color.black); - jtfGlobalTexScaleActive.value = true; + jtfGlobalTexScaleActive = true; } private void changeXOffset() { float value; try { - value = Float.valueOf(jtfXOffset.getText()); + value = Float.parseFloat(jtfXOffset.getText()); } catch (NumberFormatException e) { value = handler.getTileSelected().getXOffset(); } handler.getTileSelected().setXOffset(value); jtfXOffset.setText(String.valueOf(value)); - jtfXOffsetActive.value = false; + jtfXOffsetActive = false; jtfXOffset.setBackground(greenColor); jtfXOffset.setForeground(Color.black); - jtfXOffsetActive.value = true; + jtfXOffsetActive = true; } private void changeYOffset() { float value; try { - value = Float.valueOf(jtfYOffset.getText()); + value = Float.parseFloat(jtfYOffset.getText()); } catch (NumberFormatException e) { value = handler.getTileSelected().getYOffset(); } handler.getTileSelected().setYOffset(value); jtfYOffset.setText(String.valueOf(value)); - jtfYOffsetActive.value = false; + jtfYOffsetActive = false; jtfYOffset.setBackground(greenColor); jtfYOffset.setForeground(Color.black); - jtfYOffsetActive.value = true; + jtfYOffsetActive = true; } private void changeMaterialName() { @@ -1431,10 +1393,10 @@ private void changeMaterialName() { int index = jlistINames.getSelectedIndex(); handler.getTileset().setMaterialName(index, mName); - jtfMaterialNameActive.value = false; + jtfMaterialNameActive = false; jtfMaterialName.setBackground(greenColor); jtfMaterialName.setForeground(Color.black); - jtfMaterialNameActive.value = true; + jtfMaterialNameActive = true; } private void changePaletteNameImd() { @@ -1442,10 +1404,10 @@ private void changePaletteNameImd() { int index = jlistINames.getSelectedIndex(); handler.getTileset().setPaletteNameImd(index, pName); - jtfPaletteNameActive.value = false; + jtfPaletteNameActive = false; jtfPaletteName.setBackground(greenColor); jtfPaletteName.setForeground(Color.black); - jtfPaletteNameActive.value = true; + jtfPaletteNameActive = true; } private void changeTextureNameImd() { @@ -1453,10 +1415,10 @@ private void changeTextureNameImd() { int index = jlistINames.getSelectedIndex(); handler.getTileset().setTextureNameImd(index, tName); - jtfTextureNameActive.value = false; + jtfTextureNameActive = false; jtfTextureName.setBackground(greenColor); jtfTextureName.setForeground(Color.black); - jtfTextureNameActive.value = true; + jtfTextureNameActive = true; } public void fixIndices() { @@ -1468,8 +1430,8 @@ public void fixIndices() { } private void fixSmartGridIndices() { - ArrayList smartGridEditableArray = smartGridEditableDisplay.getSmartGridArray(); - ArrayList smartGridArray = new ArrayList<>(smartGridEditableArray.size()); + List smartGridEditableArray = smartGridEditableDisplay.getSmartGridArray(); + List smartGridArray = new ArrayList<>(smartGridEditableArray.size()); for (SmartGridEditable smartGrid : smartGridEditableArray) { smartGridArray.add(new SmartGrid(smartGrid.toTileIndices(handler.getTileset()))); } @@ -1498,7 +1460,7 @@ private void updateTileThumbnails(int start, int end) { tileDisplay.setContext(context, false); } - private void addListenerToJTextField(JTextField jtf, MutableBoolean enabled) { + private void addListenerToJTextField(JTextField jtf, boolean enabled) { jtf.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { @@ -1516,7 +1478,7 @@ public void changedUpdate(DocumentEvent e) { } public void changeBackground() { - if (enabled.value) { + if (enabled) { jtf.setBackground(redColor); jtf.setForeground(Color.black); } @@ -1524,18 +1486,6 @@ public void changeBackground() { }); } - - - - private class MutableBoolean { - - public boolean value; - - public MutableBoolean(boolean value) { - this.value = value; - } - } - private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents panel18 = new JPanel(); @@ -3141,7 +3091,7 @@ public void mousePressed(MouseEvent e) { private JButton jbAddTexture; private JComboBox jcbMaterial; private JScrollPane scrollPane1; - private JList jlTileMaterials; + private JList jlTileMaterials; private TextureDisplay textureDisplay; private JPanel jPanel3; private JPanel panel13; diff --git a/src/main/java/editor/tileseteditor/TilesetEditorHandler.java b/src/main/java/editor/tileseteditor/TilesetEditorHandler.java index 03f8d95..6a3da6e 100644 --- a/src/main/java/editor/tileseteditor/TilesetEditorHandler.java +++ b/src/main/java/editor/tileseteditor/TilesetEditorHandler.java @@ -15,9 +15,9 @@ */ public class TilesetEditorHandler { - private MapEditorHandler handler; + private final MapEditorHandler handler; - private Tileset oldTset; + private final Tileset oldTset; private int textureIdIndexSelected = 0; private int materialIndexSelected = 0; @@ -117,5 +117,4 @@ public Color getLastColorUsed() { public void setLastColorUsed(Color color) { this.lastColorUsed = color; } - } diff --git a/src/main/java/editor/vertexcolors/ColorBrightnessPanel.java b/src/main/java/editor/vertexcolors/ColorBrightnessPanel.java index ea66d9c..6e0ee85 100644 --- a/src/main/java/editor/vertexcolors/ColorBrightnessPanel.java +++ b/src/main/java/editor/vertexcolors/ColorBrightnessPanel.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; @@ -20,7 +19,7 @@ public class ColorBrightnessPanel extends JPanel { private static final int height = 101; private static final int circleSize = 6; private static final int margin = 6; - private BufferedImage colorGradientImg; + private final BufferedImage colorGradientImg; private final int currentX = width / 2; private int currentY = 0; @@ -68,9 +67,7 @@ public void paintComponent(Graphics g) { } Graphics2D g2 = (Graphics2D) g; - RenderingHints rh = new RenderingHints( - RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHints(rh); g.setColor(Color.white); @@ -78,7 +75,6 @@ public void paintComponent(Graphics g) { g.setColor(Color.black); g.drawOval(currentX - circleSize / 2 + margin, currentY - circleSize / 2 + margin, circleSize, circleSize); - } private BufferedImage generateColorGradient(int width, int height) { @@ -102,9 +98,7 @@ private BufferedImage generateColorGradient(int width, int height) { AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_IN); g2d.setComposite(ac); - RenderingHints rh = new RenderingHints( - RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHints(rh); g2d.drawImage(img, 0, 0, null); @@ -118,7 +112,6 @@ private BufferedImage generateColorGradient(int width, int height) { return imgComp; } - public float getBrightness() { return 1.0f - (float) currentY / height; } diff --git a/src/main/java/editor/vertexcolors/ColorWheelPanel.java b/src/main/java/editor/vertexcolors/ColorWheelPanel.java index f1fc1e7..5015fd8 100644 --- a/src/main/java/editor/vertexcolors/ColorWheelPanel.java +++ b/src/main/java/editor/vertexcolors/ColorWheelPanel.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; @@ -76,9 +75,7 @@ public void paintComponent(Graphics g) { } Graphics2D g2 = (Graphics2D) g; - RenderingHints rh = new RenderingHints( - RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHints(rh); g.setColor(Color.white); @@ -111,9 +108,7 @@ private BufferedImage generateColorWheel(int diameter, float brightness) { Graphics g = img.getGraphics(); Graphics2D g2 = (Graphics2D) g; - RenderingHints rh = new RenderingHints( - RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHints(rh); g.setColor(Color.black); @@ -156,7 +151,6 @@ public void setColor(Color c) { currentX = (int) (distToCenter * Math.sin(angle)) + size / 2; currentY = (int) (distToCenter * Math.cos(angle)) + size / 2; brightness = hsb[2]; - } private void initComponents() { diff --git a/src/main/java/editor/vertexcolors/VColorEditorDialog.java b/src/main/java/editor/vertexcolors/VColorEditorDialog.java index df2ce4f..31bb2cb 100644 --- a/src/main/java/editor/vertexcolors/VColorEditorDialog.java +++ b/src/main/java/editor/vertexcolors/VColorEditorDialog.java @@ -3,23 +3,14 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import javax.swing.event.*; import editor.handler.MapEditorHandler; import editor.tileseteditor.TilesetEditorHandler; -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusEvent; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.swing.JTextField; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; import javax.swing.text.AbstractDocument; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; @@ -27,8 +18,6 @@ import javax.swing.text.DocumentFilter.FilterBypass; import net.miginfocom.swing.*; -import tileset.TileGeometryCompresser; -import utils.Utils; import utils.Utils.MutableBoolean; /** @@ -185,7 +174,6 @@ public void setSelectedColor(Color color) { colorWheelPanel1.repaint(); colorBrightnessPanel1.repaint(); jPanel1.repaint(); - } private Color getColorFromJTextFields() { @@ -261,11 +249,7 @@ public void update() { } }); - jtf.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent event) { - fixJTextFieldValue(jtf, enabled); - } - }); + jtf.addActionListener(event -> fixJTextFieldValue(jtf, enabled)); jtf.addFocusListener(new java.awt.event.FocusListener() { @Override diff --git a/src/main/java/editor/vertexcolors/VColorEditorDisplay.java b/src/main/java/editor/vertexcolors/VColorEditorDisplay.java index ba4b8e4..b2a2c5d 100644 --- a/src/main/java/editor/vertexcolors/VColorEditorDisplay.java +++ b/src/main/java/editor/vertexcolors/VColorEditorDisplay.java @@ -49,7 +49,6 @@ import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; -import java.awt.Point; import java.awt.RenderingHints; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; @@ -59,6 +58,7 @@ import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.util.ArrayList; +import java.util.List; import javax.swing.SwingUtilities; import tileset.Tile; @@ -104,7 +104,7 @@ public class VColorEditorDisplay extends GLJPanel implements GLEventListener, Mo private boolean drawTextures = true; //Points - private ArrayList points; + private List points; //Brush private int brushRadius = 20; @@ -130,7 +130,7 @@ public class VColorEditorDisplay extends GLJPanel implements GLEventListener, Mo private float[] fCoordsQuad; //Color grab - private Cursor colorGrabCursor; + private final Cursor colorGrabCursor; public VColorEditorDisplay() { //Add listeners @@ -196,13 +196,9 @@ public void display(GLAutoDrawable drawable) { handler.getTileset().loadTexturesGL(); updateRequested = false; - } - //Draw grid drawGrid(); - - //Draw axis drawAxis(); //Draw tiles @@ -247,8 +243,8 @@ public void mousePressed(MouseEvent e) { if (handler != null) { if (handler.getTileset().size() > 0) { if (selectionMode == POLYGON_SELECTION_MODE) { - ArrayList fPointsQuads = getVerticesOnScreen(fCoordsQuad); - ArrayList fPointsTris = getVerticesOnScreen(fCoordsTri); + List fPointsQuads = getVerticesOnScreen(fCoordsQuad); + List fPointsTris = getVerticesOnScreen(fCoordsTri); int closerQuadIndex = getCloserVertexIndex(e.getX(), e.getY(), faceSelectionRadius, fPointsQuads); int closerTriIndex = getCloserVertexIndex(e.getX(), e.getY(), faceSelectionRadius, fPointsTris); if (closerQuadIndex != -1 && closerTriIndex != -1) { @@ -367,11 +363,7 @@ public void keyTyped(KeyEvent e) { @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_SPACE) { - if (orthoEnabled) { - orthoEnabled = false; - } else { - orthoEnabled = true; - } + orthoEnabled = !orthoEnabled; repaint(); } @@ -409,9 +401,7 @@ public void paintComponent(Graphics g) { } }*/ Graphics2D g2 = (Graphics2D) g; - RenderingHints rh = new RenderingHints( - RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHints(rh); g2.setStroke(new BasicStroke(2)); @@ -427,7 +417,6 @@ public void paintComponent(Graphics g) { } else if (selectionMode == COLOR_GRAB_MODE) { //g.drawOval(mouseX - colorGrabRadius, mouseY - colorGrabRadius, colorGrabRadius * 2, colorGrabRadius * 2); } - } public void requestUpdate() { @@ -439,11 +428,9 @@ private void setupVAOs(GL2 gl) { if (handler.getTileset().size() > 0) { generateTileVBOs(gl); } - } private void generateTileVBOs(GL2 gl) { - for (int i = 0; i < handler.getTileset().size(); i++) { Tile tile = handler.getTileset().get(i); @@ -558,7 +545,6 @@ public void drawTile(int mode) { drawQuadsPoints(gl, tile, vboID); drawTrisPoints(gl, tile, vboID + 2); } - } private void drawQuads(GL2 gl, Tile tile, int vboID) { @@ -599,7 +585,6 @@ private void drawQuads(GL2 gl, Tile tile, int vboID) { } } gl.glEnd(); - } } @@ -625,7 +610,7 @@ private void drawTris(GL2 gl, Tile tile, int vboID) { final int vPerPolygon = 3; start = tile.getTexOffsetsTri().get(k); if (k + 1 < tile.getTextureIDs().size()) { - end = (tile.getTexOffsetsTri().get(k + 1)); + end = tile.getTexOffsetsTri().get(k + 1); } else { end = tile.getVCoordsTri().length / (3 * vPerPolygon); } @@ -651,7 +636,6 @@ private void drawTris(GL2 gl, Tile tile, int vboID) { } gl.glEnd(); } - } private void drawQuadsWireframe(GL2 gl, Tile tile, int vboID) { @@ -665,7 +649,7 @@ private void drawQuadsWireframe(GL2 gl, Tile tile, int vboID) { final int vPerPolygon = 4; start = tile.getTexOffsetsQuad().get(k); if (k + 1 < tile.getTextureIDs().size()) { - end = (tile.getTexOffsetsQuad().get(k + 1)); + end = tile.getTexOffsetsQuad().get(k + 1); } else { end = tile.getVCoordsQuad().length / (3 * vPerPolygon); } @@ -692,7 +676,7 @@ private void drawTrisWireframe(GL2 gl, Tile tile, int vboID) { final int vPerPolygon = 3; start = tile.getTexOffsetsTri().get(k); if (k + 1 < tile.getTextureIDs().size()) { - end = (tile.getTexOffsetsTri().get(k + 1)); + end = tile.getTexOffsetsTri().get(k + 1); } else { end = tile.getVCoordsTri().length / (3 * vPerPolygon); } @@ -719,7 +703,7 @@ private void drawQuadsPoints(GL2 gl, Tile tile, int vboID) { final int vPerPolygon = 4; start = tile.getTexOffsetsQuad().get(k); if (k + 1 < tile.getTextureIDs().size()) { - end = (tile.getTexOffsetsQuad().get(k + 1)); + end = tile.getTexOffsetsQuad().get(k + 1); } else { end = tile.getVCoordsQuad().length / (3 * vPerPolygon); } @@ -750,7 +734,7 @@ private void drawTrisPoints(GL2 gl, Tile tile, int vboID) { final int vPerPolygon = 3; start = tile.getTexOffsetsTri().get(k); if (k + 1 < tile.getTextureIDs().size()) { - end = (tile.getTexOffsetsTri().get(k + 1)); + end = tile.getTexOffsetsTri().get(k + 1); } else { end = tile.getVCoordsTri().length / (3 * vPerPolygon); } @@ -825,7 +809,6 @@ public void drawOpaque() { if (backfaceCullingEnabled) { gl.glDisable(GL_CULL_FACE); } - } public void drawTransparent() { @@ -852,7 +835,6 @@ public void drawTransparent() { if (backfaceCullingEnabled) { gl.glDisable(GL_CULL_FACE); } - } public void drawWireframe() { @@ -866,17 +848,13 @@ public void drawWireframe() { gl.glDepthFunc(GL_LEQUAL); gl.glColor3f(0.0f, 0.0f, 0.0f); - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - gl.glDisable(GL_TEXTURE_2D); - gl.glLineWidth(1.5f); drawTile(wireframeMode); gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } public void drawVertexPoints() { @@ -896,7 +874,6 @@ public void drawVertexPoints() { //gl.glColor3f(1.0f, 1.0f, 1.0f); drawTile(pointMode); - } public void drawFaceCenterPoints() { @@ -923,61 +900,60 @@ public void drawFaceCenterPoints() { } public void drawFaceSelected() { - if (faceSelected != null) { - GL2 gl = (GL2) GLContext.getCurrentGL(); - - gl.glEnable(GL_BLEND); - gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA); - - gl.glEnable(GL_DEPTH_TEST); - gl.glDepthFunc(GL_ALWAYS); - - gl.glColor3f(1.0f, 0.0f, 0.0f); + if (faceSelected == null) { + return; + } - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + GL2 gl = (GL2) GLContext.getCurrentGL(); - gl.glDisable(GL_TEXTURE_2D); + gl.glEnable(GL_BLEND); + gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA); - gl.glLineWidth(3.0f); + gl.glEnable(GL_DEPTH_TEST); + gl.glDepthFunc(GL_ALWAYS); - gl.glLoadIdentity(); - if (orthoEnabled) { - float v = 6.0f; - gl.glOrtho(-v, v, -v, v, -100.0f, 100.0f); - } else { - float aspect = (float) this.getWidth() / (float) this.getHeight(); - glu.gluPerspective(60.0f, aspect, 1.0f, 1000.0f); - } + gl.glColor3f(1.0f, 0.0f, 0.0f); + gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + gl.glDisable(GL_TEXTURE_2D); + gl.glLineWidth(3.0f); - gl.glTranslatef(-cameraX, -cameraY, -cameraZ); // translate into the screen + gl.glLoadIdentity(); + if (orthoEnabled) { + float v = 6.0f; + gl.glOrtho(-v, v, -v, v, -100.0f, 100.0f); + } else { + float aspect = (float) this.getWidth() / (float) this.getHeight(); + glu.gluPerspective(60.0f, aspect, 1.0f, 1000.0f); + } - gl.glRotatef(modelRotX, 1.0f, 0.0f, 0.0f); // rotate about the x-axis - gl.glRotatef(modelRotY, 0.0f, 1.0f, 0.0f); // rotate about the y-axis - gl.glRotatef(modelRotZ, 0.0f, 0.0f, 1.0f); // rotate about the z-axis + gl.glTranslatef(-cameraX, -cameraY, -cameraZ); // translate into the screen - Tile tile = handler.getTileset().get(handler.getTileIndexSelected()); + gl.glRotatef(modelRotX, 1.0f, 0.0f, 0.0f); // rotate about the x-axis + gl.glRotatef(modelRotY, 0.0f, 1.0f, 0.0f); // rotate about the y-axis + gl.glRotatef(modelRotZ, 0.0f, 0.0f, 1.0f); // rotate about the z-axis - int numVertices; - float[] vArray; - int mode; - if (faceSelected.isQuad) { - numVertices = 4; - vArray = tile.getVCoordsQuad(); - mode = GL_QUADS; - } else { - numVertices = 3; - vArray = tile.getVCoordsTri(); - mode = GL_TRIANGLES; - } + Tile tile = handler.getTileset().get(handler.getTileIndexSelected()); - gl.glBegin(mode); - for (int i = 0; i < numVertices; i++) { - gl.glVertex3fv(vArray, faceSelected.faceIndex * numVertices * 3 + i * 3); - } - gl.glEnd(); + int numVertices; + float[] vArray; + int mode; + if (faceSelected.isQuad) { + numVertices = 4; + vArray = tile.getVCoordsQuad(); + mode = GL_QUADS; + } else { + numVertices = 3; + vArray = tile.getVCoordsTri(); + mode = GL_TRIANGLES; + } - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + gl.glBegin(mode); + for (int i = 0; i < numVertices; i++) { + gl.glVertex3fv(vArray, faceSelected.faceIndex * numVertices * 3 + i * 3); } + gl.glEnd(); + + gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } public void swapVBOs(int i1, int i2) { @@ -1012,19 +988,17 @@ public void setBackfaceCulling(boolean enabled) { this.backfaceCullingEnabled = enabled; } - public ArrayList getVerticesOnScreen(float[] vertexArray) { - ArrayList points = new ArrayList<>(); + public List getVerticesOnScreen(float[] vertexArray) { + List points = new ArrayList<>(); - if (handler != null) { - if (handler.getTileset().size() > 0) { - Matrix3D transformationMatrix = getTransformationMatrix(); - float[] vCoords = applyTransformation(vertexArray, transformationMatrix, getWidth(), getHeight()); + if (handler != null && handler.getTileset().size() > 0) { + Matrix3D transformationMatrix = getTransformationMatrix(); + float[] vCoords = applyTransformation(vertexArray, transformationMatrix, getWidth(), getHeight()); - final int numPoints = vertexArray.length / 3; - points = new ArrayList<>(numPoints); - for (int i = 0; i < vCoords.length / 3; i++) { - points.add(new Point3D(vCoords[i * 3], vCoords[i * 3 + 1], vCoords[i * 3 + 2])); - } + final int numPoints = vertexArray.length / 3; + points = new ArrayList<>(numPoints); + for (int i = 0; i < vCoords.length / 3; i++) { + points.add(new Point3D(vCoords[i * 3], vCoords[i * 3 + 1], vCoords[i * 3 + 2])); } } return points; @@ -1061,45 +1035,43 @@ private Matrix3D getTransformationMatrix() { } private void paintVertexColors(int mouseX, int mouseY, float[] vertexArray, float[] colorArray) { - if (colorArray != null && vertexArray != null) { - if (colorArray.length == vertexArray.length) { - Color c = dialog.getSelectedColor(); - ArrayList points = getVerticesOnScreen(vertexArray); - - for (int i = 0; i < points.size(); i++) { - int x = (int) points.get(i).getX(); - int y = (int) points.get(i).getY(); - - int dist = (int) Math.sqrt((x - mouseX) * (x - mouseX) + (y - mouseY) * (y - mouseY)); - if (dist < brushRadius) { - colorArray[i * 3] = c.getRed() / 255f; - colorArray[i * 3 + 1] = c.getGreen() / 255f; - colorArray[i * 3 + 2] = c.getBlue() / 255f; - } - } + if (colorArray == null || vertexArray == null || colorArray.length != vertexArray.length) { + return; + } + Color c = dialog.getSelectedColor(); + List points = getVerticesOnScreen(vertexArray); + + for (int i = 0; i < points.size(); i++) { + int x = (int) points.get(i).getX(); + int y = (int) points.get(i).getY(); + + int dist = (int) Math.sqrt((x - mouseX) * (x - mouseX) + (y - mouseY) * (y - mouseY)); + if (dist < brushRadius) { + colorArray[i * 3] = c.getRed() / 255f; + colorArray[i * 3 + 1] = c.getGreen() / 255f; + colorArray[i * 3 + 2] = c.getBlue() / 255f; } } } private void paintVertexColorsInFace(int mouseX, int mouseY, float[] vertexArray, float[] colorArray, int faceIndex, int vertexPerFace) { - if (colorArray != null && vertexArray != null) { - if (colorArray.length == vertexArray.length) { - Color c = dialog.getSelectedColor(); - ArrayList points = getVerticesOnScreen(vertexArray); - - for (int i = 0; i < points.size(); i++) { - int x = (int) points.get(i).getX(); - int y = (int) points.get(i).getY(); - - int fIndex = i / vertexPerFace; - if (fIndex == faceIndex) { - int dist = (int) Math.sqrt((x - mouseX) * (x - mouseX) + (y - mouseY) * (y - mouseY)); - if (dist < brushRadius) { - colorArray[i * 3] = c.getRed() / 255f; - colorArray[i * 3 + 1] = c.getGreen() / 255f; - colorArray[i * 3 + 2] = c.getBlue() / 255f; - } - } + if (colorArray == null || vertexArray == null || colorArray.length != vertexArray.length) { + return; + } + Color c = dialog.getSelectedColor(); + List points = getVerticesOnScreen(vertexArray); + + for (int i = 0; i < points.size(); i++) { + int x = (int) points.get(i).getX(); + int y = (int) points.get(i).getY(); + + int fIndex = i / vertexPerFace; + if (fIndex == faceIndex) { + int dist = (int) Math.sqrt((x - mouseX) * (x - mouseX) + (y - mouseY) * (y - mouseY)); + if (dist < brushRadius) { + colorArray[i * 3] = c.getRed() / 255f; + colorArray[i * 3 + 1] = c.getGreen() / 255f; + colorArray[i * 3 + 2] = c.getBlue() / 255f; } } } @@ -1109,8 +1081,8 @@ private Color grabColor(int mouseX, int mouseY) { Color c = null; Tile tile = handler.getTileSelected(); - ArrayList fPointsQuads = getVerticesOnScreen(tile.getVCoordsQuad()); - ArrayList fPointsTris = getVerticesOnScreen(tile.getVCoordsTri()); + List fPointsQuads = getVerticesOnScreen(tile.getVCoordsQuad()); + List fPointsTris = getVerticesOnScreen(tile.getVCoordsTri()); int closerQuadIndex = getCloserVertexIndex(mouseX, mouseY, colorGrabRadius, fPointsQuads); int closerTriIndex = getCloserVertexIndex(mouseX, mouseY, colorGrabRadius, fPointsTris); if (closerQuadIndex != -1 && closerTriIndex != -1) { @@ -1130,12 +1102,10 @@ private Color grabColor(int mouseX, int mouseY) { } private Color getColorFromArray(float[] array, int vertexIndex) { - return new Color(array[vertexIndex * 3], - array[vertexIndex * 3 + 1], - array[vertexIndex * 3 + 2]); + return new Color(array[vertexIndex * 3], array[vertexIndex * 3 + 1], array[vertexIndex * 3 + 2]); } - private int getCloserVertexIndex(int mouseX, int mouseY, int radius, ArrayList pointsOnScreen) { + private int getCloserVertexIndex(int mouseX, int mouseY, int radius, List pointsOnScreen) { float minZ = 2.0f; int index = -1; @@ -1166,9 +1136,7 @@ private float[] calculateFaceCoords(float[] vCoords, int vPerFace) { coordsMean[k] += vCoords[c] / vPerFace; } } - for (int j = 0; j < coordsPerVertex; j++) { - fCoords[i * coordsPerVertex + j] = coordsMean[j]; - } + System.arraycopy(coordsMean, 0, fCoords, i * 3, coordsPerVertex); } return fCoords; } @@ -1208,5 +1176,4 @@ public boolean isQuad() { public void setBrushSize(int size) { this.brushRadius = size; } - } diff --git a/src/main/java/formats/animationeditor/Animation.java b/src/main/java/formats/animationeditor/Animation.java index 86204ee..b370af4 100644 --- a/src/main/java/formats/animationeditor/Animation.java +++ b/src/main/java/formats/animationeditor/Animation.java @@ -1,6 +1,8 @@ package formats.animationeditor; +import java.util.Arrays; + /** * @author Trifindo */ @@ -33,12 +35,9 @@ public Animation(String name) { } public int size() { - for (int i = 0; i < frames.length; i++) { - if (frames[i] == 255) { - return i; - } - } - return frames.length; + return Arrays.stream(frames) + .filter(f -> f == 255) + .findFirst().orElse(frames.length); } public int getFrame(int index) { @@ -78,19 +77,15 @@ public boolean addFrame(int frameIndex, int delay) { public boolean removeFrame(int frameIndex) { int size = size(); - if (size() > 1) { - if (frameIndex >= 0 && frameIndex < size) { - for (int i = frameIndex; i < size - 1; i++) { - frames[i] = frames[i + 1]; - delays[i] = delays[i + 1]; - } - frames[size - 1] = 255; - delays[size - 1] = 255; - return true; + if (size() > 1 && frameIndex >= 0 && frameIndex < size) { + for (int i = frameIndex; i < size - 1; i++) { + frames[i] = frames[i + 1]; + delays[i] = delays[i + 1]; } + frames[size - 1] = 255; + delays[size - 1] = 255; + return true; } return false; - } - } diff --git a/src/main/java/formats/animationeditor/AnimationEditorDialog.java b/src/main/java/formats/animationeditor/AnimationEditorDialog.java index eaf9dec..bf4be62 100644 --- a/src/main/java/formats/animationeditor/AnimationEditorDialog.java +++ b/src/main/java/formats/animationeditor/AnimationEditorDialog.java @@ -32,7 +32,7 @@ public class AnimationEditorDialog extends JDialog { private static final Color editingColor = new Color(255, 185, 185); private static final Color rightColor = new Color(200, 255, 200); - private Utils.MutableBoolean jtfAnimNameEnabled = new Utils.MutableBoolean(true); + private final Utils.MutableBoolean jtfAnimNameEnabled = new Utils.MutableBoolean(true); private boolean animationListEnabled = true; private boolean textureListEnabled = true; @@ -57,11 +57,9 @@ private void jbOpenNsbtxActionPerformed(ActionEvent e) { } private void jlTextureNamesValueChanged(ListSelectionEvent e) { - if (animHandler != null) { - if (animationListEnabled && !animHandler.isAnimationRunning()) { - animHandler.setCurrentDelay((Integer) jsDelay.getValue()); - repaintFrames(); - } + if (animHandler != null && animationListEnabled && !animHandler.isAnimationRunning()) { + animHandler.setCurrentDelay((Integer) jsDelay.getValue()); + repaintFrames(); } } @@ -74,11 +72,9 @@ private void jbRemoveFrameActionPerformed(ActionEvent e) { } private void jsDelayStateChanged(ChangeEvent e) { - if (animHandler != null) { - if (animationListEnabled && !animHandler.isAnimationRunning()) { - animHandler.setCurrentDelay((Integer) jsDelay.getValue()); - repaintFrames(); - } + if (animHandler != null && animationListEnabled && !animHandler.isAnimationRunning()) { + animHandler.setCurrentDelay((Integer) jsDelay.getValue()); + repaintFrames(); } } @@ -99,27 +95,19 @@ private void jbSaveAnimationFileActionPerformed(ActionEvent e) { } private void jbAddAnimationActionPerformed(ActionEvent e) { - if (animHandler != null) { - if (animationListEnabled && !animHandler.isAnimationRunning()) { - if (animHandler.getAnimationFile() != null) { - animHandler.addAnimation("New animation"); - updateViewAnimationListNames(jlAnimationNames.getModel().getSize()); - repaintFrames(); - } - } + if (animHandler != null && animationListEnabled && !animHandler.isAnimationRunning() && animHandler.getAnimationFile() != null) { + animHandler.addAnimation("New animation"); + updateViewAnimationListNames(jlAnimationNames.getModel().getSize()); + repaintFrames(); } } private void jbRemoveAnimationActionPerformed(ActionEvent e) { - if (animHandler != null) { - if (animationListEnabled && !animHandler.isAnimationRunning()) { - if (animHandler.getAnimationSelected() != null) { - int index = getAnimationSelectedIndex(); - animHandler.getAnimationFile().removeAnimation(getAnimationSelectedIndex()); - updateViewAnimationListNames(index); - repaintFrames(); - } - } + if (animHandler != null && animationListEnabled && !animHandler.isAnimationRunning() && animHandler.getAnimationSelected() != null) { + int index = getAnimationSelectedIndex(); + animHandler.getAnimationFile().removeAnimation(getAnimationSelectedIndex()); + updateViewAnimationListNames(index); + repaintFrames(); } } @@ -136,32 +124,30 @@ public void init(MapEditorHandler handler) { } public void updateView() { - if (animHandler.getAnimationFile() != null) { - if (animHandler.getAnimationSelected() != null) { - jtfAnimNameEnabled.value = false; - jtfAnimationName.setText(animHandler.getAnimationSelected().getName()); - jtfAnimationName.setBackground(UIManager.getColor("TextPane.background")); - jtfAnimationName.setForeground(UIManager.getColor("TextPane.foreground")); - jtfAnimNameEnabled.value = true; - } - - animationDisplay.repaint(); + if (animHandler.getAnimationFile() == null) { + return; + } + if (animHandler.getAnimationSelected() != null) { + jtfAnimNameEnabled.value = false; + jtfAnimationName.setText(animHandler.getAnimationSelected().getName()); + jtfAnimationName.setBackground(UIManager.getColor("TextPane.background")); + jtfAnimationName.setForeground(UIManager.getColor("TextPane.foreground")); + jtfAnimNameEnabled.value = true; + } - animationFramesDisplay.updateSize(); - animationFramesDisplay.repaint(); + animationDisplay.repaint(); - updateViewDelayDisplay(); - } + animationFramesDisplay.updateSize(); + animationFramesDisplay.repaint(); + updateViewDelayDisplay(); } public void repaintFrames() { animationDisplay.repaint(); - animationFramesDisplay.repaint(); updateViewTexturesNsbxt(); - updateViewDelayDisplay(); } @@ -174,57 +160,60 @@ public void updateViewDelayDisplay() { } public void updateViewAnimationListNames(int indexSelected) { - if (animHandler.getAnimationFile() != null) { - animationListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); - for (int i = 0; i < animHandler.getAnimationFile().size(); i++) { - String name = animHandler.getAnimationFile().getAnimation(i).getName(); - demoList.addElement(name); - } - jlAnimationNames.setModel(demoList); - if (indexSelected > demoList.size() - 1) { - indexSelected = demoList.size() - 1; - } else if (indexSelected < 0) { - indexSelected = 0; - } - jlAnimationNames.setSelectedIndex(indexSelected); - jlAnimationNames.ensureIndexIsVisible(indexSelected); - animationListEnabled = true; + if (animHandler.getAnimationFile() == null) { + return; } + animationListEnabled = false; + DefaultListModel demoList = new DefaultListModel<>(); + for (int i = 0; i < animHandler.getAnimationFile().size(); i++) { + String name = animHandler.getAnimationFile().getAnimation(i).getName(); + demoList.addElement(name); + } + jlAnimationNames.setModel(demoList); + if (indexSelected > demoList.size() - 1) { + indexSelected = demoList.size() - 1; + } else if (indexSelected < 0) { + indexSelected = 0; + } + jlAnimationNames.setSelectedIndex(indexSelected); + jlAnimationNames.ensureIndexIsVisible(indexSelected); + animationListEnabled = true; } public void updateViewTextureNames(int indexSelected) { - if (animHandler.getNsbtx() != null) { - textureListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); - for (int i = 0; i < animHandler.getNsbtx().getTextures().size(); i++) { - String name = animHandler.getNsbtx().getTexture(i).getName(); - demoList.addElement(name); - } - jlTextureNames.setModel(demoList); - if (indexSelected > demoList.size() - 1) { - indexSelected = demoList.size() - 1; - } else if (indexSelected < 0) { - indexSelected = 0; - } - jlTextureNames.setSelectedIndex(indexSelected); - textureListEnabled = true; + if (animHandler.getNsbtx() == null) { + return; + } + textureListEnabled = false; + DefaultListModel demoList = new DefaultListModel<>(); + for (int i = 0; i < animHandler.getNsbtx().getTextures().size(); i++) { + String name = animHandler.getNsbtx().getTexture(i).getName(); + demoList.addElement(name); + } + jlTextureNames.setModel(demoList); + if (indexSelected > demoList.size() - 1) { + indexSelected = demoList.size() - 1; + } else if (indexSelected < 0) { + indexSelected = 0; } + jlTextureNames.setSelectedIndex(indexSelected); + textureListEnabled = true; } private void togglePlay() { - if (animHandler.getAnimationFile() != null) { - if (animHandler.isAnimationRunning()) { - animHandler.pauseAnimation(); - jbPlay.setText(playButtonIcon); - jbPlay.setForeground(playButtonColor); - setComponentsEnabled(true); - } else { - animHandler.playAnimation(); - jbPlay.setText(stopButtonIcon); - jbPlay.setForeground(stopButtonColor); - setComponentsEnabled(false); - } + if (animHandler.getAnimationFile() == null) { + return; + } + if (animHandler.isAnimationRunning()) { + animHandler.pauseAnimation(); + jbPlay.setText(playButtonIcon); + jbPlay.setForeground(playButtonColor); + setComponentsEnabled(true); + } else { + animHandler.playAnimation(); + jbPlay.setText(stopButtonIcon); + jbPlay.setForeground(stopButtonColor); + setComponentsEnabled(false); } } @@ -258,7 +247,6 @@ public void changeAnimationName() { "The name is too long", JOptionPane.ERROR_MESSAGE); } - } public void openAnimationFileWithDialog() { @@ -310,52 +298,46 @@ public void openNsbtxWithDialog() { } private void saveAnimationFileWithDialog() { - if (animHandler.getAnimationFile() != null) { - final JFileChooser fc = new JFileChooser(); - if (handler.getLastNsbtxDirectoryUsed() != null) { - fc.setCurrentDirectory(new File(handler.getLastNsbtxDirectoryUsed())); - } - fc.setApproveButtonText("Save"); - fc.setDialogTitle("Save Animation File"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - handler.setLastNsbtxDirectoryUsed(fc.getSelectedFile().getParent()); - try { - String path = fc.getSelectedFile().getPath(); - - animHandler.saveAnimationFile(path); - - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "There was an error saving the IMD", - "Error saving IMD", JOptionPane.ERROR_MESSAGE); - } - } + if (animHandler.getAnimationFile() == null) { + return; + } + final JFileChooser fc = new JFileChooser(); + if (handler.getLastNsbtxDirectoryUsed() != null) { + fc.setCurrentDirectory(new File(handler.getLastNsbtxDirectoryUsed())); + } + fc.setApproveButtonText("Save"); + fc.setDialogTitle("Save Animation File"); + int returnVal = fc.showOpenDialog(this); + if (returnVal != JFileChooser.APPROVE_OPTION) { + return; + } + handler.setLastNsbtxDirectoryUsed(fc.getSelectedFile().getParent()); + try { + String path = fc.getSelectedFile().getPath(); + animHandler.saveAnimationFile(path); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "There was an error saving the IMD", + "Error saving IMD", JOptionPane.ERROR_MESSAGE); } } public void addFrame() { - if (animHandler != null) { - if (animHandler.getAnimationSelected() != null) { - animHandler.getAnimationSelected().addFrame( - jlTextureNames.getSelectedIndex(), - (Integer) jsDelay.getValue()); - repaintFrames(); - } + if (animHandler != null && animHandler.getAnimationSelected() != null) { + animHandler.getAnimationSelected().addFrame(jlTextureNames.getSelectedIndex(), (Integer) jsDelay.getValue()); + repaintFrames(); } } public void removeFrame() { - if (animHandler != null) { - if (animHandler.getAnimationSelected() != null) { - if (animHandler.getAnimationSelected().removeFrame(animHandler.getCurrentFrameIndex())) { - int index = animHandler.getCurrentFrameIndex() - 1; - if (index < 0) { - index = 0; - } - animHandler.setCurrentFrameIndex(index); + if (animHandler != null && animHandler.getAnimationSelected() != null) { + if (animHandler.getAnimationSelected().removeFrame(animHandler.getCurrentFrameIndex())) { + int index = animHandler.getCurrentFrameIndex() - 1; + if (index < 0) { + index = 0; } - repaintFrames(); + animHandler.setCurrentFrameIndex(index); } + repaintFrames(); } } diff --git a/src/main/java/formats/animationeditor/AnimationFile.java b/src/main/java/formats/animationeditor/AnimationFile.java index 0b11f9d..c71e551 100644 --- a/src/main/java/formats/animationeditor/AnimationFile.java +++ b/src/main/java/formats/animationeditor/AnimationFile.java @@ -1,9 +1,9 @@ package formats.animationeditor; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; +import java.util.List; import utils.BinaryReader; import utils.BinaryWriter; @@ -14,16 +14,15 @@ */ public class AnimationFile { - private ArrayList animations = new ArrayList<>(); + private List animations = new ArrayList<>(); - public AnimationFile(String path) throws FileNotFoundException, IOException, - NullPointerException { + public AnimationFile(String path) throws IOException, NullPointerException { BinaryReader br = new BinaryReader(path); int numAnimations = (int) br.readUInt32(); animations = new ArrayList<>(numAnimations); for (int i = 0; i < numAnimations; i++) { - String name = Utils.removeLastOcurrences(br.readString(16), '\u0000'); + String name = Utils.removeLastOccurrences(br.readString(16), '\u0000'); int[] frames = new int[Animation.maxNumFrames]; int[] delays = new int[Animation.maxNumFrames]; for (int j = 0; j < Animation.maxNumFrames; j++) { @@ -36,14 +35,13 @@ public AnimationFile(String path) throws FileNotFoundException, IOException, br.close(); } - public void saveAnimationFile(String path) throws FileNotFoundException, IOException { + public void saveAnimationFile(String path) throws IOException { BinaryWriter bw = new BinaryWriter(path); int numAnimations = animations.size(); bw.writeUInt32(numAnimations); - for (int i = 0; i < animations.size(); i++) { - Animation animation = animations.get(i); + for (Animation animation : animations) { bw.writeString(animation.getName(), Animation.maxNameSize, (byte) 0); for (int j = 0; j < Animation.maxNumFrames; j++) { bw.writeUInt8(animation.getFrame(j)); @@ -54,13 +52,10 @@ public void saveAnimationFile(String path) throws FileNotFoundException, IOExcep } public Animation getAnimation(int index) { - if (animations != null) { - if (index >= 0 && index < animations.size()) { - return animations.get(index); - } + if (animations != null && index >= 0 && index < animations.size()) { + return animations.get(index); } return null; - } public void addAnimation(String name) { @@ -72,11 +67,6 @@ public void removeAnimation(int index) { } public int size() { - if (animations != null) { - return animations.size(); - } else { - return 0; - } + return animations != null ? animations.size() : 0; } - } diff --git a/src/main/java/formats/animationeditor/AnimationFramesDisplay.java b/src/main/java/formats/animationeditor/AnimationFramesDisplay.java index 1de9ec3..7c49517 100644 --- a/src/main/java/formats/animationeditor/AnimationFramesDisplay.java +++ b/src/main/java/formats/animationeditor/AnimationFramesDisplay.java @@ -32,15 +32,11 @@ public AnimationFramesDisplay() { } private void formMousePressed(MouseEvent evt) { - if (animHandler != null) { - if (animHandler.getAnimationFile() != null) { - if (!animHandler.isAnimationRunning()) { - int index = evt.getX() / cellSize; - if (index >= 0 && index < animHandler.getAnimationSelected().size()) { - animHandler.setCurrentFrameIndex(index); - animHandler.repaintDialog(); - } - } + if (animHandler != null && animHandler.getAnimationFile() != null && !animHandler.isAnimationRunning()) { + int index = evt.getX() / cellSize; + if (index >= 0 && index < animHandler.getAnimationSelected().size()) { + animHandler.setCurrentFrameIndex(index); + animHandler.repaintDialog(); } } } @@ -49,23 +45,21 @@ private void formMousePressed(MouseEvent evt) { public void paintComponent(Graphics g) { super.paintComponent(g); - if (animHandler != null) { - if (animHandler.getAnimationSelected() != null) { - Animation anim = animHandler.getAnimationSelected(); - - for (int i = 0, size = anim.size(); i < size; i++) { - drawCell(g, animHandler.getFrameImage(i), anim.getDelay(i), animHandler.getTextureName(i), i); - } + if (animHandler == null || animHandler.getAnimationSelected() == null) { + return; + } + Animation anim = animHandler.getAnimationSelected(); - int index = animHandler.getCurrentFrameIndex(); - Graphics2D g2 = (Graphics2D) g; - g2.setStroke(new BasicStroke(2)); - g.setColor(highlihgtColor); - g.drawRect(index * cellSize + 1, 1, cellSize - 1, cellSize + labelSize * 2 - 2); - g2.setStroke(new BasicStroke(1)); - } + for (int i = 0, size = anim.size(); i < size; i++) { + drawCell(g, animHandler.getFrameImage(i), anim.getDelay(i), animHandler.getTextureName(i), i); } + int index = animHandler.getCurrentFrameIndex(); + Graphics2D g2 = (Graphics2D) g; + g2.setStroke(new BasicStroke(2)); + g.setColor(highlihgtColor); + g.drawRect(index * cellSize + 1, 1, cellSize - 1, cellSize + labelSize * 2 - 2); + g2.setStroke(new BasicStroke(1)); } public void init(AnimationHandler animHandler) { @@ -73,12 +67,9 @@ public void init(AnimationHandler animHandler) { } public void updateSize() { - if (animHandler != null) { - if (animHandler.getAnimationSelected() != null) { - this.setPreferredSize( - new Dimension(cellSize * animHandler.getAnimationSelected().size(), cellSize + labelSize * 2)); - this.revalidate(); - } + if (animHandler != null && animHandler.getAnimationSelected() != null) { + this.setPreferredSize(new Dimension(cellSize * animHandler.getAnimationSelected().size(), cellSize + labelSize * 2)); + this.revalidate(); } } @@ -98,8 +89,7 @@ public void drawCell(Graphics g, BufferedImage img, int delay, String frameName, drawTextBox(g, cellIndex * cellSize, 0, String.valueOf(cellIndex)); - drawLabel(g, cellIndex * cellSize, cellSize, "Delay: " + String.valueOf(delay)); - + drawLabel(g, cellIndex * cellSize, cellSize, "Delay: " + delay); drawLabel(g, cellIndex * cellSize, cellSize + labelSize, frameName); } @@ -107,8 +97,7 @@ public void drawLabel(Graphics g, int x, int y, String text) { int margin = 6; Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setColor(Color.white); g.fillRect(x, y, cellSize, labelSize - 1); @@ -118,7 +107,6 @@ public void drawLabel(Graphics g, int x, int y, String text) { g.setColor(cellBorderColor); g.drawRect(x, y, cellSize, labelSize - 1); - } public void drawTextBox(Graphics g, int x, int y, String text) { @@ -127,8 +115,7 @@ public void drawTextBox(Graphics g, int x, int y, String text) { int margin = 6; Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setColor(Color.white); g.fillRect(x, y, width + margin, height + margin / 2); @@ -140,7 +127,6 @@ public void drawTextBox(Graphics g, int x, int y, String text) { g.drawRect(x, y, width + margin, height + margin / 2); } - private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents diff --git a/src/main/java/formats/animationeditor/AnimationHandler.java b/src/main/java/formats/animationeditor/AnimationHandler.java index 4350ae3..6d119d0 100644 --- a/src/main/java/formats/animationeditor/AnimationHandler.java +++ b/src/main/java/formats/animationeditor/AnimationHandler.java @@ -7,6 +7,7 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.util.ArrayList; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -19,7 +20,7 @@ public class AnimationHandler { private AnimationFile animationFile; private AnimationEditorDialog dialog; - private ArrayList nsbtxImages; + private List nsbtxImages; private int currentFrameIndex = 0; private AnimationThread animationThread; @@ -41,12 +42,10 @@ public void readNsbtx(String path) throws IOException { } public void readNsbtxImages() { - if (nsbtx != null) { - if (nsbtx.hasTextures() && nsbtx.hasPalettes()) { - nsbtxImages = new ArrayList<>(nsbtx.getTextures().size()); - for (int i = 0; i < nsbtx.getTextures().size(); i++) { - nsbtxImages.add(nsbtx.getImage(i, 0)); - } + if (nsbtx != null && nsbtx.hasTextures() && nsbtx.hasPalettes()) { + nsbtxImages = new ArrayList<>(nsbtx.getTextures().size()); + for (int i = 0; i < nsbtx.getTextures().size(); i++) { + nsbtxImages.add(nsbtx.getImage(i, 0)); } } } @@ -62,12 +61,10 @@ public void setCurrentFrameIndex(int index) { public String getTextureName(int index) { if (nsbtx != null && animationFile != null) { Animation anim = getAnimationSelected(); - if (anim != null) { - if (index >= 0 && index < anim.size()) { - int frameIndex = anim.getFrame(index); - if (frameIndex >= 0 && frameIndex < nsbtx.getTextures().size()) { - return nsbtx.getTexture(frameIndex).getName(); - } + if (anim != null && index >= 0 && index < anim.size()) { + int frameIndex = anim.getFrame(index); + if (frameIndex >= 0 && frameIndex < nsbtx.getTextures().size()) { + return nsbtx.getTexture(frameIndex).getName(); } } } @@ -76,12 +73,10 @@ public String getTextureName(int index) { public void incrementFrameIndex() { currentFrameIndex++; - if (animationFile != null) { - if (getAnimationSelected() != null) { - Animation anim = getAnimationSelected(); - if (currentFrameIndex >= anim.size()) { - currentFrameIndex = 0; - } + if (animationFile != null && getAnimationSelected() != null) { + Animation anim = getAnimationSelected(); + if (currentFrameIndex >= anim.size()) { + currentFrameIndex = 0; } } } @@ -204,5 +199,4 @@ public boolean isAnimationRunning() { return false; } } - } diff --git a/src/main/java/formats/animationeditor/AnimationThread.java b/src/main/java/formats/animationeditor/AnimationThread.java index bcb9bff..3c3c40b 100644 --- a/src/main/java/formats/animationeditor/AnimationThread.java +++ b/src/main/java/formats/animationeditor/AnimationThread.java @@ -34,5 +34,4 @@ public void terminate() { public boolean isRunnning() { return running; } - } diff --git a/src/main/java/formats/backsound/Backsound.java b/src/main/java/formats/backsound/Backsound.java index 6d2e582..610f41f 100644 --- a/src/main/java/formats/backsound/Backsound.java +++ b/src/main/java/formats/backsound/Backsound.java @@ -3,7 +3,6 @@ import utils.exceptions.WrongFormatException; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; @@ -26,7 +25,7 @@ public Backsound() { //soundplates.add(new Soundplate()); } - public Backsound(String path) throws FileNotFoundException, IOException, WrongFormatException { + public Backsound(String path) throws IOException, WrongFormatException { BinaryReader reader = new BinaryReader(path); if (reader.readUInt16() != SIGNATURE) { @@ -53,14 +52,13 @@ public Backsound(String path) throws FileNotFoundException, IOException, WrongFo reader.close(); } - public void writeToFile(String path) throws FileNotFoundException, IOException { + public void writeToFile(String path) throws IOException { BinaryWriter writer = new BinaryWriter(path); writer.writeUInt16(SIGNATURE); writer.writeUInt16(soundplates.size() * BYTES_PER_SOUNDPLATE); - for (int i = 0; i < soundplates.size(); i++) { - Soundplate soundplate = soundplates.get(i); + for (Soundplate soundplate : soundplates) { writer.writeUInt8(soundplate.getSoundCode()); writer.writeUInt8(soundplate.getVolume()); writer.writeUInt8(soundplate.byte3);//Unknown @@ -81,5 +79,4 @@ public ArrayList getSoundplates() { public Soundplate getSoundplate(int index) { return soundplates.get(index); } - } diff --git a/src/main/java/formats/backsound/BacksoundDisplay.java b/src/main/java/formats/backsound/BacksoundDisplay.java index 7ca875b..d65eaf9 100644 --- a/src/main/java/formats/backsound/BacksoundDisplay.java +++ b/src/main/java/formats/backsound/BacksoundDisplay.java @@ -70,7 +70,7 @@ public BacksoundDisplay() { private void formMouseDragged(MouseEvent e) { if (backsoundHandler.getSoundplates().size() > 0) { - if (dragging && isCursorInsiePanel(e)) { + if (dragging && isCursorInsidePanel(e)) { Soundplate p = backsoundHandler.getSelectedSoundplate(); int deltaX = (e.getX() - lastX) / TILE_SIZE; int deltaY = (e.getY() - lastY) / TILE_SIZE; @@ -120,9 +120,8 @@ private void formMouseMoved(MouseEvent e) { for (int i = 0; i < backsoundHandler.getBacksound().getSoundplates().size(); i++) { Soundplate p = backsoundHandler.getBacksound().getSoundplate(i); if (isHoveringPlate(p, x, y)) { - partHovering = getPartSelected(p, x, y); indexPlateHovering = i; - setCursor(new Cursor(partHovering)); + setCursor(new Cursor(getPartSelected(p, x, y))); return; } } @@ -292,39 +291,29 @@ public int getPartSelected(Soundplate p, int x, int y) { return CENTER; } - public boolean isCursorInsiePanel(MouseEvent evt) { + public boolean isCursorInsidePanel(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); - if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) { - return false; - } - return true; + return x >= 0 && x < WIDTH && y >= 0 && y < HEIGHT; } public boolean isHoveringPlate(Soundplate p, int x, int y) { - return new Rectangle( - p.x * TILE_SIZE + xOffset, - p.y * TILE_SIZE + yOffset, - p.width * TILE_SIZE, - p.height * TILE_SIZE + return new Rectangle(p.x * TILE_SIZE + xOffset, p.y * TILE_SIZE + yOffset, p.width * TILE_SIZE, p.height * TILE_SIZE ).contains(x, y); } private void drawPlateBorder(Graphics g, Soundplate p) { - g.drawRect(p.x * TILE_SIZE, p.y * TILE_SIZE, - p.width * TILE_SIZE - 1, p.height * TILE_SIZE - 1); + g.drawRect(p.x * TILE_SIZE, p.y * TILE_SIZE, p.width * TILE_SIZE - 1, p.height * TILE_SIZE - 1); } private void fillPlate(Graphics g, Soundplate p) { - g.fillRect(p.x * TILE_SIZE, p.y * TILE_SIZE, - p.width * TILE_SIZE, p.height * TILE_SIZE); + g.fillRect(p.x * TILE_SIZE, p.y * TILE_SIZE, p.width * TILE_SIZE, p.height * TILE_SIZE); } private void drawPlateIndex(Graphics g, Soundplate p, int index) { g.setColor(Color.white); - g.drawString( - String.valueOf(index), p.x * TILE_SIZE + 4, p.y * TILE_SIZE + 12); + g.drawString(String.valueOf(index), p.x * TILE_SIZE + 4, p.y * TILE_SIZE + 12); } private void drawGrid(Graphics g) { diff --git a/src/main/java/formats/backsound/BacksoundEditorDialog.java b/src/main/java/formats/backsound/BacksoundEditorDialog.java index f3b9f42..ac75d00 100644 --- a/src/main/java/formats/backsound/BacksoundEditorDialog.java +++ b/src/main/java/formats/backsound/BacksoundEditorDialog.java @@ -174,7 +174,7 @@ private void updateViewVolume() { private void updateViewPlateNames() { plateListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < backsoundHandler.getSoundplates().size(); i++) { String name = "Soundplate " + i; demoList.addElement(name); @@ -207,7 +207,6 @@ public void openBacksoundWithDialog() { } catch (IOException | WrongFormatException ex) { JOptionPane.showMessageDialog(this, "Can't open file", "Error opening Backsound file", JOptionPane.ERROR_MESSAGE); } - } } @@ -230,7 +229,6 @@ public void saveBacksoundWithDialog() { } catch (IOException ex) { JOptionPane.showMessageDialog(this, "Can't save file", "Error saving Backsound file", JOptionPane.ERROR_MESSAGE); } - } } diff --git a/src/main/java/formats/backsound/Soundplate.java b/src/main/java/formats/backsound/Soundplate.java index fa8ba75..65c1447 100644 --- a/src/main/java/formats/backsound/Soundplate.java +++ b/src/main/java/formats/backsound/Soundplate.java @@ -87,6 +87,4 @@ public void setWidth(int width) { public void setHeight(int height) { this.height = height; } - - } diff --git a/src/main/java/formats/bdhc/AngleDisplay.java b/src/main/java/formats/bdhc/AngleDisplay.java index ed23c3f..59cdafb 100644 --- a/src/main/java/formats/bdhc/AngleDisplay.java +++ b/src/main/java/formats/bdhc/AngleDisplay.java @@ -1,7 +1,6 @@ package formats.bdhc; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.*; /** @@ -41,40 +40,31 @@ public void paintComponent(Graphics g) { g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g.setColor(Color.magenta); + g.setColor(Color.MAGENTA); final int angleRadius = (radius * 2) / 3; final int angleOffset = size / 2 - angleRadius; g2.setStroke(new BasicStroke(2)); g.drawArc(angleOffset, angleOffset, 2 * angleRadius, 2 * angleRadius, 0, (int) (-(angle * 180) / Math.PI)); g2.setStroke(new BasicStroke(2)); - if (frontView) { - g.setColor(Color.red); - g.drawLine(size / 2, size / 2, size, size / 2); - g.setColor(Color.blue); - g.drawLine(size / 2, size / 2, size / 2, 0); - } else { - g.setColor(Color.green); - //g.drawLine(size / 2, size / 2, size, size / 2); - g.drawLine(size / 2, size / 2, size, size / 2); - g.setColor(Color.blue); - g.drawLine(size / 2, size / 2, size / 2, 0); - } + //g.drawLine(size / 2, size / 2, size, size / 2); + g.setColor(frontView ? Color.RED : Color.GREEN); + g.drawLine(size / 2, size / 2, size, size / 2); + g.setColor(Color.BLUE); + g.drawLine(size / 2, size / 2, size / 2, 0); int circleOffset = size / 2 - radius; - g.setColor(Color.black); + g.setColor(Color.BLACK); g2.setStroke(new BasicStroke(1)); g.drawOval(circleOffset, circleOffset, radius * 2, radius * 2); int x = (int) (Math.cos(angle) * radius); int y = (int) (Math.sin(angle) * radius); int lineOffset = size / 2; - g.setColor(Color.orange); + g.setColor(Color.ORANGE); g2.setStroke(new BasicStroke(3)); g.drawLine(lineOffset - x, lineOffset - y, lineOffset + x, lineOffset + y); - } - } private void initComponents() { diff --git a/src/main/java/formats/bdhc/AngleDisplay3D.java b/src/main/java/formats/bdhc/AngleDisplay3D.java index e9fb4a8..f280b61 100644 --- a/src/main/java/formats/bdhc/AngleDisplay3D.java +++ b/src/main/java/formats/bdhc/AngleDisplay3D.java @@ -1,7 +1,6 @@ package formats.bdhc; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.*; /** @@ -18,7 +17,6 @@ public class AngleDisplay3D extends JPanel { -1.0f, 1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f - }; private final float[] cameraPos = {0.0f, -1.0f, 0.0f}; @@ -40,8 +38,7 @@ public void paintComponent(Graphics g) { float angle2 = (float) Math.atan2(slopes[2], slopes[1]); Graphics2D g2 = (Graphics2D) g; - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); float[] plane = new float[planeCoords.length]; System.arraycopy(planeCoords, 0, plane, 0, planeCoords.length); @@ -73,7 +70,7 @@ public void paintComponent(Graphics g) { } int lineOffset = size / 2; - g.setColor(Color.blue); + g.setColor(Color.BLUE); for (int i = 0; i < points.length; i++) { int x1 = points[i].x; int y1 = points[i].y; @@ -82,7 +79,6 @@ public void paintComponent(Graphics g) { g.drawLine(lineOffset + x1, lineOffset + y1, lineOffset + x2, lineOffset + y2); } - /* int x = (int) (Math.cos(angle) * radius); int y = (int) (Math.sin(angle) * radius); @@ -91,11 +87,9 @@ public void paintComponent(Graphics g) { g.drawLine(lineOffset - x, lineOffset - y, lineOffset + x, lineOffset + y);*/ int circleOffset = size / 2 - radius; - g.setColor(Color.black); + g.setColor(Color.BLACK); g.drawOval(circleOffset, circleOffset, radius * 2, radius * 2); - } - } public void init(BdhcHandler bdhcHandler) { diff --git a/src/main/java/formats/bdhc/AngleSelectorDisplay.java b/src/main/java/formats/bdhc/AngleSelectorDisplay.java index 3d0b4ff..6b6f633 100644 --- a/src/main/java/formats/bdhc/AngleSelectorDisplay.java +++ b/src/main/java/formats/bdhc/AngleSelectorDisplay.java @@ -1,7 +1,6 @@ package formats.bdhc; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.*; /** diff --git a/src/main/java/formats/bdhc/Bdhc.java b/src/main/java/formats/bdhc/Bdhc.java index b1b6d28..bdb4778 100644 --- a/src/main/java/formats/bdhc/Bdhc.java +++ b/src/main/java/formats/bdhc/Bdhc.java @@ -2,6 +2,7 @@ package formats.bdhc; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -15,19 +16,18 @@ public class Bdhc { public static final int sizePlateDP = 12; public static final int sizeStripeDP = 10; - private ArrayList plates = new ArrayList<>(); + private List plates = new ArrayList<>(); - public Bdhc(ArrayList plates) { + public Bdhc(List plates) { this.plates = plates; } public Bdhc() { plates.add(new Plate()); plates.add(new Plate()); - } - public ArrayList getPlates() { + public List getPlates() { return plates; } @@ -38,6 +38,4 @@ public Plate getPlate(int index) { public void addPlate() { plates.add(new Plate()); } - - } diff --git a/src/main/java/formats/bdhc/BdhcDisplay.java b/src/main/java/formats/bdhc/BdhcDisplay.java index d430e0e..6df90d0 100644 --- a/src/main/java/formats/bdhc/BdhcDisplay.java +++ b/src/main/java/formats/bdhc/BdhcDisplay.java @@ -6,7 +6,6 @@ import java.awt.event.*; import java.awt.image.BufferedImage; import javax.swing.*; -import javax.swing.GroupLayout; /** * @author Trifindo, JackHack96 @@ -50,7 +49,7 @@ public BdhcDisplay() { private void formMouseDragged(MouseEvent evt) { int x = getFixedMouseX(evt); int y = getFixedMouseY(evt); - if (dragging && isCursorInsiePanel(evt)) { + if (dragging && isCursorInsidePanel(evt)) { Plate p = bdhcHandler.getSelectedPlate(); int deltaX = (x - lastX) / tileSize; int deltaY = (y - lastY) / tileSize; @@ -99,9 +98,8 @@ private void formMouseMoved(MouseEvent evt) { for (int i = 0; i < bdhcHandler.getBdhc().getPlates().size(); i++) { Plate p = bdhcHandler.getBdhc().getPlate(i); if (isHoveringPlate(p, x, y)) { - partHovering = getPartSelected(p, x, y); indexPlateHovering = i; - setCursor(new Cursor(partHovering)); + setCursor(new Cursor(getPartSelected(p, x, y))); return; } } @@ -170,11 +168,11 @@ public void paintComponent(Graphics g) { drawGrid(g); g2d.setStroke(new BasicStroke(4)); - g.setColor(Color.red); + g.setColor(Color.RED); g.drawLine(width / 2, height / 2, width, height / 2); - g.setColor(Color.green); + g.setColor(Color.GREEN); g.drawLine(width / 2, height / 2, width / 2, height); - g.setColor(Color.blue); + g.setColor(Color.BLUE); g.drawLine(width / 2, height / 2, width / 2, width / 2); g.translate(width / 2, height / 2); @@ -289,36 +287,28 @@ public int getPartSelected(Plate p, int x, int y) { return CENTER; } - public boolean isCursorInsiePanel(MouseEvent evt) { + public boolean isCursorInsidePanel(MouseEvent evt) { int x = getFixedMouseX(evt); int y = getFixedMouseY(evt); return x >= 0 && x < width && y >= 0 && y < height; } public boolean isHoveringPlate(Plate p, int x, int y) { - return new Rectangle( - p.x * tileSize + width / 2, - p.y * tileSize + height / 2, - p.width * tileSize, - p.height * tileSize - ).contains(x, y); + return new Rectangle(p.x * tileSize + width / 2, p.y * tileSize + height / 2, p.width * tileSize, p.height * tileSize).contains(x, y); } private void drawPlateBorder(Graphics g, Plate p) { - g.drawRect(p.x * tileSize, p.y * tileSize, - p.width * tileSize - 1, p.height * tileSize - 1); + g.drawRect(p.x * tileSize, p.y * tileSize, p.width * tileSize - 1, p.height * tileSize - 1); } private void fillPlate(Graphics g, Plate p) { - g.fillRect(p.x * tileSize, p.y * tileSize, - p.width * tileSize, p.height * tileSize); + g.fillRect(p.x * tileSize, p.y * tileSize, p.width * tileSize, p.height * tileSize); } private void drawPlateIndex(Graphics g, Plate p, int index) { g.setColor(Color.white); - g.drawString( - String.valueOf(index), p.x * tileSize + 4, p.y * tileSize + 12); + g.drawString(String.valueOf(index), p.x * tileSize + 4, p.y * tileSize + 12); } private void drawGrid(Graphics g) { diff --git a/src/main/java/formats/bdhc/BdhcDisplay3D.java b/src/main/java/formats/bdhc/BdhcDisplay3D.java index bee54ec..195da8d 100644 --- a/src/main/java/formats/bdhc/BdhcDisplay3D.java +++ b/src/main/java/formats/bdhc/BdhcDisplay3D.java @@ -17,11 +17,10 @@ import java.awt.*; import java.awt.event.*; import java.nio.FloatBuffer; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import static com.jogamp.opengl.GL.*; -import static com.jogamp.opengl.GL.GL_GREATER; import static com.jogamp.opengl.GL2ES1.GL_ALPHA_TEST; import static com.jogamp.opengl.GL2ES3.GL_QUADS; import static com.jogamp.opengl.GL2GL3.GL_FILL; @@ -85,7 +84,6 @@ public BdhcDisplay3D() { setFocusable(true); } - @Override public void init(GLAutoDrawable drawable) { glu = new GLU(); @@ -99,7 +97,6 @@ public void init(GLAutoDrawable drawable) { cameraRotY = defaultCamRotY; cameraRotZ = defaultCamRotZ; - drawable.getGL().getGL2().glClearColor(0.0f, 0.5f, 0.5f, 1.0f); handler.getTileset().loadTexturesGL(); @@ -118,7 +115,6 @@ public void display(GLAutoDrawable drawable) { gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (updateRequested) { - //Load Textures into OpenGL handler.getTileset().loadTexturesGL(); handler.getBorderMapsTileset().loadTexturesGL(); @@ -139,7 +135,6 @@ public void display(GLAutoDrawable drawable) { } } - if(bdhcHandler != null) { if(transparentEnabled){ drawTransparent(gl); @@ -201,7 +196,6 @@ public void mouseExited(MouseEvent e) { @Override public void mouseDragged(MouseEvent e) { - if (SwingUtilities.isLeftMouseButton(e)) { float dist = cameraZ; float deltaX = (((float) ((e.getX() - lastMouseX))) / getWidth()) * dist; @@ -218,12 +212,11 @@ public void mouseDragged(MouseEvent e) { lastMouseY = e.getY(); repaint(); - } else if (SwingUtilities.isRightMouseButton(e) - | SwingUtilities.isMiddleMouseButton(e)) { + } else if (SwingUtilities.isRightMouseButton(e) | SwingUtilities.isMiddleMouseButton(e)) { float delta = 100.0f; - cameraRotZ -= (((float) ((e.getX() - lastMouseX))) / getWidth()) * delta; + cameraRotZ -= ((e.getX() - lastMouseX) / getWidth()) * delta; lastMouseX = e.getX(); - cameraRotX -= (((float) ((e.getY() - lastMouseY))) / getHeight()) * delta; + cameraRotX -= ((e.getY() - lastMouseY) / getHeight()) * delta; lastMouseY = e.getY(); repaint(); } @@ -254,19 +247,13 @@ protected void applyCameraTransform(GL2 gl) { glu.gluPerspective(60.0f, aspect, 1.0f + (cameraZ - 40.0f) / 4, 1000.0f + (cameraZ - 40.0f)); } - glu.gluLookAt( - 0.0f, 0.0f, cameraZ, - 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f); + glu.gluLookAt(0.0f, 0.0f, cameraZ, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); gl.glRotatef(-cameraRotX, 1.0f, 0.0f, 0.0f); gl.glRotatef(-cameraRotY, 0.0f, 1.0f, 0.0f); gl.glRotatef(-cameraRotZ, 0.0f, 0.0f, 1.0f); gl.glTranslatef(-cameraX, -cameraY, 0.0f); - - - } public void setHandler(MapEditorHandler handler, BdhcHandler bdhcHandler) { @@ -334,10 +321,8 @@ public void drawTransparent(GL2 gl){ gl.glEnable(GL_DEPTH_TEST); if(xRayEnabled){ gl.glClear(GL_DEPTH_BUFFER_BIT); - gl.glDepthFunc(GL_LEQUAL); - }else{ - gl.glDepthFunc(GL_LEQUAL); } + gl.glDepthFunc(GL_LEQUAL); gl.glEnable(GL_ALPHA_TEST); gl.glAlphaFunc(GL_NOTEQUAL, 0.0f); @@ -408,7 +393,6 @@ public void updatePlateCoords(){ this.plateCoords = plateCoords; } - public void updateMapLayersGL() { for (int i = 0; i < handler.getGrid().mapLayersGL.length; i++) { updateMapLayerGL(i); @@ -439,9 +423,7 @@ protected void drawOpaqueMaps(GL2 gl) { drawAllMaps(gl, (gl2, geometryGL, textures) -> { drawGeometryGL(gl2, geometryGL, textures); });*/ - drawCurrentMap(gl, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawCurrentMap(gl, this::drawGeometryGL); } protected void drawTransparentMaps(GL2 gl) { @@ -456,9 +438,7 @@ protected void drawTransparentMaps(GL2 gl) { gl.glEnable(GL_ALPHA_TEST); gl.glAlphaFunc(GL_NOTEQUAL, 0.0f); - drawCurrentMap(gl, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawCurrentMap(gl, this::drawGeometryGL); /* drawAllMaps(gl, (gl2, geometryGL, textures) -> { @@ -468,15 +448,13 @@ protected void drawTransparentMaps(GL2 gl) { protected void drawAllMaps(GL2 gl, BdhcDisplay3D.DrawGeometryGLFunction drawFunction) { for (HashMap.Entry map : handler.getMapMatrix().getMatrix().entrySet()) { - drawAllMapLayersGL(gl, drawFunction, map.getValue().getGrid().mapLayersGL, - map.getKey().x * cols, -map.getKey().y * rows, 0); + drawAllMapLayersGL(gl, drawFunction, map.getValue().getGrid().mapLayersGL, map.getKey().x * cols, -map.getKey().y * rows, 0); } } protected void drawCurrentMap(GL2 gl, BdhcDisplay3D.DrawGeometryGLFunction drawFunction) { MapData map = handler.getCurrentMap(); - drawAllMapLayersGL(gl, drawFunction, map.getGrid().mapLayersGL, - 0, 0, 0); + drawAllMapLayersGL(gl, drawFunction, map.getGrid().mapLayersGL, 0, 0, 0); } protected void drawAllMapLayersGL(GL2 gl, BdhcDisplay3D.DrawGeometryGLFunction drawFunction, MapLayerGL[] mapLayersGL, float x, float y, float z) { @@ -499,7 +477,7 @@ protected void drawMapLayerGL(GL2 gl, BdhcDisplay3D.DrawGeometryGLFunction drawF } } - protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, ArrayList textures) { + protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, List textures) { try { gl.glBindTexture(GL_TEXTURE_2D, textures.get(geometryGL.textureID).getTextureObject()); gl.glEnable(GL_TEXTURE_2D); @@ -591,7 +569,7 @@ public void setWireframeEnabled(boolean wireframeEnabled) { this.wireframeEnabled = wireframeEnabled; } - protected static interface DrawGeometryGLFunction { - public void draw(GL2 gl, GeometryGL geometryGL, ArrayList textures); + protected interface DrawGeometryGLFunction { + void draw(GL2 gl, GeometryGL geometryGL, List textures); } } diff --git a/src/main/java/formats/bdhc/BdhcEditorDialog.java b/src/main/java/formats/bdhc/BdhcEditorDialog.java index a709d13..a36065b 100644 --- a/src/main/java/formats/bdhc/BdhcEditorDialog.java +++ b/src/main/java/formats/bdhc/BdhcEditorDialog.java @@ -12,7 +12,6 @@ import java.io.IOException; import java.text.DecimalFormat; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; import javax.swing.filechooser.FileNameExtensionFilter; @@ -105,72 +104,73 @@ private void angleDisplay1MousePressed(MouseEvent e) { dialog.setLocationRelativeTo(handler.getMainFrame()); dialog.setVisible(true); - if (dialog.getReturnValue() == AngleCalculatorDialog.ACCEPTED) { - float angle = dialog.getAngle(); - float max = 80.0f; - float min = -80.0f; - if (angle > max) { - angle = max; - } else if (angle < min) { - angle = min; - } + if (dialog.getReturnValue() != AngleCalculatorDialog.ACCEPTED) { + return; + } + float angle = dialog.getAngle(); + float max = 80.0f; + float min = -80.0f; + if (angle > max) { + angle = max; + } else if (angle < min) { + angle = min; + } - jtfAngleXEnabled.value = false; - jtfAngleX.setText(String.valueOf(angle)); - jtfAngleXEnabled.value = true; + jtfAngleXEnabled.value = false; + jtfAngleX.setText(String.valueOf(angle)); + jtfAngleXEnabled.value = true; - if (angle != 0.0f) { - jtfAngleYEnabled.value = false; - jtfAngleY.setText(String.valueOf(0.0f)); - jtfAngleYEnabled.value = true; - } + if (angle != 0.0f) { + jtfAngleYEnabled.value = false; + jtfAngleY.setText(String.valueOf(0.0f)); + jtfAngleYEnabled.value = true; + } - bdhcHandler.getSelectedPlate().setAngleX((float) ((angle / 180.0f) * Math.PI)); + bdhcHandler.getSelectedPlate().setAngleX((float) ((angle / 180.0f) * Math.PI)); - updateViewAngles(); - updateViewSlopes(); - updateViewType(); - bdhcDisplay.repaint(); - updateViewBdhcDisplay3D(); - } + updateViewAngles(); + updateViewSlopes(); + updateViewType(); + bdhcDisplay.repaint(); + updateViewBdhcDisplay3D(); } private void angleDisplay2MousePressed(MouseEvent e) { Plate plate = bdhcHandler.getSelectedPlate(); - final AngleCalculatorDialog dialog = new AngleCalculatorDialog(handler.getMainFrame(), - plate.getAngleDegreesY(), plate.height); + final AngleCalculatorDialog dialog = new AngleCalculatorDialog(handler.getMainFrame(), plate.getAngleDegreesY(), plate.height); dialog.setLocationRelativeTo(handler.getMainFrame()); dialog.setVisible(true); - if (dialog.getReturnValue() == AngleCalculatorDialog.ACCEPTED) { - float angle = dialog.getAngle(); - float max = 80.0f; - float min = -80.0f; - if (angle > max) { - angle = max; - } else if (angle < min) { - angle = min; - } + if (dialog.getReturnValue() != AngleCalculatorDialog.ACCEPTED) { + return; + } + float angle = dialog.getAngle(); + float max = 80.0f; + float min = -80.0f; + if (angle > max) { + angle = max; + } else if (angle < min) { + angle = min; + } - jtfAngleYEnabled.value = false; - jtfAngleY.setText(String.valueOf(angle)); - jtfAngleYEnabled.value = true; + jtfAngleYEnabled.value = false; + jtfAngleY.setText(String.valueOf(angle)); + jtfAngleYEnabled.value = true; - if (angle != 0.0f) { - jtfAngleXEnabled.value = false; - jtfAngleX.setText(String.valueOf(0.0f)); - jtfAngleXEnabled.value = true; - } + if (angle != 0.0f) { + jtfAngleXEnabled.value = false; + jtfAngleX.setText(String.valueOf(0.0f)); + jtfAngleXEnabled.value = true; + } - bdhcHandler.getSelectedPlate().setAngleY((float) ((angle / 180.0f) * Math.PI)); + bdhcHandler.getSelectedPlate().setAngleY((float) ((angle / 180.0f) * Math.PI)); - updateViewAngles(); - updateViewSlopes(); - updateViewType(); - bdhcDisplay.repaint(); - updateViewBdhcDisplay3D(); - } + updateViewAngles(); + updateViewSlopes(); + updateViewType(); + bdhcDisplay.repaint(); + updateViewBdhcDisplay3D(); } private void jtfAngleXFocusGained(FocusEvent e) { @@ -335,27 +335,27 @@ public void openBdhcWithDialog() { fc.setFileFilter(new FileNameExtensionFilter("Terrain File (*.bdhc)", Bdhc.fileExtension)); fc.setApproveButtonText("Open"); fc.setDialogTitle("Open"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - String path = fc.getSelectedFile().getPath(); - handler.setLastBdhcDirectoryUsed(fc.getSelectedFile().getParent()); - - int game = handler.getGameIndex(); - if (game == Game.DIAMOND || game == Game.PEARL) { - handler.setBdhc(new BdhcLoaderDP().loadBdhcFromFile(path)); - } else { - handler.setBdhc(new BdhcLoaderHGSS().loadBdhcFromFile(path)); - } - - bdhcHandler.setSelectedPlate(0); - updateView(); - bdhcDisplay.repaint(); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "Can't open file", "Error opening BDHC file", JOptionPane.ERROR_MESSAGE); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + String path = fc.getSelectedFile().getPath(); + handler.setLastBdhcDirectoryUsed(fc.getSelectedFile().getParent()); + + int game = handler.getGameIndex(); + if (game == Game.DIAMOND || game == Game.PEARL) { + handler.setBdhc(new BdhcLoaderDP().loadBdhcFromFile(path)); + } else { + handler.setBdhc(new BdhcLoaderHGSS().loadBdhcFromFile(path)); } + bdhcHandler.setSelectedPlate(0); + updateView(); + bdhcDisplay.repaint(); + + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "Can't open file", "Error opening BDHC file", JOptionPane.ERROR_MESSAGE); } } @@ -367,23 +367,23 @@ public void saveBdhcWithDialog() { fc.setFileFilter(new FileNameExtensionFilter("Terrain File (*.bdhc)", Bdhc.fileExtension)); fc.setApproveButtonText("Save"); fc.setDialogTitle("Save"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - String path = fc.getSelectedFile().getPath(); - handler.setLastBdhcDirectoryUsed(fc.getSelectedFile().getParent()); - path = Utils.addExtensionToPath(path, Bdhc.fileExtension); - - int game = handler.getGameIndex(); - if (game == Game.DIAMOND || game == Game.PEARL) { - BdhcWriterDP.writeBdhc(bdhcHandler.getBdhc(), path); - } else { - BdhcWriterHGSS.writeBdhc(bdhcHandler.getBdhc(), path); - } - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "Can't save file", "Error saving BDHC", JOptionPane.ERROR_MESSAGE); - } + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + String path = fc.getSelectedFile().getPath(); + handler.setLastBdhcDirectoryUsed(fc.getSelectedFile().getParent()); + path = Utils.addExtensionToPath(path, Bdhc.fileExtension); + + int game = handler.getGameIndex(); + if (game == Game.DIAMOND || game == Game.PEARL) { + BdhcWriterDP.writeBdhc(bdhcHandler.getBdhc(), path); + } else { + BdhcWriterHGSS.writeBdhc(bdhcHandler.getBdhc(), path); + } + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "Can't save file", "Error saving BDHC", JOptionPane.ERROR_MESSAGE); } } @@ -422,17 +422,11 @@ public void updateViewAngles() { } public String removeCharAtEnd(String s, String c) { - if (s.endsWith(c)) { - return s.substring(0, s.length() - 1); - } - return s; + return s.endsWith(c) ? s.substring(0, s.length() - 1) : s; } public String addCharAtEnd(String s, String c) { - if (!s.endsWith(c)) { - return s + c; - } - return s; + return !s.endsWith(c) ? s + c : s; } public void updateViewSlopes() { @@ -460,10 +454,9 @@ private void updateViewJTextField(JTextField jtf, float value, MutableBoolean en private void updateViewPlateNames() { plateListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < bdhcHandler.getPlates().size(); i++) { - String name = "Plate " + i; - demoList.addElement(name); + demoList.addElement("Plate " + i); } plateList.setModel(demoList); plateList.setSelectedIndex(bdhcHandler.getSelectedPlateIndex()); @@ -479,7 +472,7 @@ public void changeCoordZ() { public int getValueFromJTextField(JTextField jtf, int defaultValue, MutableBoolean enabled) { int value; try { - value = Integer.valueOf(jtf.getText()); + value = Integer.parseInt(jtf.getText()); int max = 4096; int min = -4096; if (value > max) { @@ -502,7 +495,7 @@ public int getValueFromJTextField(JTextField jtf, int defaultValue, MutableBoole public float getValueFromJTextField(JTextField jtf, float defaultValue, MutableBoolean enabled) { float value; try { - value = Float.valueOf(jtf.getText()); + value = Float.parseFloat(jtf.getText()); } catch (NumberFormatException e) { value = defaultValue; } @@ -541,16 +534,12 @@ public void changeBackground() { }); } - - private class MutableBoolean { - public boolean value; public MutableBoolean(boolean value) { this.value = value; } - } private void initComponents() { diff --git a/src/main/java/formats/bdhc/BdhcHandler.java b/src/main/java/formats/bdhc/BdhcHandler.java index 2481fb4..0474886 100644 --- a/src/main/java/formats/bdhc/BdhcHandler.java +++ b/src/main/java/formats/bdhc/BdhcHandler.java @@ -3,7 +3,7 @@ import editor.handler.MapEditorHandler; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -17,7 +17,6 @@ public class BdhcHandler { public BdhcHandler(BdhcEditorDialog dialog) { this.dialog = dialog; - indexSelected = 0; } @@ -57,10 +56,9 @@ public void removeSelectedPlate() { } else { indexSelected = 0; } - } - public ArrayList getPlates() { + public List getPlates() { return handler.getBdhc().getPlates(); } diff --git a/src/main/java/formats/bdhc/BdhcLoaderDP.java b/src/main/java/formats/bdhc/BdhcLoaderDP.java index 88802d6..bfa382d 100644 --- a/src/main/java/formats/bdhc/BdhcLoaderDP.java +++ b/src/main/java/formats/bdhc/BdhcLoaderDP.java @@ -4,10 +4,13 @@ import java.io.File; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.file.Files; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * @author Trifindo @@ -48,13 +51,10 @@ public class BdhcLoaderDP { private int[] plateIndList; public Bdhc loadBdhcFromFile(String path) throws IOException { - return new Bdhc(loadPlatesFromBdhcDP(path)); } - private ArrayList loadPlatesFromBdhcDP(String path) throws IOException { - ArrayList plates = new ArrayList<>(); - + private List loadPlatesFromBdhcDP(String path) throws IOException { File file = new File(path); byte[] data = Files.readAllBytes(file.toPath()); @@ -110,6 +110,7 @@ private ArrayList loadPlatesFromBdhcDP(String path) throws IOException { plateIndList[i] = dataToUnsignedInt(data, offset); } + List plates = new ArrayList<>(); for (int i = 0; i < numPlates; i += 2) { int x = minCoord(xCoords, plateIndices[i]); int y = minCoord(yCoords, plateIndices[i]); @@ -120,8 +121,7 @@ private ArrayList loadPlatesFromBdhcDP(String path) throws IOException { int type = getType(xSlopes[slopeIndex], zSlopes[slopeIndex], ySlopes[slopeIndex]); if (type == Plate.OTHER) { - plates.add(new Plate(x, y, z, width, height, type, new int[]{ - xSlopes[slopeIndex], zSlopes[slopeIndex], ySlopes[slopeIndex]})); + plates.add(new Plate(x, y, z, width, height, type, new int[]{xSlopes[slopeIndex], zSlopes[slopeIndex], ySlopes[slopeIndex]})); } else { plates.add(new Plate(x, y, z, width, height, type)); } @@ -133,7 +133,6 @@ private ArrayList loadPlatesFromBdhcDP(String path) throws IOException { width, height, type));*/ - } return plates; @@ -175,16 +174,15 @@ private static float getLineY(float m, float x0, float y0, float x) { public static float round(float d, int decimalPlace) { BigDecimal bd = new BigDecimal(Float.toString(d)); - bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); + bd = bd.setScale(decimalPlace, RoundingMode.HALF_UP); return bd.floatValue(); } public static float dataToDistance(byte[] data, int offset) { short fractionalPart = (short) dataToUnsignedShort(data, offset); short decimalPart = dataToSignedShort(data, offset + 2); - float value = (float) (-decimalPart - (fractionalPart & 0xFFFF) / 65536f); //TODO: Do not use minus sign? //System.out.println("dec: " + decimalPart + " frac: " + (fractionalPart & 0xFFFF) + " value: " + value); - return value; + return (float) (-decimalPart - (fractionalPart & 0xFFFF) / 65536f); } public static int dataToUnsignedShort(byte[] data, int offset) { @@ -193,9 +191,9 @@ public static int dataToUnsignedShort(byte[] data, int offset) { public static float minCoord(float[] coords, int[] indices) { float min = Float.MAX_VALUE; - for (int i = 0; i < indices.length; i++) { - if (coords[indices[i]] < min) { - min = coords[indices[i]]; + for (int index : indices) { + if (coords[index] < min) { + min = coords[index]; } } return min; @@ -203,9 +201,9 @@ public static float minCoord(float[] coords, int[] indices) { public static int minCoord(int[] coords, int[] indices) { int min = Integer.MAX_VALUE; - for (int i = 0; i < indices.length; i++) { - if (coords[indices[i]] < min) { - min = coords[indices[i]]; + for (int index : indices) { + if (coords[index] < min) { + min = coords[index]; } } return min; @@ -225,32 +223,20 @@ public static int getType(int xSlope, int zSlope, int ySlope) { public static int maxCoord(int[] coords, int[] indices) { int max = Integer.MIN_VALUE; - for (int i = 0; i < indices.length; i++) { - if (coords[indices[i]] > max) { - max = coords[indices[i]]; + for (int index : indices) { + if (coords[index] > max) { + max = coords[index]; } } return max; } public static int min(int[] array) { - int min = Integer.MAX_VALUE; - for (int i = 0; i < array.length; i++) { - if (array[i] < min) { - min = array[i]; - } - } - return min; + return Arrays.stream(array).min().orElse(Integer.MAX_VALUE); } public static int max(int[] array) { - int max = Integer.MIN_VALUE; - for (int i = 0; i < array.length; i++) { - if (array[i] > max) { - max = array[i]; - } - } - return max; + return Arrays.stream(array).max().orElse(Integer.MIN_VALUE); } public static int dataToUnsignedInt(byte[] data, int offset) { @@ -271,13 +257,11 @@ public static short dataToSignedShort(byte[] data, int offset) { return (short) (((data[offset + 1]) << 8) | (data[offset] /*& 0xff*/)); } - public static float dataToCoordZ(byte[] data, int offset) { short fractionalPart = (short) dataToUnsignedShort(data, offset); short decimalPart = dataToSignedShort(data, offset + 2); - float value = (float) (decimalPart + (fractionalPart & 0xFFFF) / 65536f); //TODO: Do not use minus sign? //System.out.println("dec: " + decimalPart + " frac: " + (fractionalPart & 0xFFFF) + " value: " + value); - return value; + return decimalPart + (fractionalPart & 0xFFFF) / 65536f; } /* @@ -287,5 +271,4 @@ public static float dataToCoordZ(byte[] data, int offset) { //System.out.println(decimalPart + " " + fractionalPart); return (float) (decimalPart - fractionalPart / 65536f); //TODO: Do not use minus sign? }*/ - } diff --git a/src/main/java/formats/bdhc/BdhcLoaderHGSS.java b/src/main/java/formats/bdhc/BdhcLoaderHGSS.java index 3916cab..f2935e6 100644 --- a/src/main/java/formats/bdhc/BdhcLoaderHGSS.java +++ b/src/main/java/formats/bdhc/BdhcLoaderHGSS.java @@ -4,10 +4,12 @@ import java.io.File; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.file.Files; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -47,13 +49,10 @@ public class BdhcLoaderHGSS { private int[][] plateIndices; public Bdhc loadBdhcFromFile(String path) throws IOException { - return new Bdhc(loadPlatesFromBdhcDP(path)); } - private ArrayList loadPlatesFromBdhcDP(String path) throws IOException { - ArrayList plates = new ArrayList<>(); - + private List loadPlatesFromBdhcDP(String path) throws IOException { File file = new File(path); byte[] data = Files.readAllBytes(file.toPath()); @@ -101,6 +100,7 @@ private ArrayList loadPlatesFromBdhcDP(String path) throws IOException { } } + List plates = new ArrayList<>(); for (int i = 0; i < numPlates; i++) { int x = xCoords[plateIndices[i][0]]; int y = yCoords[plateIndices[i][0]]; @@ -119,7 +119,6 @@ private ArrayList loadPlatesFromBdhcDP(String path) throws IOException { } else { plates.add(new Plate(x, y, z, width, height, type)); } - } return plates; @@ -192,14 +191,13 @@ public static short dataToSignedShort(byte[] data, int offset) { public static float dataToCoordZ(byte[] data, int offset) { short fractionalPart = (short) dataToUnsignedShort(data, offset); short decimalPart = dataToSignedShort(data, offset + 2); - float value = (float) (-decimalPart - (fractionalPart & 0xFFFF) / 65536f); //TODO: Do not use minus sign? //System.out.println("dec: " + decimalPart + " frac: " + (fractionalPart & 0xFFFF) + " value: " + value); - return value; + return (float) (-decimalPart - (fractionalPart & 0xFFFF) / 65536f); } public static float round(float d, int decimalPlace) { BigDecimal bd = new BigDecimal(Float.toString(d)); - bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); + bd = bd.setScale(decimalPlace, RoundingMode.HALF_UP); return bd.floatValue(); } } diff --git a/src/main/java/formats/bdhc/BdhcPoint.java b/src/main/java/formats/bdhc/BdhcPoint.java index 9d069f4..a1aeddf 100644 --- a/src/main/java/formats/bdhc/BdhcPoint.java +++ b/src/main/java/formats/bdhc/BdhcPoint.java @@ -41,11 +41,6 @@ public boolean equals(Object obj) { if (this.y != other.y) { return false; } - if (Float.floatToIntBits(this.z) != Float.floatToIntBits(other.z)) { - return false; - } - return true; + return Float.floatToIntBits(this.z) == Float.floatToIntBits(other.z); } - - } diff --git a/src/main/java/formats/bdhc/BdhcWriterDP.java b/src/main/java/formats/bdhc/BdhcWriterDP.java index d29acbc..2a9727d 100644 --- a/src/main/java/formats/bdhc/BdhcWriterDP.java +++ b/src/main/java/formats/bdhc/BdhcWriterDP.java @@ -5,13 +5,14 @@ import java.awt.Rectangle; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.file.Files; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.List; /** * @author Trifindo @@ -23,17 +24,16 @@ public static void writeBdhc(Bdhc bdhc, String path) throws IOException{ Files.write(new File(path).toPath(), byteData); } - public static byte[] bdhcToByteArray(Bdhc bdhc) throws IOException { - + public static byte[] bdhcToByteArray(Bdhc bdhc) { BinaryBufferWriter writer = new BinaryBufferWriter(); int[][] pointIndices = new int[bdhc.getPlates().size()][4]; - ArrayList points = getPoints(bdhc, pointIndices); + List points = getPoints(bdhc, pointIndices); int[] slopeIndices = new int[bdhc.getPlates().size()]; - ArrayList slopes = getSlopes(bdhc, slopeIndices); - ArrayList distances = getDistances(bdhc); - ArrayList tris = getIndexedTris(bdhc, pointIndices, slopeIndices); - ArrayList> stripes = new ArrayList<>(); + List slopes = getSlopes(bdhc, slopeIndices); + List distances = getDistances(bdhc); + List tris = getIndexedTris(bdhc, pointIndices, slopeIndices); + List> stripes = new ArrayList<>(); stripes.add(calculateStripeGroup(bdhc, new Rectangle(-16, -16, 16, 16))); stripes.add(calculateStripeGroup(bdhc, new Rectangle(0, -16, 16, 16))); stripes.add(calculateStripeGroup(bdhc, new Rectangle(-16, 0, 16, 16))); @@ -42,28 +42,19 @@ public static byte[] bdhcToByteArray(Bdhc bdhc) throws IOException { //FileOutputStream out = new FileOutputStream(path); writeHeader(writer, points, slopes, tris, stripes); - writePoints(writer, points); - writeSlopes(writer, slopes); - writeTriangles(writer, tris, points, distances); - writeStripeGroups(writer, stripes); - writeStripes(writer, stripes); - writeTriIndices(writer, stripes); //out.close(); return writer.toByteArray(); } - private static void writeHeader(BinaryBufferWriter writer, - ArrayList points, ArrayList slopes, - ArrayList tris, - ArrayList> stripes) throws IOException { - + private static void writeHeader(BinaryBufferWriter writer, List points, List slopes, + List tris, List> stripes) { writeString(writer, "BDHC"); writeShortValue(writer, 32); writeShortValue(writer, 0); @@ -103,27 +94,21 @@ private static void writeHeader(BinaryBufferWriter writer, writeShortValue(writer, 16); } - private static void writeTriIndices(BinaryBufferWriter writer, - ArrayList> stripes) throws IOException { - - for (int i = 0; i < stripes.size(); i++) { - for (int j = 0; j < stripes.get(i).size(); j++) { - Stripe stripe = stripes.get(i).get(j); + private static void writeTriIndices(BinaryBufferWriter writer, List> stripes) { + for (List stripeArrayList : stripes) { + for (Stripe stripe : stripeArrayList) { for (int k = 0; k < stripe.plateIndices.size(); k++) { writeShortValue(writer, stripe.plateIndices.get(k) * 2); writeShortValue(writer, stripe.plateIndices.get(k) * 2 + 1); } } } - } - private static void writeStripes(BinaryBufferWriter writer, - ArrayList> stripes) throws IOException { + private static void writeStripes(BinaryBufferWriter writer, List> stripes) { int offset = 0; - for (int i = 0; i < stripes.size(); i++) { - for (int j = 0; j < stripes.get(i).size(); j++) { - Stripe stripe = stripes.get(i).get(j); + for (List stripeArrayList : stripes) { + for (Stripe stripe : stripeArrayList) { writeShortValue(writer, stripe.plateIndices.size() * 2); writeShortValue(writer, 0); writeShortValue(writer, stripe.y); @@ -134,20 +119,16 @@ private static void writeStripes(BinaryBufferWriter writer, } } - private static void writeStripeGroups(BinaryBufferWriter writer, - ArrayList> stripes) throws IOException { + private static void writeStripeGroups(BinaryBufferWriter writer, List> stripes) { int offset = 0; - for (int i = 0; i < stripes.size(); i++) { - writeShortValue(writer, stripes.get(i).size()); + for (List stripe : stripes) { + writeShortValue(writer, stripe.size()); writeShortValue(writer, offset); - offset += stripes.get(i).size(); + offset += stripe.size(); } } - private static void writeTriangles(BinaryBufferWriter writer, - ArrayList tris, ArrayList points, - ArrayList distances) throws IOException { - + private static void writeTriangles(BinaryBufferWriter writer, List tris, List points, List distances) { for (int i = 0; i < tris.size(); i++) { IndexedTriangle tri = tris.get(i); @@ -183,11 +164,10 @@ private static void writeTriangles(BinaryBufferWriter writer, } }*/ } - } - private static ArrayList getDistances(Bdhc bdhc) { - ArrayList distances = new ArrayList<>(); + private static List getDistances(Bdhc bdhc) { + List distances = new ArrayList<>(); for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); @@ -205,21 +185,11 @@ private static ArrayList getDistances(Bdhc bdhc) { final float zero = 0.001f; if (Math.abs(xd) > zero) { - float x; - if (xd > zero) { - x = p.x + p.width; - } else { - x = p.x; - } + float x = xd > zero ? p.x + p.width : p.x; float n = z - mx * x; d = (float) -(n / Math.sqrt(mx * mx + 1.0f)); } else if (Math.abs(yd) > zero) { - float y; - if (yd > zero) { - y = p.y + p.height; - } else { - y = p.y; - } + float y = yd > zero ? p.y + p.height : p.y; float n = z - my * y; d = (float) -(n / Math.sqrt(my * my + 1.0f)); } else { @@ -246,35 +216,26 @@ private static int getIntegerValueZ(float value) { return ((decimalPart & 0xFFFF) << 16) | (fractionalPart & 0xFFFF); } - - private static void writeSlopes(BinaryBufferWriter writer, ArrayList slopes) - throws IOException { - for (int i = 0; i < slopes.size(); i++) { - Slope slope = slopes.get(i); + private static void writeSlopes(BinaryBufferWriter writer, List slopes) { + for (Slope slope : slopes) { writeIntValue(writer, slope.x); writeIntValue(writer, slope.y); writeIntValue(writer, slope.z); } - } - private static void writePoints(BinaryBufferWriter writer, ArrayList points) - throws IOException { - for (int i = 0; i < points.size(); i++) { - BdhcPoint point = points.get(i); + private static void writePoints(BinaryBufferWriter writer, List points) { + for (BdhcPoint point : points) { writeShortValue(writer, 0); writeShortValue(writer, point.x); writeZValue(writer, point.z); writeShortValue(writer, 0); writeShortValue(writer, point.y); } - } - private static ArrayList calculateStripeGroup(Bdhc bdhc, - Rectangle groupBounds) { - - ArrayList platesInfo = new ArrayList<>(); + private static List calculateStripeGroup(Bdhc bdhc, Rectangle groupBounds) { + List platesInfo = new ArrayList<>(); //Get plate info of plates inside group for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); @@ -287,38 +248,35 @@ private static ArrayList calculateStripeGroup(Bdhc bdhc, Collections.sort(platesInfo); //Group by height and form stripes - ArrayList stripes = new ArrayList<>(); + List stripes = new ArrayList<>(); int previousY = -16; for (int i = 0; i < platesInfo.size(); i++) { int y = platesInfo.get(i).y; if (y != previousY) { int yMinBounds = previousY; - int yMaxBounds = y; Stripe stripe = new Stripe(y); - for (int j = 0; j < platesInfo.size(); j++) { - Plate p = bdhc.getPlate(platesInfo.get(j).plateIndex); - if (yMinBounds < p.y + p.height && yMaxBounds > p.y) { - stripe.plateIndices.add(platesInfo.get(j).plateIndex); + for (PlateInfo plateInfo : platesInfo) { + Plate p = bdhc.getPlate(plateInfo.plateIndex); + if (yMinBounds < p.y + p.height && y > p.y) { + stripe.plateIndices.add(plateInfo.plateIndex); } } stripes.add(stripe); previousY = y; } - } //Sort stripes elements on X axis - for (int i = 0; i < stripes.size(); i++) { - stripes.get(i).sortPlateIndices(bdhc.getPlates()); + for (Stripe stripe : stripes) { + stripe.sortPlateIndices(bdhc.getPlates()); } return stripes; } - private static ArrayList getIndexedTris(Bdhc bdhc, - int[][] pointIndices, int[] slopeIndices) { - ArrayList plates = new ArrayList<>(); + private static List getIndexedTris(Bdhc bdhc, int[][] pointIndices, int[] slopeIndices) { + List plates = new ArrayList<>(); for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); @@ -340,8 +298,8 @@ private static ArrayList getIndexedTris(Bdhc bdhc, return plates; } - private static ArrayList getSlopes(Bdhc bdhc, int[] indices) { - ArrayList slopes = new ArrayList<>(); + private static List getSlopes(Bdhc bdhc, int[] indices) { + List slopes = new ArrayList<>(); for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); @@ -357,8 +315,8 @@ private static ArrayList getSlopes(Bdhc bdhc, int[] indices) { return slopes; } - private static ArrayList getPoints(Bdhc bdhc, int[][] coordIndices) { - ArrayList coords = new ArrayList<>(); + private static List getPoints(Bdhc bdhc, int[][] coordIndices) { + List coords = new ArrayList<>(); for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); int[] zOffsets = new int[4]; @@ -387,21 +345,15 @@ private static ArrayList getPoints(Bdhc bdhc, int[][] coordIndices) { break; } } - addCoordinate(coords, new BdhcPoint(p.x, p.y + p.height, p.z + zOffsets[0]), - i, coordIndices, 0); - addCoordinate(coords, new BdhcPoint(p.x + p.width, p.y + p.height, p.z + zOffsets[1]), - i, coordIndices, 1); - addCoordinate(coords, new BdhcPoint(p.x + p.width, p.y, p.z + zOffsets[2]), - i, coordIndices, 2); - addCoordinate(coords, new BdhcPoint(p.x, p.y, p.z + zOffsets[3]), - i, coordIndices, 3); - + addCoordinate(coords, new BdhcPoint(p.x, p.y + p.height, p.z + zOffsets[0]), i, coordIndices, 0); + addCoordinate(coords, new BdhcPoint(p.x + p.width, p.y + p.height, p.z + zOffsets[1]), i, coordIndices, 1); + addCoordinate(coords, new BdhcPoint(p.x + p.width, p.y, p.z + zOffsets[2]), i, coordIndices, 2); + addCoordinate(coords, new BdhcPoint(p.x, p.y, p.z + zOffsets[3]), i, coordIndices, 3); } return coords; } - private static void addCoordinate(ArrayList coords, - BdhcPoint coord, int pointIndex, int[][] indices, int indOffset) { + private static void addCoordinate(List coords, BdhcPoint coord, int pointIndex, int[][] indices, int indOffset) { /* coords.add(coord); indices[pointIndex][indOffset] = coords.size() - 1; @@ -415,29 +367,19 @@ private static void addCoordinate(ArrayList coords, indices[pointIndex][indOffset] = index; } - public static int getNumStripes(ArrayList> stripes) { - int numStripes = 0; - for (int i = 0; i < stripes.size(); i++) { - numStripes += stripes.get(i).size(); - } - return numStripes; + public static int getNumStripes(List> stripes) { + return stripes.stream().mapToInt(List::size).sum(); } - public static int getMaxNumStripes(ArrayList> stripes) { - int maxNumStripesInGroup = 0; - for (int i = 0; i < stripes.size(); i++) { - if (stripes.get(i).size() > maxNumStripesInGroup) { - maxNumStripesInGroup = stripes.get(i).size(); - } - } - return maxNumStripesInGroup; + public static int getMaxNumStripes(List> stripes) { + return stripes.stream().mapToInt(List::size).filter(stripe -> stripe >= 0).max().orElse(0); } - public static int getMaxNumTris(ArrayList> stripes) { + public static int getMaxNumTris(List> stripes) { int maxNumPlates = 0; - for (int i = 0; i < stripes.size(); i++) { - for (int j = 0; j < stripes.get(i).size(); j++) { - int numPlates = stripes.get(i).get(j).plateIndices.size(); + for (List stripe : stripes) { + for (Stripe value : stripe) { + int numPlates = value.plateIndices.size(); if (numPlates > maxNumPlates) { maxNumPlates = numPlates; } @@ -446,13 +388,8 @@ public static int getMaxNumTris(ArrayList> stripes) { return maxNumPlates * 2; } - public static int getNumTriIndices(ArrayList> stripes) { - int numIndices = 0; - for (int i = 0; i < stripes.size(); i++) { - for (int j = 0; j < stripes.get(i).size(); j++) { - numIndices += stripes.get(i).get(j).plateIndices.size(); - } - } + public static int getNumTriIndices(List> stripes) { + int numIndices = stripes.stream().flatMap(Collection::stream).mapToInt(value -> value.plateIndices.size()).sum(); return numIndices * 2; } @@ -460,45 +397,38 @@ public static boolean overlap(Rectangle r1, Rectangle r2) { return r2.x < r1.x + r1.width && r2.x + r2.width > r1.x && r2.y < r1.y + r1.height && r2.y + r2.height > r1.y; } - private static void writeString(BinaryBufferWriter writer, String s) - throws IOException { + private static void writeString(BinaryBufferWriter writer, String s) { writer.writeString(s); } - private static void writeIntArray(BinaryBufferWriter writer, int[] data) - throws IOException { + private static void writeIntArray(BinaryBufferWriter writer, int[] data) { for (int i : data) { writeShortValue(writer, i); } } - private static void writeShortValue(BinaryBufferWriter writer, int value) - throws IOException { + private static void writeShortValue(BinaryBufferWriter writer, int value) { ByteBuffer buffer = ByteBuffer.allocate(Short.BYTES); buffer.order(ByteOrder.LITTLE_ENDIAN); writer.write(buffer.putShort((short) value).array()); } - private static void writeIntValue(BinaryBufferWriter writer, int value) - throws IOException { + private static void writeIntValue(BinaryBufferWriter writer, int value) { ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES); buffer.order(ByteOrder.LITTLE_ENDIAN); writer.write(buffer.putInt(value).array()); } - private static void writeZValue(BinaryBufferWriter writer, float value) - throws IOException { + private static void writeZValue(BinaryBufferWriter writer, float value) { short decimalPart = (short) value; short fractionalPart = (short) ((value - decimalPart) * (65536)); writeShortValue(writer, fractionalPart); writeShortValue(writer, decimalPart); } - private static void writeSlopeZValue(BinaryBufferWriter writer, int value) - throws IOException { + private static void writeSlopeZValue(BinaryBufferWriter writer, int value) { ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES); buffer.order(ByteOrder.LITTLE_ENDIAN); writer.write(buffer.putInt(value).array()); } - } diff --git a/src/main/java/formats/bdhc/BdhcWriterHGSS.java b/src/main/java/formats/bdhc/BdhcWriterHGSS.java index 876d158..f627177 100644 --- a/src/main/java/formats/bdhc/BdhcWriterHGSS.java +++ b/src/main/java/formats/bdhc/BdhcWriterHGSS.java @@ -11,53 +11,44 @@ import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * @author Trifindo */ public class BdhcWriterHGSS { - public static void writeBdhc(Bdhc bdhc, String path) throws IOException{ + public static void writeBdhc(Bdhc bdhc, String path) throws IOException { byte[] byteData = bdhcToByteArray(bdhc); Files.write(new File(path).toPath(), byteData); } - public static byte[] bdhcToByteArray(Bdhc bdhc) throws IOException { - + public static byte[] bdhcToByteArray(Bdhc bdhc) { BinaryBufferWriter writer = new BinaryBufferWriter(); int[][] pointIndices = new int[bdhc.getPlates().size()][2]; - ArrayList points = getPoints(bdhc, pointIndices); + List points = getPoints(bdhc, pointIndices); int[] slopeIndices = new int[bdhc.getPlates().size()]; - ArrayList slopes = getSlopes(bdhc, slopeIndices); + List slopes = getSlopes(bdhc, slopeIndices); int[] zIndices = new int[bdhc.getPlates().size()]; - ArrayList zCoords = getCoordsZ(bdhc, zIndices); - ArrayList stripes = calculateStripes(bdhc); + List zCoords = getCoordsZ(bdhc, zIndices); + List stripes = calculateStripes(bdhc); //FileOutputStream out = new FileOutputStream(path); writeHeader(writer, bdhc, points, slopes, zCoords, stripes); - writePoints(writer, points); - writeSlopes(writer, slopes); - writeCoordsZ(writer, zCoords); - writePlates(writer, pointIndices, slopeIndices, zIndices); - writeStripes(writer, stripes); - writeIndices(writer, stripes); //out.close(); return writer.toByteArray(); } - private static void writeHeader(BinaryBufferWriter writer, Bdhc bdhc, - ArrayList points, ArrayList slopes, ArrayList zCoords, - ArrayList stripes) throws IOException { - + private static void writeHeader(BinaryBufferWriter writer, Bdhc bdhc, List points, List slopes, List zCoords, List stripes) { writeString(writer, "BDHC"); writeShortValue(writer, points.size()); @@ -68,20 +59,17 @@ private static void writeHeader(BinaryBufferWriter writer, Bdhc bdhc, writeShortValue(writer, getNumPlateIndices(stripes)); } - private static void writeIndices(BinaryBufferWriter writer, - ArrayList stripes) throws IOException { - for (int i = 0; i < stripes.size(); i++) { - Stripe stripe = stripes.get(i); + private static void writeIndices(BinaryBufferWriter writer, List stripes) { + for (Stripe stripe : stripes) { for (int j = 0; j < stripe.plateIndices.size(); j++) { writeShortValue(writer, stripe.plateIndices.get(j)); } } } - private static void writeStripes(BinaryBufferWriter writer, ArrayList stripes) throws IOException { + private static void writeStripes(BinaryBufferWriter writer, List stripes) { int offset = 0; - for (int i = 0; i < stripes.size(); i++) { - Stripe stripe = stripes.get(i); + for (Stripe stripe : stripes) { writeShortValue(writer, 0); writeShortValue(writer, stripe.y); writeShortValue(writer, stripe.plateIndices.size()); @@ -90,9 +78,7 @@ private static void writeStripes(BinaryBufferWriter writer, ArrayList st } } - private static void writePlates(BinaryBufferWriter writer, - int[][] pointIndices, int[] slopeIndices, int[] zIndices) throws IOException { - + private static void writePlates(BinaryBufferWriter writer, int[][] pointIndices, int[] slopeIndices, int[] zIndices) { for (int i = 0; i < pointIndices.length; i++) { writeShortValue(writer, pointIndices[i][0]); writeShortValue(writer, pointIndices[i][1]); @@ -101,28 +87,22 @@ private static void writePlates(BinaryBufferWriter writer, } } - private static void writeCoordsZ(BinaryBufferWriter writer, ArrayList coordsZ) - throws IOException { - for (int i = 0; i < coordsZ.size(); i++) { - writeIntValue(writer, coordsZ.get(i)); + private static void writeCoordsZ(BinaryBufferWriter writer, List coordsZ) { + for (Integer integer : coordsZ) { + writeIntValue(writer, integer); } } - private static void writeSlopes(BinaryBufferWriter writer, ArrayList slopes) - throws IOException { - for (int i = 0; i < slopes.size(); i++) { - Slope slope = slopes.get(i); + private static void writeSlopes(BinaryBufferWriter writer, List slopes) { + for (Slope slope : slopes) { writeIntValue(writer, slope.x); writeIntValue(writer, slope.y); writeIntValue(writer, slope.z); } - } - private static void writePoints(BinaryBufferWriter writer, ArrayList points) - throws IOException { - for (int i = 0; i < points.size(); i++) { - Point point = points.get(i); + private static void writePoints(BinaryBufferWriter writer, List points) { + for (Point point : points) { writeShortValue(writer, 0); writeShortValue(writer, point.x); writeShortValue(writer, 0); @@ -130,8 +110,8 @@ private static void writePoints(BinaryBufferWriter writer, ArrayList poin } } - private static ArrayList calculateStripes(Bdhc bdhc) { - ArrayList platesInfo = new ArrayList<>(); + private static List calculateStripes(Bdhc bdhc) { + List platesInfo = new ArrayList<>(); //Get plate info of plates inside group for (int i = 0; i < bdhc.getPlates().size(); i++) { @@ -143,19 +123,18 @@ private static ArrayList calculateStripes(Bdhc bdhc) { Collections.sort(platesInfo); //Group by height and form stripes - ArrayList stripes = new ArrayList<>(); + List stripes = new ArrayList<>(); int previousY = -16; for (int i = 0; i < platesInfo.size(); i++) { int y = platesInfo.get(i).y; if (y != previousY) { int yMinBounds = previousY; - int yMaxBounds = y; Stripe stripe = new Stripe(y); - for (int j = 0; j < platesInfo.size(); j++) { - Plate p = bdhc.getPlate(platesInfo.get(j).plateIndex); - if (yMinBounds < p.y + p.height && yMaxBounds > p.y) { - stripe.plateIndices.add(platesInfo.get(j).plateIndex); + for (PlateInfo plateInfo : platesInfo) { + Plate p = bdhc.getPlate(plateInfo.plateIndex); + if (yMinBounds < p.y + p.height && y > p.y) { + stripe.plateIndices.add(plateInfo.plateIndex); } } stripes.add(stripe); @@ -176,15 +155,15 @@ private static ArrayList calculateStripes(Bdhc bdhc) { } //Sort stripes elements on X axis - for (int i = 0; i < stripes.size(); i++) { - stripes.get(i).sortPlateIndices(bdhc.getPlates()); + for (Stripe stripe : stripes) { + stripe.sortPlateIndices(bdhc.getPlates()); } return stripes; } - private static ArrayList getCoordsZ(Bdhc bdhc, int[] zIndices) { - ArrayList zCoords = new ArrayList<>(); + private static List getCoordsZ(Bdhc bdhc, int[] zIndices) { + List zCoords = new ArrayList<>(); for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); @@ -202,21 +181,11 @@ private static ArrayList getCoordsZ(Bdhc bdhc, int[] zIndices) { final float zero = 0.001f; if (Math.abs(xd) > zero) { - float x; - if (xd > zero) { - x = p.x + p.width; - } else { - x = p.x; - } + float x = xd > zero ? p.x + p.width : p.x; float n = z - mx * x; d = (float) -(n / Math.sqrt(mx * mx + 1.0f)); } else if (Math.abs(yd) > zero) { - float y; - if (yd > zero) { - y = p.y + p.height; - } else { - y = p.y; - } + float y = yd > zero ? p.y + p.height : p.y; float n = z - my * y; d = (float) -(n / Math.sqrt(my * my + 1.0f)); } else { @@ -237,8 +206,8 @@ private static ArrayList getCoordsZ(Bdhc bdhc, int[] zIndices) { return zCoords; } - private static ArrayList getSlopes(Bdhc bdhc, int[] indices) { - ArrayList slopes = new ArrayList<>(); + private static List getSlopes(Bdhc bdhc, int[] indices) { + List slopes = new ArrayList<>(); for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); @@ -254,8 +223,8 @@ private static ArrayList getSlopes(Bdhc bdhc, int[] indices) { return slopes; } - private static ArrayList getPoints(Bdhc bdhc, int[][] coordIndices) { - ArrayList coords = new ArrayList<>(); + private static List getPoints(Bdhc bdhc, int[][] coordIndices) { + List coords = new ArrayList<>(); for (int i = 0; i < bdhc.getPlates().size(); i++) { Plate p = bdhc.getPlate(i); @@ -277,36 +246,25 @@ private static ArrayList getPoints(Bdhc bdhc, int[][] coordIndices) { return coords; } - public static int getNumStripes(ArrayList> stripes) { - int numStripes = 0; - for (int i = 0; i < stripes.size(); i++) { - numStripes += stripes.get(i).size(); - } - return numStripes; + public static int getNumStripes(List> stripes) { + return stripes.stream().mapToInt(List::size).sum(); } - public static int getNumPlateIndices(ArrayList stripes) { - int numIndices = 0; - for (int i = 0; i < stripes.size(); i++) { - numIndices += stripes.get(i).plateIndices.size(); - } - return numIndices; + public static int getNumPlateIndices(List stripes) { + return stripes.stream().mapToInt(stripe -> stripe.plateIndices.size()).sum(); } - private static void writeString(BinaryBufferWriter writer, String s) - throws IOException { + private static void writeString(BinaryBufferWriter writer, String s) { writer.writeString(s); } - private static void writeShortValue(BinaryBufferWriter writer, int value) - throws IOException { + private static void writeShortValue(BinaryBufferWriter writer, int value) { ByteBuffer buffer = ByteBuffer.allocate(Short.BYTES); buffer.order(ByteOrder.LITTLE_ENDIAN); writer.write(buffer.putShort((short) value).array()); } - private static void writeIntValue(BinaryBufferWriter writer, int value) - throws IOException { + private static void writeIntValue(BinaryBufferWriter writer, int value) { ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES); buffer.order(ByteOrder.LITTLE_ENDIAN); writer.write(buffer.putInt(value).array()); @@ -329,5 +287,4 @@ private static int getIntegerValueZ(float value) { short fractionalPart = (short) ((value - decimalPart) * (65536)); return (decimalPart << 16) + fractionalPart; }*/ - } diff --git a/src/main/java/formats/bdhc/IndexedTriangle.java b/src/main/java/formats/bdhc/IndexedTriangle.java index 57e2d3c..ceb440d 100644 --- a/src/main/java/formats/bdhc/IndexedTriangle.java +++ b/src/main/java/formats/bdhc/IndexedTriangle.java @@ -22,7 +22,6 @@ public IndexedTriangle(int pointInd1, int pointInd2, int pointInd3, int slopeInd this.type = type; } - public int getMinX(ArrayList points) { return Math.min(Math.min(points.get(pointInd1).x, points.get(pointInd2).x), points.get(pointInd3).x); } @@ -38,5 +37,4 @@ public int getMaxX(ArrayList points) { public int getMaxY(ArrayList points) { return Math.max(Math.max(points.get(pointInd1).y, points.get(pointInd2).y), points.get(pointInd3).y); } - } diff --git a/src/main/java/formats/bdhc/Plate.java b/src/main/java/formats/bdhc/Plate.java index aecb64d..4cbd09f 100644 --- a/src/main/java/formats/bdhc/Plate.java +++ b/src/main/java/formats/bdhc/Plate.java @@ -58,24 +58,12 @@ public Plate(int x, int y, float z, int width, int height, int type) { } public Plate(int x, int y, float z, int width, int height, int type, int[] slopes) { - this.x = x; - this.y = y; - this.z = z; - this.width = width; - this.height = height; - this.type = type; + this(x, y, z, width, height, type); this.customSlope = slopes; } public Plate() { - this.x = 0; - this.y = 0; - this.width = 2; - this.height = 2; - this.z = 0.0f; - - this.type = PLANE; - + this(0, 0, 0.0f, 2, 2, PLANE); //this.slopeX = 0; //this.slopeY = 0; //this.slopeZ = 4096; @@ -118,7 +106,7 @@ public void setAngleX(float angle) { //System.out.println("x: " + (Math.sin(-angle) * SLOPE_UNIT) + " z: " + (Math.cos(-angle) * SLOPE_UNIT) + " y: " + (0.0f)); customSlope[0] = (int) (Math.round(Math.sin(-angle) * SLOPE_UNIT)); customSlope[1] = (int) (Math.round(Math.cos(-angle) * SLOPE_UNIT)); - customSlope[2] = (int) (0.0f); + customSlope[2] = 0; //System.out.println("x: " + customSlope[0] + " z: " + customSlope[1] + " y: " + customSlope[2]); } } @@ -126,7 +114,7 @@ public void setAngleX(float angle) { public void setAngleY(float angle) { type = angleYToType(angle); if (type == OTHER) { - customSlope[0] = (int) (0.0f); + customSlope[0] = 0; customSlope[1] = (int) (Math.round(Math.cos(-angle) * SLOPE_UNIT)); customSlope[2] = (int) (Math.round(Math.sin(-angle) * SLOPE_UNIT)); } @@ -234,5 +222,4 @@ public float[] getVertexCoords() { } } } - } diff --git a/src/main/java/formats/bdhc/PlateInfo.java b/src/main/java/formats/bdhc/PlateInfo.java index 5e8c04e..3005fdd 100644 --- a/src/main/java/formats/bdhc/PlateInfo.java +++ b/src/main/java/formats/bdhc/PlateInfo.java @@ -4,7 +4,7 @@ /** * @author Trifindo */ -public class PlateInfo implements Comparable { +public class PlateInfo implements Comparable { public int plateIndex; public int y; @@ -15,9 +15,7 @@ public PlateInfo(int plateIndex, int y) { } @Override - public int compareTo(Object o) { - return Integer.compare(this.y, ((PlateInfo) o).y); + public int compareTo(PlateInfo o) { + return Integer.compare(this.y, o.y); } - - } diff --git a/src/main/java/formats/bdhc/Slope.java b/src/main/java/formats/bdhc/Slope.java index 317783b..a4a9c9c 100644 --- a/src/main/java/formats/bdhc/Slope.java +++ b/src/main/java/formats/bdhc/Slope.java @@ -14,9 +14,7 @@ public Slope(int x, int y, int z) { } public Slope(int[] slopes) { - this.x = slopes[0]; - this.y = slopes[1]; - this.z = slopes[2]; + this(slopes[0], slopes[1], slopes[2]); } @Override @@ -46,11 +44,6 @@ public boolean equals(Object obj) { if (this.y != other.y) { return false; } - if (this.z != other.z) { - return false; - } - return true; + return this.z == other.z; } - - } diff --git a/src/main/java/formats/bdhc/Stripe.java b/src/main/java/formats/bdhc/Stripe.java index 72829aa..9f437ba 100644 --- a/src/main/java/formats/bdhc/Stripe.java +++ b/src/main/java/formats/bdhc/Stripe.java @@ -3,13 +3,14 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * @author Trifindo */ public class Stripe { - public ArrayList plateIndices; + public List plateIndices; public int y; public Stripe(int y) { @@ -17,8 +18,8 @@ public Stripe(int y) { this.plateIndices = new ArrayList<>(); } - public void sortPlateIndices(ArrayList plates) { - ArrayList indicesAndPlates = new ArrayList<>(); + public void sortPlateIndices(List plates) { + List indicesAndPlates = new ArrayList<>(); for (int i = 0; i < plateIndices.size(); i++) { indicesAndPlates.add(new IndexAndPlate(plateIndices.get(i), plates.get(i))); @@ -29,10 +30,9 @@ public void sortPlateIndices(ArrayList plates) { for (int i = 0; i < plateIndices.size(); i++) { plateIndices.set(i, indicesAndPlates.get(i).index); } - } - private class IndexAndPlate implements Comparable { + private class IndexAndPlate implements Comparable { public Plate plate; public int index; @@ -42,9 +42,8 @@ public IndexAndPlate(int index, Plate plate) { } @Override - public int compareTo(Object o) { - return Integer.compare(plate.x, ((IndexAndPlate) o).plate.x); + public int compareTo(IndexAndPlate o) { + return Integer.compare(plate.x, o.plate.x); } } - } diff --git a/src/main/java/formats/bdhcam/Bdhcam.java b/src/main/java/formats/bdhcam/Bdhcam.java index 33729e4..783c048 100644 --- a/src/main/java/formats/bdhcam/Bdhcam.java +++ b/src/main/java/formats/bdhcam/Bdhcam.java @@ -3,11 +3,12 @@ import formats.bdhcam.camplate.*; import java.util.ArrayList; +import java.util.List; public class Bdhcam { public static final String fileExtension = "bdhcam"; - private ArrayList plates; + private final List plates; public Bdhcam(){ this(0); @@ -17,7 +18,7 @@ public Bdhcam(int numPlates) { plates = new ArrayList<>(numPlates); } - public ArrayList getPlates() { + public List getPlates() { return plates; } @@ -26,41 +27,36 @@ public Camplate getPlate(int index) { } public void changePlateType(int index, int type) { - if (plates.size() > 0) { - if (index >= 0 && index < plates.size()) { - Camplate p = plates.get(index); - if (p.type.ID != type) { - if (p.type.ID == Camplate.Type.POS_INDEPENDENT.ID) { - plates.set(index, new CamplatePosDep(p, type, 0)); - for(CamParameter param : p.parameters){ - plates.get(index).parameters.add(new CamParameterPosDep(param.type, 0, 0)); - } - } else { - if (type == Camplate.Type.POS_INDEPENDENT.ID) { - plates.set(index, new CamplatePosIndep(p, type, 0)); - for(CamParameter param : p.parameters){ - plates.get(index).parameters.add(new CamParameterPosIndep(param.type, 1, 0)); - } - } else { - CamplatePosDep newPlate = new CamplatePosDep(p, type, 0); - newPlate.parameters = p.parameters; - plates.set(index, newPlate); - } - } + if (plates.size() <= 0 || index < 0 || index >= plates.size()) { + return; + } + + Camplate p = plates.get(index); + if (p.type.ID == type) { + return; + } + if (p.type.ID == Camplate.Type.POS_INDEPENDENT.ID) { + plates.set(index, new CamplatePosDep(p, type, 0)); + for(CamParameter param : p.parameters){ + plates.get(index).parameters.add(new CamParameterPosDep(param.type, 0, 0)); + } + } else { + if (type == Camplate.Type.POS_INDEPENDENT.ID) { + plates.set(index, new CamplatePosIndep(p, type, 0)); + for(CamParameter param : p.parameters){ + plates.get(index).parameters.add(new CamParameterPosIndep(param.type, 1, 0)); } + } else { + CamplatePosDep newPlate = new CamplatePosDep(p, type, 0); + newPlate.parameters = p.parameters; + plates.set(index, newPlate); } } } public int getNumValidPlates(){ - int count = 0; - for(Camplate plate : plates){ - if(plate.parameters.size() > 0){ - count ++; - } - } - return count; + return (int) plates.stream() + .filter(plate -> plate.parameters.size() > 0) + .count(); } - - } diff --git a/src/main/java/formats/bdhcam/BdhcamCameraDisplay.java b/src/main/java/formats/bdhcam/BdhcamCameraDisplay.java index f4af79c..59aaa2e 100644 --- a/src/main/java/formats/bdhcam/BdhcamCameraDisplay.java +++ b/src/main/java/formats/bdhcam/BdhcamCameraDisplay.java @@ -19,11 +19,10 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.nio.FloatBuffer; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import static com.jogamp.opengl.GL.*; -import static com.jogamp.opengl.GL.GL_NOTEQUAL; import static com.jogamp.opengl.GL2ES1.GL_ALPHA_TEST; import static com.jogamp.opengl.GL2ES3.GL_QUADS; @@ -138,7 +137,6 @@ public void display(GLAutoDrawable drawable) { gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (updateRequested) { - //Load Textures into OpenGL handler.getTileset().loadTexturesGL(); handler.getBorderMapsTileset().loadTexturesGL(); @@ -175,7 +173,6 @@ public void display(GLAutoDrawable drawable) { } catch (GLException ex) { ex.printStackTrace(); } - } @Override @@ -269,8 +266,6 @@ protected void applyCameraTransform(GL2 gl) { //Point mapCoords = handler.getMapSelected(); //gl.glTranslatef(-mapCoords.x * MapGrid.cols, mapCoords.y * MapGrid.rows, -0.0f); - - } public void updateMapLayersGL() { @@ -299,9 +294,7 @@ protected void drawOpaqueMaps(GL2 gl) { gl.glEnable(GL_ALPHA_TEST); gl.glAlphaFunc(GL_GREATER, 0.9f); - drawAllMaps(gl, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawAllMaps(gl, this::drawGeometryGL); } protected void drawTransparentMaps(GL2 gl) { @@ -316,24 +309,19 @@ protected void drawTransparentMaps(GL2 gl) { gl.glEnable(GL_ALPHA_TEST); gl.glAlphaFunc(GL_NOTEQUAL, 0.0f); - drawAllMaps(gl, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawAllMaps(gl, this::drawGeometryGL); } protected void drawAllMaps(GL2 gl, DrawGeometryGLFunction drawFunction) { for (HashMap.Entry map : handler.getMapMatrix().getMatrix().entrySet()) { - drawAllMapLayersGL(gl, drawFunction, map.getValue().getGrid().mapLayersGL, - map.getKey().x * cols, -map.getKey().y * rows, 0); + drawAllMapLayersGL(gl, drawFunction, map.getValue().getGrid().mapLayersGL, map.getKey().x * cols, -map.getKey().y * rows, 0); } } protected void drawAllMapLayersGL(GL2 gl, DrawGeometryGLFunction drawFunction, MapLayerGL[] mapLayersGL, float x, float y, float z) { for (int i = 0; i < mapLayersGL.length; i++) { - if (handler.renderLayers[i]) { - if (mapLayersGL[i] != null) { - drawMapLayerGL(gl, drawFunction, mapLayersGL[i], x, y, z); - } + if (handler.renderLayers[i] && mapLayersGL[i] != null) { + drawMapLayerGL(gl, drawFunction, mapLayersGL[i], x, y, z); } } } @@ -343,7 +331,6 @@ protected void drawMapLayerGL(GL2 gl, DrawGeometryGLFunction drawFunction, MapLa Point mapCoords = handler.getMapSelected(); gl.glTranslatef(-mapCoords.x * MapGrid.cols, mapCoords.y * MapGrid.rows, -0.0f); - gl.glTranslatef(x, y, z); for (GeometryGL geometryGL : mapLayerGL.getGeometryGL().values()) { @@ -351,7 +338,7 @@ protected void drawMapLayerGL(GL2 gl, DrawGeometryGLFunction drawFunction, MapLa } } - protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, ArrayList textures) { + protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, List textures) { try { gl.glBindTexture(GL_TEXTURE_2D, textures.get(geometryGL.textureID).getTextureObject()); gl.glEnable(GL_TEXTURE_2D); @@ -428,54 +415,56 @@ protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, ArrayList } public void drawPlayer(GL2 gl){ - if(playerTexture != null) { + if (playerTexture == null) { + return; + } - gl.glEnable(GL_BLEND); - gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA); + gl.glEnable(GL_BLEND); + gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA); - gl.glEnable(GL_DEPTH_TEST); - gl.glDepthFunc(GL_LESS); + gl.glEnable(GL_DEPTH_TEST); + gl.glDepthFunc(GL_LESS); - gl.glEnable(GL_ALPHA_TEST); - gl.glAlphaFunc(GL_GREATER, 0.9f); + gl.glEnable(GL_ALPHA_TEST); + gl.glAlphaFunc(GL_GREATER, 0.9f); - gl.glLoadIdentity(); - applyCameraTransform(gl); - gl.glTranslatef( - bdhcamHandler.getPlayerX() - 16.0f + 0.5f, - -(bdhcamHandler.getPlayerY() + 1 - 16.0f), - bdhcamHandler.getSelectedPlateZ() - ); + gl.glLoadIdentity(); + applyCameraTransform(gl); + gl.glTranslatef( + bdhcamHandler.getPlayerX() - 16.0f + 0.5f, + -(bdhcamHandler.getPlayerY() + 1 - 16.0f), + bdhcamHandler.getSelectedPlateZ() + ); - gl.glBindTexture(GL_TEXTURE_2D, playerTexture.getTextureObject()); - gl.glEnable(GL_TEXTURE_2D); + gl.glBindTexture(GL_TEXTURE_2D, playerTexture.getTextureObject()); + gl.glEnable(GL_TEXTURE_2D); - gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + gl.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - gl.glBegin(GL_QUADS); - for (int i = 0; i < 4; i++) { - gl.glTexCoord2fv(playerTCoords, i * 2); - gl.glVertex3fv(playerVCoords, i * 3); - } - gl.glEnd(); + gl.glBegin(GL_QUADS); + for (int i = 0; i < 4; i++) { + gl.glTexCoord2fv(playerTCoords, i * 2); + gl.glVertex3fv(playerVCoords, i * 3); } + gl.glEnd(); } public void loadPlayerTextureGL(){ - if(playerImg != null){ - Texture tex = null; - try { - BufferedImage img = playerImg; - ImageUtil.flipImageVertically(img); - tex = AWTTextureIO.newTexture(GLProfile.getDefault(), img, false); - playerTexture = tex; - }catch(Exception ex){ + if (playerImg == null) { + return; + } + Texture tex = null; + try { + BufferedImage img = playerImg; + ImageUtil.flipImageVertically(img); + tex = AWTTextureIO.newTexture(GLProfile.getDefault(), img, false); + playerTexture = tex; + } catch (Exception ex){ - } } } @@ -492,11 +481,8 @@ public void setCamera(CameraSettings camera){ this.camera = camera; } - protected static interface DrawGeometryGLFunction { - public void draw(GL2 gl, GeometryGL geometryGL, ArrayList textures); + protected interface DrawGeometryGLFunction { + void draw(GL2 gl, GeometryGL geometryGL, List textures); } - - - } diff --git a/src/main/java/formats/bdhcam/BdhcamEditorDialog.java b/src/main/java/formats/bdhcam/BdhcamEditorDialog.java index fea7f61..32afdb2 100644 --- a/src/main/java/formats/bdhcam/BdhcamEditorDialog.java +++ b/src/main/java/formats/bdhcam/BdhcamEditorDialog.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.util.Objects; import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.plaf.basic.BasicComboBoxRenderer; @@ -47,9 +48,9 @@ public class BdhcamEditorDialog extends JDialog { private boolean jsSecondValueEnabled = true; protected ImageIcon[] plateIcons = { - new ImageIcon(getClass().getResource("/icons/clockIcon.png")), - new ImageIcon(getClass().getResource("/icons/posDepXIcon.png")), - new ImageIcon(getClass().getResource("/icons/posDepYIcon.png")), + new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/clockIcon.png"))), + new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/posDepXIcon.png"))), + new ImageIcon(Objects.requireNonNull(getClass().getResource("/icons/posDepYIcon.png"))), }; public BdhcamEditorDialog(Window owner) { @@ -60,15 +61,15 @@ public BdhcamEditorDialog(Window owner) { jlParameters.setCellRenderer(new ParameterListCellRenderer()); jcbPlateType.setRenderer(new PlateTypeCellRenderer()); - DefaultComboBoxModel plateTypeModel = new DefaultComboBoxModel(); + DefaultComboBoxModel plateTypeModel = new DefaultComboBoxModel<>(); for(Camplate.Type type : Camplate.Type.values()){ - plateTypeModel.addElement(type); + plateTypeModel.addElement(type.toString()); } jcbPlateType.setModel(plateTypeModel); - DefaultComboBoxModel model = new DefaultComboBoxModel(); + DefaultComboBoxModel model = new DefaultComboBoxModel<>(); for (CamParameter.Type type : CamParameter.Type.values()) { - model.addElement(type); + model.addElement(type.toString()); } jcbParamType1.setModel(model); jcbParamType1.setRenderer(new ParameterTypeListCellRenderer()); @@ -149,28 +150,22 @@ private void jbRemoveParameterActionPerformed(ActionEvent e) { } } - private void jcbParamType1ActionPerformed(ActionEvent e) { - if (jcbParamType1Enabled) { - if (bdhcamHandler.getSelectedParameter() != null) { - CamParameter param = bdhcamHandler.getSelectedParameter(); - param.type = CamParameter.Type.values()[jcbParamType1.getSelectedIndex()]; - updateViewParameterList(); - } + if (jcbParamType1Enabled && bdhcamHandler.getSelectedParameter() != null) { + CamParameter param = bdhcamHandler.getSelectedParameter(); + param.type = CamParameter.Type.values()[jcbParamType1.getSelectedIndex()]; + updateViewParameterList(); } } private void jcbParamType2ActionPerformed(ActionEvent e) { - if (jcbParamType2Enabled) { - if (bdhcamHandler.getSelectedParameter() != null) { - CamParameter param = bdhcamHandler.getSelectedParameter(); - param.type = CamParameter.Type.values()[jcbParamType2.getSelectedIndex()]; - updateViewParameterList(); - } + if (jcbParamType2Enabled && bdhcamHandler.getSelectedParameter() != null) { + CamParameter param = bdhcamHandler.getSelectedParameter(); + param.type = CamParameter.Type.values()[jcbParamType2.getSelectedIndex()]; + updateViewParameterList(); } } - private void jsFirstValueStateChanged(ChangeEvent e) { if (jsFirstValueEnabled) { float value = (Float) jsFirstValue.getValue(); @@ -210,30 +205,24 @@ private void jbRemovePlateActionPerformed(ActionEvent e) { } private void jcbPlateTypeActionPerformed(ActionEvent e) { - if (jcbPlateTypeEnabled) { - if (bdhcamHandler.getSelectedPlate() != null) { - bdhcamHandler.getBdhcam().changePlateType(bdhcamHandler.getIndexSelected(), jcbPlateType.getSelectedIndex()); - updateView(); - } + if (jcbPlateTypeEnabled && bdhcamHandler.getSelectedPlate() != null) { + bdhcamHandler.getBdhcam().changePlateType(bdhcamHandler.getIndexSelected(), jcbPlateType.getSelectedIndex()); + updateView(); } } private void jcbHeightActionPerformed(ActionEvent e) { - if(jcbHeightEnabled){ - if(bdhcamHandler.getSelectedPlate() != null){ - bdhcamHandler.getSelectedPlate().useZ = jcbHeight.isSelected(); - updateViewPlateSettings(); - } + if (jcbHeightEnabled && bdhcamHandler.getSelectedPlate() != null) { + bdhcamHandler.getSelectedPlate().useZ = jcbHeight.isSelected(); + updateViewPlateSettings(); } } private void jsHeightStateChanged(ChangeEvent e) { - if(jsHeightEnabled){ - if(bdhcamHandler.getSelectedPlate() != null){ - bdhcamHandler.getSelectedPlate().z = (Integer)jsHeight.getValue(); - updateViewPlateSettings(); - updateViewCameraDisplay(); - } + if (jsHeightEnabled && bdhcamHandler.getSelectedPlate() != null) { + bdhcamHandler.getSelectedPlate().z = (Integer) jsHeight.getValue(); + updateViewPlateSettings(); + updateViewCameraDisplay(); } } @@ -245,7 +234,6 @@ private void jlTutorialMousePressed(MouseEvent e) { } } - private void jbImportBdhcamActionPerformed(ActionEvent e) { final JFileChooser fc = new JFileChooser(); if (handler.getLastBdhcDirectoryUsed() != null) { @@ -254,21 +242,21 @@ private void jbImportBdhcamActionPerformed(ActionEvent e) { fc.setFileFilter(new FileNameExtensionFilter("Terrain File (*.bdhcam)", Bdhcam.fileExtension)); fc.setApproveButtonText("Open"); fc.setDialogTitle("Open BDHCAM"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - String path = fc.getSelectedFile().getPath(); - handler.setLastBdhcDirectoryUsed(fc.getSelectedFile().getParent()); - Bdhcam bdhcam = BdhcamLoader.loadBdhcam(path); - bdhcamHandler.setBdhcam(bdhcam); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + String path = fc.getSelectedFile().getPath(); + handler.setLastBdhcDirectoryUsed(fc.getSelectedFile().getParent()); - updateView(); - } catch (Exception ex) { - JOptionPane.showMessageDialog(this, "Can't open file", - "Error opening BDHCAM file", JOptionPane.ERROR_MESSAGE); - } + Bdhcam bdhcam = BdhcamLoader.loadBdhcam(path); + bdhcamHandler.setBdhcam(bdhcam); + updateView(); + } catch (Exception ex) { + JOptionPane.showMessageDialog(this, "Can't open file", + "Error opening BDHCAM file", JOptionPane.ERROR_MESSAGE); } } @@ -297,11 +285,6 @@ private void jbExportBdhcamActionPerformed(ActionEvent e) { } } - - - - - private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents panel1 = new JPanel(); @@ -819,11 +802,7 @@ public void updateViewPlateList(int indexSelected) { if (indexSelected >= model.getSize()) { indexSelected = model.getSize() - 1; } - if (indexSelected >= 0) { - bdhcamHandler.setSelectedPlate(indexSelected); - } else { - bdhcamHandler.setSelectedPlate(0); - } + bdhcamHandler.setSelectedPlate(Math.max(indexSelected, 0)); bdhcamHandler.stopAnimation(); jlPlates.setSelectedIndex(bdhcamHandler.getIndexSelected()); @@ -848,11 +827,7 @@ public void updateViewParameterList(int indexSelected) { if (indexSelected >= model.getSize()) { indexSelected = model.getSize() - 1; } - if (indexSelected >= 0) { - bdhcamHandler.setIndexParamSelected(indexSelected); - } else { - bdhcamHandler.setIndexParamSelected(0); - } + bdhcamHandler.setIndexParamSelected(Math.max(indexSelected, 0)); jlParameters.setSelectedIndex(bdhcamHandler.getIndexParamSelected()); } else { jlParameters.setModel(new DefaultListModel<>()); @@ -868,11 +843,7 @@ public void updateViewCardPanel() { CardLayout cl = (CardLayout) (cardPanel.getLayout()); Camplate plate = bdhcamHandler.getSelectedPlate(); - if (plate.type.ID == Camplate.Type.POS_INDEPENDENT.ID) { - cl.show(cardPanel, "cardPosIndep"); - } else { - cl.show(cardPanel, "cardPosDep"); - } + cl.show(cardPanel, plate.type.ID == Camplate.Type.POS_INDEPENDENT.ID ? "cardPosIndep" : "cardPosDep"); } } @@ -950,27 +921,23 @@ public void updateViewCameraDisplay() { } public void updateViewPlateSettings(){ - if(bdhcamHandler.getSelectedPlate() != null){ - jcbPlateTypeEnabled = false; - jcbPlateType.setSelectedIndex(bdhcamHandler.getSelectedPlate().type.ID); - jcbPlateType.setForeground(bdhcamHandler.getSelectedPlate().type.color); - //(jcbPlateType.get).setIcon(plateIcons[bdhcamHandler.getSelectedPlate().type.ID]); - jcbPlateTypeEnabled = true; - - jcbHeightEnabled = false; - jcbHeight.setSelected(bdhcamHandler.getSelectedPlate().useZ); - jcbHeightEnabled = true; - - jsHeightEnabled = false; - jsHeight.setValue(bdhcamHandler.getSelectedPlate().z); - jsHeightEnabled = true; - if(bdhcamHandler.getSelectedPlate().useZ){ - jsHeight.setEnabled(true); - }else{ - jsHeight.setEnabled(false); - } - + if (bdhcamHandler.getSelectedPlate() == null) { + return; } + jcbPlateTypeEnabled = false; + jcbPlateType.setSelectedIndex(bdhcamHandler.getSelectedPlate().type.ID); + jcbPlateType.setForeground(bdhcamHandler.getSelectedPlate().type.color); + //(jcbPlateType.get).setIcon(plateIcons[bdhcamHandler.getSelectedPlate().type.ID]); + jcbPlateTypeEnabled = true; + + jcbHeightEnabled = false; + jcbHeight.setSelected(bdhcamHandler.getSelectedPlate().useZ); + jcbHeightEnabled = true; + + jsHeightEnabled = false; + jsHeight.setValue(bdhcamHandler.getSelectedPlate().z); + jsHeightEnabled = true; + jsHeight.setEnabled(bdhcamHandler.getSelectedPlate().useZ); } public BdhcamCameraDisplay getBdhcamDisplay() { @@ -983,18 +950,14 @@ public BdhcamPlatesDisplay getPlatesDisplay() { private class PlateListCellRenderer extends DefaultListCellRenderer { @Override - public Component getListCellRendererComponent(JList list, Object value, int index, - boolean isSelected, boolean cellHasFocus) { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel jlabel = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); Camplate plate = (Camplate) value; Color c = plate.getFillColor(); String colorHex = String.format("#%02x%02x%02x", c.getRed(), c.getGreen(), c.getBlue()); - jlabel.setText( - "Plate " + String.valueOf(index) + "" + - " [ " + - plate.type.name + - "" + "]" + ""); + jlabel.setText("Plate " + index + "" + + " [ " + plate.type.name + "" + "]" + ""); return jlabel; } @@ -1002,15 +965,13 @@ public Component getListCellRendererComponent(JList list, Object value, int inde private class ParameterListCellRenderer extends DefaultListCellRenderer { @Override - public Component getListCellRendererComponent(JList list, Object value, int index, - boolean isSelected, boolean cellHasFocus) { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel jlabel = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); CamParameter parameter = (CamParameter) value; Color c = parameter.type.color; String colorHex = String.format("#%02x%02x%02x", c.getRed(), c.getGreen(), c.getBlue()); - jlabel.setText( - "" + parameter.type.name + "" + + jlabel.setText("" + parameter.type.name + "" + ""); return jlabel; @@ -1019,16 +980,13 @@ public Component getListCellRendererComponent(JList list, Object value, int inde private class ParameterTypeListCellRenderer extends DefaultListCellRenderer { @Override - public Component getListCellRendererComponent(JList list, Object value, int index, - boolean isSelected, boolean cellHasFocus) { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel jlabel = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); CamParameter.Type parameter = (CamParameter.Type) value; Color c = parameter.color; String colorHex = String.format("#%02x%02x%02x", c.getRed(), c.getGreen(), c.getBlue()); - jlabel.setText( - "" + parameter.name + "" + - ""); + jlabel.setText("" + parameter.name + "" + ""); return jlabel; } @@ -1036,8 +994,7 @@ public Component getListCellRendererComponent(JList list, Object value, int inde private class PlateTypeCellRenderer extends BasicComboBoxRenderer { @Override - public Component getListCellRendererComponent(JList list, Object value, int index, - boolean isSelected, boolean cellHasFocus) { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel c = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); Camplate.Type type = (Camplate.Type) value; @@ -1047,7 +1004,6 @@ public Component getListCellRendererComponent(JList list, Object value, int inde return c; } - } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables diff --git a/src/main/java/formats/bdhcam/BdhcamHandler.java b/src/main/java/formats/bdhcam/BdhcamHandler.java index 485fcc1..badaef8 100644 --- a/src/main/java/formats/bdhcam/BdhcamHandler.java +++ b/src/main/java/formats/bdhcam/BdhcamHandler.java @@ -24,7 +24,6 @@ public class BdhcamHandler { public BdhcamHandler(MapEditorHandler handler, BdhcamEditorDialog dialog){ this.handler = handler; this.dialog = dialog; - } public Bdhcam getBdhcam() { @@ -41,10 +40,8 @@ public Camplate getSelectedPlate(){ public CamParameter getSelectedParameter(){ Camplate plate = getSelectedPlate(); - if(plate != null){ - if(indexParamSelected < plate.parameters.size()){ - return plate.parameters.get(indexParamSelected); - } + if (plate != null && indexParamSelected < plate.parameters.size()) { + return plate.parameters.get(indexParamSelected); } return null; } @@ -82,12 +79,7 @@ public float getPlayerY() { public float getSelectedPlateZ(){ Camplate plate = getSelectedPlate(); - if(plate != null){ - if(plate.useZ){ - return plate.z; - } - } - return 0.0f; + return plate != null && plate.useZ ? plate.z : 0.0f; } public void setPlayerX(float playerX) { @@ -117,11 +109,10 @@ public void startAnimation(){ if (getSelectedPlate().type.ID == Camplate.Type.POS_INDEPENDENT.ID) { animator = new CamAnimPosIndep(handler, this, (CamplatePosIndep) getSelectedPlate()); - animator.start(); }else{ animator = new CamAnimPosDep(handler, this, (CamplatePosDep) getSelectedPlate()); - animator.start(); } + animator.start(); } } diff --git a/src/main/java/formats/bdhcam/BdhcamLoader.java b/src/main/java/formats/bdhcam/BdhcamLoader.java index 76f0a62..c8fc948 100644 --- a/src/main/java/formats/bdhcam/BdhcamLoader.java +++ b/src/main/java/formats/bdhcam/BdhcamLoader.java @@ -6,7 +6,7 @@ import java.io.File; import java.nio.file.Files; -import java.util.ArrayList; +import java.util.List; public class BdhcamLoader { @@ -14,7 +14,7 @@ public static Bdhcam loadBdhcam(String path) throws Exception{ return loadBdhcam(Files.readAllBytes(new File(path).toPath())); } - public static Bdhcam loadBdhcam(byte[] data) throws Exception { + public static Bdhcam loadBdhcam(byte[] data) { int bdhcamOffset = (int)BinaryReader.readUInt16(data, 2) + 0x10; return loadBdhcam(data, bdhcamOffset); } @@ -23,15 +23,14 @@ public static Bdhcam loadBdhcam(String path, int offset) throws Exception{ return loadBdhcam(Files.readAllBytes(new File(path).toPath()), offset); } - public static Bdhcam loadBdhcam(byte[] data, int offset) throws Exception { - + public static Bdhcam loadBdhcam(byte[] data, int offset) { BinaryArrayReader reader = new BinaryArrayReader(data, offset); String signature = reader.readString(4); int numPlates = (int) reader.readUInt32(); Bdhcam bdhcam = new Bdhcam(numPlates); - ArrayList plates = bdhcam.getPlates(); + List plates = bdhcam.getPlates(); for (int i = 0; i < numPlates; i++) { Camplate plate; diff --git a/src/main/java/formats/bdhcam/BdhcamPlatesDisplay.java b/src/main/java/formats/bdhcam/BdhcamPlatesDisplay.java index ab0bf0c..0c1cce2 100644 --- a/src/main/java/formats/bdhcam/BdhcamPlatesDisplay.java +++ b/src/main/java/formats/bdhcam/BdhcamPlatesDisplay.java @@ -73,139 +73,142 @@ public BdhcamPlatesDisplay() { private void thisMouseDragged(MouseEvent evt) { int x = getFixedMouseX(evt); int y = getFixedMouseY(evt); - if (bdhcamHandler.getBdhcam().getPlates().size() > 0) { - if (dragging && isCursorInsiePanel(evt)) { - int deltaX = (x - lastX) / TILE_SIZE; - int deltaY = (y - lastY) / TILE_SIZE; - Camplate p = bdhcamHandler.getSelectedPlate(); - switch (partSelected) { - case CENTER: - updatePlate(p, lastPlateX + deltaX, lastPlateY + deltaY, p.width, p.height); - break; - case CORNER_SE: - updatePlate(p, p.x, p.y, lastPlateWidth + deltaX, lastPlateHeight + deltaY); - break; - case CORNER_NW: - updatePlate(p, lastPlateX + deltaX, lastPlateY + deltaY, lastPlateWidth - deltaX, lastPlateHeight - deltaY); - break; - case CORNER_NE: - updatePlate(p, p.x, lastPlateY + deltaY, lastPlateWidth + deltaX, lastPlateHeight - deltaY); - break; - case CORNER_SW: - updatePlate(p, lastPlateX + deltaX, p.y, lastPlateWidth - deltaX, lastPlateHeight + deltaY); - break; - case BORDER_N: - updatePlate(p, p.x, lastPlateY + deltaY, p.width, lastPlateHeight - deltaY); - break; - case BORDER_S: - updatePlate(p, p.x, p.y, p.width, lastPlateHeight + deltaY); - break; - case BORDER_W: - updatePlate(p, lastPlateX + deltaX, p.y, lastPlateWidth - deltaX, p.height); - break; - case BORDER_E: - updatePlate(p, p.x, p.y, lastPlateWidth + deltaX, p.height); - break; - } + if (bdhcamHandler.getBdhcam().getPlates().size() <= 0) { + return; + } + if (dragging && isCursorInsiePanel(evt)) { + int deltaX = (x - lastX) / TILE_SIZE; + int deltaY = (y - lastY) / TILE_SIZE; + Camplate p = bdhcamHandler.getSelectedPlate(); + switch (partSelected) { + case CENTER: + updatePlate(p, lastPlateX + deltaX, lastPlateY + deltaY, p.width, p.height); + break; + case CORNER_SE: + updatePlate(p, p.x, p.y, lastPlateWidth + deltaX, lastPlateHeight + deltaY); + break; + case CORNER_NW: + updatePlate(p, lastPlateX + deltaX, lastPlateY + deltaY, lastPlateWidth - deltaX, lastPlateHeight - deltaY); + break; + case CORNER_NE: + updatePlate(p, p.x, lastPlateY + deltaY, lastPlateWidth + deltaX, lastPlateHeight - deltaY); + break; + case CORNER_SW: + updatePlate(p, lastPlateX + deltaX, p.y, lastPlateWidth - deltaX, lastPlateHeight + deltaY); + break; + case BORDER_N: + updatePlate(p, p.x, lastPlateY + deltaY, p.width, lastPlateHeight - deltaY); + break; + case BORDER_S: + updatePlate(p, p.x, p.y, p.width, lastPlateHeight + deltaY); + break; + case BORDER_W: + updatePlate(p, lastPlateX + deltaX, p.y, lastPlateWidth - deltaX, p.height); + break; + case BORDER_E: + updatePlate(p, p.x, p.y, lastPlateWidth + deltaX, p.height); + break; } - bdhcamHandler.setPlayerInPlate(bdhcamHandler.getSelectedPlate()); - repaint(); - } + bdhcamHandler.setPlayerInPlate(bdhcamHandler.getSelectedPlate()); + repaint(); } private void thisMousePressed(MouseEvent evt) { int x = getFixedMouseX(evt); int y = getFixedMouseY(evt); - if (indexPlateHovering != -1) { - if (SwingUtilities.isLeftMouseButton(evt)) { - if(bdhcamHandler.getSelectedPlate() != null) { - if (isHoveringPlate(bdhcamHandler.getSelectedPlate(), x, y)) { - partSelected = getPartSelected(bdhcamHandler.getSelectedPlate(), x, y); - } else { - bdhcamHandler.setSelectedPlate(indexPlateHovering); - bdhcamHandler.stopAnimation(); - //bdhcamHandler.setPlayerInPlate(bdhcamHandler.getSelectedPlate()); - partSelected = partHovering; - } + if (indexPlateHovering == -1) { + return; + } + if (SwingUtilities.isLeftMouseButton(evt)) { + if(bdhcamHandler.getSelectedPlate() != null) { + if (isHoveringPlate(bdhcamHandler.getSelectedPlate(), x, y)) { + partSelected = getPartSelected(bdhcamHandler.getSelectedPlate(), x, y); + } else { + bdhcamHandler.setSelectedPlate(indexPlateHovering); + bdhcamHandler.stopAnimation(); + //bdhcamHandler.setPlayerInPlate(bdhcamHandler.getSelectedPlate()); + partSelected = partHovering; } - dragging = true; - lastX = getFixedMouseX(evt); - lastY = getFixedMouseY(evt); + } + dragging = true; + lastX = getFixedMouseX(evt); + lastY = getFixedMouseY(evt); - Camplate p = bdhcamHandler.getSelectedPlate(); - lastPlateX = p.x; - lastPlateY = p.y; - lastPlateWidth = p.width; - lastPlateHeight = p.height; + Camplate p = bdhcamHandler.getSelectedPlate(); + lastPlateX = p.x; + lastPlateY = p.y; + lastPlateWidth = p.width; + lastPlateHeight = p.height; - bdhcamHandler.getDialog().updateView(); - } - repaint(); + bdhcamHandler.getDialog().updateView(); } + repaint(); } private void thisMouseMoved(MouseEvent evt) { int x = getFixedMouseX(evt); int y = getFixedMouseY(evt); - if (bdhcamHandler.getSelectedPlate() != null) { - if (isHoveringPlate(bdhcamHandler.getSelectedPlate(), x, y)) { - partHovering = getPartSelected(bdhcamHandler.getSelectedPlate(), x, y); - indexPlateHovering = bdhcamHandler.getIndexSelected(); - setCursor(new Cursor(partHovering)); - } else { - for (int i = 0; i < bdhcamHandler.getBdhcam().getPlates().size(); i++) { - Camplate p = bdhcamHandler.getBdhcam().getPlate(i); - if (isHoveringPlate(p, x, y)) { - partHovering = getPartSelected(p, x, y); - indexPlateHovering = i; - setCursor(new Cursor(partHovering)); - return; - } + if (bdhcamHandler.getSelectedPlate() == null) { + return; + } + if (isHoveringPlate(bdhcamHandler.getSelectedPlate(), x, y)) { + partHovering = getPartSelected(bdhcamHandler.getSelectedPlate(), x, y); + indexPlateHovering = bdhcamHandler.getIndexSelected(); + setCursor(new Cursor(partHovering)); + } else { + for (int i = 0; i < bdhcamHandler.getBdhcam().getPlates().size(); i++) { + Camplate p = bdhcamHandler.getBdhcam().getPlate(i); + if (isHoveringPlate(p, x, y)) { + partHovering = getPartSelected(p, x, y); + indexPlateHovering = i; + setCursor(new Cursor(partHovering)); + return; } - setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); - partHovering = -1; - indexPlateHovering = -1; } + setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); + partHovering = -1; + indexPlateHovering = -1; } } private void thisKeyPressed(KeyEvent e) { - if (!movingPlayer) { - switch (e.getKeyCode()) { - case KeyEvent.VK_UP: - movingPlayer = true; - movingX = false; - nextX = (int) (bdhcamHandler.getPlayerX()); - nextY = (int) (bdhcamHandler.getPlayerY() + 1); - deltaX = 0.0f; - deltaY = delta; - break; - case KeyEvent.VK_DOWN: - movingPlayer = true; - movingX = false; - nextX = (int) (bdhcamHandler.getPlayerX()); - nextY = (int) (bdhcamHandler.getPlayerY() - 1); - deltaX = 0.0f; - deltaY = -delta; - break; - case KeyEvent.VK_LEFT: - movingPlayer = true; - movingX = true; - nextX = (int) bdhcamHandler.getPlayerX() - 1; - nextY = (int) (bdhcamHandler.getPlayerY()); - deltaX = -delta; - deltaY = 0.0f; - break; - case KeyEvent.VK_RIGHT: - movingPlayer = true; - movingX = true; - nextX = (int) bdhcamHandler.getPlayerX() + 1; - nextY = (int) (bdhcamHandler.getPlayerY()); - deltaX = delta; - deltaY = 0.0f; - break; - } + if (movingPlayer) { + return; + } + switch (e.getKeyCode()) { + case KeyEvent.VK_UP: + movingPlayer = true; + movingX = false; + nextX = (int) (bdhcamHandler.getPlayerX()); + nextY = (int) (bdhcamHandler.getPlayerY() + 1); + deltaX = 0.0f; + deltaY = delta; + break; + case KeyEvent.VK_DOWN: + movingPlayer = true; + movingX = false; + nextX = (int) (bdhcamHandler.getPlayerX()); + nextY = (int) (bdhcamHandler.getPlayerY() - 1); + deltaX = 0.0f; + deltaY = -delta; + break; + case KeyEvent.VK_LEFT: + movingPlayer = true; + movingX = true; + nextX = (int) bdhcamHandler.getPlayerX() - 1; + nextY = (int) (bdhcamHandler.getPlayerY()); + deltaX = -delta; + deltaY = 0.0f; + break; + case KeyEvent.VK_RIGHT: + movingPlayer = true; + movingX = true; + nextX = (int) bdhcamHandler.getPlayerX() + 1; + nextY = (int) (bdhcamHandler.getPlayerY()); + deltaX = delta; + deltaY = 0.0f; + break; } } @@ -213,7 +216,6 @@ public void init(MapEditorHandler handler, BdhcamHandler bdhcamHandler, Buffered this.handler = handler; this.bdhcamHandler = bdhcamHandler; this.mapImage = mapImage; - } @Override @@ -264,14 +266,11 @@ private void drawPlates(Graphics g, Bdhcam bdhcam) { drawPlateBorder(g, bdhcam.getPlates().get(i)); } - if (bdhcamHandler.getSelectedPlate() != null) { g.setColor(Color.red); drawPlateBorder(g, bdhcamHandler.getSelectedPlate()); g.setColor(Color.white); drawPlateBorder(g, bdhcamHandler.getSelectedPlate(), 2); - - } } @@ -286,8 +285,7 @@ private void drawGrid(Graphics g) { } private void drawPlateBorder(Graphics g, Camplate p) { - g.drawRect(p.x * TILE_SIZE, p.y * TILE_SIZE, - p.width * TILE_SIZE - 1, p.height * TILE_SIZE - 1); + g.drawRect(p.x * TILE_SIZE, p.y * TILE_SIZE, p.width * TILE_SIZE - 1, p.height * TILE_SIZE - 1); } private void drawPlateBorder(Graphics g, Camplate p, int margin) { @@ -296,15 +294,12 @@ private void drawPlateBorder(Graphics g, Camplate p, int margin) { } private void fillPlate(Graphics g, Camplate p) { - g.fillRect(p.x * TILE_SIZE, p.y * TILE_SIZE, - p.width * TILE_SIZE, p.height * TILE_SIZE); - + g.fillRect(p.x * TILE_SIZE, p.y * TILE_SIZE, p.width * TILE_SIZE, p.height * TILE_SIZE); } private void drawPlateIndex(Graphics g, Camplate p, int index) { g.setColor(Color.white); - g.drawString( - String.valueOf(index), p.x * TILE_SIZE + 4, p.y * TILE_SIZE + 12); + g.drawString(String.valueOf(index), p.x * TILE_SIZE + 4, p.y * TILE_SIZE + 12); } private void drawBArrowX(Graphics g, int x1, int y1, int x2, int y2, int scale) { @@ -351,7 +346,6 @@ private void drawBArrowY(Graphics g, Camplate p, int scale) { scale); } - public int getPartSelected(Camplate p, int x, int y) { if (new Rectangle( p.x * TILE_SIZE + xOffset, @@ -467,7 +461,6 @@ public boolean isCursorInsiePanel(MouseEvent evt) { return x >= 0 && x < width && y >= 0 && y < height; } - private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents diff --git a/src/main/java/formats/bdhcam/BdhcamWriter.java b/src/main/java/formats/bdhcam/BdhcamWriter.java index 73bb001..3fb177a 100644 --- a/src/main/java/formats/bdhcam/BdhcamWriter.java +++ b/src/main/java/formats/bdhcam/BdhcamWriter.java @@ -8,14 +8,12 @@ import formats.bdhcam.camplate.CamParameterPosDep; import formats.bdhcam.camplate.CamParameterPosIndep; import formats.bdhcam.camplate.Camplate; -import utils.BinaryArrayWriter; import utils.BinaryBufferWriter; import utils.BinaryWriter; import utils.Utils; import java.io.File; import java.io.IOException; -import java.lang.reflect.Parameter; import java.nio.file.Files; @@ -30,7 +28,6 @@ public static void writeBdhcamToFile(String path, Bdhcam bdhcam, Bdhc bdhc, int bdhcData = BdhcWriterHGSS.bdhcToByteArray(bdhc); } writeBdhcamToFile(path, bdhcam, bdhcData); - } public static void writeBdhcamToFile(String path, Bdhcam bdhcam, byte[] bdhcData) throws IOException { @@ -43,7 +40,7 @@ public static void writeBdhcamToFile(String path, Bdhcam bdhcam, byte[] bdhcData } } - public static byte[] bdhcamToByteArray(Bdhcam bdhcam, byte[] bdhcData) throws Exception { + public static byte[] bdhcamToByteArray(Bdhcam bdhcam, byte[] bdhcData) { byte[] bdhcamData = bdhcamToByteArray(bdhcam); int padding = (-bdhcData.length) & 3; byte[] mergedData = new byte[bdhcData.length + padding + bdhcamData.length]; @@ -66,7 +63,7 @@ public static void writeBdhcamToFile(String path, Bdhcam bdhcam) throws Exceptio Files.write(new File(path).toPath(), bdhcamData); } - public static byte[] bdhcamToByteArray(Bdhcam bdhcam) throws Exception { + public static byte[] bdhcamToByteArray(Bdhcam bdhcam) { BinaryBufferWriter writer = new BinaryBufferWriter(); writer.writeString("DCAM"); @@ -84,12 +81,7 @@ public static byte[] bdhcamToByteArray(Bdhcam bdhcam) throws Exception { writer.writeUInt8(plate.x + plate.width); writer.writeUInt8(plate.y + plate.height); - if (plate.useZ) { - writer.writeUInt8(plate.z); - } else { - writer.writeUInt8(0x80); - } - + writer.writeUInt8(plate.useZ ? plate.z : 0x80); writer.writeUInt8(plate.type.ID); int paramOffset = 8 + numPlates * 8 + paramBytesWritten - offset; @@ -109,20 +101,17 @@ public static byte[] bdhcamToByteArray(Bdhcam bdhcam) throws Exception { CamParameterPosIndep paramPI = (CamParameterPosIndep) param; writer.writeUInt32(paramPI.duration); writer.writeUInt32((int) (paramPI.finalValue * 0x10000)); - paramBytesWritten += 8; } else { CamParameterPosDep paramPD = (CamParameterPosDep) param; writer.writeUInt32((int) (paramPD.firstValue * 0x10000)); writer.writeUInt32((int) (paramPD.secondValue * 0x10000)); - paramBytesWritten += 8; } + paramBytesWritten += 8; } writer.reset(); } } return writer.toByteArray(); - } - } diff --git a/src/main/java/formats/bdhcam/animation/CamAnimPosDep.java b/src/main/java/formats/bdhcam/animation/CamAnimPosDep.java index 7144218..a799425 100644 --- a/src/main/java/formats/bdhcam/animation/CamAnimPosDep.java +++ b/src/main/java/formats/bdhcam/animation/CamAnimPosDep.java @@ -8,7 +8,7 @@ public class CamAnimPosDep extends CamAnimator{ - private CamplatePosDep plate; + private final CamplatePosDep plate; private int distanceGoal = 1; private float distMoved = 0.0f; private final float increment = 0.05f; @@ -43,7 +43,6 @@ protected void updateLogic() { if(distMoved >= distanceGoal){ running = false; } - } @Override diff --git a/src/main/java/formats/bdhcam/animation/CamAnimPosIndep.java b/src/main/java/formats/bdhcam/animation/CamAnimPosIndep.java index 052845f..b370a1e 100644 --- a/src/main/java/formats/bdhcam/animation/CamAnimPosIndep.java +++ b/src/main/java/formats/bdhcam/animation/CamAnimPosIndep.java @@ -6,7 +6,7 @@ public class CamAnimPosIndep extends CamAnimator{ - private CamplatePosIndep plate; + private final CamplatePosIndep plate; private int frame = 0; private int finalFrame = 0; diff --git a/src/main/java/formats/bdhcam/camplate/CamParameter.java b/src/main/java/formats/bdhcam/camplate/CamParameter.java index 9fe6e95..cd8b668 100644 --- a/src/main/java/formats/bdhcam/camplate/CamParameter.java +++ b/src/main/java/formats/bdhcam/camplate/CamParameter.java @@ -1,10 +1,11 @@ package formats.bdhcam.camplate; import java.awt.*; +import java.util.Arrays; public abstract class CamParameter{ - public static enum Type{ + public enum Type{ UNKNOWN_1(0x00,"Unknown 1", Color.black, 0, -1), UNKNOWN_2(0x04,"Unknown 2", Color.black, 1,-1), UNKNOWN_3(0x08,"Unknown 3", Color.black, 2,-1), @@ -42,12 +43,10 @@ public static enum Type{ } public static Type get(int ID){ - for(Type type : Type.values()){ - if(type.ID == ID){ - return type; - } - } - return UNKNOWN_1; + return Arrays.stream(Type.values()) + .filter(type -> type.ID == ID) + .findFirst() + .orElse(UNKNOWN_1); } } @@ -58,5 +57,4 @@ public CamParameter(Type type){ } public abstract float getWeightedValue(float weight); - } diff --git a/src/main/java/formats/bdhcam/camplate/CamParameterPosDep.java b/src/main/java/formats/bdhcam/camplate/CamParameterPosDep.java index 80cd809..254cb43 100644 --- a/src/main/java/formats/bdhcam/camplate/CamParameterPosDep.java +++ b/src/main/java/formats/bdhcam/camplate/CamParameterPosDep.java @@ -5,14 +5,12 @@ public class CamParameterPosDep extends CamParameter{ public float firstValue; public float secondValue; - public CamParameterPosDep(CamParameter.Type type, float firstValue, float secondValue){ super(type); this.firstValue = firstValue; this.secondValue = secondValue; } - @Override public float getWeightedValue(float weight) { return (secondValue - firstValue) * weight + firstValue; diff --git a/src/main/java/formats/bdhcam/camplate/CamParameterPosIndep.java b/src/main/java/formats/bdhcam/camplate/CamParameterPosIndep.java index bfb5444..d03ccaf 100644 --- a/src/main/java/formats/bdhcam/camplate/CamParameterPosIndep.java +++ b/src/main/java/formats/bdhcam/camplate/CamParameterPosIndep.java @@ -5,7 +5,6 @@ public class CamParameterPosIndep extends CamParameter{ public int duration; public float finalValue; - public CamParameterPosIndep(CamParameter.Type type, int duration, float finalValue){ super(type); this.duration = duration; diff --git a/src/main/java/formats/bdhcam/camplate/CameraSettings.java b/src/main/java/formats/bdhcam/camplate/CameraSettings.java index 083947e..716b884 100644 --- a/src/main/java/formats/bdhcam/camplate/CameraSettings.java +++ b/src/main/java/formats/bdhcam/camplate/CameraSettings.java @@ -25,7 +25,6 @@ public CameraSettings(float x, float y, float z, values[6] = upX; values[7] = upY; values[8] = upZ; - } public CameraSettings(CamplatePosIndep plate, int frame){ @@ -50,7 +49,6 @@ public CameraSettings(CamplatePosDep plate, float weight, float[] playerPos) { values[param.type.camParamIndex] += param.getWeightedValue(weight); } } - } public CameraSettings(Camplate plate, float weight) { @@ -62,7 +60,6 @@ public CameraSettings(Camplate plate, float weight) { values[param.type.camParamIndex] += param.getWeightedValue(weight); } } - } private void moveCameraToPlayer(Camplate plate, float[] playerPos){ @@ -95,7 +92,6 @@ private void moveCameraToPlate(Camplate plate){ values[5] += plate.z; } } - } diff --git a/src/main/java/formats/bdhcam/camplate/Camplate.java b/src/main/java/formats/bdhcam/camplate/Camplate.java index d9977ed..f821814 100644 --- a/src/main/java/formats/bdhcam/camplate/Camplate.java +++ b/src/main/java/formats/bdhcam/camplate/Camplate.java @@ -2,6 +2,8 @@ import java.awt.*; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * @author Trifindo @@ -9,8 +11,7 @@ public abstract class Camplate { - public static enum Type { - + public enum Type { POS_INDEPENDENT(0, "Position independent", Color.orange), POS_DEPENDENT_X(1, "Position dependent X", Color.red), POS_DEPENDENT_Y(2, "Position dependent Y", Color.green); @@ -22,12 +23,10 @@ public static enum Type { } public static Type get(int ID) { - for (Type type : values()) { - if (type.ID == ID) { - return type; - } - } - return POS_INDEPENDENT; + return Arrays.stream(values()) + .filter(type -> type.ID == ID) + .findFirst() + .orElse(POS_INDEPENDENT); } public final int ID; @@ -43,7 +42,7 @@ public static Type get(int ID) { public boolean useZ; public static final int useZCode = 0x80; - public ArrayList parameters; + public List parameters; public Camplate(int x, int y, int z, int width, int height, int type, int numParameters, boolean useZ) { this.x = x; @@ -90,5 +89,4 @@ public void setType(int type){ this.type = Type.values()[type]; parameters = new ArrayList<>(); } - } diff --git a/src/main/java/formats/bdhcam/camplate/CamplatePosDep.java b/src/main/java/formats/bdhcam/camplate/CamplatePosDep.java index bd9f171..09940df 100644 --- a/src/main/java/formats/bdhcam/camplate/CamplatePosDep.java +++ b/src/main/java/formats/bdhcam/camplate/CamplatePosDep.java @@ -17,6 +17,5 @@ public CamplatePosDep(Camplate other, int type, int numPlates){ @Override public void addParameter() { parameters.add(new CamParameterPosDep(CamParameter.Type.CAMERA_X,0,0));//TODO: Improve this - } } diff --git a/src/main/java/formats/bdhcam/camplate/CamplatePosIndep.java b/src/main/java/formats/bdhcam/camplate/CamplatePosIndep.java index a83ed59..006446e 100644 --- a/src/main/java/formats/bdhcam/camplate/CamplatePosIndep.java +++ b/src/main/java/formats/bdhcam/camplate/CamplatePosIndep.java @@ -18,5 +18,4 @@ public CamplatePosIndep(Camplate other, int type, int numPlates){ public void addParameter() { parameters.add(new CamParameterPosIndep(CamParameter.Type.CAMERA_X,30,0));//TODO: Improve this } - } diff --git a/src/main/java/formats/collisions/CollisionHandler.java b/src/main/java/formats/collisions/CollisionHandler.java index 94a2e75..f19e615 100644 --- a/src/main/java/formats/collisions/CollisionHandler.java +++ b/src/main/java/formats/collisions/CollisionHandler.java @@ -23,7 +23,6 @@ public class CollisionHandler { private int indexCollisionFileSelected = 0; private boolean lockTerrainLayers = true; - private boolean isLayerChanged = false; private StateHandler collisionStateHandler = new StateHandler(); //private int numLayers = 2; @@ -33,8 +32,7 @@ public CollisionHandler(MapEditorHandler handler, CollisionsEditorDialog dialog) this.dialog = dialog; collisionTypes = new CollisionTypes(handler.getGameIndex()); /* - collisionTypes = new CollisionTypes("colors/CollisionsColors.txt", - handler.getCollisions().getNumLayers());*/ + collisionTypes = new CollisionTypes("colors/CollisionsColors.txt", handler.getCollisions().getNumLayers());*/ } public String getCollisionNameSelected() { @@ -43,7 +41,7 @@ public String getCollisionNameSelected() { public void incrementCollisionSelected(int delta) { int newCollIndex = indexCollisionSelected + delta; - if ((newCollIndex >= 0) && (newCollIndex < Collisions.cols * Collisions.rows)) { + if (newCollIndex >= 0 && newCollIndex < Collisions.cols * Collisions.rows) { indexCollisionSelected = newCollIndex; } } @@ -175,18 +173,6 @@ public void setLockTerrainLayersEnabled(boolean enabled){ } public boolean canEditLayer(int index){ - if(Game.isGenV(getGame())) { - if(lockTerrainLayers){ - if(indexLayerSelected > 3){ - return true; - }else{ - return false; - } - }else{ - return true; - } - }else{ - return true; - } + return !Game.isGenV(getGame()) || !lockTerrainLayers || indexLayerSelected > 3; } } diff --git a/src/main/java/formats/collisions/CollisionLayerSelector.java b/src/main/java/formats/collisions/CollisionLayerSelector.java index 8d34469..40c7fe3 100644 --- a/src/main/java/formats/collisions/CollisionLayerSelector.java +++ b/src/main/java/formats/collisions/CollisionLayerSelector.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import editor.game.Game; import editor.state.CollisionLayerState; @@ -13,7 +12,6 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; -import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.IOException; @@ -58,9 +56,7 @@ public CollisionLayerSelector() { } - this.setPreferredSize(new Dimension( - thumbnailWidth * maxNumLayers, - thumbnailHeight + textGapHeight)); + this.setPreferredSize(new Dimension(thumbnailWidth * maxNumLayers, thumbnailHeight + textGapHeight)); } private void formMousePressed(MouseEvent evt) { @@ -87,76 +83,59 @@ private void formMousePressed(MouseEvent evt) { public void paintComponent(Graphics g) { super.paintComponent(g); - if (collHandler != null && layerImgs != null) { - Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); - - - for (int i = 0; i < collHandler.getNumLayers(); i++) { - g.drawImage(layerImgs[i], - textWidth, i * thumbnailHeight, null); - - //AffineTransform orig = g2d.getTransform(); - //g2d.rotate(-Math.PI/2); - String string = layerNames[collHandler.getGame()][i]; - int width = g.getFontMetrics().stringWidth(string); - int height = g.getFontMetrics().getFont().getSize(); - g.drawString(string, - (textWidth - width) / 2 - , i * thumbnailHeight + (thumbnailHeight + height) / 2); - //g.drawString(string, (-1 - i) * thumbnailHeight, (textGapHeight * 2) / 3); - /* - g.drawString(string, - i * thumbnailHeight + (thumbnailHeight - width) / 2, - (textGapHeight * 2) / 3 - );*/ - //g2d.setTransform(orig); - } + if (collHandler == null || layerImgs == null) { + return; + } + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); - g.setColor(Color.red); - g.drawRect(textWidth, - collHandler.getIndexLayerSelected() * thumbnailHeight, - thumbnailWidth - 1, thumbnailHeight - 1); - g.setColor(new Color(255, 100, 100, 100)); - g.fillRect(textWidth, - collHandler.getIndexLayerSelected() * thumbnailHeight, - thumbnailWidth - 1, thumbnailHeight - 1); - - if(Game.isGenV(collHandler.getGame())) { - if (collHandler.lockTerrainLayers()) { - for (int i = 0; i < 4; i++) { - g.setColor(new Color(0.5f, 0.5f, 0.5f, 0.5f)); - g.fillRect(textWidth, - i * thumbnailHeight, - thumbnailWidth - 1, thumbnailHeight - 1); + for (int i = 0; i < collHandler.getNumLayers(); i++) { + g.drawImage(layerImgs[i], textWidth, i * thumbnailHeight, null); + + //AffineTransform orig = g2d.getTransform(); + //g2d.rotate(-Math.PI/2); + String string = layerNames[collHandler.getGame()][i]; + int width = g.getFontMetrics().stringWidth(string); + int height = g.getFontMetrics().getFont().getSize(); + g.drawString(string, (textWidth - width) / 2, i * thumbnailHeight + (thumbnailHeight + height) / 2); + //g.drawString(string, (-1 - i) * thumbnailHeight, (textGapHeight * 2) / 3); + /* + g.drawString(string, + i * thumbnailHeight + (thumbnailHeight - width) / 2, + (textGapHeight * 2) / 3 + );*/ + //g2d.setTransform(orig); + } - } - if(lockImg != null){ - for (int i = 0; i < 4; i++) { - g.drawImage(lockImg, textWidth, - i * thumbnailHeight, - null); - } + g.setColor(Color.red); + g.drawRect(textWidth, collHandler.getIndexLayerSelected() * thumbnailHeight, thumbnailWidth - 1, thumbnailHeight - 1); + g.setColor(new Color(255, 100, 100, 100)); + g.fillRect(textWidth, collHandler.getIndexLayerSelected() * thumbnailHeight, thumbnailWidth - 1, thumbnailHeight - 1); + + if(Game.isGenV(collHandler.getGame())) { + if (collHandler.lockTerrainLayers()) { + for (int i = 0; i < 4; i++) { + g.setColor(new Color(0.5f, 0.5f, 0.5f, 0.5f)); + g.fillRect(textWidth, i * thumbnailHeight, thumbnailWidth - 1, thumbnailHeight - 1); + } + if(lockImg != null){ + for (int i = 0; i < 4; i++) { + g.drawImage(lockImg, textWidth, i * thumbnailHeight, null); } } } } - } public void init(CollisionHandler collHandler) { this.collHandler = collHandler; - this.setPreferredSize(new Dimension( - thumbnailHeight + textWidth, - thumbnailWidth * collHandler.getNumLayers())); + this.setPreferredSize(new Dimension(thumbnailHeight + textWidth, thumbnailWidth * collHandler.getNumLayers())); layerImgs = new BufferedImage[collHandler.getNumLayers()]; for (int i = 0; i < layerImgs.length; i++) { - BufferedImage img = new BufferedImage(thumbnailWidth, - thumbnailHeight, BufferedImage.TYPE_INT_RGB); + BufferedImage img = new BufferedImage(thumbnailWidth, thumbnailHeight, BufferedImage.TYPE_INT_RGB); layerImgs[i] = img; Graphics g = img.getGraphics(); g.setColor(backColor); @@ -187,7 +166,6 @@ public void drawLayer(int layerIndex) { g.setColor(borderColor); g.drawRect(0, 0, thumbnailWidth - 1, thumbnailHeight - 1); - } private void initComponents() { diff --git a/src/main/java/formats/collisions/CollisionTypes.java b/src/main/java/formats/collisions/CollisionTypes.java index 87804ad..28f92c1 100644 --- a/src/main/java/formats/collisions/CollisionTypes.java +++ b/src/main/java/formats/collisions/CollisionTypes.java @@ -52,7 +52,6 @@ public CollisionTypes(String path, int numLayers) { fillColors = loadColorsAsResource(path);//"colors/CollisionsColors.txt" fontColors = loadFontColors(fillColors); collisionImgs = drawImages(fillColors, fontColors); - } public String getCollisionName(int layer, int index) { @@ -70,9 +69,9 @@ private Color[][] loadColorsAsResource(String path) { CollisionTypes.class.getClassLoader().getResourceAsStream(path))); String line; - while ((line = br.readLine()) != null && collIndex < numCollisions && layerIndex < numLayers) { + while ((line = br.readLine()) != null && layerIndex < numLayers) { String[] words = line.split(" "); - if (words != null && words.length > 2) { + if (words.length > 2) { colors[layerIndex][collIndex] = parseColor(words[1]); String name = words[2]; for (int i = 3; i < words.length; i++) { @@ -94,7 +93,6 @@ private Color[][] loadColorsAsResource(String path) { } return colors; - } private BufferedImage[][] drawImages(Color[][] fillColors, Color[][] fontColors) { @@ -107,8 +105,7 @@ private BufferedImage[][] drawImages(Color[][] fillColors, Color[][] fontColors) Graphics g = img.getGraphics(); Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); g.setColor(fillColors[i][j]); g.fillRect(0, 0, tileSize, tileSize); @@ -126,16 +123,14 @@ private BufferedImage[][] drawImages(Color[][] fillColors, Color[][] fontColors) private static Color parseColor(String colorString) { try { if (colorString.startsWith("#")) { - colorString = colorString.substring(1, colorString.length()); + colorString = colorString.substring(1); } byte[] rgb = hexStringToByteArray(colorString); - Color color = new Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF, 255); - return color; + return new Color(rgb[0] & 0xFF, rgb[1] & 0xFF, rgb[2] & 0xFF, 255); } catch (IndexOutOfBoundsException ex) { return new Color(255, 255, 255, 100); } - } public static byte[] hexStringToByteArray(String s) { diff --git a/src/main/java/formats/collisions/Collisions.java b/src/main/java/formats/collisions/Collisions.java index 36d87a9..d82ffc3 100644 --- a/src/main/java/formats/collisions/Collisions.java +++ b/src/main/java/formats/collisions/Collisions.java @@ -1,11 +1,9 @@ package formats.collisions; -import utils.BinaryArrayWriter; import utils.BinaryBufferWriter; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.util.ArrayList; @@ -74,8 +72,8 @@ public byte[] toByteArray(){ } writer.write(data); - for (int i = 0; i < lastBytes.size(); i++) { - writer.write(lastBytes.get(i)); + for (Byte lastByte : lastBytes) { + writer.write(lastByte); } return writer.toByteArray(); } @@ -139,6 +137,4 @@ private byte[][] cloneLayer(byte[][] layer) { public void setLayer(int layerIndex, byte[][] layers) { this.layers[layerIndex] = layers; } - - } diff --git a/src/main/java/formats/collisions/CollisionsDisplay.java b/src/main/java/formats/collisions/CollisionsDisplay.java index 7fcab72..fc52d8f 100644 --- a/src/main/java/formats/collisions/CollisionsDisplay.java +++ b/src/main/java/formats/collisions/CollisionsDisplay.java @@ -3,14 +3,11 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import editor.game.Game; import editor.handler.MapEditorHandler; import editor.state.CollisionLayerState; import java.awt.image.BufferedImage; -import javax.swing.SwingUtilities; import utils.Utils; @@ -37,11 +34,9 @@ public CollisionsDisplay() { } private void formMouseDragged(MouseEvent evt) { - if(collHandler.canEditLayer(collHandler.getIndexLayerSelected())) { - if (SwingUtilities.isLeftMouseButton(evt)) { - //collHandler.addMapState(new CollisionLayerState("Draw collision", collHandler)); - setCollision(evt); - } + if (collHandler.canEditLayer(collHandler.getIndexLayerSelected()) && SwingUtilities.isLeftMouseButton(evt)) { + //collHandler.addMapState(new CollisionLayerState("Draw collision", collHandler)); + setCollision(evt); } } @@ -95,15 +90,14 @@ public void paintComponent(Graphics g) { //drawGrid(g); } - public void init(MapEditorHandler handler, BufferedImage mapImage, - CollisionHandler collisionHandler) { + public void init(MapEditorHandler handler, BufferedImage mapImage, CollisionHandler collisionHandler) { this.handler = handler; this.mapImage = mapImage; this.collHandler = collisionHandler; } - private void setIndexSelected(java.awt.event.MouseEvent evt) { + private void setIndexSelected(MouseEvent evt) { int c = evt.getX() / tileSize; int r = evt.getY() / tileSize; @@ -115,8 +109,7 @@ private void setIndexSelected(java.awt.event.MouseEvent evt) { } } - - private void setCollision(java.awt.event.MouseEvent evt) { + private void setCollision(MouseEvent evt) { int c = evt.getX() / tileSize; int r = evt.getY() / tileSize; @@ -126,12 +119,11 @@ private void setCollision(java.awt.event.MouseEvent evt) { } } - private void floodFillCollision(java.awt.event.MouseEvent evt) { + private void floodFillCollision(MouseEvent evt) { int c = evt.getX() / tileSize; int r = evt.getY() / tileSize; if (new Rectangle(0, 0, cols, rows).contains(c, r)) { - Utils.floodFillMatrix(collHandler.getLayerSelected(), c, r, - (byte) collHandler.getIndexCollisionSelected()); + Utils.floodFillMatrix(collHandler.getLayerSelected(), c, r, (byte) collHandler.getIndexCollisionSelected()); collHandler.setValue(collHandler.getIndexCollisionSelected(), c, r); repaint(); } @@ -143,8 +135,7 @@ private void drawCollisions(Graphics g, Collisions collisions) { for (int i = 0; i < Collisions.cols; i++) { for (int j = 0; j < Collisions.rows; j++) { int value = collisions.getValue(collHandler.getIndexLayerSelected(), i, j); - g.drawImage(collHandler.getImage(value), - i * tileSize, j * tileSize, null); + g.drawImage(collHandler.getImage(value), i * tileSize, j * tileSize, null); } } } diff --git a/src/main/java/formats/collisions/CollisionsEditorDialog.java b/src/main/java/formats/collisions/CollisionsEditorDialog.java index d88b038..b47c1b2 100644 --- a/src/main/java/formats/collisions/CollisionsEditorDialog.java +++ b/src/main/java/formats/collisions/CollisionsEditorDialog.java @@ -3,7 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; @@ -15,9 +14,6 @@ import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import javax.swing.JButton; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; import javax.swing.filechooser.FileNameExtensionFilter; import net.miginfocom.swing.*; @@ -37,8 +33,7 @@ public CollisionsEditorDialog(Window owner) { } private void jSlider1StateChanged(ChangeEvent e) { - float value = jSlider1.getValue() / 100f; - collisionsDisplay.transparency = value; + collisionsDisplay.transparency = jSlider1.getValue() / 100f; collisionsDisplay.repaint(); } @@ -85,11 +80,7 @@ public void init(MapEditorHandler handler, BufferedImage mapImage) { collisionLayerSelector.init(collisionHandler); CardLayout cl = (CardLayout) (cardPanel.getLayout()); - if(Game.isGenV(handler.getGameIndex())){ - cl.show(cardPanel, "fileSelectorPanel"); - }else{ - cl.show(cardPanel, "emptyPanel"); - } + cl.show(cardPanel, Game.isGenV(handler.getGameIndex()) ? "fileSelectorPanel" : "emptyPanel"); updateView(); } @@ -110,24 +101,24 @@ public void openCollisionWithDialog() { fc.setFileFilter(new FileNameExtensionFilter("Collision File (*.per)", Collisions.fileExtension)); fc.setApproveButtonText("Open"); fc.setDialogTitle("Open"); - int returnVal = fc.showOpenDialog(this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - try { - String path = fc.getSelectedFile().getPath(); - handler.setLastCollisionsDirectoryUsed(fc.getSelectedFile().getParent()); - collisionHandler.setCollisions(new Collisions(path)); + if (fc.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) { + return; + } + try { + String path = fc.getSelectedFile().getPath(); + handler.setLastCollisionsDirectoryUsed(fc.getSelectedFile().getParent()); - collisionHandler.resetMapStateHandler(); - updateView(); - collisionsDisplay.repaint(); - collisionLayerSelector.drawAllLayers(); - collisionLayerSelector.repaint(); - collisionsTypesDisplay.repaint(); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, "Can't open file", "Error collision file", JOptionPane.INFORMATION_MESSAGE); - } + collisionHandler.setCollisions(new Collisions(path)); + collisionHandler.resetMapStateHandler(); + updateView(); + collisionsDisplay.repaint(); + collisionLayerSelector.drawAllLayers(); + collisionLayerSelector.repaint(); + collisionsTypesDisplay.repaint(); + } catch (IOException ex) { + JOptionPane.showMessageDialog(this, "Can't open file", "Error collision file", JOptionPane.INFORMATION_MESSAGE); } } @@ -242,10 +233,6 @@ public JButton getRedoButton() { return jbRedo; } - - - - private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents panel1 = new JPanel(); diff --git a/src/main/java/formats/collisions/CollisionsTypesSelector.java b/src/main/java/formats/collisions/CollisionsTypesSelector.java index 052b5a4..598b828 100644 --- a/src/main/java/formats/collisions/CollisionsTypesSelector.java +++ b/src/main/java/formats/collisions/CollisionsTypesSelector.java @@ -1,10 +1,7 @@ package formats.collisions; -import utils.Utils; - import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; @@ -24,7 +21,6 @@ public class CollisionsTypesSelector extends JPanel { private CollisionHandler collHandler; - public CollisionsTypesSelector() { initComponents(); setPreferredSize(new Dimension(width, height)); @@ -55,7 +51,6 @@ public void paintComponent(Graphics g) { g.setColor(new Color(255, 100, 100, 100)); g.fillRect(x, y, tileSize - 1, tileSize - 1); } - } public void init(CollisionHandler collisionHandler) { @@ -68,12 +63,10 @@ private void selectCollisionType(java.awt.event.MouseEvent evt) { int c = evt.getX() / tileSize; int r = evt.getY() / tileSize; int value = r * cols + c; - if (new Rectangle(0, 0, cols, rows).contains(c, r) - && value < CollisionTypes.numCollisions) { + if (new Rectangle(0, 0, cols, rows).contains(c, r) && value < CollisionTypes.numCollisions) { collHandler.setIndexCollisionSelected(value); collHandler.getDialog().updateView(); repaint(); - } } diff --git a/src/main/java/formats/collisions/bw/CParam2D.java b/src/main/java/formats/collisions/bw/CParam2D.java index 7cd2a95..128ffef 100644 --- a/src/main/java/formats/collisions/bw/CParam2D.java +++ b/src/main/java/formats/collisions/bw/CParam2D.java @@ -15,6 +15,4 @@ public CParam2D(int ID, Float slopeX, Float slopeY) { public int compareTo(CParam2D o) { return slopeX.compareTo(o.slopeX); } - - } diff --git a/src/main/java/formats/collisions/bw/CTileDisplay3D.java b/src/main/java/formats/collisions/bw/CTileDisplay3D.java index 602c7e4..b6df747 100644 --- a/src/main/java/formats/collisions/bw/CTileDisplay3D.java +++ b/src/main/java/formats/collisions/bw/CTileDisplay3D.java @@ -12,12 +12,10 @@ import java.nio.FloatBuffer; import java.util.Arrays; import java.util.Collections; +import java.util.stream.IntStream; -import static com.jogamp.opengl.GL.*; import static com.jogamp.opengl.GL2ES1.GL_ALPHA_TEST; -import static com.jogamp.opengl.GL2ES3.GL_QUADS; import static com.jogamp.opengl.GL2GL3.*; -import static com.jogamp.opengl.GL2GL3.GL_FILL; public class CTileDisplay3D extends GLJPanel implements GLEventListener, MouseListener, MouseMotionListener, KeyListener, MouseWheelListener { @@ -48,7 +46,7 @@ public class CTileDisplay3D extends GLJPanel implements GLEventListener, MouseLi 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f }; - private static final float cubeCoords[] = new float[]{ + private static final float[] cubeCoords = new float[]{ 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, @@ -93,7 +91,6 @@ public CTileDisplay3D() { cameraRotX = defaultCamRotX; cameraRotY = defaultCamRotY; cameraRotZ = defaultCamRotZ; - } @Override @@ -103,7 +100,6 @@ public void init(GLAutoDrawable drawable) { drawable.getGL().getGL2().glClearColor(0.0f, 0.5f, 0.5f, 1.0f); //axis = Generator.generateAxis(2.0f); - } @Override @@ -123,8 +119,6 @@ public void display(GLAutoDrawable drawable) { gl.glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); if (updateRequested) { - - updateRequested = false; } @@ -135,7 +129,6 @@ public void display(GLAutoDrawable drawable) { } drawAxis(gl); - } @Override @@ -165,10 +158,8 @@ public void mouseClicked(MouseEvent e) { @Override public void mousePressed(MouseEvent e) { - lastMouseX = e.getX(); lastMouseY = e.getY(); - } @Override @@ -206,8 +197,7 @@ public void mouseDragged(MouseEvent e) { repaint(); */ - } else if (SwingUtilities.isRightMouseButton(e) - | SwingUtilities.isMiddleMouseButton(e)) { + } else if (SwingUtilities.isRightMouseButton(e) | SwingUtilities.isMiddleMouseButton(e)) { float delta = 100.0f; cameraRotZ -= (((float) ((e.getX() - lastMouseX))) / getWidth()) * delta; lastMouseX = e.getX(); @@ -215,7 +205,6 @@ public void mouseDragged(MouseEvent e) { lastMouseY = e.getY(); repaint(); } - } @Override @@ -225,15 +214,12 @@ public void mouseMoved(MouseEvent e) { @Override public void mouseWheelMoved(MouseWheelEvent e) { - if (e.getWheelRotation() > 0) { cameraZ *= 1.1; } else { cameraZ /= 1.1; } repaint(); - - } protected void applyCameraTransform(GL2 gl) { @@ -298,11 +284,8 @@ public void drawWireframe(GL2 gl) { // adjust OpenGL settings and draw model gl.glEnable(GL_DEPTH_TEST); gl.glDepthFunc(GL_LEQUAL); - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - gl.glDisable(GL_TEXTURE_2D); - gl.glLineWidth(1.5f); applyCameraTransform(gl); @@ -311,7 +294,6 @@ public void drawWireframe(GL2 gl) { final int vertexPerTile = 4; final int coordsPerPlate = coordsPerVertex * vertexPerTile; - gl.glBegin(GL_QUADS); for (int j = 0; j < vertexPerTile; j++) { gl.glColor3f(0, 0, 0); @@ -319,7 +301,6 @@ public void drawWireframe(GL2 gl) { } gl.glEnd(); - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } @@ -327,13 +308,10 @@ protected void drawAxis(GL2 gl) { applyCameraTransform(gl); gl.glDisable(GL_TEXTURE_2D); - gl.glEnable(GL_DEPTH_TEST); gl.glDepthFunc(GL_LEQUAL); - gl.glEnable(GL_ALPHA_TEST); gl.glAlphaFunc(GL_NOTEQUAL, 0.0f); - gl.glLineWidth(3f); gl.glBegin(GL_LINES); @@ -353,11 +331,8 @@ public void drawTileGrid(GL2 gl) { // adjust OpenGL settings and draw model gl.glEnable(GL_DEPTH_TEST); gl.glDepthFunc(GL_LEQUAL); - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - gl.glDisable(GL_TEXTURE_2D); - gl.glLineWidth(1); final int vertexPerTile = 4; @@ -384,9 +359,7 @@ public void drawTileGrid(GL2 gl) { gl.glTranslatef(0.0f, 0.0f, 1.0f); } - gl.glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - } public void init(CollisionHandlerBW cHandler) { @@ -394,11 +367,8 @@ public void init(CollisionHandlerBW cHandler) { } private static Float[] toObjectArray(float[] array) { - Float[] newArray = new Float[array.length]; - for (int i = 0; i < array.length; i++) { - newArray[i] = array[i]; - } - return newArray; + return IntStream.range(0, array.length) + .mapToObj(i -> array[i]) + .toArray(Float[]::new); } - } diff --git a/src/main/java/formats/collisions/bw/CollisionHandlerBW.java b/src/main/java/formats/collisions/bw/CollisionHandlerBW.java index 1eddeff..8094586 100644 --- a/src/main/java/formats/collisions/bw/CollisionHandlerBW.java +++ b/src/main/java/formats/collisions/bw/CollisionHandlerBW.java @@ -38,7 +38,7 @@ public CollisionHandlerBW(MapEditorHandler handler, CollisionsEditorDialogBW dia }*/ } - public void saveToCollision() throws Exception { + public void saveToCollision() { handler.setCollisions(new Collisions(collisionFiles[0].toByteArray())); handler.setCollisions2(new Collisions(collisionFiles[1].toByteArray())); } @@ -63,9 +63,7 @@ public void moveCurrentTile(float dz){ public void rotateCurrentTile(){ float temp = currentTile[0]; - for(int i = 0; i < currentTile.length - 1; i++){ - currentTile[i] = currentTile[i + 1]; - } + System.arraycopy(currentTile, 1, currentTile, 0, currentTile.length - 1); currentTile[currentTile.length - 1] = temp; } diff --git a/src/main/java/formats/collisions/bw/CollisionsBW3D.java b/src/main/java/formats/collisions/bw/CollisionsBW3D.java index b7bab18..4f306fa 100644 --- a/src/main/java/formats/collisions/bw/CollisionsBW3D.java +++ b/src/main/java/formats/collisions/bw/CollisionsBW3D.java @@ -1,13 +1,13 @@ package formats.collisions.bw; import editor.game.Game; -import formats.bdhcam.camplate.Camplate; import utils.BinaryArrayReader; import utils.BinaryArrayWriter; import utils.Utils; import java.io.File; import java.nio.file.Files; +import java.util.stream.IntStream; public class CollisionsBW3D { @@ -615,11 +615,9 @@ public CollisionsBW3D(String path, int game) throws Exception { this(Files.readAllBytes(new File(path).toPath()), game); } - public CollisionsBW3D(byte[] data, int game) throws Exception { + public CollisionsBW3D(byte[] data, int game) { if(game == Game.BLACK || game == Game.WHITE){ gameType = TYPE_BW; - }else{ - gameType = TYPE_BW2; } tiles = new float[cols][rows][4]; @@ -664,7 +662,7 @@ public void saveToFile(String path) throws Exception { Files.write(new File(path).toPath(), data); } - public byte[] toByteArray() throws Exception { + public byte[] toByteArray() { byte[] data = new byte[4 + cols * rows * 8 + getNumCorners() * 8]; BinaryArrayWriter writer = new BinaryArrayWriter(data, 0); @@ -738,7 +736,7 @@ public float[] getVCoords() { for (int i = 0, c = 0; i < cols; i++) { for (int j = 0; j < rows; j++) { for (int k = 0; k < vertexPerTile; k++, c += coordsPerVertex) { - vCoords[c + 0] = i - 16.0f + xDelta[k]; + vCoords[c] = i - 16.0f + xDelta[k]; vCoords[c + 1] = -(j - 16.0f + yDelta[k]); vCoords[c + 2] = tiles[i][j][k]; } @@ -771,7 +769,6 @@ public void setZCoords(int x, int y, float[] coords) { tiles[x][y] = getZCoordsPlane(x, y, getSlopesX()[slopeIndex / 4], getSlopesY()[slopeIndex / 4], getDistances()[distIndex]); } - } public int[] getSlopeIndicesCorner(int x, int y, float[] coords) { @@ -912,13 +909,9 @@ public int getClosestSlopeIndex(float slopeX, float slopeY) { return minIndex * 4; } - private static boolean areArraysEqual(float[] tile1, float tile2[], float tol) { - for (int i = 0; i < tile1.length; i++) { - if (Math.abs(tile1[i] - tile2[i]) > tol) { - return false; - } - } - return true; + private static boolean areArraysEqual(float[] tile1, float[] tile2, float tol) { + return IntStream.range(0, tile1.length) + .noneMatch(i -> Math.abs(tile1[i] - tile2[i]) > tol); } public void floodFill(int x, int y, float[] tile) { @@ -927,7 +920,7 @@ public void floodFill(int x, int y, float[] tile) { } } - private static void floodFillMatrix(float screen[][][], int x, int y, float[] newC) { + private static void floodFillMatrix(float[][][] screen, int x, int y, float[] newC) { float[] prevC = screen[x][y]; if (areArraysEqual(newC, prevC, 0.01f)) { return; @@ -937,7 +930,7 @@ private static void floodFillMatrix(float screen[][][], int x, int y, float[] ne floodFillUtil(screen, x, y, prevC, newC, M, N); } - private static void floodFillUtil(float screen[][][], int x, int y, float[] prevC, float[] newC, int M, int N) { + private static void floodFillUtil(float[][][] screen, int x, int y, float[] prevC, float[] newC, int M, int N) { // Base cases if (x < 0 || x >= M || y < 0 || y >= N) { return; @@ -956,7 +949,6 @@ private static void floodFillUtil(float screen[][][], int x, int y, float[] prev floodFillUtil(screen, x, y - 1, prevC, newC, M, N); } - private float getSlopeX(int index){ if(index < getSlopesX().length){ return getSlopesX()[index]; @@ -992,5 +984,4 @@ private float[] getSlopesY() { private float[] getDistances() { return distances[gameType]; } - } diff --git a/src/main/java/formats/collisions/bw/CollisionsDisplay3D.java b/src/main/java/formats/collisions/bw/CollisionsDisplay3D.java index 05d9ecc..c346268 100644 --- a/src/main/java/formats/collisions/bw/CollisionsDisplay3D.java +++ b/src/main/java/formats/collisions/bw/CollisionsDisplay3D.java @@ -21,12 +21,10 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.nio.FloatBuffer; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; -import static com.jogamp.opengl.GL.*; import static com.jogamp.opengl.GL2ES1.GL_ALPHA_TEST; -import static com.jogamp.opengl.GL2ES3.GL_QUADS; import static com.jogamp.opengl.GL2GL3.*; public class CollisionsDisplay3D extends GLJPanel implements GLEventListener, MouseListener, MouseMotionListener, KeyListener, MouseWheelListener { @@ -108,7 +106,6 @@ public CollisionsDisplay3D() { cameraRotX = defaultCamRotX; cameraRotY = defaultCamRotY; cameraRotZ = defaultCamRotZ; - } @Override @@ -133,7 +130,6 @@ public void display(GLAutoDrawable drawable) { gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (updateRequested) { - handler.getTileset().loadTexturesGL(); handler.getBorderMapsTileset().loadTexturesGL(); @@ -156,11 +152,7 @@ public void display(GLAutoDrawable drawable) { switch (mode) { case View: - if (transparentEnabled) { - drawCollisions(gl); - } else { - drawCollisions(gl); - } + drawCollisions(gl); if (wireframeEnabled) { drawWireframe(gl); @@ -170,9 +162,7 @@ public void display(GLAutoDrawable drawable) { drawCollisions(gl); break; } - } - } @Override @@ -226,7 +216,6 @@ public void mousePressed(MouseEvent e) { } break; } - } @Override @@ -250,8 +239,8 @@ public void mouseDragged(MouseEvent e) { case View: if (SwingUtilities.isLeftMouseButton(e)) { float dist = cameraZ; - float deltaX = (((float) ((e.getX() - lastMouseX))) / getWidth()) * dist; - float deltaZ = (((float) ((e.getY() - lastMouseY))) / getHeight()) * dist; + float deltaX = ((e.getX() - lastMouseX) / getWidth()) * dist; + float deltaZ = ((e.getY() - lastMouseY) / getHeight()) * dist; Vector3D v = new Vector3D(deltaX, 0.0f, deltaZ); Matrix3D m2 = new Matrix3D(cameraRotZ, new Vector3D(0.0f, 1.0f, 0.0f)); @@ -264,12 +253,11 @@ public void mouseDragged(MouseEvent e) { lastMouseY = e.getY(); repaint(); - } else if (SwingUtilities.isRightMouseButton(e) - | SwingUtilities.isMiddleMouseButton(e)) { + } else if (SwingUtilities.isRightMouseButton(e) | SwingUtilities.isMiddleMouseButton(e)) { float delta = 100.0f; - cameraRotZ -= (((float) ((e.getX() - lastMouseX))) / getWidth()) * delta; + cameraRotZ -= ((e.getX() - lastMouseX) / getWidth()) * delta; lastMouseX = e.getX(); - cameraRotX -= (((float) ((e.getY() - lastMouseY))) / getHeight()) * delta; + cameraRotX -= ((e.getY() - lastMouseY) / getHeight()) * delta; lastMouseY = e.getY(); repaint(); } @@ -285,12 +273,9 @@ public void mouseDragged(MouseEvent e) { Point p = getCoordsInMap(e); cHandler.getCollisionsBW3D().setZCoords(p.x, p.y, cHandler.getCurrentTile()); cHandler.getDialog().updateViewCollisionDisplays(); - - } break; } - } @Override @@ -310,38 +295,30 @@ public void mouseWheelMoved(MouseWheelEvent e) { repaint(); break; case Edit: - if (e.getWheelRotation() > 0) { - cHandler.moveCurrentTile(-1.0f); - cHandler.getDialog().updateViewCTile(); - } else { - cHandler.moveCurrentTile(1.0f); - cHandler.getDialog().updateViewCTile(); - } + cHandler.moveCurrentTile(e.getWheelRotation() > 0 ? -1.0f : 1.0f); + cHandler.getDialog().updateViewCTile(); break; } - } @Override public void paintComponent(Graphics g) { super.paintComponent(g); - switch (mode) { - case Edit: - Graphics2D g2d = (Graphics2D) g; + if (mode == Mode.Edit) { + Graphics2D g2d = (Graphics2D) g; - AffineTransform transf = g2d.getTransform(); + AffineTransform transf = g2d.getTransform(); - g2d.scale((float) getWidth() / width, (float) getHeight() / height); + g2d.scale((float) getWidth() / width, (float) getHeight() / height); - g.setColor(new Color(0.0f, 0.0f, 0.0f, 0.5f)); - drawGrid(g); + g.setColor(new Color(0.0f, 0.0f, 0.0f, 0.5f)); + drawGrid(g); - g2d.setComposite(AlphaComposite.SrcOver.derive(0.35f)); - drawArrows(g); + g2d.setComposite(AlphaComposite.SrcOver.derive(0.35f)); + drawArrows(g); - g2d.setTransform(transf); - break; + g2d.setTransform(transf); } } @@ -386,18 +363,13 @@ private void logCTile(Point p) { String.format("0x%04x", slopeIndices[0] + 1) + " " + String.format("0x%04x", slopeIndices[1] / 4) + " " + String.format("0x%04x", distIndices[0]) + " " + String.format("0x%04x", distIndices[1]) ); - - } else { float distance = cHandler.getCollisionsBW3D().getDistancePlane(cHandler.getCurrentTile(), p.x, p.y); int distIndex = cHandler.getCollisionsBW3D().getDistanceIndexPlane(p.x, p.y); int slopeIndex = cHandler.getCollisionsBW3D().getSlopeIndex(p.x, p.y); cHandler.getDialog().getJlInfo().setText("PLANE " + String.format("0x%04x", slopeIndex) + " " + String.format("0x%04x", distIndex)); - } - - } private void drawGrid(Graphics g) { @@ -451,9 +423,7 @@ protected void drawOpaqueMaps(GL2 gl) { drawAllMaps(gl, (gl2, geometryGL, textures) -> { drawGeometryGL(gl2, geometryGL, textures); });*/ - drawCurrentMap(gl, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawCurrentMap(gl, this::drawGeometryGL); } protected void drawTransparentMaps(GL2 gl) { @@ -468,9 +438,7 @@ protected void drawTransparentMaps(GL2 gl) { gl.glEnable(GL_ALPHA_TEST); gl.glAlphaFunc(GL_NOTEQUAL, 0.0f); - drawCurrentMap(gl, (gl2, geometryGL, textures) -> { - drawGeometryGL(gl2, geometryGL, textures); - }); + drawCurrentMap(gl, this::drawGeometryGL); /* drawAllMaps(gl, (gl2, geometryGL, textures) -> { @@ -487,16 +455,13 @@ protected void drawAllMaps(GL2 gl, CollisionsDisplay3D.DrawGeometryGLFunction dr protected void drawCurrentMap(GL2 gl, CollisionsDisplay3D.DrawGeometryGLFunction drawFunction) { MapData map = handler.getCurrentMap(); - drawAllMapLayersGL(gl, drawFunction, map.getGrid().mapLayersGL, - 0, 0, 0); + drawAllMapLayersGL(gl, drawFunction, map.getGrid().mapLayersGL, 0, 0, 0); } protected void drawAllMapLayersGL(GL2 gl, CollisionsDisplay3D.DrawGeometryGLFunction drawFunction, MapLayerGL[] mapLayersGL, float x, float y, float z) { for (int i = 0; i < mapLayersGL.length; i++) { - if (handler.renderLayers[i]) { - if (mapLayersGL[i] != null) { - drawMapLayerGL(gl, drawFunction, mapLayersGL[i], x, y, z); - } + if (handler.renderLayers[i] && mapLayersGL[i] != null) { + drawMapLayerGL(gl, drawFunction, mapLayersGL[i], x, y, z); } } } @@ -511,7 +476,7 @@ protected void drawMapLayerGL(GL2 gl, CollisionsDisplay3D.DrawGeometryGLFunction } } - protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, ArrayList textures) { + protected void drawGeometryGL(GL2 gl, GeometryGL geometryGL, List textures) { try { gl.glBindTexture(GL_TEXTURE_2D, textures.get(geometryGL.textureID).getTextureObject()); gl.glEnable(GL_TEXTURE_2D); @@ -603,10 +568,8 @@ public void drawCollisions(GL2 gl) { if (xRayEnabled) { //gl.glDepthFunc(GL_ALWAYS); gl.glClear(GL_DEPTH_BUFFER_BIT); - gl.glDepthFunc(GL_LEQUAL); - } else { - gl.glDepthFunc(GL_LEQUAL); } + gl.glDepthFunc(GL_LEQUAL); //gl.glDepthFunc(GL_LEQUAL); //gl.glEnable(GL_ALPHA_TEST); @@ -736,7 +699,6 @@ private BufferedImage getArrowPoint(int x, int y) { public void initHandler(MapEditorHandler handler, CollisionHandlerBW cHandler) { this.handler = handler; this.cHandler = cHandler; - } public void setxRayEnabled(boolean xRayEnabled) { @@ -767,8 +729,7 @@ private static BufferedImage loadImage(String path) { } } - protected static interface DrawGeometryGLFunction { - public void draw(GL2 gl, GeometryGL geometryGL, ArrayList textures); + protected interface DrawGeometryGLFunction { + void draw(GL2 gl, GeometryGL geometryGL, List textures); } - } diff --git a/src/main/java/formats/collisions/bw/CollisionsEditorDialogBW.java b/src/main/java/formats/collisions/bw/CollisionsEditorDialogBW.java index 4395f03..fe8ac87 100644 --- a/src/main/java/formats/collisions/bw/CollisionsEditorDialogBW.java +++ b/src/main/java/formats/collisions/bw/CollisionsEditorDialogBW.java @@ -35,7 +35,6 @@ public CollisionsEditorDialogBW(Window owner) { setJSpinnerPrecission(jsZ1, minFractionDigits, maxFractionDigits); setJSpinnerPrecission(jsZ2, minFractionDigits, maxFractionDigits); setJSpinnerPrecission(jsZ3, minFractionDigits, maxFractionDigits); - } private void jpContainerComponentResized(ComponentEvent e) { @@ -167,7 +166,7 @@ private void thisWindowClosed(WindowEvent e) { try { cHandler.saveToCollision(); } catch (Exception exception) { - JOptionPane.showMessageDialog(this, "There was a problem gerating the PER files", + JOptionPane.showMessageDialog(this, "There was a problem generating the PER files", "Collisions not changed", JOptionPane.ERROR_MESSAGE); } } @@ -191,7 +190,6 @@ private void saveCollisionsWithDialog() { JOptionPane.showMessageDialog(this, "There was a problem saving the PER file", "Error saving PER", JOptionPane.ERROR_MESSAGE); } - } } @@ -216,7 +214,6 @@ private void openCollisionsWithDialog(){ JOptionPane.showMessageDialog(this, "There was a problem opening the file", "Error opening PER file", JOptionPane.ERROR_MESSAGE); } - } } @@ -224,10 +221,6 @@ public JLabel getJlInfo() { return jlInfo; } - - - - private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents panel10 = new JPanel(); diff --git a/src/main/java/formats/dae/Dae.java b/src/main/java/formats/dae/Dae.java index 818f548..a5f757d 100644 --- a/src/main/java/formats/dae/Dae.java +++ b/src/main/java/formats/dae/Dae.java @@ -10,5 +10,4 @@ public class Dae { Map libraryImages; Map libraryMaterials; - } diff --git a/src/main/java/formats/dae/DaeAttribute.java b/src/main/java/formats/dae/DaeAttribute.java index 03a8d08..47d21b6 100644 --- a/src/main/java/formats/dae/DaeAttribute.java +++ b/src/main/java/formats/dae/DaeAttribute.java @@ -13,5 +13,4 @@ public DaeAttribute(String name, String value) { this.name = name; this.value = value; } - } diff --git a/src/main/java/formats/dae/DaeElement.java b/src/main/java/formats/dae/DaeElement.java index da40388..317f91a 100644 --- a/src/main/java/formats/dae/DaeElement.java +++ b/src/main/java/formats/dae/DaeElement.java @@ -16,5 +16,4 @@ public class DaeElement { public DaeElement() { } - } diff --git a/src/main/java/formats/dae/DaeGeometry.java b/src/main/java/formats/dae/DaeGeometry.java index a2e152f..7f4f0f4 100644 --- a/src/main/java/formats/dae/DaeGeometry.java +++ b/src/main/java/formats/dae/DaeGeometry.java @@ -13,5 +13,4 @@ public class DaeGeometry extends DaeNode { public DaeGeometry(String id, String name) { super(id, name); } - } diff --git a/src/main/java/formats/dae/DaeImage.java b/src/main/java/formats/dae/DaeImage.java index 31618fb..56615ce 100644 --- a/src/main/java/formats/dae/DaeImage.java +++ b/src/main/java/formats/dae/DaeImage.java @@ -19,6 +19,4 @@ public String getFileName() { public void setFileName(String fileName) { this.fileName = fileName; } - - } diff --git a/src/main/java/formats/dae/DaeMaterial.java b/src/main/java/formats/dae/DaeMaterial.java index afd0924..db38cfd 100644 --- a/src/main/java/formats/dae/DaeMaterial.java +++ b/src/main/java/formats/dae/DaeMaterial.java @@ -11,5 +11,4 @@ public class DaeMaterial extends DaeNode { public DaeMaterial(String id, String name) { super(id, name); } - } diff --git a/src/main/java/formats/dae/DaeNode.java b/src/main/java/formats/dae/DaeNode.java index 8bb4336..395fc3f 100644 --- a/src/main/java/formats/dae/DaeNode.java +++ b/src/main/java/formats/dae/DaeNode.java @@ -29,6 +29,4 @@ public void setId(String id) { public void setName(String name) { this.name = name; } - - } diff --git a/src/main/java/formats/dae/DaeReader.java b/src/main/java/formats/dae/DaeReader.java index 4328a96..4adf920 100644 --- a/src/main/java/formats/dae/DaeReader.java +++ b/src/main/java/formats/dae/DaeReader.java @@ -59,7 +59,5 @@ public static void loadDae(String path) throws ParserConfigurationException, SAX } System.out.println("Loaded"); - } - } diff --git a/src/main/java/formats/imd/ExportImdDialog.java b/src/main/java/formats/imd/ExportImdDialog.java index 6b4dc9d..bcd5ba2 100644 --- a/src/main/java/formats/imd/ExportImdDialog.java +++ b/src/main/java/formats/imd/ExportImdDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import net.miginfocom.swing.*; @@ -12,12 +10,8 @@ import editor.handler.MapEditorHandler; import java.io.File; -import java.io.FilenameFilter; import java.util.ArrayList; -import javax.swing.DefaultListModel; -import javax.swing.JCheckBox; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; +import java.util.List; import javax.swing.filechooser.FileFilter; import utils.Utils; @@ -32,7 +26,7 @@ public class ExportImdDialog extends JDialog { private String objFolderPath = ""; private String imdFolderPath = ""; - private ArrayList selectedObjNames = new ArrayList<>(); + private List selectedObjNames = new ArrayList<>(); private MapEditorHandler handler; @@ -72,12 +66,7 @@ public String getDescription() { if (returnValOpen == JFileChooser.APPROVE_OPTION) { File file = fc.getSelectedFile(); if (file.exists()) { - String folderPath; - if (file.isDirectory()) { - folderPath = file.getPath(); - } else { - folderPath = file.getParent(); - } + String folderPath = file.isDirectory() ? file.getPath() : file.getParent(); loadObjFilesFromFolder(folderPath); } } @@ -164,7 +153,6 @@ public void init(MapEditorHandler handler) { this.imdFolderPath = imdFolderPath; jtfImdFolderPath.setText(imdFolderPath); } - } private boolean isFolderPathValid(String folderPath) { @@ -179,14 +167,9 @@ private boolean isFolderPathValid(String folderPath) { private void loadObjFilesFromFolder(String folderPath) { try { File folder = new File(folderPath); - File[] files = folder.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.endsWith(".obj"); - } - }); + File[] files = folder.listFiles((dir, name) -> name.endsWith(".obj")); - DefaultListModel model = new DefaultListModel(); + DefaultListModel model = new DefaultListModel<>(); this.jScrollCheckboxList.getCheckboxList().setModel(model); for (File file : files) { model.addElement(new JCheckBox(file.getName())); @@ -208,8 +191,7 @@ private boolean hasMatrixCoordsInObjName(String imdName) { String name = Utils.removeExtensionFromPath(imdName); try { String[] splitName = name.split("_"); - return (hasCoordInName(splitName[splitName.length - 2]) - && hasCoordInName(splitName[splitName.length - 1])); + return (hasCoordInName(splitName[splitName.length - 2]) && hasCoordInName(splitName[splitName.length - 1])); } catch (Exception ex) { return false; } @@ -257,7 +239,7 @@ public String getImdFolderPath() { return imdFolderPath; } - public ArrayList getSelectedObjNames() { + public List getSelectedObjNames() { return selectedObjNames; } diff --git a/src/main/java/formats/imd/ImdAttribute.java b/src/main/java/formats/imd/ImdAttribute.java index 6ccb9b2..85da3e1 100644 --- a/src/main/java/formats/imd/ImdAttribute.java +++ b/src/main/java/formats/imd/ImdAttribute.java @@ -53,7 +53,7 @@ public void setValue(int value) { public void setValue(int[] values) { this.value = ""; for (int i = 0; i < values.length - 1; i++) { - this.value += String.valueOf(values[i]) + " "; + this.value += values[i] + " "; } this.value += String.valueOf(values[values.length - 1]); } @@ -81,5 +81,4 @@ public void setValue(boolean value) { public void setValue(String value) { this.value = value; } - } diff --git a/src/main/java/formats/imd/ImdModel.java b/src/main/java/formats/imd/ImdModel.java index 6e18d9e..d8556f7 100644 --- a/src/main/java/formats/imd/ImdModel.java +++ b/src/main/java/formats/imd/ImdModel.java @@ -22,6 +22,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; import javax.imageio.ImageIO; import tileset.Face; @@ -43,14 +45,14 @@ public class ImdModel extends ImdNode { //Model OpenGL - private ArrayList polygons = new ArrayList<>(); + private List polygons = new ArrayList<>(); - private ArrayList textureIDs = new ArrayList<>(); + private List textureIDs = new ArrayList<>(); //private ArrayList materialIDs = new ArrayList<>(); - private ArrayList texOffsetsTri = new ArrayList<>(); - private ArrayList texOffsetsQuad = new ArrayList<>(); + private List texOffsetsTri = new ArrayList<>(); + private List texOffsetsQuad = new ArrayList<>(); - private ArrayList materials = new ArrayList<>(); + private List materials = new ArrayList<>(); private float[] minCoords; private float[] maxCoords; @@ -63,24 +65,16 @@ public class ImdModel extends ImdNode { private int numVertexTotal; - public ImdModel(String objPath) throws ParserConfigurationException, - IOException, TransformerException, TextureNotFoundException, + public ImdModel(String objPath) throws ParserConfigurationException, IOException, TransformerException, TextureNotFoundException, NormalsNotFoundException { this(objPath, objPath, null); } - public ImdModel(String objPath, String savePath, - ArrayList tsetMaterials) throws - ParserConfigurationException, ParserConfigurationException, - IOException, TransformerException, TextureNotFoundException, - NormalsNotFoundException { + public ImdModel(String objPath, String savePath, List tsetMaterials) throws ParserConfigurationException, + IOException, TransformerException, TextureNotFoundException, NormalsNotFoundException { super("imd"); - attributes = new ArrayList() { - { - add(new ImdAttribute("version", "1.6.0")); - } - }; + attributes = new ArrayList<>(List.of(new ImdAttribute("version", "1.6.0"))); subnodes.add(new Head()); @@ -95,13 +89,10 @@ public ImdModel(String objPath, String savePath, // Use tileset materials if tileset is loaded if (tsetMaterials != null) { - ArrayList newMaterials = new ArrayList<>(); - for (int i = 0; i < tsetMaterials.size(); i++) { - TilesetMaterial material = tsetMaterials.get(i); - if (material.alwaysIncludeInImd()) { - newMaterials.add(material.clone()); - } - } + List newMaterials = tsetMaterials.stream() + .filter(TilesetMaterial::alwaysIncludeInImd) + .map(TilesetMaterial::clone) + .collect(Collectors.toList()); for (int i = 0; i < materials.size(); i++) { int index = getIndexOfMaterialByImgName(newMaterials, materials.get(i).getImageName()); if (index == -1) { @@ -117,12 +108,11 @@ public ImdModel(String objPath, String savePath, } } materials = newMaterials; - } //Rotate model - for (int i = 0; i < polygons.size(); i++) { - polygons.get(i).rotateData(); + for (PolygonData data : polygons) { + data.rotateData(); } //Calculate bounds @@ -137,8 +127,8 @@ public ImdModel(String objPath, String savePath, //Scale Model float scaleFactor = (float) (0.25f * Math.pow(2, defaultPosScale - posScale)); //0.25 is Blender factor - for (int i = 0; i < polygons.size(); i++) { - polygons.get(i).scale(scaleFactor); + for (PolygonData polygonData : polygons) { + polygonData.scale(scaleFactor); } //System.out.println("Scale factor: " + scaleFactor); @@ -157,8 +147,8 @@ public ImdModel(String objPath, String savePath, } //Fix normals - for (int i = 0; i < polygons.size(); i++) { - polygons.get(i).fixNormals(0.99804f); + for (PolygonData polygon : polygons) { + polygon.fixNormals(0.99804f); } //Box test @@ -170,10 +160,10 @@ public ImdModel(String objPath, String savePath, ImdPaletteArray imdPaletteArray = new ImdPaletteArray(materials); //Create imd texture array - ArrayList imdTextureArray = new ArrayList<>(); - for (int i = 0; i < materials.size(); i++) { - ArrayList palette = imdPaletteArray.getPalette(materials.get(i).getPaletteNameImd()); - imdTextureArray.add(new ImdTextureIndexed(materials.get(i), palette)); + List imdTextureArray = new ArrayList<>(); + for (TilesetMaterial tilesetMaterial : materials) { + List palette = imdPaletteArray.getPalette(tilesetMaterial.getPaletteNameImd()); + imdTextureArray.add(new ImdTextureIndexed(tilesetMaterial, palette)); } //Texture and Palette Indices @@ -181,8 +171,8 @@ public ImdModel(String objPath, String savePath, int[] paletteIndices = new int[materials.size()]; //Texture and Palette Names - ArrayList textureNames = new ArrayList<>(); - ArrayList paletteNames = new ArrayList<>(); + List textureNames = new ArrayList<>(); + List paletteNames = new ArrayList<>(); //TexImage array and Tex palette array ImdNode texImageArray = new ImdNode("tex_image_array"); ImdNode texPaletteArray = new ImdNode("tex_palette_array"); @@ -230,7 +220,7 @@ public ImdModel(String objPath, String savePath, //Material array ImdNode materialArray = new ImdNode("material_array"); materialArray.attributes.add(new ImdAttribute("size", materials.size())); - for (int i = 0; i < materials.size(); i++) { // + for (int i = 0; i < materials.size(); i++) { boolean[] lights; if (materials.get(i).vertexColorsEnabled()) { lights = new boolean[]{false, false, false, false}; @@ -292,13 +282,13 @@ public ImdModel(String objPath, String savePath, StripeCalculator quadCalculator = new StripeCalculator(pData, true, materials.get(textureIDs.get(i)).uniformNormalOrientation(), materials.get(textureIDs.get(i)).vertexColorsEnabled()); - ArrayList pDataStripQuad = quadCalculator.calculateQuadStrip(); + List pDataStripQuad = quadCalculator.calculateQuadStrip(); //Calculate Triangle Strips TriangleStripCalculator triCalculator = new TriangleStripCalculator(pData, materials.get(textureIDs.get(i)).uniformNormalOrientation(), materials.get(textureIDs.get(i)).vertexColorsEnabled()); - ArrayList pDataStripTri = triCalculator.calculateTriStrip(); + List pDataStripTri = triCalculator.calculateTriStrip(); //Primitive array ImdNode primitiveArray = new ImdNode("primitive_array"); @@ -428,18 +418,17 @@ public ImdModel(String objPath, String savePath, saveToXML(savePath); } - private void loadFromObj(String path) - throws IOException, TextureNotFoundException, NormalsNotFoundException { + private void loadFromObj(String path) throws IOException, TextureNotFoundException, NormalsNotFoundException { - ArrayList vCoordsObj = new ArrayList<>(); - ArrayList tCoordsObj = new ArrayList<>(); - ArrayList nCoordsObj = new ArrayList<>(); - ArrayList colorsObj = new ArrayList<>(); + List vCoordsObj = new ArrayList<>(); + List tCoordsObj = new ArrayList<>(); + List nCoordsObj = new ArrayList<>(); + List colorsObj = new ArrayList<>(); - ArrayList fIndsQuad = new ArrayList<>(); - ArrayList fIndsTri = new ArrayList<>(); + List fIndsQuad = new ArrayList<>(); + List fIndsTri = new ArrayList<>(); - ArrayList materialNames = new ArrayList(); + List materialNames = new ArrayList<>(); String folderPath = new File(path).getParent(); String objName = new File(path).getName(); @@ -468,8 +457,8 @@ private void loadFromObj(String path) } } else if (lineObj.startsWith("vn")) { for (String s : (lineObj.substring(3)).split(" ")) { - Float nCoord = Float.valueOf(s); - if (nCoord.isNaN()) { + float nCoord = Float.parseFloat(s); + if (Float.isNaN(nCoord)) { nCoord = 1.0f; } nCoordsObj.add(nCoord); @@ -484,20 +473,19 @@ private void loadFromObj(String path) //materialNames.add(lineObj.split(" ")[1]); materialNames.add(lineObj.substring(lineObj.indexOf(" ") + 1)); } else if (lineObj.startsWith("f")) { - String[] splittedLine = (lineObj.substring(2)).split(" "); - Face f = new Face(splittedLine.length > 3); - for (int i = 0; i < splittedLine.length; i++) { - String[] sArray = splittedLine[i].split("/"); - f.vInd[i] = Integer.valueOf(sArray[0]); - f.tInd[i] = Integer.valueOf(sArray[1]); + String[] splitLine = (lineObj.substring(2)).split(" "); + Face f = new Face(splitLine.length > 3); + for (int i = 0; i < splitLine.length; i++) { + String[] sArray = splitLine[i].split("/"); + f.vInd[i] = Integer.parseInt(sArray[0]); + f.tInd[i] = Integer.parseInt(sArray[1]); if (sArray.length > 2) { - f.nInd[i] = Integer.valueOf(sArray[2]); + f.nInd[i] = Integer.parseInt(sArray[2]); } else { - throw new NormalsNotFoundException("The OBJ file \"" - + objName + "\" does not contain calculated normals."); + throw new NormalsNotFoundException("The OBJ file \"" + objName + "\" does not contain calculated normals."); } if (sArray.length > 3) { - f.cInd[i] = Integer.valueOf(sArray[3]); + f.cInd[i] = Integer.parseInt(sArray[3]); } else { f.cInd[i] = colorsObj.size() / 3 + 1;//TODO REVISE THIS!!! colorsObj.add(1.0f); @@ -555,13 +543,10 @@ private void loadFromObj(String path) material.setPaletteNameImd(name + "_pl"); materials.add(material); } catch (IOException ex) { - throw new TextureNotFoundException( - "Can't open texture named: \"" + textName + "\""); + throw new TextureNotFoundException("Can't open texture named: \"" + textName + "\""); } } else { - throw new TextureNotFoundException( - "Texture named: \"" + textName - + "\" does not exist in the folder of the OBJ file"); + throw new TextureNotFoundException("Texture named: \"" + textName + "\" does not exist in the folder of the OBJ file"); } //textures.add(loadTexture(folderPath + "/" + textName)); } else { @@ -580,20 +565,13 @@ private void loadFromObj(String path) private static int countNumberOfStarts(File file, String content) throws IOException { InputStream input = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(input)); - int count = 0; - String line; - while ((line = br.readLine()) != null) { - if (line.startsWith(content)) { - count++; - } - } - return count; + return (int) br.lines().filter(line -> line.startsWith(content)).count(); } - public void objDataToPolygonData(ArrayList fIndsQuad, - ArrayList fIndsTri, ArrayList vCoordsObj, - ArrayList tCoordsObj, ArrayList nCoordsObj, - ArrayList colorsObj) { + public void objDataToPolygonData(List fIndsQuad, + List fIndsTri, List vCoordsObj, + List tCoordsObj, List nCoordsObj, + List colorsObj) { for (int i = 0; i < textureIDs.size(); i++) { int start, end; @@ -658,8 +636,7 @@ public void objDataToPolygonData(ArrayList fIndsQuad, } - public void saveToXML(String xmlPath) throws ParserConfigurationException, - TransformerConfigurationException, TransformerException, IOException { + public void saveToXML(String xmlPath) throws ParserConfigurationException, TransformerException, IOException { Document dom; // instance of a DocumentBuilderFactory @@ -672,13 +649,11 @@ public void saveToXML(String xmlPath) throws ParserConfigurationException, // create the root element Element rootEle = dom.createElement(nodeName); - for (int i = 0; i < attributes.size(); i++) { - ImdAttribute attrib = attributes.get(i); + for (ImdAttribute attrib : attributes) { rootEle.setAttribute(attrib.tag, attrib.value); } - for (int i = 0; i < subnodes.size(); i++) { - ImdNode subnode = subnodes.get(i); + for (ImdNode subnode : subnodes) { printImdNode(subnode, dom, rootEle); } @@ -699,13 +674,10 @@ public void saveToXML(String xmlPath) throws ParserConfigurationException, streamResult.getOutputStream().close(); //System.out.println("IMD saved!"); - } private void printImdNode(ImdNode node, Document dom, Element parent) { - Element e; - - e = dom.createElement(node.nodeName); + Element e = dom.createElement(node.nodeName); for (int i = 0; i < node.attributes.size(); i++) { ImdAttribute attrib = node.attributes.get(i); @@ -725,8 +697,7 @@ private void printImdNode(ImdNode node, Document dom, Element parent) { private float[] getMinCoords() { float[] minCoords = new float[]{Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE}; - for (int i = 0; i < polygons.size(); i++) { - PolygonData p = polygons.get(i); + for (PolygonData p : polygons) { for (int j = 0; j < p.vCoordsQuad.length / 3; j++) { for (int k = 0; k < 3; k++) { minCoords[k] = Math.min(minCoords[k], p.vCoordsQuad[j * 3 + k]); @@ -743,8 +714,7 @@ private float[] getMinCoords() { private float[] getMaxCoords() { float[] maxCoords = new float[]{-Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; - for (int i = 0; i < polygons.size(); i++) { - PolygonData p = polygons.get(i); + for (PolygonData p : polygons) { for (int j = 0; j < p.vCoordsQuad.length / 3; j++) { for (int k = 0; k < 3; k++) { maxCoords[k] = Math.max(maxCoords[k], p.vCoordsQuad[j * 3 + k]); @@ -760,9 +730,9 @@ private float[] getMaxCoords() { } private static float maxAbs(float[] array) { - float max = -Float.MAX_VALUE; - for (int i = 0; i < array.length; i++) { - float abs = Math.abs(array[i]); + float max = Float.MIN_VALUE; + for (float v : array) { + float abs = Math.abs(v); if (abs > max) { max = abs; } @@ -811,8 +781,7 @@ private int calculateBoxTestPosScale() { } } - private int getIndexOfMaterialByImgName(ArrayList materials, - String imgName) { + private int getIndexOfMaterialByImgName(List materials, String imgName) { for (int i = 0; i < materials.size(); i++) { if (materials.get(i).getImageName().equals(imgName)) { return i; @@ -823,15 +792,14 @@ private int getIndexOfMaterialByImgName(ArrayList materials, private int numVertex() { int numVertex = 0; - for (int i = 0; i < polygons.size(); i++) { - PolygonData pData = polygons.get(i); + for (PolygonData pData : polygons) { numVertex += pData.nCoordsQuad.length / 3; numVertex += pData.nCoordsTri.length / 3; } return numVertex; } - private void incrementAll(ArrayList array, int amount) { + private void incrementAll(List array, int amount) { for (int i = 0; i < array.size(); i++) { array.set(i, array.get(i) + amount); } @@ -850,19 +818,15 @@ public int getNumMaterials() { } public int getNumQuads() { - int count = 0; - for (int i = 0; i < polygons.size(); i++) { - count += polygons.get(i).vCoordsQuad.length / (3 * 4); - } - return count; + return polygons.stream() + .mapToInt(polygon -> polygon.vCoordsQuad.length / (3 * 4)) + .sum(); } public int getNumTris() { - int count = 0; - for (int i = 0; i < polygons.size(); i++) { - count += polygons.get(i).vCoordsTri.length / (3 * 3); - } - return count; + return polygons.stream() + .mapToInt(polygon -> polygon.vCoordsTri.length / (3 * 3)) + .sum(); } public int getNumPolygons() { @@ -873,5 +837,4 @@ public int getNumVertices() {//TODO works only when there are no strips return numVertexTotal; //return getNumQuads() * 4 + getNumTris() * 3; } - } diff --git a/src/main/java/formats/imd/ImdNode.java b/src/main/java/formats/imd/ImdNode.java index e89f316..d2650af 100644 --- a/src/main/java/formats/imd/ImdNode.java +++ b/src/main/java/formats/imd/ImdNode.java @@ -2,15 +2,16 @@ package formats.imd; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ public class ImdNode { public String nodeName; - public ArrayList attributes; + public List attributes; public String content; - public ArrayList subnodes; + public List subnodes; public ImdNode(String nodeName) { this.nodeName = nodeName; @@ -20,11 +21,8 @@ public ImdNode(String nodeName) { } public ImdAttribute getAttribute(String tag) { - for (ImdAttribute p : attributes) { - if (p.tag.equals(tag)) { - return p; - } - } - return null; + return attributes.stream() + .filter(p -> p.tag.equals(tag)) + .findFirst().orElse(null); } } diff --git a/src/main/java/formats/imd/ImdOutputInfo.java b/src/main/java/formats/imd/ImdOutputInfo.java index 0599621..57fafbb 100644 --- a/src/main/java/formats/imd/ImdOutputInfo.java +++ b/src/main/java/formats/imd/ImdOutputInfo.java @@ -26,7 +26,6 @@ public ImdOutputInfo(String objName, ImdModel model) { } public ImdOutputInfo(String objName, Exception ex) { - this.objName = this.objName; this.ex = ex; } } diff --git a/src/main/java/formats/imd/ImdOutputInfoDialog.java b/src/main/java/formats/imd/ImdOutputInfoDialog.java index da88813..3537e23 100644 --- a/src/main/java/formats/imd/ImdOutputInfoDialog.java +++ b/src/main/java/formats/imd/ImdOutputInfoDialog.java @@ -3,22 +3,15 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import editor.handler.MapEditorHandler; -import java.awt.Color; -import java.awt.Component; -import java.awt.Font; import java.awt.font.TextAttribute; import java.io.File; import java.io.IOException; -import java.util.ArrayList; import java.util.Collections; -import javax.swing.JLabel; -import javax.swing.JTable; +import java.util.List; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.xml.parsers.ParserConfigurationException; @@ -35,7 +28,7 @@ public class ImdOutputInfoDialog extends JDialog { private MapEditorHandler handler; - private ArrayList fileNames; + private List fileNames; private String objFolderPath; private String imdFolderPath; @@ -43,7 +36,7 @@ public class ImdOutputInfoDialog extends JDialog { private static final Color GREEN = new Color(6, 176, 37); private static final Color ORANGE = new Color(255, 106, 0); - private static final Color RED = Color.red; + private static final Color RED = Color.RED; private enum ConvertStatus { SUCCESS_STATUS("SUCCESSFULLY CONVERTED", GREEN), @@ -51,21 +44,19 @@ private enum ConvertStatus { TOO_MANY_TRIANGLES_STATUS("SUCCESSFULLY CONVERTED (TOO MANY TRIANGLES)", ORANGE), XML_ERROR_STATUS("NOT CONVERTED (XML ERROR)", RED), IO_ERROR_STATUS("NOT CONVERTED (IO ERROR)", RED), - TEXURE_ERROR_STATUS("NOT CONVERTED (TEXTURES NOT FOUND)", RED), + TEXTURE_ERROR_STATUS("NOT CONVERTED (TEXTURES NOT FOUND)", RED), NORMALS_ERROR_STATUS("NOT CONVERTED (NORMALS NOT FOUND)", RED), UNKNOWN_ERROR_STATUS("NOT CONVERTED (UNKNOWN ERROR)", RED); public final String msg; public final Color color; - private ConvertStatus(String msg, Color color) { + ConvertStatus(String msg, Color color) { this.msg = msg; this.color = color; } } - ; - public ImdOutputInfoDialog(Window owner) { super(owner); initComponents(); @@ -86,12 +77,7 @@ public ImdOutputInfoDialog(Window owner) { private void formWindowActivated(WindowEvent e) { if (convertingThread == null) { - convertingThread = new Thread(new Runnable() { - @Override - public void run() { - saveAllImds(); - } - }); + convertingThread = new Thread(this::saveAllImds); convertingThread.start(); } } @@ -104,8 +90,7 @@ private void jbAcceptActionPerformed(ActionEvent e) { dispose(); } - public void init(MapEditorHandler handler, ArrayList fileNames, - String objFolderPath, String imdFolderPath) { + public void init(MapEditorHandler handler, List fileNames, String objFolderPath, String imdFolderPath) { this.handler = handler; this.fileNames = fileNames; this.objFolderPath = objFolderPath; @@ -147,7 +132,7 @@ public void saveAllImds() { } catch (IOException ex) { exportStatus = ConvertStatus.IO_ERROR_STATUS; } catch (TextureNotFoundException ex) { - exportStatus = ConvertStatus.TEXURE_ERROR_STATUS; + exportStatus = ConvertStatus.TEXTURE_ERROR_STATUS; } catch (NormalsNotFoundException ex) { exportStatus = ConvertStatus.NORMALS_ERROR_STATUS; } catch (Exception ex) { @@ -196,7 +181,7 @@ public void saveAllImds() { nFilesProcessed++; - jlFilesProcessed.setText(String.valueOf(nFilesProcessed) + "/" + String.valueOf(fileNames.size())); + jlFilesProcessed.setText(nFilesProcessed + "/" + fileNames.size()); jlFilesConverted.setText(String.valueOf(nFilesConverted)); jlFilesWithWarnings.setText(String.valueOf(nFilesConvertedWithWarnings)); jlFilesNotConverted.setText(String.valueOf(nFilesNotConverted)); @@ -222,13 +207,13 @@ public void saveAllImds() { jlStatus.setText("Finished with errors"); jlResult.setForeground(RED); - jlResult.setText(String.valueOf(nFilesNotConverted) + " OBJ file(s) could not be converted into IMD"); + jlResult.setText(nFilesNotConverted + " OBJ file(s) could not be converted into IMD"); } else if (nFilesConvertedWithWarnings > 0) { jlStatus.setForeground(ORANGE); jlStatus.setText("Finished with warnings"); jlResult.setForeground(ORANGE); - jlResult.setText("All the OBJ files have been converted into IMD (" + String.valueOf(nFilesConvertedWithWarnings) + " file(s) might have too many polygons)"); + jlResult.setText("All the OBJ files have been converted into IMD (" + nFilesConvertedWithWarnings + " file(s) might have too many polygons)"); } else { jlStatus.setForeground(GREEN); jlStatus.setText("Finished"); @@ -256,16 +241,13 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole l.setText(status.msg); Font font = l.getFont(); - font = font.deriveFont( - Collections.singletonMap( - TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); + font = font.deriveFont(Collections.singletonMap(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); l.setFont(font); setHorizontalAlignment(JLabel.CENTER); //Return the JLabel which renders the cell. return l; - } } diff --git a/src/main/java/formats/imd/ImdPaletteArray.java b/src/main/java/formats/imd/ImdPaletteArray.java index e755f05..efa23d1 100644 --- a/src/main/java/formats/imd/ImdPaletteArray.java +++ b/src/main/java/formats/imd/ImdPaletteArray.java @@ -7,7 +7,10 @@ import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.TreeSet; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import tileset.TilesetMaterial; import utils.image.Clusterer; @@ -19,16 +22,15 @@ public class ImdPaletteArray { private static final int[] numColorsTable = new int[]{4, 16, 256, 32, 8}; - public ArrayList> palettes = new ArrayList<>(); - public ArrayList paletteNames = new ArrayList<>(); - public ArrayList paletteSizes = new ArrayList<>(); + public List> palettes = new ArrayList<>(); + public List paletteNames = new ArrayList<>(); + public List paletteSizes = new ArrayList<>(); - public ArrayList textureIndices = new ArrayList<>(); + public List textureIndices = new ArrayList<>(); - public ImdPaletteArray(ArrayList materials) { - ArrayList> paletteSets = new ArrayList<>(); - for (int i = 0; i < materials.size(); i++) { - TilesetMaterial m = materials.get(i); + public ImdPaletteArray(List materials) { + List> paletteSets = new ArrayList<>(); + for (TilesetMaterial m : materials) { int index = paletteNames.indexOf(m.getPaletteNameImd()); if (index != -1) { paletteSets.set(index, addColorsFromTexture(paletteSets.get(index), m.getTextureImg())); @@ -45,8 +47,7 @@ public ImdPaletteArray(ArrayList materials) { //Reduce colors for (int i = 0; i < paletteSets.size(); i++) { - ArrayList palette = new ArrayList<>(); - palette.addAll(paletteSets.get(i)); + List palette = new ArrayList<>(paletteSets.get(i)); if (paletteSets.get(i).size() > paletteSizes.get(i)) { palette = Clusterer.clusterColors(palette, paletteSizes.get(i), 100, 0.00001f); } else if (paletteSets.get(i).size() < paletteSizes.get(i)) { @@ -64,48 +65,47 @@ public ImdPaletteArray(ArrayList materials) { } } - //Fix palettes that use the same texture - ArrayList textureNames = getTextureNames(materials); - for (int i = 0; i < textureNames.size(); i++) { - ArrayList indices = getMaterialIndicesUsingTexture(materials, textureNames.get(i)); - if (indices.size() > 1) { - String refPalName = materials.get(indices.get(0)).getPaletteNameImd(); - System.out.println("Reference palette: " + refPalName); - int refPalIndex = paletteNames.indexOf(refPalName); - if (refPalIndex != -1) { - ArrayList refPal = palettes.get(refPalIndex); - for (int j = 1; j < indices.size(); j++) { - String fixPalName = materials.get(indices.get(j)).getPaletteNameImd(); - int fixPalIndex = paletteNames.indexOf(fixPalName); - if (fixPalIndex != -1) { - ArrayList fixPal = palettes.get(fixPalIndex); - TilesetMaterial refMat = materials.get(indices.get(0)); - TilesetMaterial fixMat = materials.get(indices.get(j)); - ArrayList newPalette = fixColorOrder(refMat, fixMat, refPal, fixPal); - palettes.set(fixPalIndex, newPalette); - } - } + List textureNames = getTextureNames(materials); + for (String textureName : textureNames) { + List indices = getMaterialIndicesUsingTexture(materials, textureName); + if (indices.size() <= 1) { + continue; + } + + String refPalName = materials.get(indices.get(0)).getPaletteNameImd(); + System.out.println("Reference palette: " + refPalName); + int refPalIndex = paletteNames.indexOf(refPalName); + if (refPalIndex == -1) { + continue; + } + + List refPal = palettes.get(refPalIndex); + for (int j = 1; j < indices.size(); j++) { + String fixPalName = materials.get(indices.get(j)).getPaletteNameImd(); + int fixPalIndex = paletteNames.indexOf(fixPalName); + if (fixPalIndex != -1) { + List fixPal = palettes.get(fixPalIndex); + TilesetMaterial refMat = materials.get(indices.get(0)); + TilesetMaterial fixMat = materials.get(indices.get(j)); + List newPalette = fixColorOrder(refMat, fixMat, refPal, fixPal); + palettes.set(fixPalIndex, newPalette); } } } - } - private int getBestTextureIndex(ArrayList matIndices){ - for(int i = 0; i < matIndices.size(); i++){ - int matIndex = matIndices.get(i); - + private int getBestTextureIndex(List matIndices){ + for (int matIndex : matIndices) { //materials. } //materials. return 0; } - private ArrayList fixColorOrder(TilesetMaterial refMat, - TilesetMaterial fixMat, ArrayList refPal, ArrayList fixPal) { + private List fixColorOrder(TilesetMaterial refMat, TilesetMaterial fixMat, List refPal, List fixPal) { int numColors = Math.max(refPal.size(), fixPal.size()); - ArrayList colorLookup = new ArrayList<>(numColors); + List colorLookup = new ArrayList<>(numColors); for (int i = 0; i < numColors; i++) { colorLookup.add(i); } @@ -123,37 +123,26 @@ private ArrayList fixColorOrder(TilesetMaterial refMat, } } - ArrayList newPalette = new ArrayList<>(fixPal.size()); - for (int i = 0; i < fixPal.size(); i++) { - System.out.print(colorLookup.get(i) + " "); - newPalette.add(fixPal.get(colorLookup.get(i))); - } - System.out.println(); - return newPalette; + return IntStream.range(0, fixPal.size()) + .mapToObj(i -> fixPal.get(colorLookup.get(i))) + .collect(Collectors.toList()); } - private ArrayList getTextureNames(ArrayList materials) { - ArrayList textureNames = new ArrayList<>(); - for (int i = 0; i < materials.size(); i++) { - if (!textureNames.contains(materials.get(i).getTextureNameImd())) { - textureNames.add(materials.get(i).getTextureNameImd()); - } - } - return textureNames; + private List getTextureNames(List materials) { + return materials.stream() + .map(TilesetMaterial::getTextureNameImd) + .distinct() + .collect(Collectors.toList()); } - private ArrayList getMaterialIndicesUsingTexture( - ArrayList materials, String textureName) { - ArrayList indices = new ArrayList<>(); - for (int i = 0; i < materials.size(); i++) { - if (materials.get(i).getTextureNameImd().equals(textureName)) { - indices.add(i); - } - } - return indices; + private List getMaterialIndicesUsingTexture(List materials, String textureName) { + return IntStream.range(0, materials.size()) + .filter(i -> materials.get(i).getTextureNameImd().equals(textureName)) + .boxed() + .collect(Collectors.toList()); } - public ArrayList getPalette(String palName) { + public List getPalette(String palName) { int index = paletteNames.indexOf(palName); if (index == -1) { index = 0; @@ -161,7 +150,7 @@ public ArrayList getPalette(String palName) { return palettes.get(index); } - private int getLessAlphaColorIndex(ArrayList colors) { + private int getLessAlphaColorIndex(List colors) { int minAlpha = 255; int minIndex = 0; for (int i = 0; i < colors.size(); i++) { @@ -185,8 +174,7 @@ private ArrayList fastColorArrayToColorArray(ArrayList colors) { private TreeSet addColorsFromTexture(TreeSet colors, BufferedImage img) { for (int j = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++) { - FastColor color = getDsColor(new Color(img.getRGB(i, j), true)); - colors.add(color); + colors.add(getDsColor(new Color(img.getRGB(i, j), true))); } } return colors; @@ -205,7 +193,7 @@ private FastColor getDsColor(Color c) { return new FastColor(r, g, b, a); } - private int getCloserColorIndex(Color c, ArrayList colors) { + private int getCloserColorIndex(Color c, List colors) { int index = 0; int minDist = Integer.MAX_VALUE; for (int i = 0; i < colors.size(); i++) { @@ -226,5 +214,4 @@ private static int getDistanceToColor(Color c1, Color c2) { return rd * rd + gd * gd + bd * bd + ad * ad; } - } diff --git a/src/main/java/formats/imd/ImdTexture.java b/src/main/java/formats/imd/ImdTexture.java index ef1f594..5efc21f 100644 --- a/src/main/java/formats/imd/ImdTexture.java +++ b/src/main/java/formats/imd/ImdTexture.java @@ -50,7 +50,6 @@ public ImdTexture(TilesetMaterial material) { setTextureAndPalette(img, material); } } - } public void setTextureAndPaletteWithTransparency(BufferedImage img, TilesetMaterial material) { @@ -79,7 +78,7 @@ public void setTextureAndPaletteWithTransparency(BufferedImage img, TilesetMater } } for (int i = colors.size(); i < numColors; i++) { - colors.add(Color.black); + colors.add(Color.BLACK); } textureData = colorIndicesToTexData(colorIndices, bitDepthTable[material.getColorFormat()]); paletteData = paletteColorsToPalData(colors); @@ -105,7 +104,7 @@ public void setTextureAndPalette(BufferedImage img, TilesetMaterial material) { } } for (int i = colors.size(); i < numColors; i++) { - colors.add(Color.black); + colors.add(Color.BLACK); } textureData = colorIndicesToTexData(colorIndices, bitDepthTable[material.getColorFormat()]); paletteData = paletteColorsToPalData(colors); @@ -131,7 +130,7 @@ public void setTextureAndPaletteSemitransp(BufferedImage img, TilesetMaterial ma } } for (int i = colors.size(); i < numColors; i++) { - colors.add(Color.black); + colors.add(Color.BLACK); } textureData = colorIndicesToTexDataSemitransp(colorIndices, colors, nBitsColor); paletteData = paletteColorsToPalData(colors); @@ -221,14 +220,14 @@ public String getPalDataAsHexString() { } private static String byteArrayToHexString(byte[] data) { - String hexString = ""; + StringBuilder hexString = new StringBuilder(); for (int i = 0; i < data.length; i++) { if (i % 2 == 0) { - hexString += " "; + hexString.append(" "); } - hexString += String.format("%02x", data[i]); + hexString.append(String.format("%02x", data[i])); } - return hexString; + return hexString.toString(); } public int getTextureDataSize() { diff --git a/src/main/java/formats/imd/ImdTextureIndexed.java b/src/main/java/formats/imd/ImdTextureIndexed.java index 3ac9bfe..5a65896 100644 --- a/src/main/java/formats/imd/ImdTextureIndexed.java +++ b/src/main/java/formats/imd/ImdTextureIndexed.java @@ -4,7 +4,7 @@ import java.awt.Color; import java.awt.Image; import java.awt.image.BufferedImage; -import java.util.ArrayList; +import java.util.List; import tileset.TilesetMaterial; import utils.Utils; @@ -33,9 +33,9 @@ public class ImdTextureIndexed { private boolean isTransparent = false; - private ArrayList palette; + private List palette; - public ImdTextureIndexed(TilesetMaterial material, ArrayList palette) { + public ImdTextureIndexed(TilesetMaterial material, List palette) { this.palette = palette; //System.out.println("Texture name: " + material.getImageName()); @@ -51,11 +51,9 @@ public ImdTextureIndexed(TilesetMaterial material, ArrayList palette) { } else { setTextureAndPalette(img, material, palette); } - } - - public void setTextureAndPalette(BufferedImage img, TilesetMaterial material, ArrayList colors) { + public void setTextureAndPalette(BufferedImage img, TilesetMaterial material, List colors) { //BufferedImage img = Clusterer.floydSteinbergDithering(oldImg, colors); short[] colorIndices = new short[img.getWidth() * img.getHeight()]; for (int j = 0, c = 0; j < img.getHeight(); j++) { @@ -68,8 +66,7 @@ public void setTextureAndPalette(BufferedImage img, TilesetMaterial material, Ar paletteData = paletteColorsToPalData(colors); } - public void setTextureAndPaletteSemitransp(BufferedImage img, - TilesetMaterial material, ArrayList colors, int nBitsColor) { + public void setTextureAndPaletteSemitransp(BufferedImage img, TilesetMaterial material, List colors, int nBitsColor) { //BufferedImage img = Clusterer.floydSteinbergDithering(oldImg, colors); short[] colorIndices = new short[img.getWidth() * img.getHeight()]; for (int j = 0, c = 0; j < img.getHeight(); j++) { @@ -82,8 +79,7 @@ public void setTextureAndPaletteSemitransp(BufferedImage img, paletteData = paletteColorsToPalData(colors); } - private static byte[] colorIndicesToTexDataSemitransp(short[] colorIndices, - ArrayList colors, int nBitsColor) { + private static byte[] colorIndicesToTexDataSemitransp(short[] colorIndices, List colors, int nBitsColor) { final byte[] texData = new byte[colorIndices.length]; for (int i = 0; i < texData.length; i++) { byte data = 0x00; @@ -111,7 +107,7 @@ private static byte[] colorIndicesToTexData(short[] colorIndices, int bitDepth) return texData; } - private static byte[] paletteColorsToPalData(ArrayList colors) { + private static byte[] paletteColorsToPalData(List colors) { byte[] palData = new byte[colors.size() * 2]; for (int i = 0; i < colors.size(); i++) { Color c = colors.get(i); @@ -124,7 +120,7 @@ private static byte[] paletteColorsToPalData(ArrayList colors) { return palData; } - private int getCloserColorIndex(Color c, ArrayList colors) { + private int getCloserColorIndex(Color c, List colors) { int index = 0; int minDist = Integer.MAX_VALUE; for (int i = 0; i < colors.size(); i++) { @@ -167,14 +163,14 @@ public String getPalDataAsHexString() { } private static String byteArrayToHexString(byte[] data) { - String hexString = ""; + StringBuilder hexString = new StringBuilder(); for (int i = 0; i < data.length; i++) { if (i % 2 == 0) { - hexString += " "; + hexString.append(" "); } - hexString += String.format("%02x", data[i]); + hexString.append(String.format("%02x", data[i])); } - return hexString; + return hexString.toString(); } public int getTextureDataSize() { @@ -201,6 +197,4 @@ private Color getDsColor(Color c) { } return new Color(r, g, b, a); } - - } diff --git a/src/main/java/formats/imd/ImdTileset.java b/src/main/java/formats/imd/ImdTileset.java index 38b58f4..cc7070c 100644 --- a/src/main/java/formats/imd/ImdTileset.java +++ b/src/main/java/formats/imd/ImdTileset.java @@ -15,9 +15,5 @@ public ImdTileset() { subnodes.add(new Head()); Body body = new Body(); - - } - - } diff --git a/src/main/java/formats/imd/PolygonData.java b/src/main/java/formats/imd/PolygonData.java index 7ba3a2f..f5bc464 100644 --- a/src/main/java/formats/imd/PolygonData.java +++ b/src/main/java/formats/imd/PolygonData.java @@ -2,8 +2,10 @@ package formats.imd; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; +import java.math.RoundingMode; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author Trifindo @@ -35,17 +37,16 @@ public void groupByNormals(boolean isQuad) { nCoords = nCoordsTri; } int numPolys = nCoords.length / (3 * nPerPoly); - ArrayList polys = new ArrayList<>(numPolys); - for (int i = 0; i < numPolys; i++) { - polys.add(new Poly(i, isQuad)); - } + List polys = IntStream.range(0, numPolys) + .mapToObj(i -> new Poly(i, isQuad)) + .sorted() + .collect(Collectors.toList()); /* System.out.println("Polygon"); for (int i = 0; i < polys.size(); i++) { polys.get(i).printData(); }*/ - Collections.sort(polys); /* System.out.println("Sorted Polygon"); @@ -63,10 +64,9 @@ public void groupByNormals(boolean isQuad) { nCoordsTri = sortByIndices(nCoordsTri, 9, polys); colorsTri = sortByIndices(colorsTri, 9, polys); } - } - private float[] sortByIndices(float[] array, int unitSize, ArrayList polys) { + private float[] sortByIndices(float[] array, int unitSize, List polys) { float[] copy = new float[array.length]; for (int i = 0; i < polys.size(); i++) { System.arraycopy(array, i * unitSize, copy, polys.get(i).index * unitSize, unitSize); @@ -175,7 +175,6 @@ private void fixTextureCoords(float[] tCoords, int vertexPerPolygon, int imgWidt } } - private void scaleArray(float[] array, float scale) { for (int i = 0; i < array.length; i++) { array[i] *= scale; @@ -220,11 +219,10 @@ public Poly(int index, boolean isQuad) { nCoords = nCoordsTri; } this.nPerPoly = nPerVertex * vertexPerPoly; - } public void printData() { - System.out.println(index + ": " + hashCode() + " / " + nCoords[index * nPerPoly + 0] + " " + nCoords[index * nPerPoly + 1] + " " + nCoords[index * nPerPoly + 2]); + System.out.println(index + ": " + hashCode() + " / " + nCoords[index * nPerPoly] + " " + nCoords[index * nPerPoly + 1] + " " + nCoords[index * nPerPoly + 2]); } @Override @@ -274,20 +272,17 @@ public int hashCode() { public int compareTo(Poly o) { return (this.hashCode() / 100) - (o.hashCode() / 100); } - } public static float round(float d, int decimalPlace) { //System.out.println(d); try { BigDecimal bd = new BigDecimal(Float.toString(d)); - bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); + bd = bd.setScale(decimalPlace, RoundingMode.HALF_UP); return bd.floatValue(); } catch (NumberFormatException ex) { //System.out.println("ERROR: " + d); return 0.0f; } - } - } diff --git a/src/main/java/formats/imd/StripeCalculator.java b/src/main/java/formats/imd/StripeCalculator.java index f09768c..0de4cab 100644 --- a/src/main/java/formats/imd/StripeCalculator.java +++ b/src/main/java/formats/imd/StripeCalculator.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import java.util.stream.IntStream; /** * @author Trifindo @@ -25,15 +27,14 @@ public class StripeCalculator { private int numEdges; private static final int[] oppositeIndex = new int[]{2, 2, -2, -2}; - private ArrayList edges; - private ArrayList> edgesConnected; + private List edges; + private List> edgesConnected; private boolean[] usedFaces; private boolean useUniformNormalOrientation; private boolean useVertexColors; - public StripeCalculator(PolygonData pData, boolean isQuad, - boolean useUniformNormalOrientation, boolean useVertexColors) { + public StripeCalculator(PolygonData pData, boolean isQuad, boolean useUniformNormalOrientation, boolean useVertexColors) { this.pData = pData; this.isQuad = isQuad; this.useVertexColors = useVertexColors; @@ -57,7 +58,7 @@ public StripeCalculator(PolygonData pData, boolean isQuad, this.numEdges = numFaces * edgesPerFace; } - public ArrayList calculateTriStrip() { + public List calculateTriStrip() { //Calculate edges edges = calculateEdges(); @@ -65,13 +66,13 @@ public ArrayList calculateTriStrip() { edgesConnected = generateConnectedEdges(edges); //Calculate connected faces - ArrayList> connectedEdgesLocal = new ArrayList<>(); - ArrayList> connectedFaces = calculateAllConnectedQuadFaces(connectedEdgesLocal); + List> connectedEdgesLocal = new ArrayList<>(); + List> connectedFaces = calculateAllConnectedQuadFaces(connectedEdgesLocal); return null;//TODO change this } - public ArrayList calculateQuadStrip() { + public List calculateQuadStrip() { //Calculate edges edges = calculateEdges(); @@ -79,12 +80,12 @@ public ArrayList calculateQuadStrip() { edgesConnected = generateConnectedEdges(edges); //Calculate connected faces - ArrayList> connectedEdgesLocal = new ArrayList<>(); - ArrayList> connectedFaces = calculateAllConnectedQuadFaces(connectedEdgesLocal); + List> connectedEdgesLocal = new ArrayList<>(); + List> connectedFaces = calculateAllConnectedQuadFaces(connectedEdgesLocal); - ArrayList> stripFaces = new ArrayList<>(); - ArrayList> stripEdges = new ArrayList<>(); - ArrayList looseFaces = new ArrayList<>(); + List> stripFaces = new ArrayList<>(); + List> stripEdges = new ArrayList<>(); + List looseFaces = new ArrayList<>(); for (int i = 0; i < connectedFaces.size(); i++) { if (connectedFaces.get(i).size() > 1) { stripFaces.add(connectedFaces.get(i)); @@ -94,7 +95,7 @@ public ArrayList calculateQuadStrip() { } } - ArrayList pDataStrips = new ArrayList<>(stripFaces.size() + looseFaces.size()); + List pDataStrips = new ArrayList<>(stripFaces.size() + looseFaces.size()); if (isQuad) { if (looseFaces.size() > 0) { PolygonData pDataLoose = new PolygonData(); @@ -123,19 +124,19 @@ public ArrayList calculateQuadStrip() { //pDataStrips = new ArrayList<>(stripFaces.size()); //PolygonData pDataLoose; if (isQuad) { - for (int i = 0; i < stripEdges.size(); i++) { + for (List stripEdge : stripEdges) { PolygonData newPdata = new PolygonData(); - newPdata.initQuadStrip(stripEdges.get(i).size()); - for (int j = 0; j < stripEdges.get(i).size(); j++) { - copyEdgeData(newPdata, stripEdges.get(i).get(j), j); + newPdata.initQuadStrip(stripEdge.size()); + for (int j = 0; j < stripEdge.size(); j++) { + copyEdgeData(newPdata, stripEdge.get(j), j); } pDataStrips.add(newPdata); } } else { - for (int i = 0; i < stripFaces.size(); i++) { + for (List stripFace : stripFaces) { PolygonData newPdata = new PolygonData(); - newPdata.initTris(stripFaces.get(i).size()); - for (int j = 0; j < stripFaces.get(i).size(); j++) { + newPdata.initTris(stripFace.size()); + for (int j = 0; j < stripFace.size(); j++) { for (int k = 0; k < 3; k++) { } @@ -155,8 +156,7 @@ private void copyEdgeData(PolygonData newPData, Edge edge, int dstEdgeIndex) { } } - private void copyEdgeCoords(float[] coordsData, float[] newCoordsData, - Edge edge, int coordsPerVertex, int dstEdgeIndex) { + private void copyEdgeCoords(float[] coordsData, float[] newCoordsData, Edge edge, int coordsPerVertex, int dstEdgeIndex) { System.arraycopy( coordsData, edge.vertexIndex1 * coordsPerVertex, newCoordsData, dstEdgeIndex * coordsPerVertex * 2, coordsPerVertex); @@ -180,22 +180,19 @@ private int getFaceIndex(int edgeIndex) { private boolean isEdgeConectedToNewFace(int edgeIndex, boolean[] localUsedFaces) { if (edgesConnected.get(edgeIndex).size() > 0) { int faceIndex = getFaceIndex(edgesConnected.get(edgeIndex).get(0)); - if (!localUsedFaces[faceIndex] && !usedFaces[faceIndex]) { - return true; - } + return !localUsedFaces[faceIndex] && !usedFaces[faceIndex]; } return false; } - private ArrayList> calculateAllConnectedTriFaces( - ArrayList> edgesLocalConnected) { - ArrayList> connectedFaces = new ArrayList<>(); + private List> calculateAllConnectedTriFaces(List> edgesLocalConnected) { + List> connectedFaces = new ArrayList<>(); usedFaces = new boolean[numFaces]; for (int i = 0, c = 0; i < numFaces; i++) { if (!usedFaces[i]) { - ArrayList edgesLocal1 = new ArrayList<>(); - ArrayList edgesLocal2 = new ArrayList<>(); - ArrayList edgesLocal3 = new ArrayList<>(); + List edgesLocal1 = new ArrayList<>(); + List edgesLocal2 = new ArrayList<>(); + List edgesLocal3 = new ArrayList<>(); //ArrayList connected1 = connectedTriFaces(i, 0, 2, edgesLocalX); c++; @@ -204,16 +201,15 @@ private ArrayList> calculateAllConnectedTriFaces( return connectedFaces; } - private ArrayList> calculateAllConnectedQuadFaces( - ArrayList> edgesLocalConnected) { - ArrayList> connectedFaces = new ArrayList<>(); + private List> calculateAllConnectedQuadFaces(List> edgesLocalConnected) { + List> connectedFaces = new ArrayList<>(); usedFaces = new boolean[numFaces]; for (int i = 0, c = 0; i < numFaces; i++) { if (!usedFaces[i]) { - ArrayList edgesLocalX = new ArrayList<>(); - ArrayList edgesLocalY = new ArrayList<>(); - ArrayList connectedX = connectedQuadFaces(i, 0, 2, edgesLocalX); - ArrayList connectedY = connectedQuadFaces(i, 1, 3, edgesLocalY); + List edgesLocalX = new ArrayList<>(); + List edgesLocalY = new ArrayList<>(); + List connectedX = connectedQuadFaces(i, 0, 2, edgesLocalX); + List connectedY = connectedQuadFaces(i, 1, 3, edgesLocalY); if (connectedX.size() > connectedY.size()) { connectedFaces.add(connectedX); edgesLocalConnected.add(edgesLocalX); @@ -230,8 +226,8 @@ private ArrayList> calculateAllConnectedQuadFaces( return connectedFaces; } - private ArrayList connectedTriFaces(int startFaceIndex) { - ArrayList connectedFaces = new ArrayList<>(); + private List connectedTriFaces(int startFaceIndex) { + List connectedFaces = new ArrayList<>(); boolean[] localUsedFaces = new boolean[usedFaces.length]; localUsedFaces[startFaceIndex] = true; @@ -239,34 +235,32 @@ private ArrayList connectedTriFaces(int startFaceIndex) { return null; } - private ArrayList connectedQuadFaces(int startFaceIndex, int forwardEdgeLocalIndex, - int backwardEdgeLocalIndex, ArrayList edgesLocalConnected) { - ArrayList connectedFaces = new ArrayList<>(); + private List connectedQuadFaces(int startFaceIndex, int forwardEdgeLocalIndex, + int backwardEdgeLocalIndex, List edgesLocalConnected) { boolean[] localUsedFaces = new boolean[usedFaces.length]; localUsedFaces[startFaceIndex] = true; - ArrayList edgesForward = new ArrayList<>(); - ArrayList edgesBackward = new ArrayList<>(); - ArrayList forward = connectedFacesOneDirection(startFaceIndex, forwardEdgeLocalIndex, localUsedFaces, edgesForward); - ArrayList backward = connectedFacesOneDirection(startFaceIndex, backwardEdgeLocalIndex, localUsedFaces, edgesBackward); + List edgesForward = new ArrayList<>(); + List edgesBackward = new ArrayList<>(); + List forward = connectedFacesOneDirection(startFaceIndex, forwardEdgeLocalIndex, localUsedFaces, edgesForward); + List backward = connectedFacesOneDirection(startFaceIndex, backwardEdgeLocalIndex, localUsedFaces, edgesBackward); Collections.reverse(forward); - connectedFaces.addAll(forward); + List connectedFaces = new ArrayList<>(forward); connectedFaces.add(startFaceIndex); connectedFaces.addAll(backward); Collections.reverse(edgesForward); edgesLocalConnected.addAll(edgesForward); - for (int i = 0; i < edgesBackward.size(); i++) { - edgesBackward.get(i).flip(); + for (Edge edge : edgesBackward) { + edge.flip(); } edgesLocalConnected.addAll(edgesBackward); return connectedFaces; } - private ArrayList connectedFacesOneDirection(int startFaceIndex, - int startEdgeIndex, boolean[] localUsedFaces, ArrayList edgesLocalConnected) { - ArrayList connectedFaces = new ArrayList<>(); + private List connectedFacesOneDirection(int startFaceIndex, int startEdgeIndex, boolean[] localUsedFaces, List edgesLocalConnected) { + List connectedFaces = new ArrayList<>(); int secondEdgeIndex; int firstEdgeIndex; secondEdgeIndex = getEdgeIndex(startFaceIndex, startEdgeIndex); @@ -282,8 +276,8 @@ private ArrayList connectedFacesOneDirection(int startFaceIndex, return connectedFaces; } - private ArrayList> generateConnectedEdges(ArrayList edges) { - ArrayList> conectedEdges = new ArrayList<>(numEdges); + private List> generateConnectedEdges(List edges) { + List> conectedEdges = new ArrayList<>(numEdges); for (int i = 0; i < numEdges; i++) { conectedEdges.add(new ArrayList<>()); } @@ -298,8 +292,8 @@ private ArrayList> generateConnectedEdges(ArrayList edg return conectedEdges; } - private ArrayList calculateEdges() { - ArrayList edges = new ArrayList<>(numEdges); + private List calculateEdges() { + List edges = new ArrayList<>(numEdges); for (int i = 0; i < numFaces; i++) { int offset = edgesPerFace * i; for (int j = 0; j < edgesPerFace; j++) { @@ -316,11 +310,10 @@ private void printCoords(int vertexIndex) { System.out.println(); } - private void printConectedEdgesCoords(ArrayList edges, - ArrayList> edgesConnected) { - for (int i = 0; i < edgesConnected.size(); i++) { - if (edgesConnected.get(i).size() > 0) { - Edge edge = edges.get(edgesConnected.get(i).get(0)); + private void printConectedEdgesCoords(List edges, List> edgesConnected) { + for (List integers : edgesConnected) { + if (integers.size() > 0) { + Edge edge = edges.get(integers.get(0)); edge.printEdgeCoords(); } } @@ -357,29 +350,21 @@ public void flip() { vertexIndex2 = temp; } - private boolean sameVertexCoords(float[] coordData, int coordsPerVertex, - int vertexIndex1, int vertexIndex2) { + private boolean sameVertexCoords(float[] coordData, int coordsPerVertex, int vertexIndex1, int vertexIndex2) { int offset1 = vertexIndex1 * coordsPerVertex; int offset2 = vertexIndex2 * coordsPerVertex; - for (int i = 0; i < coordsPerVertex; i++) { - if (Math.abs(coordData[offset1 + i] - coordData[offset2 + i]) > 0.0001f) { - return false; - } - } - return true; + return IntStream.range(0, coordsPerVertex) + .noneMatch(i -> Math.abs(coordData[offset1 + i] - coordData[offset2 + i]) > 0.0001f); } - private boolean sameEdgeCoords(float[] coords, int coordsPerVertex, - Edge other) { + private boolean sameEdgeCoords(float[] coords, int coordsPerVertex, Edge other) { /*if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex1, other.vertexIndex1)) { if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex2)) { return true; } } else */ if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex1, other.vertexIndex2)) { - if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex1)) { - return true; - } + return sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex1); } return false; } @@ -389,37 +374,17 @@ public boolean equals(Object obj) { final Edge other = (Edge) obj; if (useUniformNormalOrientation) { if (useVertexColors) { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other) - && sameEdgeCoords(colors, cPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other) && sameEdgeCoords(colors, cPerVertex, other); } else { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other); } } else { if (useVertexColors) { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other) - && sameEdgeCoords(nCoords, nPerVertex, other) - && sameEdgeCoords(colors, cPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other) && sameEdgeCoords(nCoords, nPerVertex, other) && sameEdgeCoords(colors, cPerVertex, other); } else { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other) - && sameEdgeCoords(nCoords, nPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other) && sameEdgeCoords(nCoords, nPerVertex, other); } } - - return false; } - } - } diff --git a/src/main/java/formats/imd/TriangleStripCalculator.java b/src/main/java/formats/imd/TriangleStripCalculator.java index c135ac7..4e3d22b 100644 --- a/src/main/java/formats/imd/TriangleStripCalculator.java +++ b/src/main/java/formats/imd/TriangleStripCalculator.java @@ -2,6 +2,9 @@ package formats.imd; import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author Trifindo @@ -21,8 +24,8 @@ public class TriangleStripCalculator { private int numFaces; private int numEdges; - private ArrayList edges; - private ArrayList> edgesConnected; + private List edges; + private List> edgesConnected; private boolean[] usedFaces; private boolean useUniformNormalOrientation; @@ -41,27 +44,27 @@ public TriangleStripCalculator(PolygonData pData, boolean useUniformNormalOrient this.numEdges = numFaces * edgesPerFace; } - public ArrayList calculateTriStrip() { + public List calculateTriStrip() { edges = calculateEdges(); edgesConnected = generateConnectedEdges(edges); usedFaces = new boolean[numFaces]; - ArrayList> strips = new ArrayList<>(); - ArrayList looseTris = new ArrayList<>(); + List> strips = new ArrayList<>(); + List looseTris = new ArrayList<>(); for (int i = 0; i < numFaces; i++) { if (!usedFaces[i]) { - ArrayList> stripCandidates = new ArrayList<>(); + List> stripCandidates = new ArrayList<>(); for (int j = 0; j < edgesPerFace; j++) { - ArrayList stripForward = getStripVertexIndices(i, j, true); + List stripForward = getStripVertexIndices(i, j, true); if (stripContainsFace(stripForward, i)) { stripCandidates.add(stripForward); } - ArrayList stripBackward = getStripVertexIndices(i, j, false); + List stripBackward = getStripVertexIndices(i, j, false); if (stripContainsFace(stripBackward, i)) { stripCandidates.add(stripBackward); } } - ArrayList longestStrip; + List longestStrip; if (stripCandidates.size() > 0) { longestStrip = getLongestStrip(stripCandidates); } else { @@ -80,7 +83,7 @@ public ArrayList calculateTriStrip() { } } - ArrayList pDataStrips = new ArrayList<>(); + List pDataStrips = new ArrayList<>(); if (looseTris.size() > 0) { PolygonData pDataTriangles = new PolygonData(); pDataTriangles.initTrisVertices(looseTris.size()); @@ -96,15 +99,15 @@ public ArrayList calculateTriStrip() { } else { pDataStrips.add(null); } - for (int i = 0; i < strips.size(); i++) { + for (List strip : strips) { PolygonData pDataStrip = new PolygonData(); - pDataStrip.initTrisVertices(strips.get(i).size()); - for (int j = 0; j < strips.get(i).size(); j++) { - copyVertexData(vCoords, strips.get(i).get(j) * vPerVertex, pDataStrip.vCoordsTri, j * vPerVertex, vPerVertex); - copyVertexData(tCoords, strips.get(i).get(j) * tPerVertex, pDataStrip.tCoordsTri, j * tPerVertex, tPerVertex); - copyVertexData(nCoords, strips.get(i).get(j) * nPerVertex, pDataStrip.nCoordsTri, j * nPerVertex, nPerVertex); + pDataStrip.initTrisVertices(strip.size()); + for (int j = 0; j < strip.size(); j++) { + copyVertexData(vCoords, strip.get(j) * vPerVertex, pDataStrip.vCoordsTri, j * vPerVertex, vPerVertex); + copyVertexData(tCoords, strip.get(j) * tPerVertex, pDataStrip.tCoordsTri, j * tPerVertex, tPerVertex); + copyVertexData(nCoords, strip.get(j) * nPerVertex, pDataStrip.nCoordsTri, j * nPerVertex, nPerVertex); if (useVertexColors) { - copyVertexData(colors, strips.get(i).get(j) * cPerVertex, pDataStrip.colorsTri, j * cPerVertex, cPerVertex); + copyVertexData(colors, strip.get(j) * cPerVertex, pDataStrip.colorsTri, j * cPerVertex, cPerVertex); } } pDataStrips.add(pDataStrip); @@ -113,22 +116,15 @@ public ArrayList calculateTriStrip() { return pDataStrips; } - private boolean stripContainsFace(ArrayList strip, int faceIndex) { - for (int i = 0; i < strip.size(); i++) { - if (strip.get(i) / edgesPerFace == faceIndex) { - return true; - } - } - return false; + private boolean stripContainsFace(List strip, int faceIndex) { + return strip.stream().anyMatch(integer -> integer / edgesPerFace == faceIndex); } private void copyVertexData(float[] src, int srcOffset, float[] dst, int dstOffset, int elePerVertex) { - for (int i = 0; i < elePerVertex; i++) { - dst[dstOffset + i] = src[srcOffset + i]; - } + if (elePerVertex >= 0) System.arraycopy(src, srcOffset, dst, dstOffset, elePerVertex); } - private ArrayList getStripVertexIndices(int faceIndex, int edgeIndexInFace, boolean forward) { + private List getStripVertexIndices(int faceIndex, int edgeIndexInFace, boolean forward) { boolean[] usedFacesInStrip = new boolean[numFaces]; //Edges backward @@ -152,7 +148,7 @@ private ArrayList getStripVertexIndices(int faceIndex, int edgeIndexInF int firstVertexIndex = getOppositeVertexIndex(previousEdgeIndex); //Get full strip starting from first vertex - ArrayList vertexIndices = new ArrayList<>(); + List vertexIndices = new ArrayList<>(); vertexIndices.add(firstVertexIndex); //vertexIndices.add(getPrevEdgeIndex(vertexIndices.get(0))); //vertexIndices.add(getPrevEdgeIndex(vertexIndices.get(1))); @@ -179,7 +175,7 @@ private ArrayList getStripVertexIndices(int faceIndex, int edgeIndexInF return vertexIndices; } - private ArrayList getLongestStrip(ArrayList> strips) { + private List getLongestStrip(List> strips) { int maxSize = -1; int maxIndex = 0; for (int i = 0; i < strips.size(); i++) { @@ -202,15 +198,13 @@ private boolean isEdgeConnected(int edgeIndex) { private boolean isEdgeConnectedToNewFace(int edgeIndex, boolean[] localUsedFaces) { if (edgesConnected.get(edgeIndex).size() > 0) { int faceIndex = edgesConnected.get(edgeIndex).get(0) / edgesPerFace; - if (!usedFaces[faceIndex] && !localUsedFaces[faceIndex]) { - return true; - } + return !usedFaces[faceIndex] && !localUsedFaces[faceIndex]; } return false; } - private ArrayList calculateEdges() { - ArrayList edges = new ArrayList<>(numEdges); + private List calculateEdges() { + List edges = new ArrayList<>(numEdges); for (int i = 0; i < numFaces; i++) { int offset = edgesPerFace * i; for (int j = 0; j < edgesPerFace; j++) { @@ -220,25 +214,24 @@ private ArrayList calculateEdges() { return edges; } - private ArrayList> generateConnectedEdges(ArrayList edges) { - ArrayList> conectedEdges = new ArrayList<>(numEdges); - for (int i = 0; i < numEdges; i++) { - conectedEdges.add(new ArrayList<>()); - } + private List> generateConnectedEdges(List edges) { + List> connectedEdges = IntStream.range(0, numEdges) + .mapToObj(i -> new ArrayList()) + .collect(Collectors.toList()); for (int i = 0; i < numEdges; i++) { for (int j = i + 1; j < numEdges; j++) { if (edges.get(i).equals(edges.get(j))) { - conectedEdges.get(i).add(j); - conectedEdges.get(j).add(i); + connectedEdges.get(i).add(j); + connectedEdges.get(j).add(i); } } } - return conectedEdges; + return connectedEdges; } - private void disableFacesUsedByStrip(ArrayList strip) { - for (int i = 0; i < strip.size(); i++) { - usedFaces[strip.get(i) / edgesPerFace] = true; + private void disableFacesUsedByStrip(List strip) { + for (Integer integer : strip) { + usedFaces[integer / edgesPerFace] = true; } } @@ -292,29 +285,21 @@ public void flip() { vertexIndex2 = temp; } - private boolean sameVertexCoords(float[] coordData, int coordsPerVertex, - int vertexIndex1, int vertexIndex2) { + private boolean sameVertexCoords(float[] coordData, int coordsPerVertex, int vertexIndex1, int vertexIndex2) { int offset1 = vertexIndex1 * coordsPerVertex; int offset2 = vertexIndex2 * coordsPerVertex; - for (int i = 0; i < coordsPerVertex; i++) { - if (Math.abs(coordData[offset1 + i] - coordData[offset2 + i]) > 0.0001f) { - return false; - } - } - return true; + return IntStream.range(0, coordsPerVertex) + .noneMatch(i -> Math.abs(coordData[offset1 + i] - coordData[offset2 + i]) > 0.0001f); } - private boolean sameEdgeCoords(float[] coords, int coordsPerVertex, - Edge other) { + private boolean sameEdgeCoords(float[] coords, int coordsPerVertex, Edge other) { /*if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex1, other.vertexIndex1)) { if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex2)) { return true; } } else */ if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex1, other.vertexIndex2)) { - if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex1)) { - return true; - } + return sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex1); } return false; } @@ -324,37 +309,17 @@ public boolean equals(Object obj) { final Edge other = (Edge) obj; if (useUniformNormalOrientation) { if (useVertexColors) { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other) - && sameEdgeCoords(colors, cPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other) && sameEdgeCoords(colors, cPerVertex, other); } else { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other); } } else { if (useVertexColors) { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other) - && sameEdgeCoords(nCoords, nPerVertex, other) - && sameEdgeCoords(colors, cPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other) && sameEdgeCoords(nCoords, nPerVertex, other) && sameEdgeCoords(colors, cPerVertex, other); } else { - if (sameEdgeCoords(vCoords, vPerVertex, other) - && sameEdgeCoords(tCoords, tPerVertex, other) - && sameEdgeCoords(nCoords, nPerVertex, other)) { - return true; - } + return sameEdgeCoords(vCoords, vPerVertex, other) && sameEdgeCoords(tCoords, tPerVertex, other) && sameEdgeCoords(nCoords, nPerVertex, other); } } - - return false; } - } - } diff --git a/src/main/java/formats/imd/nodes/Body.java b/src/main/java/formats/imd/nodes/Body.java index 5d796ca..c2d7b54 100644 --- a/src/main/java/formats/imd/nodes/Body.java +++ b/src/main/java/formats/imd/nodes/Body.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -15,24 +15,17 @@ public Body() { super("body"); ImdNode snOriginalCreate = new ImdNode("original_create"); - snOriginalCreate.attributes = new ArrayList() { - { - add(new ImdAttribute("user", "unknown")); - add(new ImdAttribute("host", "unknown")); - add(new ImdAttribute("date", "2019-01-11T13:52:52")); - add(new ImdAttribute("source", "untitled")); - } - }; + snOriginalCreate.attributes = List.of( + new ImdAttribute("user", "unknown"), + new ImdAttribute("host", "unknown"), + new ImdAttribute("date", "2019-01-11T13:52:52"), + new ImdAttribute("source", "untitled")); subnodes.add(snOriginalCreate); ImdNode snOriginalGenerator = new ImdNode("original_generator"); - snOriginalGenerator.attributes = new ArrayList() { - { - add(new ImdAttribute("name", "Pokemon DS Map Studio")); - add(new ImdAttribute("version", "1.0")); - } - }; + snOriginalGenerator.attributes = List.of( + new ImdAttribute("name", "Pokemon DS Map Studio"), + new ImdAttribute("version", "1.0")); subnodes.add(snOriginalGenerator); } - } diff --git a/src/main/java/formats/imd/nodes/BoxTest.java b/src/main/java/formats/imd/nodes/BoxTest.java index 1f092a0..ff330dd 100644 --- a/src/main/java/formats/imd/nodes/BoxTest.java +++ b/src/main/java/formats/imd/nodes/BoxTest.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -15,17 +15,13 @@ public BoxTest(int posScale, float[] xyz, float[] whd) { super("box_test"); //System.out.println("Box test xyz: " + xyz[0] + " "+ xyz[1] + " "+ xyz[2]); //System.out.println("Box test whd: " + whd[0] + " "+ whd[1] + " "+ whd[2]); - attributes = new ArrayList() { - { - add(new ImdAttribute("pos_scale", posScale)); - //add(new ImdAttribute("xyz", new float[]{-2.0f, -0.3125f, -3.0f})); - //add(new ImdAttribute("whd", new float[]{4.0f, 0.75f, 5.0f})); - //add(new ImdAttribute("xyz", new float[]{-3.0f, -0.3125f, -3.0f})); - //add(new ImdAttribute("whd", new float[]{6.0f, 0.75f, 6.0f})); - add(new ImdAttribute("xyz", xyz)); - add(new ImdAttribute("whd", whd)); - } - }; + attributes = List.of( + new ImdAttribute("pos_scale", posScale), + //new ImdAttribute("xyz", new float[]{-2.0f, -0.3125f, -3.0f}), + //new ImdAttribute("whd", new float[]{4.0f, 0.75f, 5.0f}), + //new ImdAttribute("xyz", new float[]{-3.0f, -0.3125f, -3.0f}), + //new ImdAttribute("whd", new float[]{6.0f, 0.75f, 6.0f}), + new ImdAttribute("xyz", xyz), + new ImdAttribute("whd", whd)); } - } diff --git a/src/main/java/formats/imd/nodes/Head.java b/src/main/java/formats/imd/nodes/Head.java index 1dbf206..fc444ee 100644 --- a/src/main/java/formats/imd/nodes/Head.java +++ b/src/main/java/formats/imd/nodes/Head.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -15,14 +15,11 @@ public Head() { super("head"); ImdNode snCreate = new ImdNode("create"); - snCreate.attributes = new ArrayList() { - { - add(new ImdAttribute("user", "unknown")); - add(new ImdAttribute("host", "unknown")); - add(new ImdAttribute("date", "2019-01-11T13:52:52")); - add(new ImdAttribute("source", "untitled")); - } - }; + snCreate.attributes = List.of( + new ImdAttribute("user", "unknown"), + new ImdAttribute("host", "unknown"), + new ImdAttribute("date", "2019-01-11T13:52:52"), + new ImdAttribute("source", "untitled")); subnodes.add(snCreate); ImdNode snTitle = new ImdNode("title"); @@ -30,14 +27,9 @@ public Head() { subnodes.add(snTitle); ImdNode snGenerator = new ImdNode("generator"); - snGenerator.attributes = new ArrayList() { - { - add(new ImdAttribute("name", "Pokemon DS Map Studio")); - add(new ImdAttribute("version", "1.0")); - } - }; + snGenerator.attributes = List.of( + new ImdAttribute("name", "Pokemon DS Map Studio"), + new ImdAttribute("version", "1.0")); subnodes.add(snGenerator); - } - } diff --git a/src/main/java/formats/imd/nodes/ImdBitmap.java b/src/main/java/formats/imd/nodes/ImdBitmap.java index f64d5b5..d39b366 100644 --- a/src/main/java/formats/imd/nodes/ImdBitmap.java +++ b/src/main/java/formats/imd/nodes/ImdBitmap.java @@ -6,7 +6,7 @@ import formats.imd.ImdTextureIndexed; import formats.nsbtx2.NsbtxTexture; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -16,11 +16,7 @@ public class ImdBitmap extends ImdNode { public ImdBitmap(ImdTextureIndexed imdTexture) { super("bitmap"); - attributes = new ArrayList() { - { - add(new ImdAttribute("size", imdTexture.getTextureDataSize())); - } - }; + attributes = List.of(new ImdAttribute("size", imdTexture.getTextureDataSize())); content = imdTexture.getTexDataAsHexString(); } @@ -28,11 +24,7 @@ public ImdBitmap(ImdTextureIndexed imdTexture) { public ImdBitmap(NsbtxTexture texture) { super("bitmap"); - attributes = new ArrayList() { - { - add(new ImdAttribute("size", texture.getDataSizeImd())); - } - }; + attributes = List.of(new ImdAttribute("size", texture.getDataSizeImd())); content = texture.getDataAsHexStringImd(); } @@ -40,22 +32,16 @@ public ImdBitmap(NsbtxTexture texture) { public ImdBitmap(int size) { super("bitmap"); - attributes = new ArrayList() { - { - add(new ImdAttribute("size", size)); - } - }; + attributes = List.of(new ImdAttribute("size", size)); //TODO: change this - String pixels = ""; + StringBuilder pixels = new StringBuilder(); for (int i = 0; i < size / 8; i++) { for (int j = 0; j < 7; j++) { - pixels += "0000 "; + pixels.append("0000 "); } - pixels += "0000 "; + pixels.append("0000 "); } - content = pixels; + content = pixels.toString(); } - - } diff --git a/src/main/java/formats/imd/nodes/Material.java b/src/main/java/formats/imd/nodes/Material.java index ac2537e..1dfc7bc 100644 --- a/src/main/java/formats/imd/nodes/Material.java +++ b/src/main/java/formats/imd/nodes/Material.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -19,12 +19,7 @@ public Material(int index, String name, boolean[] lights, int alpha, int texTilingU, int texTilingV) { super("material"); - String faceType; - if (doubleFaceRender) { - faceType = "both"; - } else { - faceType = "front"; - } + String faceType = doubleFaceRender ? "both" : "front"; int polygonID; if (renderBorder) { @@ -38,57 +33,51 @@ public Material(int index, String name, boolean[] lights, int alpha, String texTilingNameU = texTilingToString(texTilingU); String texTilingNameV = texTilingToString(texTilingV); - attributes = new ArrayList() { - { - add(new ImdAttribute("index", index)); - add(new ImdAttribute("name", name));//"mtl" + index)); - add(new ImdAttribute("light0", lights[0])); - add(new ImdAttribute("light1", lights[1])); - add(new ImdAttribute("light2", lights[2])); - add(new ImdAttribute("light3", lights[3])); - add(new ImdAttribute("face", faceType)); - add(new ImdAttribute("alpha", alpha)); //Check this - add(new ImdAttribute("wire_mode", false)); - add(new ImdAttribute("polygon_mode", "modulate")); - add(new ImdAttribute("polygon_id", polygonID)); - add(new ImdAttribute("fog_flag", fogEnabled)); - add(new ImdAttribute("depth_test_decal", false)); - add(new ImdAttribute("translucent_update_depth", false)); - add(new ImdAttribute("render_1_pixel", false)); - add(new ImdAttribute("far_clipping", false)); - add(new ImdAttribute("diffuse", new int[]{25, 25, 25})); - add(new ImdAttribute("ambient", new int[]{31, 31, 31})); - add(new ImdAttribute("specular", new int[]{0, 0, 0})); - add(new ImdAttribute("emission", new int[]{0, 0, 0})); - add(new ImdAttribute("shininess_table_flag", false)); - add(new ImdAttribute("tex_image_idx", texIndex)); - add(new ImdAttribute("tex_palette_idx", palIndex)); - add(new ImdAttribute("tex_tiling", texTilingNameU + " " + texTilingNameV)); - add(new ImdAttribute("tex_scale", new float[]{1.0f, 1.0f})); - add(new ImdAttribute("tex_rotate", 0.0f)); - add(new ImdAttribute("tex_translate", new float[]{0.0f, 0.0f})); - add(new ImdAttribute("tex_gen_mode", texGenModes[texGenModeIndex])); - } - }; + attributes = List.of( + new ImdAttribute("index", index), + new ImdAttribute("name", name), //"mtl" + index), + new ImdAttribute("light0", lights[0]), + new ImdAttribute("light1", lights[1]), + new ImdAttribute("light2", lights[2]), + new ImdAttribute("light3", lights[3]), + new ImdAttribute("face", faceType), + new ImdAttribute("alpha", alpha), //Check this + new ImdAttribute("wire_mode", false), + new ImdAttribute("polygon_mode", "modulate"), + new ImdAttribute("polygon_id", polygonID), + new ImdAttribute("fog_flag", fogEnabled), + new ImdAttribute("depth_test_decal", false), + new ImdAttribute("translucent_update_depth", false), + new ImdAttribute("render_1_pixel", false), + new ImdAttribute("far_clipping", false), + new ImdAttribute("diffuse", new int[]{25, 25, 25}), + new ImdAttribute("ambient", new int[]{31, 31, 31}), + new ImdAttribute("specular", new int[]{0, 0, 0}), + new ImdAttribute("emission", new int[]{0, 0, 0}), + new ImdAttribute("shininess_table_flag", false), + new ImdAttribute("tex_image_idx", texIndex), + new ImdAttribute("tex_palette_idx", palIndex), + new ImdAttribute("tex_tiling", texTilingNameU + " " + texTilingNameV), + new ImdAttribute("tex_scale", new float[]{1.0f, 1.0f}), + new ImdAttribute("tex_rotate", 0.0f), + new ImdAttribute("tex_translate", new float[]{0.0f, 0.0f}), + new ImdAttribute("tex_gen_mode", texGenModes[texGenModeIndex])); } private String texTilingToString(int texTiling) { String texTilingName; switch (texTiling) { - case 0: - texTilingName = "repeat"; - break; case 1: texTilingName = "clamp"; break; case 2: texTilingName = "flip"; break; + case 0: default: texTilingName = "repeat"; break; } return texTilingName; } - } diff --git a/src/main/java/formats/imd/nodes/ModelInfo.java b/src/main/java/formats/imd/nodes/ModelInfo.java index 21ba2b9..4312727 100644 --- a/src/main/java/formats/imd/nodes/ModelInfo.java +++ b/src/main/java/formats/imd/nodes/ModelInfo.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -13,23 +13,19 @@ public class ModelInfo extends ImdNode { public ModelInfo(int posScale, int materialSize) { super("model_info"); - attributes = new ArrayList() { - { - add(new ImdAttribute("pos_scale", posScale)); - add(new ImdAttribute("scaling_rule", "standard")); - add(new ImdAttribute("vertex_style", "direct")); - add(new ImdAttribute("magnify", 1)); - add(new ImdAttribute("tool_start_frame", 1)); - add(new ImdAttribute("tex_matrix_mode", "maya")); - add(new ImdAttribute("compress_node", "merge")); - add(new ImdAttribute("node_size", new int[]{1, 1})); //TODO: Check this - add(new ImdAttribute("compress_material", true)); - add(new ImdAttribute("material_size", new int[]{materialSize, materialSize})); - add(new ImdAttribute("output_texture", "used")); - add(new ImdAttribute("force_full_weight", false)); - add(new ImdAttribute("use_primitive_strip", true)); - } - }; + attributes = List.of( + new ImdAttribute("pos_scale", posScale), + new ImdAttribute("scaling_rule", "standard"), + new ImdAttribute("vertex_style", "direct"), + new ImdAttribute("magnify", 1), + new ImdAttribute("tool_start_frame", 1), + new ImdAttribute("tex_matrix_mode", "maya"), + new ImdAttribute("compress_node", "merge"), + new ImdAttribute("node_size", new int[]{1, 1}), //TODO: Check this + new ImdAttribute("compress_material", true), + new ImdAttribute("material_size", new int[]{materialSize, materialSize}), + new ImdAttribute("output_texture", "used"), + new ImdAttribute("force_full_weight", false), + new ImdAttribute("use_primitive_strip", true)); } - } diff --git a/src/main/java/formats/imd/nodes/Node.java b/src/main/java/formats/imd/nodes/Node.java index 0812884..45aed88 100644 --- a/src/main/java/formats/imd/nodes/Node.java +++ b/src/main/java/formats/imd/nodes/Node.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -12,34 +12,31 @@ public class Node extends ImdNode { public Node(int index, int displaySize, int vertexSize, int polygonSize, - int triangleSize, int quadSize, ArrayList textureIDs) { + int triangleSize, int quadSize, List textureIDs) { super("node"); - attributes = new ArrayList() { - { - add(new ImdAttribute("index", index)); - add(new ImdAttribute("name", "world_root")); - add(new ImdAttribute("kind", "mesh")); - add(new ImdAttribute("parent", -1)); - add(new ImdAttribute("child", -1)); - add(new ImdAttribute("brother_next", -1)); - add(new ImdAttribute("brother_prev", -1)); - add(new ImdAttribute("draw_mtx", true)); - add(new ImdAttribute("billboard", false)); - add(new ImdAttribute("scale", new float[]{1.0f, 1.0f, 1.0f})); - add(new ImdAttribute("rotate", new float[]{0.0f, 0.0f, 0.0f})); - add(new ImdAttribute("translate", new float[]{0.0f, 0.0f, 0.0f})); - add(new ImdAttribute("visibility", true)); - add(new ImdAttribute("display_size", displaySize)); - add(new ImdAttribute("vertex_size", vertexSize)); - add(new ImdAttribute("polygon_size", polygonSize)); - add(new ImdAttribute("triangle_size", triangleSize)); - add(new ImdAttribute("quad_size", quadSize)); - add(new ImdAttribute("volume_min", new float[]{0.0f, 0.0f, 0.0f})); - add(new ImdAttribute("volume_max", new float[]{0.0f, 0.0f, 0.0f})); - add(new ImdAttribute("volume_r", 0.0f)); - } - }; + attributes = List.of( + new ImdAttribute("index", index), + new ImdAttribute("name", "world_root"), + new ImdAttribute("kind", "mesh"), + new ImdAttribute("parent", -1), + new ImdAttribute("child", -1), + new ImdAttribute("brother_next", -1), + new ImdAttribute("brother_prev", -1), + new ImdAttribute("draw_mtx", true), + new ImdAttribute("billboard", false), + new ImdAttribute("scale", new float[]{1.0f, 1.0f, 1.0f}), + new ImdAttribute("rotate", new float[]{0.0f, 0.0f, 0.0f}), + new ImdAttribute("translate", new float[]{0.0f, 0.0f, 0.0f}), + new ImdAttribute("visibility", true), + new ImdAttribute("display_size", displaySize), + new ImdAttribute("vertex_size", vertexSize), + new ImdAttribute("polygon_size", polygonSize), + new ImdAttribute("triangle_size", triangleSize), + new ImdAttribute("quad_size", quadSize), + new ImdAttribute("volume_min", new float[]{0.0f, 0.0f, 0.0f}), + new ImdAttribute("volume_max", new float[]{0.0f, 0.0f, 0.0f}), + new ImdAttribute("volume_r", 0.0f)); for (int i = 0; i < displaySize; i++) { ImdNode display = new ImdNode("display"); @@ -49,8 +46,5 @@ public Node(int index, int displaySize, int vertexSize, int polygonSize, display.attributes.add(new ImdAttribute("priority", 0)); subnodes.add(display); } - - } - } diff --git a/src/main/java/formats/imd/nodes/Polygon.java b/src/main/java/formats/imd/nodes/Polygon.java index f2ba0d4..8e7f12c 100644 --- a/src/main/java/formats/imd/nodes/Polygon.java +++ b/src/main/java/formats/imd/nodes/Polygon.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -16,25 +16,19 @@ public Polygon(int index, String name, int vertexSize, int polygonSize, int mtxPrimSize, boolean useVertexColors) { super("polygon"); - attributes = new ArrayList() { - { - add(new ImdAttribute("index", index)); - add(new ImdAttribute("name", name)); - add(new ImdAttribute("vertex_size", vertexSize)); - add(new ImdAttribute("polygon_size", polygonSize)); - add(new ImdAttribute("triangle_size", triangleSize)); - add(new ImdAttribute("quad_size", quadSize)); - add(new ImdAttribute("volume_min", volumeMin)); - add(new ImdAttribute("volume_max", volumeMin)); - add(new ImdAttribute("volume_r", volume_r)); - add(new ImdAttribute("mtx_prim_size", mtxPrimSize)); - add(new ImdAttribute("nrm_flag", true)); - add(new ImdAttribute("clr_flag", useVertexColors)); - add(new ImdAttribute("tex_flag", true)); - } - }; - - + attributes = List.of( + new ImdAttribute("index", index), + new ImdAttribute("name", name), + new ImdAttribute("vertex_size", vertexSize), + new ImdAttribute("polygon_size", polygonSize), + new ImdAttribute("triangle_size", triangleSize), + new ImdAttribute("quad_size", quadSize), + new ImdAttribute("volume_min", volumeMin), + new ImdAttribute("volume_max", volumeMin), + new ImdAttribute("volume_r", volume_r), + new ImdAttribute("mtx_prim_size", mtxPrimSize), + new ImdAttribute("nrm_flag", true), + new ImdAttribute("clr_flag", useVertexColors), + new ImdAttribute("tex_flag", true)); } - } diff --git a/src/main/java/formats/imd/nodes/Primitive.java b/src/main/java/formats/imd/nodes/Primitive.java index 61eec0d..c722d50 100644 --- a/src/main/java/formats/imd/nodes/Primitive.java +++ b/src/main/java/formats/imd/nodes/Primitive.java @@ -5,7 +5,8 @@ import formats.imd.ImdNode; import formats.imd.PolygonData; -import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; /** * @author Trifindo @@ -17,13 +18,10 @@ public class Primitive extends ImdNode { public Primitive(int index, String type, int vertexSize) { super("primitive"); - attributes = new ArrayList() { - { - add(new ImdAttribute("index", index)); - add(new ImdAttribute("type", type)); - add(new ImdAttribute("vertex_size", vertexSize)); - } - }; + attributes = List.of( + new ImdAttribute("index", index), + new ImdAttribute("type", type), + new ImdAttribute("vertex_size", vertexSize)); } public void calculateElementsWithStrips(PolygonData pData, boolean firstPrimitive, @@ -230,12 +228,9 @@ public void calculateElements(PolygonData pData, boolean firstPrimitive, } private boolean canUseDiff(float[] arr1, float[] arr2) { - for (int i = 0; i < arr1.length; i++) { - if (Math.abs(arr1[i] - arr2[i]) >= 0.124f) {//TODO: 0.125 - return false; - } - } - return true; + return IntStream.range(0, arr1.length) + .noneMatch(i -> Math.abs(arr1[i] - arr2[i]) >= 0.124f); + //TODO: 0.125 } private boolean sameCoordinate(float[] arr1, float[] arr2, int coordInd) { @@ -244,21 +239,13 @@ private boolean sameCoordinate(float[] arr1, float[] arr2, int coordInd) { } private boolean sameArraysNormals(float[] arr1, float[] arr2) { - for (int i = 0; i < arr1.length; i++) { - if (Math.abs(arr1[i] - arr2[i]) > 0.001f) { - return false; - } - } - return true; + return IntStream.range(0, arr1.length) + .noneMatch(i -> Math.abs(arr1[i] - arr2[i]) > 0.001f); } private boolean sameArraysColors(float[] arr1, float[] arr2) { - for (int i = 0; i < arr1.length; i++) { - if (colorToDsColor(arr1[i]) != colorToDsColor(arr2[i])) { - return false; - } - } - return true; + return IntStream.range(0, arr1.length) + .noneMatch(i -> colorToDsColor(arr1[i]) != colorToDsColor(arr2[i])); } private void addNormal(float[] normalCoords) { @@ -329,30 +316,22 @@ private void addVertexDiff(float[] vertexCoords, float[] newVertexCoords) { } private static int getIndexSameCoord(float[] array1, float[] array2) { - for (int i = 0; i < array1.length; i++) { - if (array1[i] == array2[i]) { - return i; - } - } - return -1; + return IntStream.range(0, array1.length) + .filter(i -> array1[i] == array2[i]) + .findFirst() + .orElse(-1); } public static boolean lowerBitsFixedPointAreZero(float f, int numZeroBits, int numBitsDecPart) { int fix = (int) (f * (1 << numBitsDecPart)); - for (int i = 0; i < numZeroBits; i++) { - if ((fix & (1 << i)) == 1 << i) { - return false; - } - } - return true; + return IntStream.range(0, numZeroBits) + .noneMatch(i -> (fix & (1 << i)) == 1 << i); } private static float[] getSubArrayCell(float[] array, int cellIndex, int cellSize) { float[] subArray = new float[cellSize]; - for (int i = 0; i < cellSize; i++) { - subArray[i] = array[cellIndex * cellSize + i]; - } + System.arraycopy(array, cellIndex * cellSize + 0, subArray, 0, cellSize); return subArray; } @@ -367,5 +346,4 @@ private static float[] getCoordsAtVertex(float[] array, int vertexIndex) { public static void init() { lastNormalUsed = new float[]{0.0f, 0.0f, 0.0f}; } - } diff --git a/src/main/java/formats/imd/nodes/TexImage.java b/src/main/java/formats/imd/nodes/TexImage.java index 7335fd8..762de6e 100644 --- a/src/main/java/formats/imd/nodes/TexImage.java +++ b/src/main/java/formats/imd/nodes/TexImage.java @@ -4,7 +4,7 @@ import formats.imd.ImdAttribute; import formats.imd.ImdNode; -import java.util.ArrayList; +import java.util.List; import formats.imd.ImdTextureIndexed; import formats.nsbtx2.Nsbtx2; @@ -23,31 +23,22 @@ public class TexImage extends ImdNode { "a5i3" }; - public TexImage(int index, String name, String paletteName, - ImdTextureIndexed imdTexture, int colorFormat, String path) { + public TexImage(int index, String name, String paletteName, ImdTextureIndexed imdTexture, int colorFormat, String path) { super("tex_image"); - String color0mode; - if (imdTexture.isTransparent()) { - color0mode = "transparency"; - } else { - color0mode = "color"; - } + String color0mode = imdTexture.isTransparent() ? "transparency" : "color"; - attributes = new ArrayList() { - { - add(new ImdAttribute("index", index)); - add(new ImdAttribute("name", name)); - add(new ImdAttribute("width", imdTexture.width)); - add(new ImdAttribute("height", imdTexture.height)); - add(new ImdAttribute("original_width", imdTexture.width)); - add(new ImdAttribute("original_height", imdTexture.height)); - add(new ImdAttribute("format", colorFormatTable[colorFormat])); - add(new ImdAttribute("color0_mode", color0mode)); - add(new ImdAttribute("palette_name", paletteName)); - add(new ImdAttribute("path", path)); - } - }; + attributes = List.of( + new ImdAttribute("index", index), + new ImdAttribute("name", name), + new ImdAttribute("width", imdTexture.width), + new ImdAttribute("height", imdTexture.height), + new ImdAttribute("original_width", imdTexture.width), + new ImdAttribute("original_height", imdTexture.height), + new ImdAttribute("format", colorFormatTable[colorFormat]), + new ImdAttribute("color0_mode", color0mode), + new ImdAttribute("palette_name", paletteName), + new ImdAttribute("path", path)); subnodes.add(new ImdBitmap(imdTexture)); //subnodes.add(new ImdBitmap((width * height) / 4)); @@ -56,27 +47,19 @@ public TexImage(int index, String name, String paletteName, public TexImage(int index, NsbtxTexture texture, String path) { super("tex_image"); - String color0mode; - if (texture.isTransparent()) { - color0mode = "transparency"; - } else { - color0mode = "color"; - } + String color0mode = texture.isTransparent() ? "transparency" : "color"; - attributes = new ArrayList() { - { - add(new ImdAttribute("index", index)); - add(new ImdAttribute("name", texture.getName())); - add(new ImdAttribute("width", texture.getWidth())); - add(new ImdAttribute("height", texture.getHeight())); - add(new ImdAttribute("original_width", texture.getWidth())); - add(new ImdAttribute("original_height", texture.getHeight())); - add(new ImdAttribute("format", Nsbtx2.formatNames[texture.getColorFormat()])); - add(new ImdAttribute("color0_mode", color0mode)); - add(new ImdAttribute("palette_name", "")); - add(new ImdAttribute("path", path)); - } - }; + attributes = List.of( + new ImdAttribute("index", index), + new ImdAttribute("name", texture.getName()), + new ImdAttribute("width", texture.getWidth()), + new ImdAttribute("height", texture.getHeight()), + new ImdAttribute("original_width", texture.getWidth()), + new ImdAttribute("original_height", texture.getHeight()), + new ImdAttribute("format", Nsbtx2.formatNames[texture.getColorFormat()]), + new ImdAttribute("color0_mode", color0mode), + new ImdAttribute("palette_name", ""), + new ImdAttribute("path", path)); subnodes.add(new ImdBitmap(texture)); //subnodes.add(new ImdBitmap((width * height) / 4)); diff --git a/src/main/java/formats/imd/nodes/TexPalette.java b/src/main/java/formats/imd/nodes/TexPalette.java index 7901cd7..603c09e 100644 --- a/src/main/java/formats/imd/nodes/TexPalette.java +++ b/src/main/java/formats/imd/nodes/TexPalette.java @@ -5,7 +5,7 @@ import formats.imd.ImdNode; import formats.nsbtx2.NsbtxPalette; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -15,13 +15,10 @@ public class TexPalette extends ImdNode { public TexPalette(int index, String name, int colorSize, String content) { super("tex_palette"); - attributes = new ArrayList() { - { - add(new ImdAttribute("index", index)); - add(new ImdAttribute("name", name)); - add(new ImdAttribute("color_size", colorSize)); - } - }; + attributes = List.of( + new ImdAttribute("index", index), + new ImdAttribute("name", name), + new ImdAttribute("color_size", colorSize)); this.content = content; } @@ -29,6 +26,4 @@ public TexPalette(int index, String name, int colorSize, String content) { public TexPalette(int index, NsbtxPalette pal) { this(index, pal.getName(), pal.getDataSizeImd(), pal.getDataAsHexStringImd()); } - - } diff --git a/src/main/java/formats/mapbin/ExportMapBinInfoDialog.java b/src/main/java/formats/mapbin/ExportMapBinInfoDialog.java index 5c33a2e..119920c 100644 --- a/src/main/java/formats/mapbin/ExportMapBinInfoDialog.java +++ b/src/main/java/formats/mapbin/ExportMapBinInfoDialog.java @@ -6,8 +6,6 @@ import net.miginfocom.swing.*; import javax.swing.*; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import java.awt.*; @@ -50,14 +48,12 @@ private enum ExportStatus { public final String msg; public final Color color; - private ExportStatus(String msg, Color color) { + ExportStatus(String msg, Color color) { this.msg = msg; this.color = color; } } - ; - /** * Creates new form ImdOutputInfoDialog */ @@ -73,14 +69,10 @@ public ExportMapBinInfoDialog(Frame parent) { jTable1.getColumnModel().getColumn(1).setCellRenderer(new StatusColumnCellRenderer()); - jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent event) { - int index = jTable1.getSelectedRow(); - updateView(index); - } + jTable1.getSelectionModel().addListSelectionListener(event -> { + int index = jTable1.getSelectedRow(); + updateView(index); }); - } /** @@ -88,7 +80,6 @@ public void valueChanged(ListSelectionEvent event) { * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ - @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { jPanel1 = new JPanel(); @@ -284,12 +275,7 @@ public boolean isCellEditable(int rowIndex, int columnIndex) { private void formWindowActivated(WindowEvent evt) {//GEN-FIRST:event_formWindowActivated if (convertingThread == null) { - convertingThread = new Thread(new Runnable() { - @Override - public void run() { - saveAllBins(); - } - }); + convertingThread = new Thread(this::saveAllBins); convertingThread.start(); } }//GEN-LAST:event_formWindowActivated @@ -405,7 +391,7 @@ public void saveAllBins() { jlStatus.setText("Finished with errors"); jlResult.setForeground(RED); - jlResult.setText(String.valueOf(nFilesNotConverted) + " Bin(s) could not be exported"); + jlResult.setText(nFilesNotConverted + " Bin(s) could not be exported"); } else { jlStatus.setForeground(GREEN); jlStatus.setText("Finished"); @@ -421,7 +407,7 @@ public void saveAllBins() { nFilesProcessed++; - jlFilesProcessed.setText(String.valueOf(nFilesProcessed) + "/" + String.valueOf(mapCoords.size())); + jlFilesProcessed.setText(nFilesProcessed + "/" + mapCoords.size()); jlFilesConverted.setText(String.valueOf(nFilesConverted)); jlFilesNotConverted.setText(String.valueOf(nFilesNotConverted)); @@ -455,17 +441,13 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole l.setText(status.msg); Font font = l.getFont(); - font = font.deriveFont( - Collections.singletonMap( - TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); + font = font.deriveFont(Collections.singletonMap(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); l.setFont(font); setHorizontalAlignment(JLabel.CENTER); //Return the JLabel which renders the cell. return l; - } } - } diff --git a/src/main/java/formats/mapbin/MapBinDP.java b/src/main/java/formats/mapbin/MapBinDP.java index df8fe5c..71c99d1 100644 --- a/src/main/java/formats/mapbin/MapBinDP.java +++ b/src/main/java/formats/mapbin/MapBinDP.java @@ -1,7 +1,6 @@ package formats.mapbin; import editor.buildingeditor2.buildfile.BuildFile; -import formats.backsound.Backsound; import formats.bdhc.Bdhc; import formats.collisions.Collisions; import utils.BinaryWriter; @@ -52,7 +51,7 @@ public MapBinDP(String folderPath, String mapName) throws MissingMapBinFileExcep } } - public static byte[] toByteArray(MapBinDP map) throws Exception{ + public static byte[] toByteArray(MapBinDP map) { byte[] header = new byte[16]; BinaryWriter.writeUInt32(header, 0, map.per.length); BinaryWriter.writeUInt32(header, 4, map.bld.length); @@ -83,5 +82,4 @@ public void saveToFile(String path) throws IOException { throw new IOException(); } } - } diff --git a/src/main/java/formats/mapbin/MapBinHGSS.java b/src/main/java/formats/mapbin/MapBinHGSS.java index bbc962a..9d0bd91 100644 --- a/src/main/java/formats/mapbin/MapBinHGSS.java +++ b/src/main/java/formats/mapbin/MapBinHGSS.java @@ -5,7 +5,6 @@ import formats.bdhc.Bdhc; import formats.bdhcam.Bdhcam; import formats.collisions.Collisions; -import utils.BinaryArrayWriter; import utils.BinaryWriter; import utils.Utils; @@ -54,7 +53,6 @@ public MapBinHGSS(String folderPath, String mapName) throws MissingMapBinFileExc throw new NsbmdConversionException(); } - try { bdhc = Files.readAllBytes(Paths.get(folderPath + File.separator + mapName + "." + Bdhc.fileExtension)); try { @@ -68,10 +66,9 @@ public MapBinHGSS(String folderPath, String mapName) throws MissingMapBinFileExc } catch (Exception ex) { throw new MissingMapBinFileException(MissingMapBinFileException.MISSING_BDHC); } - } - public static byte[] toByteArray(MapBinHGSS map) throws Exception { + public static byte[] toByteArray(MapBinHGSS map) { byte[] header = new byte[16]; BinaryWriter.writeUInt32(header, 0, map.per.length); BinaryWriter.writeUInt32(header, 4, map.bld.length); @@ -104,5 +101,4 @@ public void saveToFile(String path) throws IOException { throw new IOException(); } } - } diff --git a/src/main/java/formats/mapbin/MapBinPt.java b/src/main/java/formats/mapbin/MapBinPt.java index b9f04ee..c1a7af6 100644 --- a/src/main/java/formats/mapbin/MapBinPt.java +++ b/src/main/java/formats/mapbin/MapBinPt.java @@ -60,7 +60,7 @@ public MapBinPt(String folderPath, String mapName) throws MissingMapBinFileExcep } } - public static byte[] toByteArray(MapBinPt map) throws Exception { + public static byte[] toByteArray(MapBinPt map) { byte[] header = new byte[16]; BinaryWriter.writeUInt32(header, 0, map.per.length); BinaryWriter.writeUInt32(header, 4, map.bld.length); diff --git a/src/main/java/formats/mapbin/MissingMapBinFileException.java b/src/main/java/formats/mapbin/MissingMapBinFileException.java index ec95747..7f1def3 100644 --- a/src/main/java/formats/mapbin/MissingMapBinFileException.java +++ b/src/main/java/formats/mapbin/MissingMapBinFileException.java @@ -13,6 +13,4 @@ public class MissingMapBinFileException extends Exception{ public MissingMapBinFileException(int missingFileCode){ this.missingFileCode = missingFileCode; } - - } diff --git a/src/main/java/formats/mapbin/NsbmdUtils.java b/src/main/java/formats/mapbin/NsbmdUtils.java index 4846124..6b193e5 100644 --- a/src/main/java/formats/mapbin/NsbmdUtils.java +++ b/src/main/java/formats/mapbin/NsbmdUtils.java @@ -1,6 +1,5 @@ package formats.mapbin; -import utils.BinaryArrayReader; import utils.BinaryReader; import utils.BinaryWriter; @@ -47,6 +46,4 @@ public static byte[] nsbmdTexToNsbmdOnly(byte[] nsbmdTex) throws Exception { return nsbmdTex.clone(); } } - - } diff --git a/src/main/java/formats/narc2/Narc.java b/src/main/java/formats/narc2/Narc.java index e9817cd..6a8ff88 100644 --- a/src/main/java/formats/narc2/Narc.java +++ b/src/main/java/formats/narc2/Narc.java @@ -3,12 +3,13 @@ import java.io.File; import java.util.ArrayList; +import java.util.List; import utils.Utils.MutableInt; public class Narc { - private NarcFolder root; + private final NarcFolder root; public Narc(NarcFolder root) { this.root = root; @@ -19,19 +20,8 @@ public boolean hasNamedFiles() { } private boolean hasNamedFiles(NarcFolder folder) { - for (NarcFile file : folder.getFiles()) { - if (file.getName() != null) { - if (!file.getName().equals("")) { - return true; - } - } - } - for (NarcFolder subfolder : folder.getSubfolders()) { - if (hasNamedFiles(subfolder)) { - return true; - } - } - return false; + return folder.getFiles().stream().anyMatch(file -> file.getName() != null && !file.getName().equals("")) + || folder.getSubfolders().stream().anyMatch(this::hasNamedFiles); } public NarcFolder getRoot() { @@ -56,36 +46,34 @@ public int getNumDirectories() { return sum.value; } - private static void getNumDirectories(ArrayList subfolders, MutableInt sum) { + private static void getNumDirectories(List subfolders, MutableInt sum) { sum.value += subfolders.size(); for (NarcFolder subfolder : subfolders) { getNumDirectories(subfolder.getSubfolders(), sum); } } - public ArrayList getAllFiles() { - ArrayList files = new ArrayList<>(); + public List getAllFiles() { + List files = new ArrayList<>(); addFolderFiles(files, root); return files; } - private static void addFolderFiles(ArrayList files, NarcFolder folder) { - for (NarcFile file : folder.getFiles()) { - files.add(file); - } + private static void addFolderFiles(List files, NarcFolder folder) { + files.addAll(folder.getFiles()); for (NarcFolder subfolder : folder.getSubfolders()) { addFolderFiles(files, subfolder); } } - public ArrayList getAllFolders() { + public List getAllFolders() { ArrayList folders = new ArrayList<>(); folders.add(root); addFolderSubfolders(folders, root); return folders; } - private static void addFolderSubfolders(ArrayList folders, NarcFolder folder) { + private static void addFolderSubfolders(List folders, NarcFolder folder) { for (NarcFolder subfolder : folder.getSubfolders()) { folders.add(subfolder); addFolderSubfolders(folders, subfolder); @@ -106,5 +94,4 @@ public NarcFile getFileByPath(String[] splitPath){ } return nextFolder.getFileByName(splitPath[splitPath.length - 1]); } - } diff --git a/src/main/java/formats/narc2/NarcFile.java b/src/main/java/formats/narc2/NarcFile.java index f693e77..417308a 100644 --- a/src/main/java/formats/narc2/NarcFile.java +++ b/src/main/java/formats/narc2/NarcFile.java @@ -1,7 +1,6 @@ package formats.narc2; - public class NarcFile { private String name = ""; @@ -26,5 +25,4 @@ public String getName() { public byte[] getData() { return data; } - } diff --git a/src/main/java/formats/narc2/NarcFolder.java b/src/main/java/formats/narc2/NarcFolder.java index 101046b..ca942d0 100644 --- a/src/main/java/formats/narc2/NarcFolder.java +++ b/src/main/java/formats/narc2/NarcFolder.java @@ -2,13 +2,14 @@ package formats.narc2; import java.util.ArrayList; +import java.util.List; public class NarcFolder { private String name = ""; private NarcFolder parent; - private ArrayList subfolders = new ArrayList<>(); - private ArrayList files = new ArrayList<>(); + private List subfolders = new ArrayList<>(); + private List files = new ArrayList<>(); private int ID; public NarcFolder() { @@ -40,11 +41,11 @@ public NarcFolder getParent() { return parent; } - public ArrayList getSubfolders() { + public List getSubfolders() { return subfolders; } - public ArrayList getFiles() { + public List getFiles() { return files; } @@ -56,26 +57,19 @@ public int getID() { return ID; } - public void setFiles(ArrayList files) { + public void setFiles(List files) { this.files = files; } public NarcFolder getFolderByName(String folderName){ - for(NarcFolder folder : subfolders){ - if(folder.getName().equals(folderName)){ - return folder; - } - } - return null; + return subfolders.stream() + .filter(folder -> folder.getName().equals(folderName)) + .findFirst().orElse(null); } public NarcFile getFileByName(String fileName){ - for(NarcFile file : files){ - if(file.getName().equals(fileName)){ - return file; - } - } - return null; + return files.stream() + .filter(file -> file.getName().equals(fileName)) + .findFirst().orElse(null); } - } diff --git a/src/main/java/formats/narc2/NarcIO.java b/src/main/java/formats/narc2/NarcIO.java index db92bad..9089612 100644 --- a/src/main/java/formats/narc2/NarcIO.java +++ b/src/main/java/formats/narc2/NarcIO.java @@ -3,10 +3,10 @@ import utils.exceptions.WrongFormatException; -import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.stream.IntStream; import utils.BinaryReader; import utils.BinaryWriter; @@ -15,7 +15,7 @@ public class NarcIO { - public static Narc loadNarc(String path) throws FileNotFoundException, IOException, WrongFormatException { + public static Narc loadNarc(String path) throws IOException, WrongFormatException { BinaryReader reader = new BinaryReader(path); try { @@ -25,9 +25,9 @@ public static Narc loadNarc(String path) throws FileNotFoundException, IOExcepti FileImageBlock fileImage = new FileImageBlock(reader, fatb); reader.close(); - final long nameTableOffset = filenameTable.directoryTable.entries.size() * 8; + final long nameTableOffset = filenameTable.directoryTable.entries.size() * 8L; int filesAdded = 0; - ArrayList folders = new ArrayList<>(filenameTable.directoryTable.entries.size()); + List folders = new ArrayList<>(filenameTable.directoryTable.entries.size()); for (int i = 0; i < filenameTable.directoryTable.entries.size(); i++) { folders.add(new NarcFolder()); } @@ -68,12 +68,12 @@ public static Narc loadNarc(String path) throws FileNotFoundException, IOExcepti } } - public static void writeNarc(Narc narc, String path) throws FileNotFoundException, IOException { + public static void writeNarc(Narc narc, String path) throws IOException { BinaryWriter writer = new BinaryWriter(path); narc.calculateIndices(); - ArrayList files = narc.getAllFiles(); - ArrayList folders = narc.getAllFolders(); + List files = narc.getAllFiles(); + List folders = narc.getAllFolders(); FileAllocationTable fatb = new FileAllocationTable(files); FilenameTable filenameTable = new FilenameTable(folders, narc.hasNamedFiles()); @@ -187,7 +187,7 @@ public FileAllocationTable(BinaryReader reader) throws WrongFormatException, IOE } } - public FileAllocationTable(ArrayList files) { + public FileAllocationTable(List files) { allocationTable = new ArrayList<>(files.size()); numFiles = files.size(); long bytesAdded = 0; @@ -260,16 +260,16 @@ public FilenameTable(BinaryReader reader) throws IOException, WrongFormatExcepti size = reader.readUInt32(); directoryTable = new DirectoryTable(reader); - if (directoryTable.entries.size() * 8 + 8 < size) {//Files have name - entryNameTable = new EntryNameTable(reader, size - (directoryTable.entries.size() * 8 + 8)); + if (directoryTable.entries.size() * 8L + 8 < size) {//Files have name + entryNameTable = new EntryNameTable(reader, size - (directoryTable.entries.size() * 8L + 8)); } else {//Files don't have name entryNameTable = null; } } - public FilenameTable(ArrayList folders, boolean hasNamedFiles) { + public FilenameTable(List folders, boolean hasNamedFiles) { + final int numDirectories = folders.size(); if (hasNamedFiles) { - final int numDirectories = folders.size(); long[] offsets = new long[numDirectories]; int[] startFileIDs = new int[numDirectories]; @@ -281,21 +281,20 @@ public FilenameTable(ArrayList folders, boolean hasNamedFiles) { folders.get(0), numDirectories, new MutableInt(0), new MutableLong(0)); - List dirEntries = new ArrayList(numDirectories); - dirEntries.add(new DirectoryEntry(numDirectories * 8, numDirectories)); + List dirEntries = new ArrayList<>(numDirectories); + dirEntries.add(new DirectoryEntry(numDirectories * 8L, numDirectories)); for (int i = 1; i < numDirectories; i++) { NarcFolder folder = folders.get(i); - dirEntries.add(new DirectoryEntry(numDirectories * 8 + offsets[i], startFileIDs[i], folder.getParent().getID())); + dirEntries.add(new DirectoryEntry(numDirectories * 8L + offsets[i], startFileIDs[i], folder.getParent().getID())); } directoryTable = new DirectoryTable(dirEntries); entryNameTable = new EntryNameTable(nameEntries); } else { - final int numDirectories = folders.size(); - List dirEntries = new ArrayList(numDirectories); + List dirEntries = new ArrayList<>(numDirectories); //dirEntries.add(new DirectoryEntry(numDirectories * 8, numDirectories)); - dirEntries.add(new DirectoryEntry(numDirectories * 4, numDirectories));//TODO: Should be 8 instead of 4?? + dirEntries.add(new DirectoryEntry(numDirectories * 4L, numDirectories));//TODO: Should be 8 instead of 4?? directoryTable = new DirectoryTable(dirEntries); entryNameTable = null; @@ -352,7 +351,6 @@ public long getDataSize() { return directoryTable.getDataSize() + 8; } } - } private static class DirectoryTable { @@ -380,11 +378,7 @@ public void writeData(BinaryWriter writer) throws IOException { } public long getDataSize() { - long sum = 0; - for (DirectoryEntry entry : entries) { - sum += entry.getDataSize(); - } - return sum; + return entries.stream().mapToLong(DirectoryEntry::getDataSize).sum(); } } @@ -481,11 +475,7 @@ public void writeData(BinaryWriter writer) throws IOException { } public long getDataSize() { - long sum = 0; - for (EntryName entry : entries) { - sum += entry.getDataSize(); - } - return sum; + return entries.stream().mapToLong(EntryName::getDataSize).sum(); } } @@ -570,7 +560,6 @@ public int getEntryNameLength() { public int getDiretoryID() { return directoryID - 61440; } - } private static class FileImageBlock { @@ -585,7 +574,7 @@ public FileImageBlock(BinaryReader reader, FileAllocationTable fatb) throws IOEx } size = reader.readUInt32(); - fileImages = new ArrayList(fatb.allocationTable.size()); + fileImages = new ArrayList<>(fatb.allocationTable.size()); byte[] allImageData = reader.readBytes((int) size); try { for (FileAllocationEntry entry : fatb.allocationTable) { @@ -602,7 +591,7 @@ public FileImageBlock(BinaryReader reader, FileAllocationTable fatb) throws IOEx }*/ } - public FileImageBlock(ArrayList files) { + public FileImageBlock(List files) { fileImages = new ArrayList<>(files.size()); for (NarcFile file : files) { fileImages.add(file.getData()); @@ -622,9 +611,9 @@ public void writeData(BinaryWriter writer) throws IOException { public long getDataSize() { long sum = 8; - for (int i = 0; i < fileImages.size() - 1; i++) { - sum += fileImages.get(i).length + getBytesPadding(fileImages.get(i).length, 4); - } + sum += IntStream.range(0, fileImages.size() - 1) + .mapToLong(i -> fileImages.get(i).length + getBytesPadding(fileImages.get(i).length, 4)) + .sum(); sum += fileImages.get(fileImages.size() - 1).length; return sum; } diff --git a/src/main/java/formats/nsbtx/Nsbtx.java b/src/main/java/formats/nsbtx/Nsbtx.java index 05cb3d1..55f83e0 100644 --- a/src/main/java/formats/nsbtx/Nsbtx.java +++ b/src/main/java/formats/nsbtx/Nsbtx.java @@ -4,6 +4,9 @@ import java.awt.Color; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; /** * @author Trifindo @@ -12,24 +15,23 @@ public class Nsbtx { public static final String fileExtension = "nsbtx"; public static final int maxNumColors = 16; - public ArrayList textureData; - public ArrayList paletteData; - public ArrayList textureInfos; - public ArrayList paletteInfos; - public ArrayList textureNames; - public ArrayList paletteNames; - public ArrayList textureDataOffsets; - public ArrayList paletteDataOffsets; + public List textureData; + public List paletteData; + public List textureInfos; + public List paletteInfos; + public List textureNames; + public List paletteNames; + public List textureDataOffsets; + public List paletteDataOffsets; public byte[] rawData; public BufferedImage getImage(int textureIndex, int paletteIndex) { - BufferedImage img = new BufferedImage( textureInfos.get(textureIndex).width, textureInfos.get(textureIndex).height, BufferedImage.TYPE_INT_ARGB); - ArrayList colors = getPaletteColorsExtended(paletteIndex); + List colors = getPaletteColorsExtended(paletteIndex); if (textureInfos.get(textureIndex).transparent) { colors.set(0, new Color( colors.get(0).getRed(), @@ -45,44 +47,36 @@ public BufferedImage getImage(int textureIndex, int paletteIndex) { } public void importTextureOnly(BufferedImage img, int textureIndex, int paletteIndex) { - ArrayList colors = getPaletteColors(paletteIndex); + List colors = getPaletteColors(paletteIndex); short[] colorIndices; TextureInfo texInfo = textureInfos.get(textureIndex); int format = texInfo.format; - switch (format) { - case 1: - //colorIndices = getColorIndices(img, colors, textureIndex, paletteIndex); //TODO: Change this - break; - default: - if (texInfo.transparent) { - colorIndices = getColorIndicesWithTransparency(img, colors); - } else { - colorIndices = getColorIndices(img, colors, textureIndex, paletteIndex); - } - setColorIndices(colorIndices, textureIndex); - break; + if (format == 1) {//colorIndices = getColorIndices(img, colors, textureIndex, paletteIndex); //TODO: Change this + } else { + if (texInfo.transparent) { + colorIndices = getColorIndicesWithTransparency(img, colors); + } else { + colorIndices = getColorIndices(img, colors, textureIndex, paletteIndex); + } + setColorIndices(colorIndices, textureIndex); } } public void importTextureAndPalette(BufferedImage img, int textureIndex, int paletteIndex) { TextureInfo texInfo = textureInfos.get(textureIndex); int format = texInfo.format; - switch (format) { - case 1: - break; - default: - if (texInfo.transparent) { - setTextureAndPaletteWithTransparency(img, textureIndex, paletteIndex); - } else { - setTextureAndPalette(img, textureIndex, paletteIndex); - } - break; + if (format == 1) { + } else { + if (texInfo.transparent) { + setTextureAndPaletteWithTransparency(img, textureIndex, paletteIndex); + } else { + setTextureAndPalette(img, textureIndex, paletteIndex); + } } - } public void setTextureAndPalette(BufferedImage img, int textureIndex, int paletteIndex) { - ArrayList colors = new ArrayList<>(); + List colors = new ArrayList<>(); TextureInfo texInfo = textureInfos.get(textureIndex); PaletteInfo palInfo = paletteInfos.get(paletteIndex); short[] colorIndices = new short[texInfo.width * texInfo.height]; @@ -106,7 +100,7 @@ public void setTextureAndPalette(BufferedImage img, int textureIndex, int palett } public void setTextureAndPaletteWithTransparency(BufferedImage img, int textureIndex, int paletteIndex) { - ArrayList colors = new ArrayList<>(); + List colors = new ArrayList<>(); colors.add(new Color(255, 0, 255, 0)); TextureInfo texInfo = textureInfos.get(textureIndex); PaletteInfo palInfo = paletteInfos.get(paletteIndex); @@ -180,7 +174,6 @@ public void swapColors(int textureIndex, int palleteIndex, int index1, int index palette[index1 + i] = palette[index2 + i]; palette[index2 + i] = temp; } - } private void setColorIndices(short[] colorIndices, int textureIndex) { @@ -198,7 +191,7 @@ private void setColorIndices(short[] colorIndices, int textureIndex) { } } - private void setPaletteColorsExtended(ArrayList colors, PaletteInfo palInfo, int paletteIndex) { + private void setPaletteColorsExtended(List colors, PaletteInfo palInfo, int paletteIndex) { for (int i = colors.size(); i < palInfo.getNumColors(); i++) { colors.add(Color.black); } @@ -208,8 +201,7 @@ private void setPaletteColorsExtended(ArrayList colors, PaletteInfo palIn } } - private short[] getColorIndices(BufferedImage img, - ArrayList colors, int textureIndex, int paletteIndex) { + private short[] getColorIndices(BufferedImage img, List colors, int textureIndex, int paletteIndex) { short[] colorIndices = new short[img.getWidth() * img.getHeight()]; for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { @@ -225,8 +217,7 @@ private short[] getColorIndices(BufferedImage img, return colorIndices; } - private short[] getColorIndicesWithTransparency(BufferedImage img, - ArrayList colors) { + private short[] getColorIndicesWithTransparency(BufferedImage img, List colors) { short[] colorIndices = new short[img.getWidth() * img.getHeight()]; for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { @@ -244,7 +235,7 @@ private short[] getColorIndicesWithTransparency(BufferedImage img, return colorIndices; } - public void drawColors(BufferedImage img, int format, short[] colorIndices, ArrayList colors) { + public void drawColors(BufferedImage img, int format, short[] colorIndices, List colors) { switch (format) { case 1: drawColorsWithTransparency(img, (byte) 0x0F, colorIndices, colors); @@ -264,11 +255,9 @@ public void drawColors(BufferedImage img, int format, short[] colorIndices, Arra } break; } - } - private void drawColorsWithTransparency(BufferedImage img, byte mask, - short[] colorIndices, ArrayList colors) { + private void drawColorsWithTransparency(BufferedImage img, byte mask, short[] colorIndices, List colors) { for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { try { @@ -287,12 +276,11 @@ private void drawColorsWithTransparency(BufferedImage img, byte mask, } } - public ArrayList getPaletteColorsExtended(int paletteIndex) { + public List getPaletteColorsExtended(int paletteIndex) { int numColors = paletteInfos.get(paletteIndex).getNumColors(); - ArrayList colors = new ArrayList<>(numColors); - for (int i = 0; i < maxNumColors; i++) { - colors.add(new Color(0, 0, 0)); - } + List colors = IntStream.range(0, maxNumColors) + .mapToObj(i -> new Color(0, 0, 0)) + .collect(Collectors.toList()); for (int i = 0; i < numColors; i++) { byte b2 = paletteData.get(paletteIndex)[i * 2]; byte b1 = paletteData.get(paletteIndex)[i * 2 + 1]; @@ -316,9 +304,9 @@ public Color getPaletteColor(int paletteIndex, int colorIndex) { return new Color(r, g, b); } - public ArrayList getPaletteColors(int paletteIndex) { + public List getPaletteColors(int paletteIndex) { int numColors = paletteInfos.get(paletteIndex).getNumColors(); - ArrayList colors = new ArrayList<>(numColors); + List colors = new ArrayList<>(numColors); for (int i = 0; i < numColors; i++) { byte b2 = paletteData.get(paletteIndex)[i * 2]; byte b1 = paletteData.get(paletteIndex)[i * 2 + 1]; @@ -350,7 +338,7 @@ public short[] getColorIndices(int textureIndex) { return colorIndices; } - private int getCloserColorIndex(Color c, ArrayList colors) { + private int getCloserColorIndex(Color c, List colors) { int index = 0; int minDist = Integer.MAX_VALUE; for (int i = 0; i < colors.size(); i++) { @@ -370,5 +358,4 @@ private static int getDistanceToColor(Color c1, Color c2) { return rd * rd + gd * gd + bd * bd; } - } diff --git a/src/main/java/formats/nsbtx/NsbtxDisplay.java b/src/main/java/formats/nsbtx/NsbtxDisplay.java index a257110..b72ebb1 100644 --- a/src/main/java/formats/nsbtx/NsbtxDisplay.java +++ b/src/main/java/formats/nsbtx/NsbtxDisplay.java @@ -1,7 +1,6 @@ package formats.nsbtx; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; @@ -40,7 +39,6 @@ public void paintComponent(Graphics g) { int y = getHeight() / 2 - img.getHeight() / 2; g.drawImage(img, x, y, null); } - } public void updateImage() { diff --git a/src/main/java/formats/nsbtx/NsbtxEditorDialog.java b/src/main/java/formats/nsbtx/NsbtxEditorDialog.java index c91d898..7bd1049 100644 Binary files a/src/main/java/formats/nsbtx/NsbtxEditorDialog.java and b/src/main/java/formats/nsbtx/NsbtxEditorDialog.java differ diff --git a/src/main/java/formats/nsbtx/NsbtxHandler.java b/src/main/java/formats/nsbtx/NsbtxHandler.java index ac63284..6a21776 100644 --- a/src/main/java/formats/nsbtx/NsbtxHandler.java +++ b/src/main/java/formats/nsbtx/NsbtxHandler.java @@ -96,5 +96,4 @@ public String getNsbtxPath() { public void setNsbtxPath(String path) { this.nsbtxPath = path; } - } diff --git a/src/main/java/formats/nsbtx/NsbtxLoader.java b/src/main/java/formats/nsbtx/NsbtxLoader.java index 7681a53..20ba927 100644 --- a/src/main/java/formats/nsbtx/NsbtxLoader.java +++ b/src/main/java/formats/nsbtx/NsbtxLoader.java @@ -7,6 +7,7 @@ import java.nio.ByteOrder; import java.nio.file.Files; import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -41,7 +42,7 @@ public static Nsbtx loadNsbtx(String path) throws IOException { //Load texture info int textureInfoArrayOffset = readUnsignedShort(data, 0x02 + sectionTextInfoOffset) + sectionTextInfoOffset; - ArrayList textureInfos = new ArrayList<>(); + List textureInfos = new ArrayList<>(); for (int i = 0; i < numTextures; i++) { int offset = textureInfoArrayOffset + i * textureInfoSize; textureInfos.add(new TextureInfo(data, offset)); @@ -49,15 +50,15 @@ public static Nsbtx loadNsbtx(String path) throws IOException { //Load texture names int textureNamesOffset = textureInfoArrayOffset + textureInfoSize * numTextures; - ArrayList textureNames = new ArrayList<>(); + List textureNames = new ArrayList<>(); for (int i = 0; i < numTextures; i++) { int offset = textureNamesOffset + i * textureNameSize; textureNames.add(new String(data, offset, textureNameSize)); } //Load texture data - ArrayList textureData = new ArrayList<>(numTextures); - ArrayList textureDataOffsets = new ArrayList<>(numTextures); + List textureData = new ArrayList<>(numTextures); + List textureDataOffsets = new ArrayList<>(numTextures); for (int i = 0; i < numTextures; i++) { int textOffset = textureInfos.get(i).textureOffset; textureDataOffsets.add(textureDataOffset + textOffset); @@ -70,7 +71,7 @@ public static Nsbtx loadNsbtx(String path) throws IOException { //Load palette info int sectionPalInfoOffset = paletteInfoOffset + 0x04; int paletteInfoArrayOffset = readUnsignedShort(data, 0x02 + sectionPalInfoOffset) + sectionPalInfoOffset; - ArrayList paletteInfos = new ArrayList<>(); + List paletteInfos = new ArrayList<>(); for (int i = 0; i < numPalettes; i++) { int offset = paletteInfoArrayOffset + i * paletteInfoSize; paletteInfos.add(new PaletteInfo(data, offset)); @@ -78,15 +79,15 @@ public static Nsbtx loadNsbtx(String path) throws IOException { //Load palette names int paletteNamesOffset = paletteInfoArrayOffset + paletteInfoSize * numPalettes; - ArrayList paletteNames = new ArrayList<>(); + List paletteNames = new ArrayList<>(); for (int i = 0; i < numPalettes; i++) { int offset = paletteNamesOffset + i * paletteNameSize; paletteNames.add(new String(data, offset, paletteNameSize)); } //Load palette data - ArrayList paletteData = new ArrayList<>(numPalettes); - ArrayList paletteDataOffsets = new ArrayList<>(numPalettes); + List paletteData = new ArrayList<>(numPalettes); + List paletteDataOffsets = new ArrayList<>(numPalettes); for (int i = 0; i < numPalettes; i++) { int palOffset = paletteInfos.get(i).paletteOffset; int palSize = paletteInfos.get(i).getSize(); @@ -148,5 +149,4 @@ private static Byte[] getSubArray(byte[] data, int offset, int size) { } return subArray; } - } diff --git a/src/main/java/formats/nsbtx/NsbtxWriter.java b/src/main/java/formats/nsbtx/NsbtxWriter.java index 6bb6a53..395aa96 100644 --- a/src/main/java/formats/nsbtx/NsbtxWriter.java +++ b/src/main/java/formats/nsbtx/NsbtxWriter.java @@ -26,7 +26,5 @@ public static void saveNsbtx(Nsbtx nsbtx, String path) throws IOException { FileOutputStream out = new FileOutputStream(path); out.write(nsbtx.rawData); out.close(); - } - } diff --git a/src/main/java/formats/nsbtx/PaletteDisplay.java b/src/main/java/formats/nsbtx/PaletteDisplay.java index b69f19c..4bcfaf1 100644 --- a/src/main/java/formats/nsbtx/PaletteDisplay.java +++ b/src/main/java/formats/nsbtx/PaletteDisplay.java @@ -2,7 +2,6 @@ import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; @@ -10,7 +9,7 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo, JackHack96 @@ -25,7 +24,7 @@ public class PaletteDisplay extends JPanel { private static final Color selectionFillColor = new Color(255, 0, 0, 120); private static final Color selectionBorderColor = Color.red; private BufferedImage noPaletteImg; - public ArrayList palette; + public List palette; public PaletteDisplay() { initComponents(); @@ -80,9 +79,7 @@ public void paintComponent(Graphics g) { g.drawRect(index * tileSize + 1, 1, tileSize - 2, tileSize - 3); g.setColor(selectionBorderColor); g.drawRect(index * tileSize, 0, tileSize, tileSize - 1);*/ - } - } public void init(NsbtxHandler nsbtxHandler) { @@ -90,29 +87,21 @@ public void init(NsbtxHandler nsbtxHandler) { } public void updatePalette() { - if (nsbtxHandler != null) { - if (nsbtxHandler.getNsbtx() != null) { - this.palette = nsbtxHandler.getNsbtx().getPaletteColors(nsbtxHandler.getPaletteIndexSelected()); - } + if (nsbtxHandler != null && nsbtxHandler.getNsbtx() != null) { + this.palette = nsbtxHandler.getNsbtx().getPaletteColors(nsbtxHandler.getPaletteIndexSelected()); } } public void updatePaletteColor(int index) { - if (nsbtxHandler != null) { - if (nsbtxHandler.getNsbtx() != null) { - palette.set(index, nsbtxHandler.getNsbtx().getPaletteColor( - nsbtxHandler.getPaletteIndexSelected(), index)); - } + if (nsbtxHandler != null && nsbtxHandler.getNsbtx() != null) { + palette.set(index, nsbtxHandler.getNsbtx().getPaletteColor(nsbtxHandler.getPaletteIndexSelected(), index)); } } public void updateSelectedPaletteColor() { - if (nsbtxHandler != null) { - if (nsbtxHandler.getNsbtx() != null) { - int index = nsbtxHandler.getColorIndexSelected(); - palette.set(index, nsbtxHandler.getNsbtx().getPaletteColor( - nsbtxHandler.getPaletteIndexSelected(), index)); - } + if (nsbtxHandler != null && nsbtxHandler.getNsbtx() != null) { + int index = nsbtxHandler.getColorIndexSelected(); + palette.set(index, nsbtxHandler.getNsbtx().getPaletteColor(nsbtxHandler.getPaletteIndexSelected(), index)); } } @@ -120,8 +109,7 @@ private BufferedImage createNoPaletteImg() { BufferedImage img = new BufferedImage(tileSize, tileSize, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D) img.getGraphics(); - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.white); g2d.fillRect(0, 0, img.getWidth(), img.getHeight()); diff --git a/src/main/java/formats/nsbtx/PaletteInfo.java b/src/main/java/formats/nsbtx/PaletteInfo.java index fc37912..675e375 100644 --- a/src/main/java/formats/nsbtx/PaletteInfo.java +++ b/src/main/java/formats/nsbtx/PaletteInfo.java @@ -24,5 +24,4 @@ public int getNumColors() { public int getSize() { return getNumColors() * 2; } - } diff --git a/src/main/java/formats/nsbtx/TextureInfo.java b/src/main/java/formats/nsbtx/TextureInfo.java index d06cd73..6dc18ad 100644 --- a/src/main/java/formats/nsbtx/TextureInfo.java +++ b/src/main/java/formats/nsbtx/TextureInfo.java @@ -33,5 +33,4 @@ public int getSize() { int[] bitDepth = new int[]{0, 8, 2, 4, 8, 2, 8, 16}; return (width * height * bitDepth[format]) / 8; } - } diff --git a/src/main/java/formats/nsbtx2/Nsbtx2.java b/src/main/java/formats/nsbtx2/Nsbtx2.java index 7251358..4204389 100644 --- a/src/main/java/formats/nsbtx2/Nsbtx2.java +++ b/src/main/java/formats/nsbtx2/Nsbtx2.java @@ -8,7 +8,11 @@ import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import java.util.Set; import java.util.TreeSet; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import utils.Utils; import utils.image.Clusterer; @@ -53,10 +57,10 @@ public class Nsbtx2 { private String path = null; - private ArrayList textures; - private ArrayList palettes; + private List textures; + private List palettes; - public Nsbtx2(ArrayList textures, ArrayList palettes) { + public Nsbtx2(List textures, List palettes) { this.textures = textures; this.palettes = palettes; @@ -70,11 +74,11 @@ public Nsbtx2() { this.path = null; } - public void addTextures(ArrayList newTextures) { + public void addTextures(List newTextures) { textures.addAll(newTextures); } - public void addPalettes(ArrayList newPalettes) { + public void addPalettes(List newPalettes) { palettes.addAll(newPalettes); } @@ -94,12 +98,7 @@ public void addTextureIfNameIsNotFound(NsbtxTexture texture) { } public boolean isTextureNameUsed(String name) { - for (NsbtxTexture tex : textures) { - if (tex.getName().equals(name)) { - return true; - } - } - return false; + return textures.stream().anyMatch(tex -> tex.getName().equals(name)); } public void addPalette(NsbtxPalette palette) { @@ -113,12 +112,7 @@ public void addPaletteIfNameIsNotFound(NsbtxPalette palette) { } public boolean isPaletteNameUsed(String name) { - for (NsbtxPalette tex : palettes) { - if (tex.getName().equals(name)) { - return true; - } - } - return false; + return palettes.stream().anyMatch(tex -> tex.getName().equals(name)); } public BufferedImage getImage(int textureIndex, int paletteIndex) { @@ -127,12 +121,10 @@ public BufferedImage getImage(int textureIndex, int paletteIndex) { public BufferedImage getImage(NsbtxTexture tex, NsbtxPalette pal) { //Generate image - BufferedImage img = new BufferedImage( - tex.getWidth(), tex.getHeight(), - BufferedImage.TYPE_INT_ARGB); + BufferedImage img = new BufferedImage(tex.getWidth(), tex.getHeight(), BufferedImage.TYPE_INT_ARGB); //Get palette colors - ArrayList colors = pal.getColors(tex.getNumColors()); + List colors = pal.getColors(tex.getNumColors()); //Check if first color is transparent if (tex.isTransparent()) { @@ -145,11 +137,7 @@ public BufferedImage getImage(NsbtxTexture tex, NsbtxPalette pal) { //Draw pixels switch (tex.getColorFormat()) { case FORMAT_COLOR_4: - drawColorsOpaque(img, colors, colorIndices); - break; case FORMAT_COLOR_16: - drawColorsOpaque(img, colors, colorIndices); - break; case FORMAT_COLOR_256: drawColorsOpaque(img, colors, colorIndices); break; @@ -163,8 +151,7 @@ public BufferedImage getImage(NsbtxTexture tex, NsbtxPalette pal) { return img; } - public void drawColorsOpaque(BufferedImage img, ArrayList colors, - byte[] colorIndices) { + public void drawColorsOpaque(BufferedImage img, List colors, byte[] colorIndices) { for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { try { @@ -176,8 +163,7 @@ public void drawColorsOpaque(BufferedImage img, ArrayList colors, } } - private void drawColorsSemitransparent(BufferedImage img, - ArrayList colors, byte[] colorIndices, byte mask, boolean isTransparent) { + private void drawColorsSemitransparent(BufferedImage img, List colors, byte[] colorIndices, byte mask, boolean isTransparent) { for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { try { @@ -203,17 +189,14 @@ private void drawColorsSemitransparent(BufferedImage img, } } - public void replaceTexture(int textureIndex, int paletteIndex, - BufferedImage newImg, int colorFormat, boolean isTransparent) { + public void replaceTexture(int textureIndex, int paletteIndex, BufferedImage newImg, int colorFormat, boolean isTransparent) { this.textures.set(textureIndex, generateTexture( textures.get(textureIndex).getName(), palettes.get(paletteIndex).getColors(numColors[colorFormat]), newImg, colorFormat, isTransparent)); } - public void addTexture(int textureIndex, int paletteIndex, - BufferedImage newImg, int colorFormat, boolean isTransparent, - String textureName) { + public void addTexture(int textureIndex, int paletteIndex, BufferedImage newImg, int colorFormat, boolean isTransparent, String textureName) { NsbtxTexture newTexture = generateTexture(textureName, palettes.get(paletteIndex).getColors(numColors[colorFormat]), newImg, colorFormat, isTransparent); @@ -224,10 +207,8 @@ public void addTexture(int textureIndex, int paletteIndex, } } - public void replaceTextureAndPalette(int textureIndex, int paletteIndex, - BufferedImage newImg, int colorFormat, boolean isTransparent) { - - ArrayList colors = generatePaletteColors(newImg, numColors[colorFormat]); + public void replaceTextureAndPalette(int textureIndex, int paletteIndex, BufferedImage newImg, int colorFormat, boolean isTransparent) { + List colors = generatePaletteColors(newImg, numColors[colorFormat]); NsbtxPalette palette = generatePalette(colors, palettes.get(paletteIndex).getName()); this.palettes.set(paletteIndex, palette); @@ -236,11 +217,9 @@ public void replaceTextureAndPalette(int textureIndex, int paletteIndex, newImg, colorFormat, isTransparent)); } - public void addTextureAndPalette(int textureIndex, int paletteIndex, - BufferedImage newImg, int colorFormat, boolean isTransparent, + public void addTextureAndPalette(int textureIndex, int paletteIndex, BufferedImage newImg, int colorFormat, boolean isTransparent, String textureName, String paletteName) { - - ArrayList colors = generatePaletteColors(newImg, numColors[colorFormat]); + List colors = generatePaletteColors(newImg, numColors[colorFormat]); NsbtxPalette newPalette = generatePalette(colors, paletteName); try { @@ -249,9 +228,7 @@ public void addTextureAndPalette(int textureIndex, int paletteIndex, palettes.add(newPalette); } - NsbtxTexture newTexture = generateTexture( - textureName, colors, - newImg, colorFormat, isTransparent); + NsbtxTexture newTexture = generateTexture(textureName, colors, newImg, colorFormat, isTransparent); try { textures.add(textureIndex + 1, newTexture); } catch (IndexOutOfBoundsException ex) { @@ -259,17 +236,16 @@ public void addTextureAndPalette(int textureIndex, int paletteIndex, } } - private ArrayList generatePaletteColors(BufferedImage newImg, int numColors) { + private List generatePaletteColors(BufferedImage newImg, int numColors) { //Fix new image size newImg = fixImageSize(newImg); //Get colors from texture - TreeSet colorSet = new TreeSet<>(); + Set colorSet = new TreeSet<>(); colorSet = addColorsFromTexture(colorSet, newImg); //Cluster colors if the image has too many colors or add colors - ArrayList colors = new ArrayList<>(); - colors.addAll(colorSet); + List colors = new ArrayList<>(colorSet); if (colorSet.size() > numColors) { colors = Clusterer.clusterColors(colors, numColors, 100, 0.00001f); } else { @@ -288,8 +264,7 @@ private ArrayList generatePaletteColors(BufferedImage newImg, int numColo return colors; } - private NsbtxPalette generatePalette(ArrayList colors, - String paletteName) { + private NsbtxPalette generatePalette(List colors, String paletteName) { //Generate NSBTX palette data NsbtxPalette newPalette = new NsbtxPalette(paletteName, colors.size()); @@ -298,8 +273,7 @@ private NsbtxPalette generatePalette(ArrayList colors, return newPalette; } - private NsbtxPalette generateFixedPalette(BufferedImage oldImg, int numColorsOldImg, - NsbtxPalette oldPalette, String paletteName, + private NsbtxPalette generateFixedPalette(BufferedImage oldImg, int numColorsOldImg, NsbtxPalette oldPalette, String paletteName, BufferedImage newImg, byte[] colorIndices, int indexMask) throws NsbtxTextureSizeException { @@ -313,17 +287,15 @@ private NsbtxPalette generateFixedPalette(BufferedImage oldImg, int numColorsOld } //Get colors from texture - TreeSet colorSet = new TreeSet<>(); + Set colorSet = new TreeSet<>(); colorSet = addColorsFromTexture(colorSet, newImg); //Cluster colors if the image has too many colors or add colors - int numColors = numColorsOldImg; - ArrayList colors = new ArrayList<>(); - colors.addAll(colorSet); - if (colorSet.size() > numColors) { - colors = Clusterer.clusterColors(colors, numColors, 100, 0.00001f); + List colors = new ArrayList<>(colorSet); + if (colorSet.size() > numColorsOldImg) { + colors = Clusterer.clusterColors(colors, numColorsOldImg, 100, 0.00001f); } else { - int nColorsToAdd = numColors - colorSet.size(); + int nColorsToAdd = numColorsOldImg - colorSet.size(); for (int j = 0; j < nColorsToAdd; j++) { colors.add(new Color(0, 0, 0, 255)); } @@ -336,7 +308,7 @@ private NsbtxPalette generateFixedPalette(BufferedImage oldImg, int numColorsOld } //Fix color order to match the original texture pixels - ArrayList refPal = oldPalette.getColors(numColors); + List refPal = oldPalette.getColors(numColorsOldImg); colors = fixColorOrder(oldImg, newImg, refPal, colors, colorIndices, indexMask); //Generate NSBTX palette data @@ -346,9 +318,7 @@ private NsbtxPalette generateFixedPalette(BufferedImage oldImg, int numColorsOld return newPalette; } - public void replacePalette(int textureIndex, int paletteIndex, - BufferedImage newImg) throws NsbtxTextureSizeException { - + public void replacePalette(int textureIndex, int paletteIndex, BufferedImage newImg) throws NsbtxTextureSizeException { byte[] indices = textures.get(textureIndex).getColorIndices(); palettes.set(paletteIndex, generateFixedPalette( @@ -360,8 +330,7 @@ public void replacePalette(int textureIndex, int paletteIndex, )); } - public void addPalette(int textureIndex, int paletteIndex, String paletteName, - BufferedImage newImg) throws NsbtxTextureSizeException { + public void addPalette(int textureIndex, int paletteIndex, String paletteName, BufferedImage newImg) throws NsbtxTextureSizeException { NsbtxPalette newPalette = generateFixedPalette( getImage(textures.get(textureIndex), palettes.get(paletteIndex)), textures.get(textureIndex).getNumColors(), palettes.get(paletteIndex), @@ -376,11 +345,8 @@ public void addPalette(int textureIndex, int paletteIndex, String paletteName, } } - - private ArrayList fixColorOrder(BufferedImage refImg, - BufferedImage fixImg, ArrayList refPal, ArrayList fixPal, + private List fixColorOrder(BufferedImage refImg, BufferedImage fixImg, List refPal, List fixPal, byte[] colorIndices, int indexMask) { - int[][] colorCount = new int[refPal.size()][fixPal.size()]; if (refImg.getWidth() == fixImg.getWidth() && refImg.getHeight() == fixImg.getHeight()) { for (int j = 0, c = 0; j < refImg.getHeight(); j++) { @@ -391,15 +357,14 @@ private ArrayList fixColorOrder(BufferedImage refImg, } } - - ArrayList newPalette = new ArrayList<>(fixPal.size()); - for (int i = 0; i < colorCount.length; i++) { + List newPalette = new ArrayList<>(fixPal.size()); + for (int[] ints : colorCount) { int maxIndex = 0; int maxValue = -1; - for (int j = 0; j < colorCount[i].length; j++) { - if (colorCount[i][j] > maxValue) { + for (int j = 0; j < ints.length; j++) { + if (ints[j] > maxValue) { maxIndex = j; - maxValue = colorCount[i][j]; + maxValue = ints[j]; } } newPalette.add(fixPal.get(maxIndex)); @@ -434,7 +399,7 @@ private ArrayList fixColorOrder(BufferedImage refImg, } */ - private TreeSet addColorsFromTexture(TreeSet colors, BufferedImage img) { + private Set addColorsFromTexture(Set colors, BufferedImage img) { for (int j = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++) { FastColor color = getDsFastColor(new Color(img.getRGB(i, j), true)); @@ -444,7 +409,7 @@ private TreeSet addColorsFromTexture(TreeSet colors, Buffe return colors; } - private int getLessAlphaColorIndex(ArrayList colors) { + private int getLessAlphaColorIndex(List colors) { int minAlpha = 255; int minIndex = 0; for (int i = 0; i < colors.size(); i++) { @@ -456,8 +421,7 @@ private int getLessAlphaColorIndex(ArrayList colors) { return minIndex; } - private NsbtxTexture generateTexture(String textureName, ArrayList colors, - BufferedImage newImg, int colorFormat, boolean isTransparent) { + private NsbtxTexture generateTexture(String textureName, List colors, BufferedImage newImg, int colorFormat, boolean isTransparent) { newImg = fixImageSize(newImg); NsbtxTexture newTex = new NsbtxTexture(textureName, colorFormat, @@ -474,11 +438,7 @@ private NsbtxTexture generateTexture(String textureName, ArrayList colors switch (newTex.getColorFormat()) { case FORMAT_COLOR_4: - newTex.setData(colorIndicesToTexData(colorIndices, newTex.getBitDepth())); - break; case FORMAT_COLOR_16: - newTex.setData(colorIndicesToTexData(colorIndices, newTex.getBitDepth())); - break; case FORMAT_COLOR_256: newTex.setData(colorIndicesToTexData(colorIndices, newTex.getBitDepth())); break; @@ -510,8 +470,7 @@ private static byte[] colorIndicesToTexData(byte[] colorIndices, int bitDepth) { return texData; } - private static byte[] colorIndicesToTexDataSemitransp(byte[] colorIndices, - ArrayList colors, int nBitsColor) { + private static byte[] colorIndicesToTexDataSemitransp(byte[] colorIndices, List colors, int nBitsColor) { final byte[] texData = new byte[colorIndices.length]; for (int i = 0; i < texData.length; i++) { byte data = 0x00; @@ -522,7 +481,7 @@ private static byte[] colorIndicesToTexDataSemitransp(byte[] colorIndices, return texData; } - private static byte[] colorIndicesToTexDataSemitransp(byte[] colorIndices, BufferedImage img, ArrayList colors, int nBitsColor) { + private static byte[] colorIndicesToTexDataSemitransp(byte[] colorIndices, BufferedImage img, List colors, int nBitsColor) { final int[] alphas = new int[colorIndices.length]; for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { @@ -540,7 +499,7 @@ private static byte[] colorIndicesToTexDataSemitransp(byte[] colorIndices, Buffe return texData; } - private static byte[] paletteColorsToPalData(ArrayList colors) { + private static byte[] paletteColorsToPalData(List colors) { byte[] palData = new byte[colors.size() * 2]; for (int i = 0; i < colors.size(); i++) { Color c = colors.get(i); @@ -553,7 +512,7 @@ private static byte[] paletteColorsToPalData(ArrayList colors) { return palData; } - private byte[] getCloserColorIndices(BufferedImage img, ArrayList colors) { + private byte[] getCloserColorIndices(BufferedImage img, List colors) { byte[] colorIndices = new byte[img.getWidth() * img.getHeight()]; for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { @@ -564,7 +523,7 @@ private byte[] getCloserColorIndices(BufferedImage img, ArrayList colors) return colorIndices; } - private byte[] getCloserColorIndicesTransparency(BufferedImage img, ArrayList colors) { + private byte[] getCloserColorIndicesTransparency(BufferedImage img, List colors) { byte[] colorIndices = new byte[img.getWidth() * img.getHeight()]; for (int j = 0, c = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++, c++) { @@ -594,11 +553,11 @@ private static BufferedImage fixImageSize(BufferedImage img) { return img; } - private int getCloserColorIndex(Color c, ArrayList colors) { + private int getCloserColorIndex(Color c, List colors) { return getCloserColorIndex(c, colors, 0); } - private int getCloserColorIndex(Color c, ArrayList colors, int startColorIndex) { + private int getCloserColorIndex(Color c, List colors, int startColorIndex) { int index = 0; int minDist = Integer.MAX_VALUE; for (int i = startColorIndex; i < colors.size(); i++) { @@ -647,21 +606,15 @@ private FastColor getDsFastColor(Color c) { } public int indexOfTextureName(String name) { - for (int i = 0; i < textures.size(); i++) { - if (textures.get(i).getName().equals(name)) { - return i; - } - } - return -1; + return IntStream.range(0, textures.size()) + .filter(i -> textures.get(i).getName().equals(name)) + .findFirst().orElse(-1); } public int indexOfPaletteName(String name) { - for (int i = 0; i < palettes.size(); i++) { - if (palettes.get(i).getName().equals(name)) { - return i; - } - } - return -1; + return IntStream.range(0, palettes.size()) + .filter(i -> palettes.get(i).getName().equals(name)) + .findFirst().orElse(-1); } public boolean moveTextureUp(int index) { @@ -730,11 +683,11 @@ public NsbtxPalette getPalette(int index) { return palettes.get(index); } - public ArrayList getTextures() { + public List getTextures() { return textures; } - public ArrayList getPalettes() { + public List getPalettes() { return palettes; } @@ -762,28 +715,22 @@ public void setPath(String path) { this.path = path; } - public ArrayList getTextureNames() { - ArrayList texNames = new ArrayList<>(textures.size()); - for (NsbtxTexture tex : textures) { - texNames.add(tex.getName()); - } - return texNames; + public List getTextureNames() { + return textures.stream() + .map(NsbtxTexture::getName) + .collect(Collectors.toList()); } - public ArrayList getPaletteNames() { - ArrayList palNames = new ArrayList<>(palettes.size()); - for (NsbtxPalette pal : palettes) { - palNames.add(pal.getName()); - } - return palNames; + public List getPaletteNames() { + return palettes.stream() + .map(NsbtxPalette::getName) + .collect(Collectors.toList()); } public int removeTexture(String texName) { for (NsbtxTexture tex : textures) { - if (tex.getName().equals(texName)) { - if (textures.remove(tex)) { - return 1; - } + if (tex.getName().equals(texName) && textures.remove(tex)) { + return 1; } } return 0; @@ -791,13 +738,10 @@ public int removeTexture(String texName) { public int removePalette(String palName) { for (NsbtxPalette pal : palettes) { - if (pal.getName().equals(palName)) { - if (palettes.remove(pal)) { - return 1; - } + if (pal.getName().equals(palName) && palettes.remove(pal)) { + return 1; } } return 0; } - } diff --git a/src/main/java/formats/nsbtx2/NsbtxColorFormatAddSelector.java b/src/main/java/formats/nsbtx2/NsbtxColorFormatAddSelector.java index d2b88b2..d25037b 100644 --- a/src/main/java/formats/nsbtx2/NsbtxColorFormatAddSelector.java +++ b/src/main/java/formats/nsbtx2/NsbtxColorFormatAddSelector.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; /** diff --git a/src/main/java/formats/nsbtx2/NsbtxColorFormatReplaceSelector.java b/src/main/java/formats/nsbtx2/NsbtxColorFormatReplaceSelector.java index da02474..16f0753 100644 --- a/src/main/java/formats/nsbtx2/NsbtxColorFormatReplaceSelector.java +++ b/src/main/java/formats/nsbtx2/NsbtxColorFormatReplaceSelector.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; /** diff --git a/src/main/java/formats/nsbtx2/NsbtxDisplay2.java b/src/main/java/formats/nsbtx2/NsbtxDisplay2.java index 55c979d..5df626d 100644 --- a/src/main/java/formats/nsbtx2/NsbtxDisplay2.java +++ b/src/main/java/formats/nsbtx2/NsbtxDisplay2.java @@ -1,7 +1,6 @@ package formats.nsbtx2; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Dimension; @@ -40,17 +39,11 @@ public void paintComponent(Graphics g) { int y = getHeight() / 2 - img.getHeight() / 2; g.drawImage(img, x, y, null); } - } public void updateImage() { if (nsbtxHandler != null) { - BufferedImage updatedImage = nsbtxHandler.getSelectedImage(); - if (updatedImage != null) { - this.img = updatedImage; - } else { - this.img = null; - } + this.img = nsbtxHandler.getSelectedImage(); } } diff --git a/src/main/java/formats/nsbtx2/NsbtxEditorDialog2.java b/src/main/java/formats/nsbtx2/NsbtxEditorDialog2.java index 4f9b765..3129190 100644 --- a/src/main/java/formats/nsbtx2/NsbtxEditorDialog2.java +++ b/src/main/java/formats/nsbtx2/NsbtxEditorDialog2.java @@ -3,16 +3,13 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; import editor.converter.ConverterErrorDialog; import editor.handler.MapEditorHandler; -import formats.nsbtx.*; import formats.nsbtx2.exceptions.NsbtxTextureSizeException; -import java.awt.Color; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; @@ -22,9 +19,6 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import javax.imageio.ImageIO; -import javax.swing.DefaultListModel; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; import javax.swing.filechooser.FileNameExtensionFilter; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; @@ -280,7 +274,7 @@ private void updateViewPaletteName() { private void updateViewTextureNameList(int indexSelected) { textureListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < nsbtxHandler.getNsbtx().getTextures().size(); i++) { String name = nsbtxHandler.getNsbtx().getTexture(i).getName(); demoList.addElement(name); @@ -297,7 +291,7 @@ private void updateViewTextureNameList(int indexSelected) { private void updateViewPaletteNameList(int indexSelected) { paletteListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < nsbtxHandler.getNsbtx().getPalettes().size(); i++) { String name = nsbtxHandler.getNsbtx().getPalette(i).getName(); demoList.addElement(name); @@ -581,8 +575,7 @@ private void addPalettes() { } if (errorTexturesSize) { - JOptionPane.showMessageDialog(this, - String.valueOf(numWrongSizeTextures) + JOptionPane.showMessageDialog(this, numWrongSizeTextures + " images do not have the same size as the source texture: \n" + wrongSizeTextureNames, "Can't add some palettes", JOptionPane.ERROR_MESSAGE); @@ -749,7 +742,6 @@ private void importTexturesAndPalettesWithDialog() { dialog.setVisible(true); if (dialog.getReturnValue() == NsbtxImportDialog.APPROVE_OPTION) { - nsbtxHandler.getNsbtx().addNsbtx(dialog.getNsbtx()); updateViewTextureNameList(nsbtxHandler.getNsbtx().getTextures().size() - 1); @@ -898,10 +890,10 @@ private void saveImdToNsbmd(String imdPath) { BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - String outputString = ""; + StringBuilder outputString = new StringBuilder(); String line = null; while ((line = stdError.readLine()) != null) { - outputString += line + "\n"; + outputString.append(line).append("\n"); } p.waitFor(); @@ -945,8 +937,7 @@ private void saveImdToNsbmd(String imdPath) { } else { ConverterErrorDialog dialog = new ConverterErrorDialog(handler.getMainFrame()); dialog.init("There was a problem saving the NSBTX file. \n" - + "The output from the converter is:", - outputString); + + "The output from the converter is:", outputString.toString()); dialog.setTitle("Problem generating file"); dialog.setLocationRelativeTo(this); dialog.setVisible(true); diff --git a/src/main/java/formats/nsbtx2/NsbtxHandler2.java b/src/main/java/formats/nsbtx2/NsbtxHandler2.java index c5a8b77..0fb6a54 100644 --- a/src/main/java/formats/nsbtx2/NsbtxHandler2.java +++ b/src/main/java/formats/nsbtx2/NsbtxHandler2.java @@ -16,7 +16,6 @@ public class NsbtxHandler2 { private Nsbtx2 nsbtx = null; - public NsbtxHandler2(MapEditorHandler handler, NsbtxEditorDialog2 dialog) { this.handler = handler; this.dialog = dialog; @@ -33,8 +32,7 @@ public BufferedImage getSelectedImage() { int textureIndex = dialog.getTextureIndexSelected(); int paletteIndex = dialog.getPaletteIndexSelected(); if (textureIndex != -1 && paletteIndex != -1) { - return nsbtx.getImage(dialog.getTextureIndexSelected(), - dialog.getPaletteIndexSelected()); + return nsbtx.getImage(dialog.getTextureIndexSelected(), dialog.getPaletteIndexSelected()); } } return null; @@ -56,7 +54,6 @@ public NsbtxTexture getSelectedTexture() { return null; } - public int indexOfTextureName(String name) { return nsbtx.indexOfTextureName(name); } @@ -72,5 +69,4 @@ public void loadNsbtx(String path) throws IOException { public Nsbtx2 getNsbtx() { return nsbtx; } - } diff --git a/src/main/java/formats/nsbtx2/NsbtxImd.java b/src/main/java/formats/nsbtx2/NsbtxImd.java index ba76ae8..fbfc7b6 100644 --- a/src/main/java/formats/nsbtx2/NsbtxImd.java +++ b/src/main/java/formats/nsbtx2/NsbtxImd.java @@ -9,13 +9,12 @@ import java.io.FileOutputStream; import java.io.IOException; -import java.util.ArrayList; +import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; @@ -32,11 +31,7 @@ public class NsbtxImd extends ImdNode { public NsbtxImd(Nsbtx2 nsbtx) { super("imd"); - attributes = new ArrayList() { - { - add(new ImdAttribute("version", "1.6.0")); - } - }; + attributes = List.of(new ImdAttribute("version", "1.6.0")); Body body = new Body(); @@ -61,14 +56,11 @@ public NsbtxImd(Nsbtx2 nsbtx) { subnodes.add(body); } - public void saveToFile(String path) throws - ParserConfigurationException, TransformerException, IOException { - + public void saveToFile(String path) throws ParserConfigurationException, TransformerException, IOException { saveToXML(path); } - private void saveToXML(String xmlPath) throws ParserConfigurationException, - TransformerConfigurationException, TransformerException, IOException { + private void saveToXML(String xmlPath) throws ParserConfigurationException, TransformerException, IOException { Document dom; // instance of a DocumentBuilderFactory @@ -81,13 +73,11 @@ private void saveToXML(String xmlPath) throws ParserConfigurationException, // create the root element Element rootEle = dom.createElement(nodeName); - for (int i = 0; i < attributes.size(); i++) { - ImdAttribute attrib = attributes.get(i); + for (ImdAttribute attrib : attributes) { rootEle.setAttribute(attrib.tag, attrib.value); } - for (int i = 0; i < subnodes.size(); i++) { - ImdNode subnode = subnodes.get(i); + for (ImdNode subnode : subnodes) { printImdNode(subnode, dom, rootEle); } @@ -108,13 +98,10 @@ private void saveToXML(String xmlPath) throws ParserConfigurationException, streamResult.getOutputStream().close(); System.out.println("IMD saved!"); - } private void printImdNode(ImdNode node, Document dom, Element parent) { - Element e; - - e = dom.createElement(node.nodeName); + Element e = dom.createElement(node.nodeName); for (int i = 0; i < node.attributes.size(); i++) { ImdAttribute attrib = node.attributes.get(i); @@ -128,7 +115,5 @@ private void printImdNode(ImdNode node, Document dom, Element parent) { printImdNode(subnode, dom, e); } parent.appendChild(e); - } - } diff --git a/src/main/java/formats/nsbtx2/NsbtxImportDialog.java b/src/main/java/formats/nsbtx2/NsbtxImportDialog.java index c855b4b..70f6d5d 100644 --- a/src/main/java/formats/nsbtx2/NsbtxImportDialog.java +++ b/src/main/java/formats/nsbtx2/NsbtxImportDialog.java @@ -3,11 +3,7 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; -import javax.swing.DefaultListModel; -import javax.swing.JList; /** * @author Trifindo, JackHack96 @@ -94,7 +90,6 @@ public void init(Nsbtx2 nsbtx) { updateViewTextures(0); updateViewPalettes(0); - } private void updateViewTextures(int indexSelected) { @@ -107,8 +102,8 @@ private void updateViewPalettes(int indexSelected) { updateViewPaletteNames(nsbtx, jlPalettesInNsbtx, indexSelected); } - private void updateViewTextureNames(Nsbtx2 nsbtx, JList list, int indexSelected) { - DefaultListModel demoList = new DefaultListModel(); + private void updateViewTextureNames(Nsbtx2 nsbtx, JList list, int indexSelected) { + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < nsbtx.getTextures().size(); i++) { String name = nsbtx.getTexture(i).getName(); demoList.addElement(name); @@ -122,8 +117,8 @@ private void updateViewTextureNames(Nsbtx2 nsbtx, JList list, int indexSelected) list.setSelectedIndex(indexSelected); } - private void updateViewPaletteNames(Nsbtx2 nsbtx, JList list, int indexSelected) { - DefaultListModel demoList = new DefaultListModel(); + private void updateViewPaletteNames(Nsbtx2 nsbtx, JList list, int indexSelected) { + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < nsbtx.getPalettes().size(); i++) { String name = nsbtx.getPalette(i).getName(); demoList.addElement(name); diff --git a/src/main/java/formats/nsbtx2/NsbtxLoader2.java b/src/main/java/formats/nsbtx2/NsbtxLoader2.java index 34e2b4b..291a8fd 100644 --- a/src/main/java/formats/nsbtx2/NsbtxLoader2.java +++ b/src/main/java/formats/nsbtx2/NsbtxLoader2.java @@ -10,6 +10,7 @@ import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; +import java.util.List; /** * @author Trifindo @@ -40,15 +41,13 @@ public static Nsbtx2 loadNsbtx(byte[] data) { //Load textures int textureInfoArrayOffset = readUnsignedShort(data, 0x02 + sectionTextInfoOffset) + sectionTextInfoOffset; int textureNamesOffset = textureInfoArrayOffset + textureInfoSize * numTextures; - ArrayList textures = new ArrayList<>(numTextures); + List textures = new ArrayList<>(numTextures); for (int i = 0; i < numTextures; i++) { int texInfoOffset = textureInfoArrayOffset + i * textureInfoSize; int texNameOffset = textureNamesOffset + i * textureNameSize; try { textures.add(new NsbtxTexture(data, texInfoOffset, textureDataOffset, texNameOffset)); - } catch (IndexOutOfBoundsException ex) { - System.out.println("ERROR LOADING TEXTURE " + i); - } catch (NsbtxTextureFormatException ex) { + } catch (IndexOutOfBoundsException | NsbtxTextureFormatException ex) { System.out.println("ERROR LOADING TEXTURE " + i); } } @@ -56,7 +55,7 @@ public static Nsbtx2 loadNsbtx(byte[] data) { //Calculate palette offsets for dividing the palette data int sectionPalInfoOffset = paletteInfoOffset + 0x04; int paletteInfoArrayOffset = readUnsignedShort(data, 0x02 + sectionPalInfoOffset) + sectionPalInfoOffset; - ArrayList paletteOffsets = new ArrayList<>(); + List paletteOffsets = new ArrayList<>(); for (int i = 0; i < numPalettes; i++) { int palInfoOffset = paletteInfoArrayOffset + i * paletteInfoSize; int paletteOffset = ((data[palInfoOffset + 0x01] & 0xFF) << 8 | data[palInfoOffset] & 0xFF) << 3; @@ -69,7 +68,7 @@ public static Nsbtx2 loadNsbtx(byte[] data) { //Load palettes int paletteNamesOffset = paletteInfoArrayOffset + paletteInfoSize * numPalettes; - ArrayList palettes = new ArrayList<>(numPalettes); + List palettes = new ArrayList<>(numPalettes); for (int i = 0; i < numPalettes; i++) { int palInfoOffset = paletteInfoArrayOffset + i * paletteInfoSize; int palNameOffset = paletteNamesOffset + i * paletteNameSize; @@ -81,10 +80,9 @@ public static Nsbtx2 loadNsbtx(byte[] data) { } //Generate NSBTX - Nsbtx2 nsbtx = new Nsbtx2(textures, palettes); //nsbtx.setPath(path); - return nsbtx; + return new Nsbtx2(textures, palettes); } public static Nsbtx2 loadNsbtx(String path) throws IOException { @@ -118,5 +116,4 @@ private static int readUnsignedShort(byte[] data, int offset) { private static int readUnsignedByte(byte[] data, int offset) { return data[offset] & 0xFF; } - } diff --git a/src/main/java/formats/nsbtx2/NsbtxPalette.java b/src/main/java/formats/nsbtx2/NsbtxPalette.java index 2894c05..609f704 100644 --- a/src/main/java/formats/nsbtx2/NsbtxPalette.java +++ b/src/main/java/formats/nsbtx2/NsbtxPalette.java @@ -2,7 +2,9 @@ package formats.nsbtx2; import java.awt.Color; -import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import utils.Utils; @@ -14,9 +16,7 @@ public class NsbtxPalette { private String name; private byte[] data; - public NsbtxPalette(byte[] nsbtxData, int offsetPaletteInfo, - ArrayList paletteOffsets, int paletteDataOffset, int offsetPaletteName) { - + public NsbtxPalette(byte[] nsbtxData, int offsetPaletteInfo, List paletteOffsets, int paletteDataOffset, int offsetPaletteName) { //Load palette data int paletteOffset = ((nsbtxData[offsetPaletteInfo + 0x01] & 0xFF) << 8 | nsbtxData[offsetPaletteInfo] & 0xFF) << 3; int offsetIndex = paletteOffsets.indexOf(paletteOffset); @@ -29,7 +29,7 @@ public NsbtxPalette(byte[] nsbtxData, int offsetPaletteInfo, System.arraycopy(nsbtxData, paletteDataOffset + paletteOffset, data, 0, Math.min(data.length, nsbtxData.length - paletteOffset)); //Load palette name - name = Utils.removeLastOcurrences(new String(nsbtxData, offsetPaletteName, 16), '\u0000'); + name = Utils.removeLastOccurrences(new String(nsbtxData, offsetPaletteName, 16), '\u0000'); } public NsbtxPalette(String name, int numColors) { @@ -37,12 +37,10 @@ public NsbtxPalette(String name, int numColors) { this.data = new byte[numColors * 2]; } - public ArrayList getColors(int numColorsRequested) { - ArrayList colors = new ArrayList<>(numColorsRequested); - - for (int i = 0; i < numColorsRequested; i++) { - colors.add(new Color(0, 0, 0)); - } + public List getColors(int numColorsRequested) { + List colors = IntStream.range(0, numColorsRequested) + .mapToObj(i -> new Color(0, 0, 0)) + .collect(Collectors.toList()); int numColorsData = Math.min(data.length / 2, numColorsRequested); for (int i = 0; i < numColorsData; i++) { @@ -55,10 +53,8 @@ public ArrayList getColors(int numColorsRequested) { colors.set(i, new Color(r, g, b)); } return colors; - } - public String getName() { return name; } @@ -68,11 +64,7 @@ public void setName(String name) { } public int getDataSize() { - if (data != null) { - return this.data.length; - } else { - return 0; - } + return data != null ? this.data.length : 0; } public void setData(byte[] data) { @@ -84,13 +76,10 @@ public int getDataSizeImd() { } public String getDataAsHexStringImd() { - String hexString = ""; + StringBuilder hexString = new StringBuilder(); for (int i = 0; i < data.length; i += 2) { - hexString += " "; - hexString += String.format("%02x", data[i + 1]); - hexString += String.format("%02x", data[i]); + hexString.append(" ").append(String.format("%02x", data[i + 1])).append(String.format("%02x", data[i])); } - return hexString; + return hexString.toString(); } - } diff --git a/src/main/java/formats/nsbtx2/NsbtxPanel.java b/src/main/java/formats/nsbtx2/NsbtxPanel.java index 50411ff..36d69fb 100644 --- a/src/main/java/formats/nsbtx2/NsbtxPanel.java +++ b/src/main/java/formats/nsbtx2/NsbtxPanel.java @@ -2,15 +2,12 @@ import java.awt.*; import javax.swing.*; -import javax.swing.GroupLayout; import javax.swing.border.*; import javax.swing.event.*; import editor.buildingeditor2.tileset.*; -import java.awt.Color; import java.awt.image.BufferedImage; -import javax.swing.DefaultListModel; import utils.Utils; @@ -47,28 +44,27 @@ private void jlPaletteNamesValueChanged(ListSelectionEvent e) { } public void updateView() { - if (nsbtx != null) { - int texIndex = jlTextureNames.getSelectedIndex(); - int palIndex = jlPaletteNames.getSelectedIndex(); - - try { - BufferedImage img = nsbtx.getImage(texIndex, palIndex); - textureDisplay.updateImage(img); - textureDisplay.repaint(); - - paletteDisplay.updatePalette(nsbtx.getTexture(texIndex), nsbtx.getPalette(palIndex)); - paletteDisplay.repaint(); - } catch (Exception ex) { - ex.printStackTrace(); - } - + if (nsbtx == null) { + return; + } + int texIndex = jlTextureNames.getSelectedIndex(); + int palIndex = jlPaletteNames.getSelectedIndex(); + + try { + BufferedImage img = nsbtx.getImage(texIndex, palIndex); + textureDisplay.updateImage(img); + textureDisplay.repaint(); + + paletteDisplay.updatePalette(nsbtx.getTexture(texIndex), nsbtx.getPalette(palIndex)); + paletteDisplay.repaint(); + } catch (Exception ex) { + ex.printStackTrace(); } - } public void updateViewTextureNameList(int indexSelected) { textureListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < nsbtx.getTextures().size(); i++) { String name = nsbtx.getTexture(i).getName(); demoList.addElement(name); @@ -86,7 +82,7 @@ public void updateViewTextureNameList(int indexSelected) { public void updateViewPaletteNameList(int indexSelected) { paletteListEnabled = false; - DefaultListModel demoList = new DefaultListModel(); + DefaultListModel demoList = new DefaultListModel<>(); for (int i = 0; i < nsbtx.getPalettes().size(); i++) { String name = nsbtx.getPalette(i).getName(); demoList.addElement(name); diff --git a/src/main/java/formats/nsbtx2/NsbtxTexture.java b/src/main/java/formats/nsbtx2/NsbtxTexture.java index 8770fa6..f9050c8 100644 --- a/src/main/java/formats/nsbtx2/NsbtxTexture.java +++ b/src/main/java/formats/nsbtx2/NsbtxTexture.java @@ -16,8 +16,7 @@ public class NsbtxTexture { private int height; private byte[] data; - public NsbtxTexture(byte[] nsbtxData, int offsetTextureInfo, - int textureDataOffset, int offsetTextureName) throws + public NsbtxTexture(byte[] nsbtxData, int offsetTextureInfo, int textureDataOffset, int offsetTextureName) throws NsbtxTextureFormatException, IndexOutOfBoundsException { byte b1 = nsbtxData[offsetTextureInfo + 0x03]; byte b2 = nsbtxData[offsetTextureInfo + 0x02]; @@ -32,7 +31,7 @@ public NsbtxTexture(byte[] nsbtxData, int offsetTextureInfo, throw new NsbtxTextureFormatException(colorFormat); } - //Read image properites + //Read image properties isTransparent = ((b1 & 0x20) >> 5) == 1; height = 8 << (((b1 & 0x03) << 1) | ((b2 & 0x80) >> 7)); width = 8 << ((b2 & 0x70) >> 4); @@ -43,11 +42,10 @@ public NsbtxTexture(byte[] nsbtxData, int offsetTextureInfo, System.arraycopy(nsbtxData, textureDataOffset + offsetTextureData, data, 0, dataSize); //Read texture name - name = Utils.removeLastOcurrences(new String(nsbtxData, offsetTextureName, 16), '\u0000'); + name = Utils.removeLastOccurrences(new String(nsbtxData, offsetTextureName, 16), '\u0000'); } - public NsbtxTexture(String name, int colorFormat, boolean isTransparent, - int width, int height) { + public NsbtxTexture(String name, int colorFormat, boolean isTransparent, int width, int height) { this.name = name; this.colorFormat = colorFormat; this.isTransparent = isTransparent; @@ -62,8 +60,7 @@ public byte[] getColorIndices() { int mask = 0xFF >> (8 - bitDepth); int pixelIndex = 0; byte[] colorIndices = new byte[width * height]; - for (int i = 0; i < data.length; i++) { - byte dataByte = data[i]; + for (byte dataByte : data) { for (int j = 0; j < pixelsPerByte; j++) { byte colorIndex = (byte) ((dataByte >> bitDepth * j) & mask); colorIndices[pixelIndex] = colorIndex; @@ -75,13 +72,11 @@ public byte[] getColorIndices() { public String getDataAsHexStringImd() { - String hexString = ""; + StringBuilder hexString = new StringBuilder(); for (int i = 0; i < data.length; i += 2) { - hexString += " "; - hexString += String.format("%02x", data[i + 1]); - hexString += String.format("%02x", data[i]); + hexString.append(" ").append(String.format("%02x", data[i + 1])).append(String.format("%02x", data[i])); } - return hexString; + return hexString.toString(); } public int getBitDepth() { @@ -135,5 +130,4 @@ public void setData(byte[] data) { public int getDataSizeImd() { return data.length / 2; } - } diff --git a/src/main/java/formats/nsbtx2/NsbtxWriter.java b/src/main/java/formats/nsbtx2/NsbtxWriter.java index cd46771..252eba9 100644 --- a/src/main/java/formats/nsbtx2/NsbtxWriter.java +++ b/src/main/java/formats/nsbtx2/NsbtxWriter.java @@ -20,7 +20,6 @@ public class NsbtxWriter { //TODO: improve all of this by not using the converter public static byte[] writeNsbtx(Nsbtx2 nsbtx, String fileName) throws IOException { - System.out.println("EXPORTING NSBTX IMD!"); String path = System.getProperty("user.dir") + File.separator + fileName; @@ -44,65 +43,65 @@ public static byte[] writeNsbtx(Nsbtx2 nsbtx, String fileName) throws IOExceptio private static byte[] imdToNsbmd(String imdPath) throws IOException { File file = new File(imdPath); System.out.println("EXPORTING NSBMD"); - byte[] data = null; - if (file.exists()) { - System.out.println("File exists!"); - String filename = new File(imdPath).getName(); - filename = Utils.removeExtensionFromPath(filename); - String converterPath = "converter/g3dcvtr.exe"; - String[] cmd; - if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { - cmd = new String[]{converterPath, imdPath, "-etex", "-o", filename}; - } else { - cmd = new String[]{"wine", converterPath, imdPath, "-etex", "-o", filename}; - // NOTE: wine call works only with relative path - } + if (!file.exists()) { + return null; + } - if (!Files.exists(Paths.get(converterPath))) { - System.out.println("Converter not found!"); - throw new IOException(); - } + System.out.println("File exists!"); + String filename = new File(imdPath).getName(); + filename = Utils.removeExtensionFromPath(filename); + String converterPath = "converter/g3dcvtr.exe"; + String[] cmd; + if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { + cmd = new String[]{converterPath, imdPath, "-etex", "-o", filename}; + } else { + cmd = new String[]{"wine", converterPath, imdPath, "-etex", "-o", filename}; + // NOTE: wine call works only with relative path + } - Process p = new ProcessBuilder(cmd).start(); + if (!Files.exists(Paths.get(converterPath))) { + System.out.println("Converter not found!"); + throw new IOException(); + } - BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); + Process p = new ProcessBuilder(cmd).start(); - String outputString = ""; - String line = null; - while ((line = stdError.readLine()) != null) { - outputString += line + "\n"; - } + BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); - try { - p.waitFor(); - } catch (InterruptedException ex) { - throw new IOException(); - } + StringBuilder outputString = new StringBuilder(); + String line; + while ((line = stdError.readLine()) != null) { + outputString.append(line).append("\n"); + } - p.destroy(); + try { + p.waitFor(); + } catch (InterruptedException ex) { + throw new IOException(); + } + + p.destroy(); + + String nsbPath = Utils.removeExtensionFromPath(imdPath); + nsbPath = Utils.addExtensionToPath(nsbPath, "nsbtx"); - String nsbPath = Utils.removeExtensionFromPath(imdPath); - nsbPath = Utils.addExtensionToPath(nsbPath, "nsbtx"); + filename = Utils.removeExtensionFromPath(filename); + filename = Utils.addExtensionToPath(filename, "nsbtx"); - filename = Utils.removeExtensionFromPath(filename); - filename = Utils.addExtensionToPath(filename, "nsbtx"); + File srcFile = new File(System.getProperty("user.dir") + File.separator + filename); + byte[] data; + if (srcFile.exists()) { + data = Files.readAllBytes(srcFile.toPath()); - File srcFile = new File(System.getProperty("user.dir") + File.separator + filename); + if (file.exists()) { + Files.delete(file.toPath()); + } if (srcFile.exists()) { - data = Files.readAllBytes(srcFile.toPath()); - - if (file.exists()) { - Files.delete(file.toPath()); - } - if (srcFile.exists()) { - Files.delete(srcFile.toPath()); - } - } else { - throw new IOException(); + Files.delete(srcFile.toPath()); } + } else { + throw new IOException(); } - return data; } - } diff --git a/src/main/java/formats/nsbtx2/PaletteDisplay2.java b/src/main/java/formats/nsbtx2/PaletteDisplay2.java index 6bd28fd..62a914c 100644 --- a/src/main/java/formats/nsbtx2/PaletteDisplay2.java +++ b/src/main/java/formats/nsbtx2/PaletteDisplay2.java @@ -1,7 +1,6 @@ package formats.nsbtx2; import javax.swing.*; -import javax.swing.GroupLayout; import java.awt.Color; import java.awt.Dimension; @@ -9,7 +8,7 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo, JackHack96 @@ -26,7 +25,7 @@ public class PaletteDisplay2 extends JPanel { private static final Color selectionFillColor = new Color(255, 0, 0, 120); private static final Color selectionBorderColor = Color.red; private BufferedImage backImg; - public ArrayList palette; + public List palette; public PaletteDisplay2() { initComponents(); @@ -68,7 +67,6 @@ public void paintComponent(Graphics g) { g.drawRect(index * tileSize + 1, 1, tileSize - 2, tileSize - 2); */ } - } public void init(NsbtxHandler2 nsbtxHandler) { @@ -76,20 +74,18 @@ public void init(NsbtxHandler2 nsbtxHandler) { } public void updatePalette() { - if (nsbtxHandler != null) { - if (nsbtxHandler.getNsbtx() != null) { - NsbtxPalette nsbtxPal = nsbtxHandler.getSelectedPalette(); - if (nsbtxPal != null) { - if (!nsbtxHandler.getNsbtx().hasTextures()) { - this.palette = nsbtxPal.getColors(nsbtxPal.getDataSize() / 2); - } else { - this.palette = nsbtxPal.getColors( - nsbtxHandler.getSelectedTexture().getNumColors()); - } - } else { - this.palette = null; - } + if (nsbtxHandler == null || nsbtxHandler.getNsbtx() == null) { + return; + } + NsbtxPalette nsbtxPal = nsbtxHandler.getSelectedPalette(); + if (nsbtxPal != null) { + if (!nsbtxHandler.getNsbtx().hasTextures()) { + this.palette = nsbtxPal.getColors(nsbtxPal.getDataSize() / 2); + } else { + this.palette = nsbtxPal.getColors(nsbtxHandler.getSelectedTexture().getNumColors()); } + } else { + this.palette = null; } } @@ -117,8 +113,7 @@ private BufferedImage createNoPaletteImg() { BufferedImage img = new BufferedImage(tileSize, tileSize, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = (Graphics2D) img.getGraphics(); - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setColor(Color.white); g2d.fillRect(0, 0, img.getWidth(), img.getHeight()); @@ -134,8 +129,7 @@ private BufferedImage createNoPaletteImg() { } private BufferedImage createBackImg(BufferedImage noPalImg) { - BufferedImage img = new BufferedImage(tileSize * cols, tileSize * rows, - BufferedImage.TYPE_INT_RGB); + BufferedImage img = new BufferedImage(tileSize * cols, tileSize * rows, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); for (int i = 0; i < cols; i++) { diff --git a/src/main/java/formats/obj/ExportMapObjDialog.java b/src/main/java/formats/obj/ExportMapObjDialog.java index bb42fab..0d2180a 100644 --- a/src/main/java/formats/obj/ExportMapObjDialog.java +++ b/src/main/java/formats/obj/ExportMapObjDialog.java @@ -3,8 +3,6 @@ import java.awt.*; import java.awt.event.*; import javax.swing.*; -import javax.swing.GroupLayout; -import javax.swing.LayoutStyle; import javax.swing.border.*; import net.miginfocom.swing.*; diff --git a/src/main/java/formats/obj/GlobalTextureMapper.java b/src/main/java/formats/obj/GlobalTextureMapper.java index e28b228..1689b1f 100644 --- a/src/main/java/formats/obj/GlobalTextureMapper.java +++ b/src/main/java/formats/obj/GlobalTextureMapper.java @@ -1,12 +1,12 @@ package formats.obj; -import java.util.ArrayList; +import java.util.List; import tileset.Face; import tileset.Tile; -import tileset.TileGeometryCompresser; -import tileset.TileGeometryDecompresser; +import tileset.TileGeometryCompressor; +import tileset.TileGeometryDecompressor; /** * @author Trifindo @@ -14,13 +14,13 @@ public class GlobalTextureMapper { public static void applyGlobalTextureMapping(Tile tile, int col, int row) { - float[] tCoordsTri = TileGeometryDecompresser.decompressObjData(tile.getFIndTriObj(), tile.getTextureCoordsObj(), 2, 3); - float[] tCoordsQuad = TileGeometryDecompresser.decompressObjData(tile.getFIndQuadObj(), tile.getTextureCoordsObj(), 2, 4); + float[] tCoordsTri = TileGeometryDecompressor.decompressObjData(tile.getFIndTriObj(), tile.getTextureCoordsObj(), 2, 3); + float[] tCoordsQuad = TileGeometryDecompressor.decompressObjData(tile.getFIndQuadObj(), tile.getTextureCoordsObj(), 2, 4); applyGlobalTextureMapping(tCoordsTri, tile.getFIndTriObj(), tile.getVertexCoordsObj(), tile.getGlobalTextureScale(), col, row); applyGlobalTextureMapping(tCoordsQuad, tile.getFIndQuadObj(), tile.getVertexCoordsObj(), tile.getGlobalTextureScale(), col, row); - TileGeometryCompresser.CompressedObjData compressedData = TileGeometryCompresser.compressObjData(tCoordsTri, tCoordsQuad, 2); + TileGeometryCompressor.CompressedObjData compressedData = TileGeometryCompressor.compressObjData(tCoordsTri, tCoordsQuad, 2); for (int i = 0; i < tile.getFIndTriObj().size(); i++) { tile.getFIndTriObj().get(i).tInd = compressedData.triIndices[i]; @@ -32,8 +32,7 @@ public static void applyGlobalTextureMapping(Tile tile, int col, int row) { tile.setTextureCoordsObj(compressedData.data); } - private static void applyGlobalTextureMapping(float[] tCoords, ArrayList faces, - ArrayList vCoords, float scale, int col, int row) { + private static void applyGlobalTextureMapping(float[] tCoords, List faces, List vCoords, float scale, int col, int row) { final int vCoordsPerVertex = 3; for (int i = 0, c = 0; i < faces.size(); i++) { Face face = faces.get(i); @@ -47,6 +46,4 @@ private static void applyGlobalTextureMapping(float[] tCoords, ArrayList f } } } - - } diff --git a/src/main/java/formats/obj/ObjWriter.java b/src/main/java/formats/obj/ObjWriter.java index 723be54..b425d43 100644 --- a/src/main/java/formats/obj/ObjWriter.java +++ b/src/main/java/formats/obj/ObjWriter.java @@ -14,7 +14,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.HashMap; +import java.util.List; +import java.util.Map; import javax.imageio.ImageIO; import tileset.Face; @@ -30,7 +31,7 @@ public class ObjWriter { private Tileset tset; //private MapGrid grid; - private HashMap maps; + private Map maps; private String folderPath; private String savePathObj; private String matFilename; @@ -38,14 +39,14 @@ public class ObjWriter { private boolean saveVertexColors = true; private float tileUpscale; - private ArrayList outTiles = new ArrayList<>(); - private ArrayList textureUsage; + private List outTiles = new ArrayList<>(); + private List textureUsage; private static final int maxTileableSizeBW = 16; private static final int maxTileableSizeDPHGSS = 8; private int maxTileableSize = 8; //TODO: Use 16 instead?? - public ObjWriter(Tileset tset, HashMap maps, String savePath, int game, + public ObjWriter(Tileset tset, Map maps, String savePath, int game, boolean saveTextures, boolean saveVertexColors, float tileUpscale) { this.tset = tset; this.maps = maps; @@ -64,11 +65,7 @@ public ObjWriter(Tileset tset, HashMap maps, String savePath, in public ObjWriter(Tileset tset, MapGrid grid, String savePath, int game, boolean saveTextures, boolean saveVertexColors, float tileUpscale) { this.tset = tset; - this.maps = new HashMap(1) { - { - put(new Point(0, 0), grid); - } - }; + this.maps = Map.of(new Point(0, 0), grid); this.savePathObj = savePath; this.saveTextures = saveTextures; this.saveVertexColors = saveVertexColors; @@ -97,8 +94,8 @@ public void writeMapObj() throws FileNotFoundException { long time = System.currentTimeMillis(); - for (HashMap.Entry mapEntry : maps.entrySet()) { - for (int k = 0; k < mapEntry.getValue().numLayers; k++) { + for (Map.Entry mapEntry : maps.entrySet()) { + for (int k = 0; k < MapGrid.numLayers; k++) { boolean[][] writtenGrid = new boolean[cols][rows]; for (int i = 0; i < cols; i++) { for (int j = 0; j < rows; j++) { @@ -143,7 +140,7 @@ public void writeTileObj(int tileIndex, float scale, boolean flipYZ) throws File tile.flipObjModelInvertedYZ(); } - outTiles = new ArrayList(); + outTiles = new ArrayList<>(); outTiles.add(tile); writeTiles(outObj, outMtl); @@ -164,14 +161,14 @@ public void writeAllTilesObj(float scale, boolean flipYZ) throws FileNotFoundExc } folderPath = file.getPath(); - ArrayList tileObjNames = new ArrayList(); + List tileObjNames = new ArrayList<>(); for (int i = 0; i < tset.size(); i++) { String objFilename = tset.get(i).getObjFilename(); objFilename = Utils.addExtensionToPath(objFilename, "obj"); int counter = 1; String nameNoExtension = Utils.removeExtensionFromPath(objFilename); while (tileObjNames.contains(objFilename)) { - objFilename = nameNoExtension + "_" + String.valueOf(counter) + ".obj"; + objFilename = nameNoExtension + "_" + counter + ".obj"; counter++; } tileObjNames.add(objFilename); @@ -192,7 +189,7 @@ public void writeAllTilesObj(float scale, boolean flipYZ) throws FileNotFoundExc tile.flipObjModelInvertedYZ(); } - outTiles = new ArrayList(); + outTiles = new ArrayList<>(); outTiles.add(tile); writeTiles(outObj, outMtl); @@ -207,53 +204,44 @@ public void writeAllTilesObj(float scale, boolean flipYZ) throws FileNotFoundExc private void evaluateTile(MapGrid grid, Point mapCoords, int layer, int c, int r, boolean[][] writtenGrid, float scale) { try { - if ((!writtenGrid[c][r]) && (grid.tileLayers[layer][c][r] != -1)) { - Tile tile = tset.get(grid.tileLayers[layer][c][r]).cloneObjData(); - if ((!tile.isXtileable()) && (!tile.isYtileable())) { - stretchTile(tile, 1, 1, c, r); + if ((writtenGrid[c][r]) || (grid.tileLayers[layer][c][r] == -1)) { + return; + } + Tile tile = tset.get(grid.tileLayers[layer][c][r]).cloneObjData(); + if ((!tile.isXtileable()) && (!tile.isYtileable())) { + stretchTile(tile, 1, 1, c, r); + writeTile(grid, mapCoords, tile, layer, c, r, scale); + updateWGridNoTileable(writtenGrid, tile, c, r); + } else if (tile.isXtileable() && tile.isYtileable()) { + int xSize = getNumEqualTilesX(grid, layer, c, r, writtenGrid, tile.getWidth()); + int ySize = getNumEqualTilesY(grid, layer, c, r, writtenGrid, tile.getHeight()); + if (xSize == 1 && ySize == 1) { + stretchTile(tile, 1, 1, c, r); // TODO: Make specific function? writeTile(grid, mapCoords, tile, layer, c, r, scale); - updateWGridNoTileable(writtenGrid, tile, c, r); - } else if (tile.isXtileable() && tile.isYtileable()) { - int xSize = getNumEqualTilesX(grid, layer, c, r, writtenGrid, tile.getWidth()); - int ySize = getNumEqualTilesY(grid, layer, c, r, writtenGrid, tile.getHeight()); - if (xSize == 1 && ySize == 1) { - stretchTile(tile, 1, 1, c, r); // TODO: Make specific function? - writeTile(grid, mapCoords, tile, layer, c, r, scale); - updateGridTileable(writtenGrid, c, r, tile.getWidth(), tile.getHeight()); - } else if (xSize > ySize) { - int yExp = getExpansionY(grid, layer, c, r, writtenGrid, tile.getWidth(), tile.getHeight(), xSize); - stretchTile(tile, xSize, yExp, c, r); - writeTile(grid, mapCoords, tile, layer, c, r, scale); - updateGridTileable(writtenGrid, c, r, xSize * tile.getWidth(), yExp * tile.getHeight()); - } else { - int xExp = getExpansionX(grid, layer, c, r, writtenGrid, tile.getWidth(), tile.getHeight(), ySize); - stretchTile(tile, xExp, ySize, c, r); - writeTile(grid, mapCoords, tile, layer, c, r, scale); - updateGridTileable(writtenGrid, c, r, xExp * tile.getWidth(), ySize * tile.getHeight()); - } - } else if (tile.isXtileable()) { - int xSize = getNumEqualTilesX(grid, layer, c, r, writtenGrid, tile.getWidth()); - if (xSize == 1) { - stretchTile(tile, 1, 1, c, r); // TODO: Make specific function? - writeTile(grid, mapCoords, tile, layer, c, r, scale); - } else { - stretchTile(tile, xSize, 1, c, r); - writeTile(grid, mapCoords, tile, layer, c, r, scale); - } - updateGridTileable(writtenGrid, c, r, xSize * tile.getWidth(), tile.getHeight()); + updateGridTileable(writtenGrid, c, r, tile.getWidth(), tile.getHeight()); + } else if (xSize > ySize) { + int yExp = getExpansionY(grid, layer, c, r, writtenGrid, tile.getWidth(), tile.getHeight(), xSize); + stretchTile(tile, xSize, yExp, c, r); + writeTile(grid, mapCoords, tile, layer, c, r, scale); + updateGridTileable(writtenGrid, c, r, xSize * tile.getWidth(), yExp * tile.getHeight()); } else { - int ySize = getNumEqualTilesY(grid, layer, c, r, writtenGrid, tile.getHeight()); - if (ySize == 1) { - stretchTile(tile, 1, 1, c, r); // TODO: Make specific function? - writeTile(grid, mapCoords, tile, layer, c, r, scale); - } else { - stretchTile(tile, 1, ySize, c, r); - writeTile(grid, mapCoords, tile, layer, c, r, scale); - } - updateGridTileable(writtenGrid, c, r, tile.getWidth(), ySize * tile.getHeight()); + int xExp = getExpansionX(grid, layer, c, r, writtenGrid, tile.getWidth(), tile.getHeight(), ySize); + stretchTile(tile, xExp, ySize, c, r); + writeTile(grid, mapCoords, tile, layer, c, r, scale); + updateGridTileable(writtenGrid, c, r, xExp * tile.getWidth(), ySize * tile.getHeight()); } - moveTile(tile); + } else if (tile.isXtileable()) { + int xSize = getNumEqualTilesX(grid, layer, c, r, writtenGrid, tile.getWidth()); + stretchTile(tile, xSize, 1, c, r); // TODO: Make specific function? + writeTile(grid, mapCoords, tile, layer, c, r, scale); + updateGridTileable(writtenGrid, c, r, xSize * tile.getWidth(), tile.getHeight()); + } else { + int ySize = getNumEqualTilesY(grid, layer, c, r, writtenGrid, tile.getHeight()); + stretchTile(tile, 1, ySize, c, r); // TODO: Make specific function? + writeTile(grid, mapCoords, tile, layer, c, r, scale); + updateGridTileable(writtenGrid, c, r, tile.getWidth(), ySize * tile.getHeight()); } + moveTile(tile); } catch (Exception ex) { ex.printStackTrace(); } @@ -280,7 +268,7 @@ private void updateWGridNoTileable(boolean[][] writtenGrid, Tile tile, int c, in } private void stretchTile(Tile tile, int xMult, int yMult, int c, int r) { - ArrayList vertexCoords = tile.getVertexCoordsObj(); + List vertexCoords = tile.getVertexCoordsObj(); int numVertex = vertexCoords.size() / 3; if (!(xMult == 1 && yMult == 1)) { for (int i = 0; i < numVertex; i++) { @@ -320,7 +308,7 @@ private void stretchTile(Tile tile, int xMult, int yMult, int c, int r) { yMult = 1; } */ - ArrayList textureCoords = tile.getTextureCoordsObj(); + List textureCoords = tile.getTextureCoordsObj(); int numTextCoords = textureCoords.size() / 2; for (int i = 0; i < numTextCoords; i++) { float xValue = textureCoords.get(i * 2) * xMult; @@ -332,7 +320,7 @@ private void stretchTile(Tile tile, int xMult, int yMult, int c, int r) { GlobalTextureMapper.applyGlobalTextureMapping(tile, c, r); /* - ArrayList textureCoords = tile.getTextureCoordsObj(); + List textureCoords = tile.getTextureCoordsObj(); int numTextCoords = textureCoords.size() / 2; BufferedImage texture = tset.getTextureImg(tile.getTextureIDs().get(0)); float minX = Integer.MAX_VALUE, minY = Integer.MAX_VALUE; @@ -367,7 +355,7 @@ private void stretchTile(Tile tile, int xMult, int yMult, int c, int r) { } private void moveTile(Tile tile) { - ArrayList vertexCoords = tile.getVertexCoordsObj(); + List vertexCoords = tile.getVertexCoordsObj(); int numVertex = vertexCoords.size() / 3; if (tile.getXOffset() != 0.0f || tile.getYOffset() != 0.0f) { for (int i = 0; i < numVertex; i++) { @@ -380,7 +368,7 @@ private void moveTile(Tile tile) { } private void displaceTile(Tile tile, int c, int r, int height) { - ArrayList vertexCoords = tile.getVertexCoordsObj(); + List vertexCoords = tile.getVertexCoordsObj(); int numVertex = vertexCoords.size() / 3; for (int i = 0; i < numVertex; i++) { float xValue = vertexCoords.get(i * 3) + c * gridTileSize; @@ -393,7 +381,7 @@ private void displaceTile(Tile tile, int c, int r, int height) { } private float[] getTileCenter(Tile tile){ - ArrayList vertexCoords = tile.getVertexCoordsObj(); + List vertexCoords = tile.getVertexCoordsObj(); float[] mean = new float[3]; final int coordsPerVertex = 3; final int numVertex = vertexCoords.size() / coordsPerVertex; @@ -410,7 +398,7 @@ private float[] getTileCenter(Tile tile){ private void scaleTile(Tile tile, float scale){ float[] center = getTileCenter(tile); - ArrayList vertexCoords = tile.getVertexCoordsObj(); + List vertexCoords = tile.getVertexCoordsObj(); final int coordsPerVertex = 3; final int numVertex = vertexCoords.size() / coordsPerVertex; for (int i = 0; i < numVertex; i++) { @@ -458,8 +446,7 @@ private int getNumEqualTilesX(MapGrid grid, int layer, int c, int r, boolean[][] int n = 1; for (int i = width, limit = cols - c; i < limit && n < maxTileableSize; i += width) { int nextC = c + i; - int nextR = r; - if (sameHeightAndType(grid, layer, c, r, nextC, nextR) && !writtenGrid[nextC][nextR]) { + if (sameHeightAndType(grid, layer, c, r, nextC, r) && !writtenGrid[nextC][r]) { n++; } else { return n; @@ -471,9 +458,8 @@ private int getNumEqualTilesX(MapGrid grid, int layer, int c, int r, boolean[][] private int getNumEqualTilesY(MapGrid grid, int layer, int c, int r, boolean[][] writtenGrid, int height) { int n = 1; for (int i = height, limit = rows - r; i < limit && n < maxTileableSize; i += height) { - int nextC = c; int nextR = r + i; - if (sameHeightAndType(grid, layer, c, r, nextC, nextR) && !writtenGrid[nextC][nextR]) { + if (sameHeightAndType(grid, layer, c, r, c, nextR) && !writtenGrid[c][nextR]) { n++; } else { return n; @@ -483,8 +469,8 @@ private int getNumEqualTilesY(MapGrid grid, int layer, int c, int r, boolean[][] } private boolean sameHeightAndType(MapGrid grid, int layer, int c1, int r1, int c2, int r2) { - return (grid.tileLayers[layer][c1][r1] == grid.tileLayers[layer][c2][r2] - && grid.heightLayers[layer][c1][r1] == grid.heightLayers[layer][c2][r2]); + return grid.tileLayers[layer][c1][r1] == grid.tileLayers[layer][c2][r2] + && grid.heightLayers[layer][c1][r1] == grid.heightLayers[layer][c2][r2]; } private void writeTile(MapGrid grid, Point mapCoords, Tile tile, int layer, int c, int r, float scale) { @@ -500,21 +486,19 @@ private void writeTile(MapGrid grid, Point mapCoords, Tile tile, int layer, int } public void writeTiles(PrintWriter outObj, PrintWriter outMtl) { - ArrayList vertexCoords = new ArrayList<>(); - ArrayList textureCoords = new ArrayList<>(); - ArrayList normalCoords = new ArrayList<>(); - ArrayList colors = new ArrayList<>(); + List vertexCoords = new ArrayList<>(); + List textureCoords = new ArrayList<>(); + List normalCoords = new ArrayList<>(); + List colors = new ArrayList<>(); - ArrayList vertexCoordsOffsets = new ArrayList<>(); - ArrayList textureCoordsOffsets = new ArrayList<>(); - ArrayList normalCoordsOffsets = new ArrayList<>(); - ArrayList colorsOffsets = new ArrayList<>(); + List vertexCoordsOffsets = new ArrayList<>(); + List textureCoordsOffsets = new ArrayList<>(); + List normalCoordsOffsets = new ArrayList<>(); + List colorsOffsets = new ArrayList<>(); // Create and fill an array with all the v, t and n coordinates // Create and fill an array storing the offsets for the indices - for (int i = 0; i < outTiles.size(); i++) { - Tile tile = outTiles.get(i); - + for (Tile tile : outTiles) { vertexCoordsOffsets.add(vertexCoords.size() / 3); textureCoordsOffsets.add(textureCoords.size() / 2); normalCoordsOffsets.add(normalCoords.size() / 3); @@ -545,16 +529,15 @@ public void writeTiles(PrintWriter outObj, PrintWriter outMtl) { // Initialize array of arrays with quads and tris indices for each tex int numTextures = tset.getMaterials().size(); - ArrayList> fIndsQuad = new ArrayList<>(numTextures); - ArrayList> fIndsTri = new ArrayList<>(numTextures); + List> fIndsQuad = new ArrayList<>(numTextures); + List> fIndsTri = new ArrayList<>(numTextures); for (int i = 0; i < numTextures; i++) { fIndsQuad.add(new ArrayList<>()); fIndsTri.add(new ArrayList<>()); } for (int tex = 0; tex < numTextures; tex++) { - for (int t = 0; t < outTiles.size(); t++) { - Tile tile = outTiles.get(t); + for (Tile tile : outTiles) { int index = tile.getTextureIDs().indexOf(tex); if (index != -1) { fIndsQuad.get(tex).addAll(tile.getFaceIndQuadOfTex(index)); @@ -612,8 +595,7 @@ public void writeTiles(PrintWriter outObj, PrintWriter outMtl) { } } - private void writeVertexLine(PrintWriter out, - ArrayList vertexCoords, int vertexIndex) { + private void writeVertexLine(PrintWriter out, List vertexCoords, int vertexIndex) { out.print("v "); out.print(vertexCoords.get(vertexIndex * 3) + " "); out.print(vertexCoords.get(vertexIndex * 3 + 1) + " "); @@ -621,16 +603,14 @@ private void writeVertexLine(PrintWriter out, out.println(); } - private void writeTextureCoordLine(PrintWriter out, - ArrayList textureCoords, int textureCoordIndex) { + private void writeTextureCoordLine(PrintWriter out, List textureCoords, int textureCoordIndex) { out.print("vt "); out.print(textureCoords.get(textureCoordIndex * 2) + " "); out.print(textureCoords.get(textureCoordIndex * 2 + 1)); out.println(); } - private void writeNormalCoordLine(PrintWriter out, - ArrayList normalCoords, int normalCoordIndex) { + private void writeNormalCoordLine(PrintWriter out, List normalCoords, int normalCoordIndex) { out.print("vn "); out.print(normalCoords.get(normalCoordIndex * 3) + " "); out.print(normalCoords.get(normalCoordIndex * 3 + 1) + " "); @@ -638,8 +618,7 @@ private void writeNormalCoordLine(PrintWriter out, out.println(); } - private void writeColorLine(PrintWriter out, - ArrayList colors, int colorIndex) { + private void writeColorLine(PrintWriter out, List colors, int colorIndex) { out.print("c "); out.print(colors.get(colorIndex * 3) + " "); out.print(colors.get(colorIndex * 3 + 1) + " "); @@ -661,8 +640,7 @@ private void writeFaceLine(PrintWriter out, Face face, int numVertices) { out.println(); } - private void writeFaceLine(PrintWriter out, ArrayList vInd, - ArrayList tInd, ArrayList nInd, int index) { + private void writeFaceLine(PrintWriter out, List vInd, List tInd, List nInd, int index) { out.print("f "); out.print(vInd.get(index * 3) + "/" + tInd.get(index * 3) + "/" + nInd.get(index * 3) + " "); out.print(vInd.get(index * 3 + 1) + "/" + tInd.get(index * 3 + 1) + "/" + nInd.get(index * 3 + 1) + " "); @@ -670,8 +648,8 @@ private void writeFaceLine(PrintWriter out, ArrayList vInd, out.println(); } - private ArrayList countTextureUsage() { - ArrayList count = new ArrayList<>(); + private List countTextureUsage() { + List count = new ArrayList<>(); for (TilesetMaterial material : tset.getMaterials()) { count.add(0); } @@ -703,13 +681,12 @@ public void writeAllTextures() { for (int i = 0; i < tset.getMaterials().size(); i++) { String path = folderPath + File.separator + tset.getImageName(i); //System.out.println(path); - File outputfile = new File(path); + File outputFile = new File(path); try { - ImageIO.write(tset.getTextureImg(i), "png", outputfile); + ImageIO.write(tset.getTextureImg(i), "png", outputFile); } catch (IOException ex) { ex.printStackTrace(); } } } - } diff --git a/src/main/java/geometry/Generator.java b/src/main/java/geometry/Generator.java index 46bc5c3..5b8dbd9 100644 --- a/src/main/java/geometry/Generator.java +++ b/src/main/java/geometry/Generator.java @@ -11,7 +11,7 @@ public class Generator { public static float[] generateCenteredGrid(int cols, int rows, float size, float z) { float[] grid = new float[(cols + rows + 2) * 2 * 3]; for (int i = 0; i < rows + 1; i++) { - grid[i * 6 + 0] = -(size * cols) / 2; + grid[i * 6] = -(size * cols) / 2; grid[i * 6 + 1] = size * i - (size * rows) / 2; grid[i * 6 + 2] = z; @@ -21,7 +21,7 @@ public static float[] generateCenteredGrid(int cols, int rows, float size, float } for (int i = 0; i < cols + 1; i++) { - grid[(i + rows + 1) * 6 + 0] = size * i - (size * cols) / 2; + grid[(i + rows + 1) * 6] = size * i - (size * cols) / 2; grid[(i + rows + 1) * 6 + 1] = -(size * rows) / 2; grid[(i + rows + 1) * 6 + 2] = z; @@ -34,8 +34,7 @@ public static float[] generateCenteredGrid(int cols, int rows, float size, float } - public static float[] generateGridColors(int cols, int rows, - float[] rgbaTop, float[] rgbaBot, float[] rgbaLeft, float[] rgbaRight) { + public static float[] generateGridColors(int cols, int rows, float[] rgbaTop, float[] rgbaBot, float[] rgbaLeft, float[] rgbaRight) { final int colorsPerVertex = 4; final int vertexPerLine = 2; final int numVertices = (cols + rows + 2) * colorsPerVertex * vertexPerLine; @@ -64,7 +63,7 @@ public static float[] generateGridColors(int cols, int rows, public static float[] generateGrid(int cols, int rows, float size, float z) { float[] grid = new float[(cols + rows + 2) * 2 * 3]; for (int i = 0; i < rows + 1; i++) { - grid[i * 6 + 0] = 0; + grid[i * 6] = 0; grid[i * 6 + 1] = size * i; grid[i * 6 + 2] = z; @@ -74,7 +73,7 @@ public static float[] generateGrid(int cols, int rows, float size, float z) { } for (int i = 0; i < cols + 1; i++) { - grid[(i + rows + 1) * 6 + 0] = size * i; + grid[(i + rows + 1) * 6] = size * i; grid[(i + rows + 1) * 6 + 1] = 0; grid[(i + rows + 1) * 6 + 2] = z; @@ -114,8 +113,6 @@ public static Matrix3D perspective(float fovy, float aspect, float n, float f) { r.setElementAt(3, 3, 0.0f); //Matrix3D r = new Matrix3D(); - - return r; } @@ -141,5 +138,4 @@ private static void set3f(float[] array, int index, float e1, float e2, float e3 array[index + 1] = e2; array[index + 2] = e3; } - } diff --git a/src/main/java/geometry/TrisToQuads.java b/src/main/java/geometry/TrisToQuads.java index 979afa5..ee2c903 100644 --- a/src/main/java/geometry/TrisToQuads.java +++ b/src/main/java/geometry/TrisToQuads.java @@ -2,8 +2,8 @@ package geometry; import java.util.ArrayList; - -import tileset.Tile; +import java.util.List; +import java.util.stream.IntStream; /** * @author Trifindo @@ -26,12 +26,11 @@ public class TrisToQuads { private int numFaces; private int numEdges; - private ArrayList edges; - private ArrayList> edgesConnected; + private List edges; + private List> edgesConnected; private boolean[] usedFaces; public TrisToQuads(PolygonData pData) { - this.vCoordsTri = pData.vCoordsTri; this.tCoordsTri = pData.tCoordsTri; this.nCoordsTri = pData.nCoordsTri; @@ -55,11 +54,10 @@ public void calculateQuads() { } } - } - private ArrayList calculateEdges() { - ArrayList edges = new ArrayList<>(numEdges); + private List calculateEdges() { + List edges = new ArrayList<>(numEdges); for (int i = 0; i < numFaces; i++) { int offset = edgesPerFace * i; for (int j = 0; j < edgesPerFace; j++) { @@ -69,8 +67,8 @@ private ArrayList calculateEdges() { return edges; } - private ArrayList> generateConnectedEdges(ArrayList edges) { - ArrayList> conectedEdges = new ArrayList<>(numEdges); + private List> generateConnectedEdges(List edges) { + List> conectedEdges = new ArrayList<>(numEdges); for (int i = 0; i < numEdges; i++) { conectedEdges.add(new ArrayList<>()); } @@ -86,7 +84,6 @@ private ArrayList> generateConnectedEdges(ArrayList edg } private class PolygonData { - public float[] vCoordsTri; public float[] nCoordsTri; public float[] tCoordsTri; @@ -101,7 +98,6 @@ public PolygonData() { } private class Edge { - public int vertexIndex1; public int vertexIndex2; @@ -121,16 +117,11 @@ public void flip() { vertexIndex2 = temp; } - private boolean sameVertexCoords(float[] coordData, int coordsPerVertex, - int vertexIndex1, int vertexIndex2) { + private boolean sameVertexCoords(float[] coordData, int coordsPerVertex, int vertexIndex1, int vertexIndex2) { int offset1 = vertexIndex1 * coordsPerVertex; int offset2 = vertexIndex2 * coordsPerVertex; - for (int i = 0; i < coordsPerVertex; i++) { - if (Math.abs(coordData[offset1 + i] - coordData[offset2 + i]) > 0.0001f) { - return false; - } - } - return true; + return IntStream.range(0, coordsPerVertex) + .noneMatch(i -> Math.abs(coordData[offset1 + i] - coordData[offset2 + i]) > 0.0001f); } private boolean sameEdgeCoords(float[] coords, int coordsPerVertex, @@ -141,9 +132,7 @@ private boolean sameEdgeCoords(float[] coords, int coordsPerVertex, } } else */ if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex1, other.vertexIndex2)) { - if (sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex1)) { - return true; - } + return sameVertexCoords(coords, coordsPerVertex, this.vertexIndex2, other.vertexIndex1); } return false; } @@ -151,14 +140,7 @@ private boolean sameEdgeCoords(float[] coords, int coordsPerVertex, @Override public boolean equals(Object obj) { final Edge other = (Edge) obj; - if (sameEdgeCoords(vCoordsTri, vPerVertex, other) - && sameEdgeCoords(tCoordsTri, tPerVertex, other) - && sameEdgeCoords(nCoordsTri, nPerVertex, other)) { - return true; - } - return false; + return sameEdgeCoords(vCoordsTri, vPerVertex, other) && sameEdgeCoords(tCoordsTri, tPerVertex, other) && sameEdgeCoords(nCoordsTri, nPerVertex, other); } - } - } diff --git a/src/main/java/math/mat/Mat3f.java b/src/main/java/math/mat/Mat3f.java index 5fd6604..de46781 100644 --- a/src/main/java/math/mat/Mat3f.java +++ b/src/main/java/math/mat/Mat3f.java @@ -49,7 +49,7 @@ public String toString() { } public void print() { - System.out.println(toString()); + System.out.println(this); } public final void set(float m00, float m01, float m02, float m10, float m11, float m12, float m20, float m21, float m22) { @@ -264,5 +264,4 @@ public Mat3f transp() { public Mat3f transp_() { return transp_(this); } - } diff --git a/src/main/java/math/mat/Mat4f.java b/src/main/java/math/mat/Mat4f.java index 861e096..89dd392 100644 --- a/src/main/java/math/mat/Mat4f.java +++ b/src/main/java/math/mat/Mat4f.java @@ -62,7 +62,7 @@ public String toString() { } public void print() { - System.out.println(toString()); + System.out.println(this); } public final void set(Mat4f other) { @@ -409,5 +409,4 @@ public Mat4f transp() { public Mat4f transp_() { return transp_(this); } - } diff --git a/src/main/java/math/transf/TransfMat.java b/src/main/java/math/transf/TransfMat.java index 1863ff4..1116031 100644 --- a/src/main/java/math/transf/TransfMat.java +++ b/src/main/java/math/transf/TransfMat.java @@ -216,7 +216,6 @@ public static void lookAt(Vec3f pos, Vec3f tar, Vec3f up, Mat4f dst) { trans.m23 = -pos.z; dst.mul(trans); - } public static Mat4f lookAt_(Vec3f pos, Vec3f tar, Vec3f up) { diff --git a/src/main/java/math/vec/Vec3f.java b/src/main/java/math/vec/Vec3f.java index d797a8a..edaf30d 100644 --- a/src/main/java/math/vec/Vec3f.java +++ b/src/main/java/math/vec/Vec3f.java @@ -110,10 +110,7 @@ public boolean equals(Object obj) { if (Float.floatToIntBits(this.y) != Float.floatToIntBits(other.y)) { return false; } - if (Float.floatToIntBits(this.z) != Float.floatToIntBits(other.z)) { - return false; - } - return true; + return Float.floatToIntBits(this.z) == Float.floatToIntBits(other.z); } @Override @@ -125,7 +122,7 @@ public String toString() { * Prints the coordinates of the Vec3f */ public void print() { - System.out.println(toString()); + System.out.println(this); } /** @@ -134,7 +131,7 @@ public void print() { * @param name the name of the vector */ public void print(String name) { - System.out.println(name + ": " + toString()); + System.out.println(name + ": " + this); } /** @@ -1120,16 +1117,7 @@ public static void projLineOnPlane(Vec3f linePos, Vec3f lineDir, Vec3f planePos, * @return */ public static boolean isFinite(Vec3f src){ - if(!Float.isFinite(src.x)){ - return false; - } - if(!Float.isFinite(src.y)){ - return false; - } - if(!Float.isFinite(src.z)){ - return false; - } - return true; + return Float.isFinite(src.x) && Float.isFinite(src.y) && Float.isFinite(src.z); } /** diff --git a/src/main/java/math/vec/Vec4f.java b/src/main/java/math/vec/Vec4f.java index 8e98787..0db4f66 100644 --- a/src/main/java/math/vec/Vec4f.java +++ b/src/main/java/math/vec/Vec4f.java @@ -115,14 +115,9 @@ public boolean equals(Object obj) { if (Float.floatToIntBits(this.z) != Float.floatToIntBits(other.z)) { return false; } - if (Float.floatToIntBits(this.w) != Float.floatToIntBits(other.w)) { - return false; - } - return true; + return Float.floatToIntBits(this.w) == Float.floatToIntBits(other.w); } - - @Override public String toString() { return "[" + x + ", " + y + ", " + z + ", " + w + "]"; @@ -132,7 +127,7 @@ public String toString() { * Prints the coordinates of the Vec4f */ public void print() { - System.out.println(toString()); + System.out.println(this); } /** @@ -141,7 +136,7 @@ public void print() { * @param name the name of the vector */ public void print(String name) { - System.out.println(name + ": " + toString()); + System.out.println(name + ": " + this); } /** @@ -580,5 +575,4 @@ public Vec4f negate() { public Vec4f negate_() { return negate_(this); } - } \ No newline at end of file diff --git a/src/main/java/tileset/Face.java b/src/main/java/tileset/Face.java index 140f58a..c4bdee9 100644 --- a/src/main/java/tileset/Face.java +++ b/src/main/java/tileset/Face.java @@ -2,6 +2,7 @@ package tileset; import java.util.ArrayList; +import java.util.List; import utils.Utils; @@ -17,12 +18,7 @@ public class Face { public boolean isQuad; public Face(boolean isQuad) { - int nElements; - if (isQuad) { - nElements = 4; - } else { - nElements = 3; - } + int nElements = isQuad ? 4 : 3; vInd = new int[nElements]; tInd = new int[nElements]; @@ -30,7 +26,6 @@ public Face(boolean isQuad) { cInd = new int[nElements]; this.isQuad = isQuad; - } public Face deepClone() { @@ -42,17 +37,13 @@ public Face deepClone() { return f; } - - public static ArrayList cloneArrayList(ArrayList array) { - ArrayList newArray = new ArrayList<>(array.size()); - array.forEach((f) -> { - newArray.add(f.deepClone()); - }); + public static List cloneArrayList(List array) { + List newArray = new ArrayList<>(array.size()); + array.forEach((f) -> newArray.add(f.deepClone())); return newArray; } - public static void incrementAllIndices(ArrayList faces, int vIncrement, - int tIncrement, int nIncrement, int cIncrement) { + public static void incrementAllIndices(List faces, int vIncrement, int tIncrement, int nIncrement, int cIncrement) { for (Face f : faces) { for (int i = 0; i < f.vInd.length; i++) { f.vInd[i] = f.vInd[i] + vIncrement; @@ -68,5 +59,4 @@ public static void incrementAllIndices(ArrayList faces, int vIncrement, } } } - } diff --git a/src/main/java/tileset/Tile.java b/src/main/java/tileset/Tile.java index bced649..6c3c661 100644 --- a/src/main/java/tileset/Tile.java +++ b/src/main/java/tileset/Tile.java @@ -16,6 +16,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Objects; import javax.imageio.ImageIO; @@ -48,13 +49,13 @@ public class Tile { private String objFilename; //Model OBJ - private ArrayList vCoordsObj = new ArrayList<>(); - private ArrayList tCoordsObj = new ArrayList<>(); - private ArrayList nCoordsObj = new ArrayList<>(); - private ArrayList colorsObj = new ArrayList<>(); + private List vCoordsObj = new ArrayList<>(); + private List tCoordsObj = new ArrayList<>(); + private List nCoordsObj = new ArrayList<>(); + private List colorsObj = new ArrayList<>(); - private ArrayList fIndsQuad = new ArrayList<>(); - private ArrayList fIndsTri = new ArrayList<>(); + private List fIndsQuad = new ArrayList<>(); + private List fIndsTri = new ArrayList<>(); //Model OpenGL private float[] vCoordsTri; @@ -67,9 +68,9 @@ public class Tile { private float[] nCoordsQuad; private float[] colorsQuad; - private ArrayList textureIDs = new ArrayList<>(); - private ArrayList texOffsetsTri = new ArrayList<>(); - private ArrayList texOffsetsQuad = new ArrayList<>(); + private List textureIDs = new ArrayList<>(); + private List texOffsetsTri = new ArrayList<>(); + private List texOffsetsQuad = new ArrayList<>(); private BufferedImage thumbnail; private BufferedImage smallThumbnail; @@ -79,12 +80,9 @@ public class Tile { private float[] boundsSca; public Tile(Tileset tileset, String folderPath, String objFilename, - int width, int height, boolean xTileable, boolean yTileable, - boolean uTileable, boolean vTileable, - boolean globalTexMapping, float globalTexScale, - float xOffset, float yOffset) - throws IOException, TextureNotFoundException, - NormalsNotFoundException { + int width, int height, boolean xTileable, boolean yTileable, boolean uTileable, boolean vTileable, + boolean globalTexMapping, float globalTexScale, float xOffset, float yOffset) + throws IOException, TextureNotFoundException, NormalsNotFoundException { this.tileset = tileset; @@ -105,18 +103,15 @@ public Tile(Tileset tileset, String folderPath, String objFilename, this.yOffset = yOffset; loadFromObj(folderPath, objFilename); - } - public Tile(Tileset tileset, String filePath) throws IOException, - TextureNotFoundException, NormalsNotFoundException { + public Tile(Tileset tileset, String filePath) throws IOException, TextureNotFoundException, NormalsNotFoundException { this(tileset, new File(filePath).getParent(), new File(filePath).getName(), 1, 1, false, false, false, false, false, 1.0f, 0.0f, 0.0f); } - public Tile(Tileset tileset, String filePath, Tile tile) throws IOException, - TextureNotFoundException, NormalsNotFoundException { + public Tile(Tileset tileset, String filePath, Tile tile) throws IOException, TextureNotFoundException, NormalsNotFoundException { this(tileset, new File(filePath).getParent(), new File(filePath).getName(), tile.getWidth(), tile.getHeight(), tile.isXtileable(), tile.isYtileable(), @@ -161,17 +156,17 @@ public Tile clone() { tile.folderPath = folderPath; tile.objFilename = objFilename; - tile.vCoordsObj = Utils.cloneArrayListFloat(vCoordsObj); - tile.tCoordsObj = Utils.cloneArrayListFloat(tCoordsObj); - tile.nCoordsObj = Utils.cloneArrayListFloat(nCoordsObj); - tile.colorsObj = Utils.cloneArrayListFloat(colorsObj); + tile.vCoordsObj = new ArrayList<>(vCoordsObj); + tile.tCoordsObj = new ArrayList<>(tCoordsObj); + tile.nCoordsObj = new ArrayList<>(nCoordsObj); + tile.colorsObj = new ArrayList<>(colorsObj); tile.fIndsQuad = Face.cloneArrayList(fIndsQuad); tile.fIndsTri = Face.cloneArrayList(fIndsTri); - tile.textureIDs = Utils.cloneArrayListInt(textureIDs); - tile.texOffsetsTri = Utils.cloneArrayListInt(texOffsetsTri); - tile.texOffsetsQuad = Utils.cloneArrayListInt(texOffsetsQuad); + tile.textureIDs = new ArrayList<>(textureIDs); + tile.texOffsetsTri = new ArrayList<>(texOffsetsTri); + tile.texOffsetsQuad = new ArrayList<>(texOffsetsQuad); tile.vCoordsTri = Utils.cloneArray(vCoordsTri); tile.tCoordsTri = Utils.cloneArray(tCoordsTri); @@ -207,10 +202,10 @@ public Tile cloneObjData() { tile.folderPath = folderPath; tile.objFilename = objFilename; - tile.vCoordsObj = Utils.cloneArrayListFloat(vCoordsObj); - tile.tCoordsObj = Utils.cloneArrayListFloat(tCoordsObj); - tile.nCoordsObj = Utils.cloneArrayListFloat(nCoordsObj); - tile.colorsObj = Utils.cloneArrayListFloat(colorsObj); + tile.vCoordsObj = new ArrayList<>(vCoordsObj); + tile.tCoordsObj = new ArrayList<>(tCoordsObj); + tile.nCoordsObj = new ArrayList<>(nCoordsObj); + tile.colorsObj = new ArrayList<>(colorsObj); tile.fIndsQuad = Face.cloneArrayList(fIndsQuad); tile.fIndsTri = Face.cloneArrayList(fIndsTri); @@ -309,10 +304,7 @@ public boolean equals(Object obj) { if (!Arrays.equals(this.colorsQuad, other.colorsQuad)) { return false; } - if (!Objects.equals(this.textureIDs, other.textureIDs)) { - return false; - } - return true; + return Objects.equals(this.textureIDs, other.textureIDs); } public boolean equalsVisualData(Object obj) { @@ -379,23 +371,21 @@ public boolean equalsVisualData(Object obj) { } catch (Exception ex) { return false; } - } return true; } - private void loadFromObj(String folderPath, String objName) throws IOException, - TextureNotFoundException, NormalsNotFoundException { + private void loadFromObj(String folderPath, String objName) throws IOException, TextureNotFoundException, NormalsNotFoundException { vCoordsObj = new ArrayList<>(); tCoordsObj = new ArrayList<>(); nCoordsObj = new ArrayList<>(); colorsObj = new ArrayList<>(); - ArrayList> fIndsQuadArray = new ArrayList<>(); - ArrayList> fIndsTriArray = new ArrayList<>(); + List> fIndsQuadArray = new ArrayList<>(); + List> fIndsTriArray = new ArrayList<>(); - ArrayList materialNames = new ArrayList(); + List materialNames = new ArrayList(); InputStream inputObj = new FileInputStream(new File(folderPath + "/" + objName)); BufferedReader brObj = new BufferedReader(new InputStreamReader(inputObj)); @@ -407,7 +397,7 @@ private void loadFromObj(String folderPath, String objName) throws IOException, String lineObj; while ((lineObj = brObj.readLine()) != null) { if (lineObj.startsWith("mtllib")) { - mtlName = lineObj.substring(lineObj.indexOf(" ") + 1, lineObj.length()); + mtlName = lineObj.substring(lineObj.indexOf(" ") + 1); } else if (lineObj.startsWith("o")) { } else if (lineObj.startsWith("v ")) { @@ -445,7 +435,7 @@ private void loadFromObj(String folderPath, String objName) throws IOException, } } else if (lineObj.startsWith("usemtl")) { //String name = lineObj.split(" ")[1]; - String name = lineObj.substring(lineObj.indexOf(" ") + 1, lineObj.length()); + String name = lineObj.substring(lineObj.indexOf(" ") + 1); materialIndex = materialNames.indexOf(name); if (materialIndex == -1) { fIndsQuadArray.add(new ArrayList<>()); @@ -454,10 +444,10 @@ private void loadFromObj(String folderPath, String objName) throws IOException, materialNames.add(name); } } else if (lineObj.startsWith("f")) { - String[] splittedLine = (lineObj.substring(2)).split(" "); + String[] splitLine = (lineObj.substring(2)).split(" "); int numVertex = 0; - for (int i = 0; i < splittedLine.length; i++) { - if (splittedLine[i].contains("/")) { + for (String s : splitLine) { + if (s.contains("/")) { numVertex++; } } @@ -468,17 +458,17 @@ private void loadFromObj(String folderPath, String objName) throws IOException, } Face f = new Face(numVertex > 3); for (int i = 0; i < numVertex; i++) { - String[] sArray = splittedLine[i].split("/"); - f.vInd[i] = Integer.valueOf(sArray[0]); - f.tInd[i] = Integer.valueOf(sArray[1]); + String[] sArray = splitLine[i].split("/"); + f.vInd[i] = Integer.parseInt(sArray[0]); + f.tInd[i] = Integer.parseInt(sArray[1]); if (sArray.length > 2) { - f.nInd[i] = Integer.valueOf(sArray[2]); + f.nInd[i] = Integer.parseInt(sArray[2]); } else { throw new NormalsNotFoundException("The OBJ file \"" + objName + "\" does not contain calculated normals."); } if (sArray.length > 3) { - f.cInd[i] = Integer.valueOf(sArray[3]); + f.cInd[i] = Integer.parseInt(sArray[3]); } else { if (!firstColorAdded) { firstColorIndex = colorsObj.size() / 3 + 1; @@ -513,11 +503,11 @@ private void loadFromObj(String folderPath, String objName) throws IOException, while ((lineMtl = brMtl.readLine()) != null) { if (lineMtl.startsWith("newmtl")) { //String matName = lineMtl.split(" ")[1]; - String matName = lineMtl.substring(lineMtl.indexOf(" ") + 1, lineMtl.length()); + String matName = lineMtl.substring(lineMtl.indexOf(" ") + 1); matIndex = materialNames.indexOf(matName); } else if (lineMtl.startsWith("map_Kd")) { //String textName = lineMtl.split(" ")[1]; - String textName = lineMtl.substring(lineMtl.indexOf(" ") + 1, lineMtl.length()); + String textName = lineMtl.substring(lineMtl.indexOf(" ") + 1); int textIndex = tileset.getIndexOfMaterialByImgName(textName); if (textIndex == -1) { //Not found if (new File(folderPath + "/" + textName).exists() || new File(textName).exists()) { @@ -578,33 +568,23 @@ private void loadFromObj(String folderPath, String objName) throws IOException, } //Fix duplicated Texture IDs - ArrayList> fIndsQuadArrayFixed = new ArrayList<>(); - ArrayList> fIndsTriArrayFixed = new ArrayList<>(); - ArrayList textureIDsFixed = new ArrayList<>(); + List> fIndsQuadArrayFixed = new ArrayList<>(); + List> fIndsTriArrayFixed = new ArrayList<>(); + List textureIDsFixed = new ArrayList<>(); for (int i = 0; i < textureIDs.size(); i++) { int id = textureIDs.get(i); int index = textureIDsFixed.indexOf(id); if (index == -1) { - ArrayList fIndsQuad = new ArrayList<>(); - ArrayList fIndsTri = new ArrayList<>(); - for (int j = 0; j < fIndsQuadArray.get(i).size(); j++) { - fIndsQuad.add(fIndsQuadArray.get(i).get(j)); - } - for (int j = 0; j < fIndsTriArray.get(i).size(); j++) { - fIndsTri.add(fIndsTriArray.get(i).get(j)); - } + List fIndsQuad = new ArrayList<>(fIndsQuadArray.get(i)); + List fIndsTri = new ArrayList<>(fIndsTriArray.get(i)); fIndsQuadArrayFixed.add(fIndsQuad); fIndsTriArrayFixed.add(fIndsTri); textureIDsFixed.add(id); } else { - ArrayList fIndsQuad = fIndsQuadArrayFixed.get(index); - ArrayList fIndsTri = fIndsTriArrayFixed.get(index); - for (int j = 0; j < fIndsQuadArray.get(i).size(); j++) { - fIndsQuad.add(fIndsQuadArray.get(i).get(j)); - } - for (int j = 0; j < fIndsTriArray.get(i).size(); j++) { - fIndsTri.add(fIndsTriArray.get(i).get(j)); - } + List fIndsQuad = fIndsQuadArrayFixed.get(index); + List fIndsTri = fIndsTriArrayFixed.get(index); + fIndsQuad.addAll(fIndsQuadArray.get(i)); + fIndsTri.addAll(fIndsTriArray.get(i)); } } textureIDs = textureIDsFixed; @@ -639,7 +619,7 @@ private void loadFromObj(String folderPath, String objName) throws IOException, private static int countNumberOfStarts(File file, String content) throws IOException { InputStream input = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(input)); - ArrayList matLines = new ArrayList<>(); + List matLines = new ArrayList<>(); //int count = 0; String line; while ((line = br.readLine()) != null) { @@ -655,18 +635,17 @@ private static int countNumberOfStarts(File file, String content) throws IOExcep } public void objDataToGlData() { - ArrayList vCoordsTri = new ArrayList<>(); - ArrayList tCoordsTri = new ArrayList<>(); - ArrayList nCoordsTri = new ArrayList<>(); - ArrayList colorsTri = new ArrayList<>(); - - ArrayList vCoordsQuad = new ArrayList<>(); - ArrayList tCoordsQuad = new ArrayList<>(); - ArrayList nCoordsQuad = new ArrayList<>(); - ArrayList colorsQuad = new ArrayList<>(); - - for (int i = 0; i < fIndsQuad.size(); i++) {//face - Face f = fIndsQuad.get(i); + List vCoordsTri = new ArrayList<>(); + List tCoordsTri = new ArrayList<>(); + List nCoordsTri = new ArrayList<>(); + List colorsTri = new ArrayList<>(); + + List vCoordsQuad = new ArrayList<>(); + List tCoordsQuad = new ArrayList<>(); + List nCoordsQuad = new ArrayList<>(); + List colorsQuad = new ArrayList<>(); + + for (Face f : fIndsQuad) {//face for (int j = 0; j < 4; j++) {//vertex for (int k = 0; k < 3; k++) {//coord vCoordsQuad.add(vCoordsObj.get((f.vInd[j] - 1) * 3 + k)); @@ -683,8 +662,7 @@ public void objDataToGlData() { } } - for (int i = 0; i < fIndsTri.size(); i++) {//face - Face f = fIndsTri.get(i); + for (Face f : fIndsTri) {//face for (int j = 0; j < 3; j++) {//vertex for (int k = 0; k < 3; k++) {//coord vCoordsTri.add(vCoordsObj.get((f.vInd[j] - 1) * 3 + k)); @@ -710,10 +688,9 @@ public void objDataToGlData() { this.tCoordsTri = floatListToArray(tCoordsTri); this.nCoordsTri = floatListToArray(nCoordsTri); this.colorsTri = floatListToArray(colorsTri); - } - public static BufferedImage loadTextureImgWithDefault(String path) throws IOException { + public static BufferedImage loadTextureImgWithDefault(String path) { BufferedImage img = null; try { img = ImageIO.read(new File(path)); @@ -753,15 +730,10 @@ public static Texture loadTextureResource(String textureFileName) { return tex; }*/ public boolean isTextureUsed(int index) { - for (int i = 0; i < textureIDs.size(); i++) { - if (textureIDs.get(i) == index) { - return true; - } - } - return false; + return textureIDs.stream().anyMatch(textureID -> textureID == index); } - public ArrayList getFaceIndQuadOfTex(int index) { + public List getFaceIndQuadOfTex(int index) { int start = texOffsetsQuad.get(index); int end; if (index < textureIDs.size() - 1) { @@ -770,10 +742,10 @@ public ArrayList getFaceIndQuadOfTex(int index) { end = fIndsQuad.size(); } - return new ArrayList(this.fIndsQuad.subList(start, end)); + return new ArrayList<>(this.fIndsQuad.subList(start, end)); } - public ArrayList getFaceIndTriOfTex(int index) { + public List getFaceIndTriOfTex(int index) { int start = texOffsetsTri.get(index); int end; if (index < textureIDs.size() - 1) { @@ -782,7 +754,7 @@ public ArrayList getFaceIndTriOfTex(int index) { end = fIndsTri.size(); } - return new ArrayList(fIndsTri.subList(start, end)); + return new ArrayList<>(fIndsTri.subList(start, end)); } public void swapMaterials(int indexMat1, int indexMat2) { @@ -821,7 +793,7 @@ private void scaleCoords(float[] array, float[] scale) { } } - private void scaleCoords(ArrayList array, float[] scale) { + private void scaleCoords(List array, float[] scale) { for (int i = 0; i < array.size(); i += 3) { for (int j = 0; j < 3; j++) { int index = i + j; @@ -862,7 +834,7 @@ private void flipCoordsYZ(float[] array) { } } - private void flipCoordsYZ(ArrayList array) { + private void flipCoordsYZ(List array) { for (int i = 0; i < array.size(); i += 3) { float temp = array.get(i + 1); array.set(i + 1, -array.get(i + 2)); @@ -870,7 +842,7 @@ private void flipCoordsYZ(ArrayList array) { } } - private void flipCoordsInvertedYZ(ArrayList array) { + private void flipCoordsInvertedYZ(List array) { for (int i = 0; i < array.size(); i += 3) { float temp = -array.get(i + 1); array.set(i + 1, array.get(i + 2)); @@ -919,7 +891,7 @@ public void flipCoordsX(float[] array) { } } - public void flipCoordsX(ArrayList array) { + public void flipCoordsX(List array) { for (int i = 0; i < array.size(); i += 3) { array.set(i, -array.get(i)); } @@ -952,7 +924,6 @@ public void rotateModelZ() { moveCoords(vCoordsObj, dpos); moveCoords(vCoordsQuad, dpos); moveCoords(vCoordsTri, dpos); - } private void applyTransform(ArrayList array, float[][] trMatrix) { @@ -989,7 +960,7 @@ private void moveCoords(float[] array, float[] dpos) { } } - private void moveCoords(ArrayList array, float[] dpos) { + private void moveCoords(List array, float[] dpos) { for (int i = 0; i < array.size(); i += 3) { for (int j = 0; j < 3; j++) { int index = i + j; @@ -1006,7 +977,7 @@ private void rotateCoordsZ(float[] array) { } } - private void rotateCoordsZ(ArrayList array) { + private void rotateCoordsZ(List array) { for (int i = 0; i < array.size(); i += 3) { float temp = array.get(i); array.set(i, -array.get(i + 1)); @@ -1015,11 +986,9 @@ private void rotateCoordsZ(ArrayList array) { } private void groupTrianglesIntoQuads() { - for (int i = 0; i < fIndsTri.size(); i++) { } - } private Point3D getNormal(Face f) { @@ -1070,7 +1039,7 @@ protected void calculateBounds(){ } public void updateObjData() { - TileGeometryCompresser.compressTile(this); + TileGeometryCompressor.compressTile(this); } public float[] getVCoordsQuad() { @@ -1141,15 +1110,15 @@ public String getFolderPath() { return folderPath; } - public ArrayList getTextureIDs() { + public List getTextureIDs() { return textureIDs; } - public ArrayList getTexOffsetsQuad() { + public List getTexOffsetsQuad() { return texOffsetsQuad; } - public ArrayList getTexOffsetsTri() { + public List getTexOffsetsTri() { return texOffsetsTri; } @@ -1201,43 +1170,43 @@ public void setGlobalTextureMapping(boolean useGlobalTexMapping) { this.globalTexMapping = useGlobalTexMapping; } - public ArrayList getVertexCoordsObj() { + public List getVertexCoordsObj() { return vCoordsObj; } - public ArrayList getTextureCoordsObj() { + public List getTextureCoordsObj() { return tCoordsObj; } - public ArrayList getNormalCoordsObj() { + public List getNormalCoordsObj() { return nCoordsObj; } - public ArrayList getColorsObj() { + public List getColorsObj() { return colorsObj; } - public ArrayList getFIndQuadObj() { + public List getFIndQuadObj() { return fIndsQuad; } - public ArrayList getFIndTriObj() { + public List getFIndTriObj() { return fIndsTri; } - public void setVertexCoordsObj(ArrayList vertexCoordsObj) { + public void setVertexCoordsObj(List vertexCoordsObj) { this.vCoordsObj = vertexCoordsObj; } - public void setTextureCoordsObj(ArrayList textureCoordsObj) { + public void setTextureCoordsObj(List textureCoordsObj) { this.tCoordsObj = textureCoordsObj; } - public void setNormalCoordsObj(ArrayList normalCoordsObj) { + public void setNormalCoordsObj(List normalCoordsObj) { this.nCoordsObj = normalCoordsObj; } - public void setColorsObj(ArrayList colorsObj) { + public void setColorsObj(List colorsObj) { this.colorsObj = colorsObj; } @@ -1253,15 +1222,15 @@ public void setObjFilename(String objFilename) { this.objFilename = objFilename; } - public void setTexOffsetsQuad(ArrayList textureOffsets) { + public void setTexOffsetsQuad(List textureOffsets) { this.texOffsetsQuad = textureOffsets; } - public void setTexOffsetsTri(ArrayList textureOffsets) { + public void setTexOffsetsTri(List textureOffsets) { this.texOffsetsTri = textureOffsets; } - public void setTextureIDs(ArrayList textureIDs) { + public void setTextureIDs(List textureIDs) { this.textureIDs = textureIDs; } @@ -1273,11 +1242,11 @@ public boolean isSizeOne() { return (width == 1) && (height == 1); } - public void setFaceIndsQuads(ArrayList fInds) { + public void setFaceIndsQuads(List fInds) { this.fIndsQuad = fInds; } - public void setFaceIndsTris(ArrayList fInds) { + public void setFaceIndsTris(List fInds) { this.fIndsTri = fInds; } @@ -1327,7 +1296,5 @@ public void printTileData(PrintWriter writer) { writer.println("nCoordsTri"); Utils.printArrayInFile(writer, nCoordsTri, 9); - } - } diff --git a/src/main/java/tileset/Tile2.java b/src/main/java/tileset/Tile2.java index 4ca432e..aa4474c 100644 --- a/src/main/java/tileset/Tile2.java +++ b/src/main/java/tileset/Tile2.java @@ -2,14 +2,7 @@ package tileset; import java.awt.image.BufferedImage; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo @@ -41,18 +34,12 @@ public class Tile2 { private BufferedImage smallThumbnail; //Geometry - private ArrayList tris; - private ArrayList quads; - + private List tris; + private List quads; public Tile2(Tileset tileset, String folderPath, String objFilename, - int width, int height, boolean xTileable, boolean yTileable, - boolean uTileable, boolean vTileable, - boolean globalTexMapping, float globalTexScale, - float xOffset, float yOffset) - throws IOException, TextureNotFoundException, - NormalsNotFoundException { - + int width, int height, boolean xTileable, boolean yTileable, boolean uTileable, boolean vTileable, + boolean globalTexMapping, float globalTexScale, float xOffset, float yOffset) { this.tileset = tileset; this.folderPath = folderPath; @@ -73,6 +60,4 @@ public Tile2(Tileset tileset, String folderPath, String objFilename, //loadFromObj(folderPath, objFilename); } - - } diff --git a/src/main/java/tileset/TileGeometry.java b/src/main/java/tileset/TileGeometry.java index 447b58a..d18e35c 100644 --- a/src/main/java/tileset/TileGeometry.java +++ b/src/main/java/tileset/TileGeometry.java @@ -11,6 +11,4 @@ public class TileGeometry { public float[] tCoords; public float[] nCoords; public float[] colors; - - } diff --git a/src/main/java/tileset/TileGeometryCompresser.java b/src/main/java/tileset/TileGeometryCompressor.java similarity index 69% rename from src/main/java/tileset/TileGeometryCompresser.java rename to src/main/java/tileset/TileGeometryCompressor.java index a234e3d..d12030e 100644 --- a/src/main/java/tileset/TileGeometryCompresser.java +++ b/src/main/java/tileset/TileGeometryCompressor.java @@ -5,22 +5,20 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; -import java.util.TreeSet; +import java.util.Set; +import java.util.stream.Collectors; /** * @author Trifindo */ -public class TileGeometryCompresser { +public class TileGeometryCompressor { private static class VertexData { - float[] data; public VertexData(float[] array, int offset, int dataSize) { data = new float[dataSize]; - for (int i = 0; i < dataSize; i++) { - data[i] = array[offset + i]; - } + System.arraycopy(array, offset, data, 0, dataSize); } @Override @@ -42,24 +40,21 @@ public boolean equals(Object obj) { return false; } final VertexData other = (VertexData) obj; - if (!Arrays.equals(this.data, other.data)) { - return false; - } - return true; + return Arrays.equals(this.data, other.data); } } public static class CompressedObjData { - public ArrayList data; + public List data; public int[][] triIndices; public int[][] quadIndices; - public CompressedObjData(ArrayList dataArray, int[][] triIndices, int[][] quadIndices, int coordsPerVertex) { + public CompressedObjData(List dataArray, int[][] triIndices, int[][] quadIndices, int coordsPerVertex) { data = new ArrayList<>(dataArray.size() * coordsPerVertex); - for (int i = 0; i < dataArray.size(); i++) { - float[] dataPatch = dataArray.get(i).data; - for (int j = 0; j < dataPatch.length; j++) { - data.add(dataPatch[j]); + for (VertexData vertexData : dataArray) { + float[] dataPatch = vertexData.data; + for (float patch : dataPatch) { + data.add(patch); } } this.triIndices = triIndices; @@ -67,7 +62,6 @@ public CompressedObjData(ArrayList dataArray, int[][] triIndices, in } } - public static void compressTile(Tile tile) { System.out.println("Starting compression..."); CompressedObjData vData = compressObjData(tile.getVCoordsTri(), tile.getVCoordsQuad(), 3); @@ -76,7 +70,7 @@ public static void compressTile(Tile tile) { CompressedObjData cData = compressObjData(tile.getColorsTri(), tile.getColorsQuad(), 3); final int numTris = tile.getVCoordsTri().length / (3 * 3); - ArrayList faceIndsTri = new ArrayList<>(numTris); + List faceIndsTri = new ArrayList<>(numTris); for (int i = 0; i < numTris; i++) { Face face = new Face(false); face.vInd = vData.triIndices[i]; @@ -87,7 +81,7 @@ public static void compressTile(Tile tile) { } final int numQuads = tile.getVCoordsQuad().length / (3 * 4); - ArrayList faceIndsQuad = new ArrayList<>(numQuads); + List faceIndsQuad = new ArrayList<>(numQuads); for (int i = 0; i < numQuads; i++) { Face face = new Face(true); face.vInd = vData.quadIndices[i]; @@ -107,7 +101,7 @@ public static void compressTile(Tile tile) { System.out.println("Tile compressing finished!"); } - private static void addElementsToDataSet(HashSet dataSet, float[] data, int coordsPerVertex) { + private static void addElementsToDataSet(Set dataSet, float[] data, int coordsPerVertex) { final int numVertices = data.length / coordsPerVertex; for (int i = 0; i < numVertices; i++) { VertexData vData = new VertexData(data, i * coordsPerVertex, coordsPerVertex); @@ -115,8 +109,7 @@ private static void addElementsToDataSet(HashSet dataSet, float[] da } } - private static int[][] generateIndices(ArrayList dataArray, - float[] data, int numFaces, int vertexPerFace, int coordsPerVertex) { + private static int[][] generateIndices(List dataArray, float[] data, int numFaces, int vertexPerFace, int coordsPerVertex) { int[][] faceIndices = new int[numFaces][vertexPerFace]; for (int i = 0; i < numFaces; i++) { for (int j = 0; j < vertexPerFace; j++) { @@ -128,10 +121,10 @@ private static int[][] generateIndices(ArrayList dataArray, } public static CompressedObjData compressObjData(float[] triData, float[] quadData, int coordsPerVertex) { - HashSet dataSet = new HashSet(); + Set dataSet = new HashSet<>(); addElementsToDataSet(dataSet, triData, coordsPerVertex); addElementsToDataSet(dataSet, quadData, coordsPerVertex); - ArrayList dataArray = new ArrayList<>(dataSet); + List dataArray = new ArrayList<>(dataSet); final int numTris = triData.length / (coordsPerVertex * 3); final int numQuads = quadData.length / (coordsPerVertex * 4); @@ -141,20 +134,17 @@ public static CompressedObjData compressObjData(float[] triData, float[] quadDat return new CompressedObjData(dataArray, triIndices, quadIndices, coordsPerVertex); } - private static ArrayList arrayToArrayList(float[] array) { - ArrayList arrayList = new ArrayList<>(array.length); - for (int i = 0; i < array.length; i++) { - arrayList.add(array[i]); + private static List arrayToArrayList(float[] array) { + List arrayList = new ArrayList<>(array.length); + for (float v : array) { + arrayList.add(v); } return arrayList; } - private static ArrayList arrayToArrayList(int[] array) { - ArrayList arrayList = new ArrayList<>(array.length); - for (int i = 0; i < array.length; i++) { - arrayList.add(array[i]); - } - return arrayList; + private static List arrayToArrayList(int[] array) { + return Arrays.stream(array) + .boxed() + .collect(Collectors.toList()); } - } diff --git a/src/main/java/tileset/TileGeometryDecompresser.java b/src/main/java/tileset/TileGeometryDecompressor.java similarity index 66% rename from src/main/java/tileset/TileGeometryDecompresser.java rename to src/main/java/tileset/TileGeometryDecompressor.java index 57aade3..a5ba712 100644 --- a/src/main/java/tileset/TileGeometryDecompresser.java +++ b/src/main/java/tileset/TileGeometryDecompressor.java @@ -1,15 +1,14 @@ package tileset; -import java.util.ArrayList; +import java.util.List; /** * @author Trifindo */ -public class TileGeometryDecompresser { +public class TileGeometryDecompressor { - public static float[] decompressObjData(ArrayList fInds, - ArrayList coords, int coordsPerVertex, int vertexPerFace) { + public static float[] decompressObjData(List fInds, List coords, int coordsPerVertex, int vertexPerFace) { float[] decompressedData = new float[fInds.size() * vertexPerFace * coordsPerVertex]; for (int i = 0, c = 0; i < fInds.size(); i++) {//face Face f = fInds.get(i); diff --git a/src/main/java/tileset/TileReaderObj.java b/src/main/java/tileset/TileReaderObj.java index 8c9ecdd..81b34ae 100644 --- a/src/main/java/tileset/TileReaderObj.java +++ b/src/main/java/tileset/TileReaderObj.java @@ -4,11 +4,11 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; +import java.util.List; import utils.Utils; @@ -18,27 +18,27 @@ public class TileReaderObj { public static Tile2 loadTileObj(String folderPath, String objName, Tileset tileset) - throws FileNotFoundException, IOException, IndexOutOfBoundsException, TextureNotFoundException { + throws IOException, IndexOutOfBoundsException, TextureNotFoundException { //Load OBJ file data InputStream inputObj = new FileInputStream(new File(folderPath + "/" + objName)); BufferedReader brObj = new BufferedReader(new InputStreamReader(inputObj)); - ArrayList> vCoordsObj = new ArrayList<>(); - ArrayList> tCoordsObj = new ArrayList<>(); - ArrayList> nCoordsObj = new ArrayList<>(); + List> vCoordsObj = new ArrayList<>(); + List> tCoordsObj = new ArrayList<>(); + List> nCoordsObj = new ArrayList<>(); - ArrayList materialNames = new ArrayList(); + List materialNames = new ArrayList<>(); - ArrayList> fIndsQuadArray = new ArrayList<>(); - ArrayList> fIndsTriArray = new ArrayList<>(); + List> fIndsQuadArray = new ArrayList<>(); + List> fIndsTriArray = new ArrayList<>(); String mtlName = ""; int materialIndex = 0; String lineObj; while ((lineObj = brObj.readLine()) != null) { if (lineObj.startsWith("mtllib")) { - mtlName = lineObj.substring(lineObj.indexOf(" ") + 1, lineObj.length()); + mtlName = lineObj.substring(lineObj.indexOf(" ") + 1); } else if (lineObj.startsWith("o")) { } else if (lineObj.startsWith("v ")) { @@ -57,24 +57,24 @@ public static Tile2 loadTileObj(String folderPath, String objName, Tileset tiles materialNames.add(name); } } else if (lineObj.startsWith("f")) { - String[] splittedLine = (lineObj.substring(2)).split(" "); + String[] splitLine = (lineObj.substring(2)).split(" "); int numVertex = 0; - for (int i = 0; i < splittedLine.length; i++) { - if (splittedLine[i].contains("/")) { + for (String s : splitLine) { + if (s.contains("/")) { numVertex++; } } if (numVertex > 3) { - fIndsQuadArray.get(materialIndex).add(loadFaceIndicesObj(splittedLine, 4)); + fIndsQuadArray.get(materialIndex).add(loadFaceIndicesObj(splitLine, 4)); } else { - fIndsTriArray.get(materialIndex).add(loadFaceIndicesObj(splittedLine, 3)); + fIndsTriArray.get(materialIndex).add(loadFaceIndicesObj(splitLine, 3)); } } } inputObj.close(); //Load Mtl file - ArrayList textureIDs = new ArrayList<>(); + List textureIDs = new ArrayList<>(); int numMaterials = countNumberOfStarts(new File(folderPath + "/" + mtlName), "newmtl"); for (int i = 0; i < numMaterials; i++) { textureIDs.add(0); @@ -119,7 +119,6 @@ public static Tile2 loadTileObj(String folderPath, String objName, Tileset tiles } inputMtl.close(); - //Fix material names for avoiding sub folder issues for (int i = 0; i < textureIDs.size(); i++) { TilesetMaterial material = tileset.getMaterial(textureIDs.get(i)); @@ -140,40 +139,29 @@ public static Tile2 loadTileObj(String folderPath, String objName, Tileset tiles } //Fix duplicated Texture IDs - ArrayList> fIndsQuadArrayFixed = new ArrayList<>(); - ArrayList> fIndsTriArrayFixed = new ArrayList<>(); - ArrayList textureIDsFixed = new ArrayList<>(); + List> fIndsQuadArrayFixed = new ArrayList<>(); + List> fIndsTriArrayFixed = new ArrayList<>(); + List textureIDsFixed = new ArrayList<>(); for (int i = 0; i < textureIDs.size(); i++) { int id = textureIDs.get(i); int index = textureIDsFixed.indexOf(id); if (index == -1) { - ArrayList fIndsQuad = new ArrayList<>(); - ArrayList fIndsTri = new ArrayList<>(); - for (int j = 0; j < fIndsQuadArray.get(i).size(); j++) { - fIndsQuad.add(fIndsQuadArray.get(i).get(j)); - } - for (int j = 0; j < fIndsTriArray.get(i).size(); j++) { - fIndsTri.add(fIndsTriArray.get(i).get(j)); - } + List fIndsQuad = new ArrayList<>(fIndsQuadArray.get(i)); + List fIndsTri = new ArrayList<>(fIndsTriArray.get(i)); fIndsQuadArrayFixed.add(fIndsQuad); fIndsTriArrayFixed.add(fIndsTri); textureIDsFixed.add(id); } else { - ArrayList fIndsQuad = fIndsQuadArrayFixed.get(index); - ArrayList fIndsTri = fIndsTriArrayFixed.get(index); - for (int j = 0; j < fIndsQuadArray.get(i).size(); j++) { - fIndsQuad.add(fIndsQuadArray.get(i).get(j)); - } - for (int j = 0; j < fIndsTriArray.get(i).size(); j++) { - fIndsTri.add(fIndsTriArray.get(i).get(j)); - } + List fIndsQuad = fIndsQuadArrayFixed.get(index); + List fIndsTri = fIndsTriArrayFixed.get(index); + fIndsQuad.addAll(fIndsQuadArray.get(i)); + fIndsTri.addAll(fIndsTriArray.get(i)); } } textureIDs = textureIDsFixed; fIndsQuadArray = fIndsQuadArrayFixed; fIndsTriArray = fIndsTriArrayFixed; - - + /* //Group all indices by material into a single array ArrayList fIndsQuad = new ArrayList<>(); @@ -194,15 +182,14 @@ public static Tile2 loadTileObj(String folderPath, String objName, Tileset tiles return null;//Change this } - private static ArrayList loadFloatLineObj(String line, int minNumElemn, - int maxNumElem, float defaultValue) { - String[] splittedLine = line.split(" "); - int numElements = Math.max(Math.min(maxNumElem, splittedLine.length - 1), minNumElemn); - ArrayList floats = new ArrayList<>(numElements); + private static List loadFloatLineObj(String line, int minNumElemn, int maxNumElem, float defaultValue) { + String[] splitLine = line.split(" "); + int numElements = Math.max(Math.min(maxNumElem, splitLine.length - 1), minNumElemn); + List floats = new ArrayList<>(numElements); for (int i = 0; i < numElements; i++) { float value; try { - value = Float.valueOf(splittedLine[i + 1]); + value = Float.parseFloat(splitLine[i + 1]); } catch (NumberFormatException | IndexOutOfBoundsException ex) { value = defaultValue; } @@ -211,14 +198,14 @@ private static ArrayList loadFloatLineObj(String line, int minNumElemn, return floats; } - private static Face loadFaceIndicesObj(String[] splittedLine, int numVertex) { + private static Face loadFaceIndicesObj(String[] splitLine, int numVertex) { Face f = new Face(numVertex); for (int i = 0; i < numVertex; i++) { - String[] sArray = splittedLine[i].split("/"); - f.vInd[i] = Integer.valueOf(sArray[0]); - f.tInd[i] = Integer.valueOf(sArray[1]); + String[] sArray = splitLine[i].split("/"); + f.vInd[i] = Integer.parseInt(sArray[0]); + f.tInd[i] = Integer.parseInt(sArray[1]); if (sArray.length > 2) { - f.nInd[i] = Integer.valueOf(sArray[2]); + f.nInd[i] = Integer.parseInt(sArray[2]); } else { f.nInd[i] = -1; } @@ -229,18 +216,12 @@ private static Face loadFaceIndicesObj(String[] splittedLine, int numVertex) { private static int countNumberOfStarts(File file, String content) throws IOException { InputStream input = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(input)); - int count = 0; - String line; - while ((line = br.readLine()) != null) { - if (line.startsWith(content)) { - count++; - } - } - return count; + return (int) br.lines() + .filter(line -> line.startsWith(content)) + .count(); } private static class Face { - public int[] vInd; public int[] tInd; public int[] nInd; @@ -251,5 +232,4 @@ public Face(int nVertex) { nInd = new int[nVertex]; } } - } diff --git a/src/main/java/tileset/Tileset.java b/src/main/java/tileset/Tileset.java index 21a6103..a8c2405 100644 --- a/src/main/java/tileset/Tileset.java +++ b/src/main/java/tileset/Tileset.java @@ -6,17 +6,17 @@ import com.jogamp.opengl.util.awt.ImageUtil; import com.jogamp.opengl.util.texture.Texture; import com.jogamp.opengl.util.texture.awt.AWTTextureIO; -import editor.MainFrame; import editor.smartdrawing.SmartGrid; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import javax.imageio.ImageIO; -import javax.swing.*; import utils.Utils; @@ -32,19 +32,19 @@ public class Tileset { public String tilesetFolderPath = ""; //Tiles - private ArrayList tiles = new ArrayList(); + private List tiles; //Textures - private ArrayList textures = new ArrayList<>(); - private ArrayList materials = new ArrayList(); + private List textures; + private List materials; public static final BufferedImage defaultTexture = Utils.loadTexImageAsResource("/imgs/defaultTexture.png"); //Smart grid - private ArrayList sgridArray = new ArrayList<>(); + private List sgridArray; public Tileset() { - tiles = new ArrayList(); + tiles = new ArrayList<>(); textures = new ArrayList<>(); materials = new ArrayList<>(); @@ -57,14 +57,10 @@ public Tileset clone() { Tileset tileset = new Tileset(); tileset.tiles = new ArrayList<>(); - for (int i = 0; i < tiles.size(); i++) { - tileset.tiles.add(tiles.get(i)); - } + tileset.tiles.addAll(tiles); tileset.textures = new ArrayList<>(); - for (int i = 0; i < textures.size(); i++) { - tileset.textures.add(textures.get(i)); - } + tileset.textures.addAll(textures); tileset.materials = new ArrayList<>(); for (TilesetMaterial material : materials) { @@ -72,45 +68,38 @@ public Tileset clone() { } tileset.sgridArray = new ArrayList<>(); - for (int i = 0; i < sgridArray.size(); i++) { - tileset.sgridArray.add(sgridArray.get(i)); - } + tileset.sgridArray.addAll(sgridArray); return tileset; } public void saveImagesToFile(String path) { - for (int i = 0; i < materials.size(); i++) { - TilesetMaterial material = materials.get(i); + for (TilesetMaterial material : materials) { String outPath = path + File.separator + material.getImageName(); try { - File outputfile = new File(outPath); - ImageIO.write(material.getTextureImg(), "png", outputfile); + ImageIO.write(material.getTextureImg(), "png", new File(outPath)); } catch (Exception ex) { ex.printStackTrace(); } } } - public ArrayList replaceMaterial(int oldIndex, int newIndex) { - ArrayList indicesTilesReplaced; + public List replaceMaterial(int oldIndex, int newIndex) { + List indicesTilesReplaced; indicesTilesReplaced = replaceTextureIDs(oldIndex, newIndex); removeUnusedTextures(); return indicesTilesReplaced; } - public ArrayList replaceTextureIDs(int oldIndex, int newIndex) { - ArrayList indicesTilesReplaced = new ArrayList<>(); - for (int i = 0; i < tiles.size(); i++) { - if (Collections.replaceAll(tiles.get(i).getTextureIDs(), oldIndex, newIndex)) { - indicesTilesReplaced.add(i); - } - } - return indicesTilesReplaced; + public List replaceTextureIDs(int oldIndex, int newIndex) { + return IntStream.range(0, tiles.size()) + .filter(i -> Collections.replaceAll(tiles.get(i).getTextureIDs(), oldIndex, newIndex)) + .boxed() + .collect(Collectors.toList()); } public void removeUnusedTextures() { - ArrayList textureUsage = countTextureUsage(); + List textureUsage = countTextureUsage(); // TODO: could this be improved by using pointers instead of IDs? for (int i = 0; i < textureUsage.size(); i++) { @@ -129,7 +118,6 @@ public void swapMaterials(int indexMat1, int indexMat2) { for (Tile tile : tiles) { tile.swapMaterials(indexMat1, indexMat2); } - } public void removeTile(int index) { @@ -138,14 +126,14 @@ public void removeTile(int index) { removeUnusedTextures(); } - public void removeTiles(ArrayList indices) { + public void removeTiles(List indices) { for (int i = 0; i < indices.size(); i++) { } } - private ArrayList countTextureUsage() { - ArrayList count = new ArrayList<>(); + private List countTextureUsage() { + List count = new ArrayList<>(); /* for (Texture texture : textures) { count.add(0); @@ -162,7 +150,7 @@ private ArrayList countTextureUsage() { return count; } - public boolean addTexture(String path) throws IOException { + public boolean addTexture(String path) { String filename = new File(path).getName(); int textIndex = getIndexOfMaterialByImgName(filename); @@ -213,8 +201,8 @@ private void shiftTextureIDsFrom(int index) { } public void updateTextures(GL2 gl) { - for (int i = 0; i < textures.size(); i++) { - textures.get(i).destroy(gl); + for (Texture texture : textures) { + texture.destroy(gl); } loadTexturesGL(); } @@ -223,12 +211,10 @@ public void swapTiles(int e1, int e2) { Collections.swap(tiles, e1, e2); } - public void moveTiles(ArrayList indices) { - ArrayList newTiles = new ArrayList<>(); - for (int i = 0; i < indices.size(); i++) { - newTiles.add(tiles.get(indices.get(i))); - } - tiles = newTiles; + public void moveTiles(List indices) { + tiles = indices.stream() + .map(index -> tiles.get(index)) + .collect(Collectors.toList()); } public void loadTexturesGL() { @@ -251,8 +237,8 @@ private Texture loadTextureGL(int index) { return tex; } - public void loadTextureImgs() throws IOException { - ArrayList textureUsage = countTextureUsage(); + public void loadTextureImgs() { + List textureUsage = countTextureUsage(); for (int i = 0; i < textureUsage.size(); i++) { if (textureUsage.get(i) == 0) { materials.remove(i); @@ -261,14 +247,14 @@ public void loadTextureImgs() throws IOException { i--; } } - for (int i = 0; i < materials.size(); i++) { - String textureName = materials.get(i).getImageName(); - materials.get(i).setTextureImg(Tile.loadTextureImgWithDefault(tilesetFolderPath + "/" + textureName)); + for (TilesetMaterial material : materials) { + String textureName = material.getImageName(); + material.setTextureImg(Tile.loadTextureImgWithDefault(tilesetFolderPath + "/" + textureName)); } } - public void loadTextureImgsAsResource() throws IOException { - ArrayList textureUsage = countTextureUsage(); + public void loadTextureImgsAsResource() { + List textureUsage = countTextureUsage(); for (int i = 0; i < textureUsage.size(); i++) { if (textureUsage.get(i) == 0) { materials.remove(i); @@ -277,11 +263,11 @@ public void loadTextureImgsAsResource() throws IOException { i--; } } - for (int i = 0; i < materials.size(); i++) { - String textureName = materials.get(i).getImageName(); + for (TilesetMaterial material : materials) { + String textureName = material.getImageName(); //System.out.println(tilesetFolderPath); BufferedImage img = Utils.loadTexImageAsResource(tilesetFolderPath + "/" + textureName); - materials.get(i).setTextureImg(img); + material.setTextureImg(img); } } @@ -290,11 +276,11 @@ public void loadTextureImgFromPath(int index, String path) throws IOException { materials.get(index).setTextureImg(img); } - public ArrayList getTextures() { + public List getTextures() { return textures; } - public void setTiles(ArrayList tiles) { + public void setTiles(List tiles) { this.tiles = tiles; } @@ -304,7 +290,7 @@ public void addTile(Tile tile) { } public void importTile(Tile tile) { - ArrayList texIDs = tile.getTextureIDs(); + List texIDs = tile.getTextureIDs(); for (int i = 0; i < texIDs.size(); i++) { TilesetMaterial material = tile.getTileset().getMaterial(texIDs.get(i)); int index = materials.indexOf(material); @@ -319,7 +305,7 @@ public void importTile(Tile tile) { tiles.add(tile); } - public void importTiles(ArrayList tiles) { + public void importTiles(List tiles) { for (Tile tile : tiles) { importTile(tile); } @@ -327,7 +313,6 @@ public void importTiles(ArrayList tiles) { System.out.println("Tiles imported"); } - public Tile get(int index) { return tiles.get(index); } @@ -336,7 +321,7 @@ public int size() { return tiles.size(); } - public ArrayList getTiles() { + public List getTiles() { return tiles; } @@ -356,7 +341,7 @@ public void duplicateTile(int index) { tiles.add(index, tiles.get(index).clone()); } - public void duplicateTiles(ArrayList indices) { + public void duplicateTiles(List indices) { int startIndex = indices.get(indices.size() - 1) + 1; for (int i = 0; i < indices.size(); i++) { tiles.add(startIndex + i, tiles.get(indices.get(i)).clone()); @@ -364,21 +349,17 @@ public void duplicateTiles(ArrayList indices) { } public int getIndexOfTileByObjFilename(String filename) { - for (int i = 0; i < tiles.size(); i++) { - if (tiles.get(i).getObjFilename().equals(filename)) { - return i; - } - } - return -1; + return IntStream.range(0, tiles.size()) + .filter(i -> tiles.get(i).getObjFilename().equals(filename)) + .findFirst() + .orElse(-1); } public int getIndexOfMaterialByImgName(String textureName) { - for (int i = 0; i < materials.size(); i++) { - if (materials.get(i).getImageName().equals(textureName)) { - return i; - } - } - return -1; + return IntStream.range(0, materials.size()) + .filter(i -> materials.get(i).getImageName().equals(textureName)) + .findFirst() + .orElse(-1); } public String getMaterialName(int index) { @@ -409,16 +390,15 @@ public void setTextureNameImd(int index, String name) { materials.get(index).setTextureNameImd(name); } - public ArrayList getSmartGridArray() { + public List getSmartGridArray() { return sgridArray; } - public void setSgridArray(ArrayList sgridArray) { + public void setSgridArray(List sgridArray) { this.sgridArray = sgridArray; } - - public ArrayList getMaterials() { + public List getMaterials() { return materials; } @@ -428,15 +408,13 @@ public TilesetMaterial getMaterial(int index) { public int indexOfTileVisualData(Tile tile) { if (tile == null) { - for (int i = 0; i < tiles.size(); i++) - if (tiles.get(i) == null) - return i; + return IntStream.range(0, tiles.size()) + .filter(i -> tiles.get(i) == null) + .findFirst().orElse(-1); } else { - for (int i = 0; i < tiles.size(); i++) - if (tile.equalsVisualData(tiles.get(i))) - return i; + return IntStream.range(0, tiles.size()) + .filter(i -> tile.equalsVisualData(tiles.get(i))) + .findFirst().orElse(-1); } - return -1; } - } diff --git a/src/main/java/tileset/TilesetIO.java b/src/main/java/tileset/TilesetIO.java index c740a0d..84a5db8 100644 --- a/src/main/java/tileset/TilesetIO.java +++ b/src/main/java/tileset/TilesetIO.java @@ -13,10 +13,10 @@ import java.net.URISyntaxException; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; import javax.imageio.ImageIO; -import javax.swing.*; import utils.Utils; @@ -75,9 +75,7 @@ public class TilesetIO { private static final byte TAG_SMARTGRID = 26; - public static void saveTilesetToFile(String path, Tileset tset) - throws FileNotFoundException, IOException { - + public static void saveTilesetToFile(String path, Tileset tset) throws IOException { FileOutputStream out = new FileOutputStream(path); for (int i = 0; i < tset.getMaterials().size(); i++) { @@ -137,31 +135,20 @@ public static void saveTilesetToFile(String path, Tileset tset) out.close(); } - public static Tileset readTilesetFromFileAsResourceURI(String path) - throws FileNotFoundException, IOException, NullPointerException, - TextureNotFoundException { - try { - File file = new File(MainFrame.class.getResource(path).toURI()); - return readTilesetFromFile(MainFrame.class.getResourceAsStream(file.getPath()), path, true); - } catch (URISyntaxException ex) { - throw new FileNotFoundException(); - } + public static Tileset readTilesetFromFileAsResourceURI(String path) throws IOException, NullPointerException, URISyntaxException { + File file = new File(MainFrame.class.getResource(path).toURI()); + return readTilesetFromFile(Objects.requireNonNull(MainFrame.class.getResourceAsStream(file.getPath())), path, true); } - public static Tileset readTilesetFromFileAsResource(String path) - throws FileNotFoundException, IOException, NullPointerException, - TextureNotFoundException { - return readTilesetFromFile(TilesetIO.class.getResourceAsStream(path), path, true); + public static Tileset readTilesetFromFileAsResource(String path) throws IOException, NullPointerException { + return readTilesetFromFile(Objects.requireNonNull(TilesetIO.class.getResourceAsStream(path)), path, true); } - public static Tileset readTilesetFromFile(String path) - throws FileNotFoundException, IOException, NullPointerException, - TextureNotFoundException { + public static Tileset readTilesetFromFile(String path) throws IOException, NullPointerException { return readTilesetFromFile(new FileInputStream(path), path, false); } - private static Tileset readTilesetFromFile(InputStream in, String path, boolean asResource) - throws FileNotFoundException, IOException, NullPointerException, TextureNotFoundException { + private static Tileset readTilesetFromFile(InputStream in, String path, boolean asResource) throws IOException, NullPointerException { Tileset tset = new Tileset(); tset.tilesetFolderPath = new File(path).getParent(); tset.tilesetFolderPath = tset.tilesetFolderPath.replace('\\', '/'); @@ -344,7 +331,7 @@ private static Tileset readTilesetFromFile(InputStream in, String path, boolean if (tile != null) { if (tile.getColorsObj().size() == 0) { - ArrayList colors = new ArrayList<>(); + List colors = new ArrayList<>(); colors.add(1.0f); colors.add(1.0f); colors.add(1.0f); @@ -378,8 +365,7 @@ private static Tileset readTilesetFromFile(InputStream in, String path, boolean return tset; } - private static void findAndFixMissedTextures(Tileset tset, Tile tile, boolean asResource) - throws IOException { + private static void findAndFixMissedTextures(Tileset tset, Tile tile, boolean asResource) throws IOException { if (!asResource) { if (tile != null) { for (int i = 0; i < tile.getTextureIDs().size(); i++) { @@ -412,51 +398,44 @@ private static int idOfMissedTexture(Tileset tset, Tile tile) { return -1; } - private static ArrayList readFaceArray(InputStream in, boolean isQuadFace) - throws IOException { + private static List readFaceArray(InputStream in, boolean isQuadFace) throws IOException { int size = readInt(in); - ArrayList array = new ArrayList<>(); + List array = new ArrayList<>(); for (int i = 0; i < size; i++) { array.add(readFace(in, isQuadFace)); } return array; } - private static ArrayList readFaceExtendedArray(InputStream in, boolean isQuadFace) - throws IOException { + private static List readFaceExtendedArray(InputStream in, boolean isQuadFace) throws IOException { int size = readInt(in); - ArrayList array = new ArrayList<>(); + List array = new ArrayList<>(); for (int i = 0; i < size; i++) { array.add(readFaceExtended(in, isQuadFace)); } return array; } - private static ArrayList readFloatArray(InputStream in) - throws IOException { + private static List readFloatArray(InputStream in) throws IOException { int size = readInt(in); - ArrayList array = new ArrayList<>(); + List array = new ArrayList<>(); for (int i = 0; i < size; i++) { array.add(readFloat(in)); } return array; - } - private static float readFloatElement(InputStream in) - throws IOException { + private static float readFloatElement(InputStream in) throws IOException { int size = readInt(in); //Discard Size 1 return readFloat(in); } - private static Boolean readBoolElement(InputStream in) - throws IOException { + private static Boolean readBoolElement(InputStream in) throws IOException { int size = readInt(in); //Discard size 1 return readInt(in) == 1; } - private static String readStringElement(InputStream in) - throws IOException { + private static String readStringElement(InputStream in) throws IOException { int size = readInt(in); byte[] data = new byte[size]; in.read(data); @@ -476,9 +455,9 @@ private static int[][] readIntMatrixElement(InputStream in) throws IOException { return matrix; } - private static ArrayList readIntArrayElement(InputStream in) throws IOException { + private static List readIntArrayElement(InputStream in) throws IOException { int size = readInt(in); - ArrayList array = new ArrayList<>(); + List array = new ArrayList<>(); for (int i = 0; i < size; i++) { array.add(readInt(in)); } @@ -513,9 +492,7 @@ private static Face readFace(InputStream in, boolean isQuadFace) throws IOExcept for (int i = 0; i < f.nInd.length; i++) { f.nInd[i] = readInt(in); } - for (int i = 0; i < f.cInd.length; i++) { - f.cInd[i] = 1; - } + Arrays.fill(f.cInd, 1); return f; } @@ -536,93 +513,80 @@ private static Face readFaceExtended(InputStream in, boolean isQuadFace) throws return f; } - private static void writeStringElement(FileOutputStream out, byte tag, String data) - throws IOException { + private static void writeStringElement(FileOutputStream out, byte tag, String data) throws IOException { writeTag(out, tag); writeIntValue(out, data.length()); writeString(out, data); } - private static void writeIntElement(FileOutputStream out, byte tag, ArrayList data) - throws IOException { + private static void writeIntElement(FileOutputStream out, byte tag, List data) throws IOException { writeTag(out, tag); writeIntValue(out, data.size()); writeIntArray(out, Utils.intListToArray(data)); } - private static void writeIntElement(FileOutputStream out, byte tag, int[][] data) - throws IOException { + private static void writeIntElement(FileOutputStream out, byte tag, int[][] data) throws IOException { writeTag(out, tag); writeIntValue(out, data.length); - for (int i = 0; i < data.length; i++) { - writeIntValue(out, data[i].length); - writeIntArray(out, data[i]); + for (int[] datum : data) { + writeIntValue(out, datum.length); + writeIntArray(out, datum); } } - private static void writeFaceElement(FileOutputStream out, byte tag, ArrayList data) - throws IOException { + private static void writeFaceElement(FileOutputStream out, byte tag, List data) throws IOException { writeTag(out, tag); writeIntValue(out, data.size()); writeFaceArray(out, data); } - private static void writeFaceExtendedElement(FileOutputStream out, byte tag, ArrayList data) - throws IOException { + private static void writeFaceExtendedElement(FileOutputStream out, byte tag, List data) throws IOException { writeTag(out, tag); writeIntValue(out, data.size()); writeFaceExtendedArray(out, data); } - private static void writeFloatElement(FileOutputStream out, byte tag, ArrayList data) - throws IOException { + private static void writeFloatElement(FileOutputStream out, byte tag, List data) throws IOException { writeTag(out, tag); writeIntValue(out, data.size()); writeFloatArray(out, Utils.floatListToArray(data)); } - private static void writeIntElement(FileOutputStream out, byte tag, int data) - throws IOException { + private static void writeIntElement(FileOutputStream out, byte tag, int data) throws IOException { writeTag(out, tag); writeIntValue(out, 1); writeIntValue(out, data); } - private static void writeFloatElement(FileOutputStream out, byte tag, float data) - throws IOException { + private static void writeFloatElement(FileOutputStream out, byte tag, float data) throws IOException { writeTag(out, tag); writeIntValue(out, 1); writeFloatValue(out, data); } - private static void writeBoolElement(FileOutputStream out, byte tag, boolean data) - throws IOException { + private static void writeBoolElement(FileOutputStream out, byte tag, boolean data) throws IOException { writeTag(out, tag); writeIntValue(out, 1); writeIntValue(out, data ? 1 : 0); } - private static void writeString(FileOutputStream out, String s) - throws IOException { + private static void writeString(FileOutputStream out, String s) throws IOException { out.write(s.getBytes()); } - private static void writeIntArray(FileOutputStream out, int[] data) - throws IOException { + private static void writeIntArray(FileOutputStream out, int[] data) throws IOException { for (int i : data) { writeIntValue(out, i); } } - private static void writeFloatArray(FileOutputStream out, float[] data) - throws IOException { + private static void writeFloatArray(FileOutputStream out, float[] data) throws IOException { for (float f : data) { writeFloatValue(out, f); } } - private static void writeFaceArray(FileOutputStream out, ArrayList data) - throws IOException { + private static void writeFaceArray(FileOutputStream out, List data) throws IOException { for (Face f : data) { writeIntArray(out, f.vInd); writeIntArray(out, f.tInd); @@ -630,8 +594,7 @@ private static void writeFaceArray(FileOutputStream out, ArrayList data) } } - private static void writeFaceExtendedArray(FileOutputStream out, ArrayList data) - throws IOException { + private static void writeFaceExtendedArray(FileOutputStream out, List data) throws IOException { for (Face f : data) { writeIntArray(out, f.vInd); writeIntArray(out, f.tInd); @@ -640,19 +603,15 @@ private static void writeFaceExtendedArray(FileOutputStream out, ArrayList } } - private static void writeIntValue(FileOutputStream out, int value) - throws IOException { + private static void writeIntValue(FileOutputStream out, int value) throws IOException { out.write(ByteBuffer.allocate(Integer.BYTES).putInt(value).array()); } - private static void writeFloatValue(FileOutputStream out, float value) - throws IOException { + private static void writeFloatValue(FileOutputStream out, float value) throws IOException { out.write(ByteBuffer.allocate(Float.BYTES).putFloat(value).array()); } - private static void writeTag(FileOutputStream out, byte tag) - throws IOException { + private static void writeTag(FileOutputStream out, byte tag) throws IOException { out.write(tag); } - } diff --git a/src/main/java/tileset/TilesetMaterial.java b/src/main/java/tileset/TilesetMaterial.java index f704af8..43121db 100644 --- a/src/main/java/tileset/TilesetMaterial.java +++ b/src/main/java/tileset/TilesetMaterial.java @@ -181,8 +181,7 @@ public void setTexGenMode(int texGenMode) { } public void loadTextureImgFromPath(String path) throws IOException { - BufferedImage img = ImageIO.read(new File(path)); - this.textureImg = img; + this.textureImg = ImageIO.read(new File(path)); } public String getMaterialName() { @@ -272,5 +271,4 @@ public boolean vertexColorsEnabled() { public void setVertexColorsEnabled(boolean enabled) { this.vertexColorsEnabled = enabled; } - } diff --git a/src/main/java/tileset/TilesetRenderer.java b/src/main/java/tileset/TilesetRenderer.java index c691678..1dafc95 100644 --- a/src/main/java/tileset/TilesetRenderer.java +++ b/src/main/java/tileset/TilesetRenderer.java @@ -35,7 +35,6 @@ import com.jogamp.opengl.GLProfile; import com.jogamp.opengl.util.awt.AWTGLReadBufferUtil; -import java.awt.Color; import java.awt.image.BufferedImage; import tileset.Tile; @@ -128,8 +127,7 @@ public void renderTileThumbnail(int tileIndex) { //tile.setThumbnail(Utils.addBackgroundColor(new Color(0.0f, 0.5f, 0.5f, 1.0f), img));//Use this for transparent background tile.setThumbnail(img); - tile.setSmallThumbnail(Utils.resize( - img, smallTileSize * tile.getWidth(), smallTileSize * tile.getHeight())); + tile.setSmallThumbnail(Utils.resize(img, smallTileSize * tile.getWidth(), smallTileSize * tile.getHeight())); } catch (GLException ex) { ex.printStackTrace(); } @@ -288,5 +286,4 @@ public void destroy() { }*/ } - } diff --git a/src/main/java/utils/BinaryArrayReader.java b/src/main/java/utils/BinaryArrayReader.java index e021c12..45b3bd7 100644 --- a/src/main/java/utils/BinaryArrayReader.java +++ b/src/main/java/utils/BinaryArrayReader.java @@ -1,14 +1,11 @@ package utils; -import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.file.Files; - - public class BinaryArrayReader { private byte[] buf; @@ -29,7 +26,7 @@ public BinaryArrayReader(byte[] buf, int offset) { private int read() { return (pos < buf.length) ? (buf[pos++] & 0xff) : -1;} - private int read(byte b[], int off, int len) { + private int read(byte[] b, int off, int len) { if (b == null) { throw new NullPointerException(); } else if (off < 0 || len < 0 || len > b.length - off) { @@ -69,29 +66,28 @@ public void skip(int n){ pos += n; } - public String readString(int size) throws Exception { + public String readString(int size) { byte[] data = new byte[size]; read(data); return new String(data); } - public int readUInt8() throws Exception { + public int readUInt8() { return read() & 0xFF; } - public int readUInt16() throws IOException { + public int readUInt16() { byte[] data = new byte[2]; read(data); return ((data[1] & 0xff) << 8) | (data[0] & 0xff); } - public long readUInt32() throws IOException { + public long readUInt32() { byte[] data = new byte[4]; read(data); - return ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).getInt() & 0xFFFFFFFF; + return ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).getInt(); } - public long readInt32() { byte[] data = new byte[4]; read(data); @@ -110,5 +106,4 @@ public byte[] readBytes(int size) throws IOException { } return data; } - } diff --git a/src/main/java/utils/BinaryArrayWriter.java b/src/main/java/utils/BinaryArrayWriter.java index a7d8fee..41fcbf2 100644 --- a/src/main/java/utils/BinaryArrayWriter.java +++ b/src/main/java/utils/BinaryArrayWriter.java @@ -17,12 +17,12 @@ public BinaryArrayWriter(byte[] buf, int offset) { this.mark = offset; } - public void writeUInt8(int value) throws Exception { + public void writeUInt8(int value) { buf[pos] = (byte) value; pos++; } - public void writeUInt16(int value) throws Exception { + public void writeUInt16(int value) { ByteBuffer byteBuffer = ByteBuffer.allocate(2); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putShort((short) (value & 0xffffL)); @@ -31,7 +31,7 @@ public void writeUInt16(int value) throws Exception { pos += 2; } - public void writeUInt32(long value) throws Exception { + public void writeUInt32(long value) { ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putInt((int) (value & 0xffffffffL)); @@ -51,5 +51,4 @@ public void reset(){ public void jumpRel(int relOffset){ pos = offset + relOffset; } - } diff --git a/src/main/java/utils/BinaryBufferWriter.java b/src/main/java/utils/BinaryBufferWriter.java index 0d9855b..827f0c7 100644 --- a/src/main/java/utils/BinaryBufferWriter.java +++ b/src/main/java/utils/BinaryBufferWriter.java @@ -7,14 +7,13 @@ public class BinaryBufferWriter { private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; - protected byte buf[]; + protected byte[] buf; protected int pos; protected int size; protected int mark; public BinaryBufferWriter(int size){ buf = new byte[size]; - } public BinaryBufferWriter(){ @@ -41,12 +40,10 @@ private void grow(int minCapacity) { private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // overflow throw new OutOfMemoryError(); - return (minCapacity > MAX_ARRAY_SIZE) ? - Integer.MAX_VALUE : - MAX_ARRAY_SIZE; + return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; } - public synchronized byte toByteArray()[] { + public synchronized byte[] toByteArray() { return Arrays.copyOf(buf, size); } @@ -57,13 +54,12 @@ public synchronized void write(int b) { size = Math.max(pos, size); } - public synchronized void write(byte b[]) { + public synchronized void write(byte[] b) { write(b, 0, b.length); } - public synchronized void write(byte b[], int off, int len) { - if ((off < 0) || (off > b.length) || (len < 0) || - ((off + len) - b.length > 0)) { + public synchronized void write(byte[] b, int off, int len) { + if (off < 0 || off > b.length || len < 0 || (off + len - b.length > 0)) { throw new IndexOutOfBoundsException(); } ensureCapacity(pos + len); @@ -88,11 +84,11 @@ public void jumpRel(int relOffset){ pos = relOffset; } - public void writeUInt8(int value) throws Exception { + public void writeUInt8(int value) { write(value); } - public void writeUInt16(int value) throws Exception { + public void writeUInt16(int value) { ByteBuffer byteBuffer = ByteBuffer.allocate(2); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putShort((short) (value & 0xffffL)); @@ -100,7 +96,7 @@ public void writeUInt16(int value) throws Exception { write(array, 0, array.length); } - public void writeUInt32(long value) throws Exception { + public void writeUInt32(long value) { ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putInt((int) (value & 0xffffffffL)); @@ -108,7 +104,7 @@ public void writeUInt32(long value) throws Exception { write(array, 0, array.length); } - public void writeInt32(long value) throws Exception { + public void writeInt32(long value) { ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putInt((int)value); diff --git a/src/main/java/utils/BinaryReader.java b/src/main/java/utils/BinaryReader.java index a501b08..0ccfb9e 100644 --- a/src/main/java/utils/BinaryReader.java +++ b/src/main/java/utils/BinaryReader.java @@ -1,8 +1,5 @@ - package utils; -import nitroreader.shared.ByteReader; - import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -15,7 +12,7 @@ */ public class BinaryReader { - private FileInputStream fis; + private final FileInputStream fis; public BinaryReader(String path) throws FileNotFoundException { fis = new FileInputStream(new File(path)); @@ -48,7 +45,7 @@ public int readUInt16() throws IOException { public long readUInt32() throws IOException { byte[] data = new byte[4]; fis.read(data); - return ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).getInt() & 0xFFFFFFFF; + return ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).getInt(); } public byte[] readBytes(int size) throws IOException { @@ -60,46 +57,45 @@ public byte[] readBytes(int size) throws IOException { return data; } - public static int readInt8(byte[] fullData, int offset) throws Exception { + public static int readInt8(byte[] fullData, int offset) { return fullData[offset]; } - public static long readInt16(byte[] fullData, int offset) throws Exception { + public static long readInt16(byte[] fullData, int offset) { return (fullData[offset + 1] << 8) | fullData[offset]; } - public static long readInt32(byte[] fullData, int offset) throws Exception { + public static long readInt32(byte[] fullData, int offset) { return (fullData[offset + 3] << 8) | (fullData[offset + 2] << 8) | (fullData[offset + 1] << 8) | fullData[offset]; } - public static int readUInt8(byte[] fullData, int offset) throws Exception { + public static int readUInt8(byte[] fullData, int offset) { return fullData[offset] & 0xFF; } - public static long readUInt16(byte[] fullData, int offset) throws Exception { + public static long readUInt16(byte[] fullData, int offset) { return ((fullData[offset + 1] & 0xff) << 8) | (fullData[offset] & 0xff); } - public static long readUInt32(byte[] fullData, int offset) throws Exception { + public static long readUInt32(byte[] fullData, int offset) { byte[] data = new byte[4]; System.arraycopy(fullData, offset, data, 0, 4); return (long) (ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).getInt() & 0xFFFFFFFFL); } - public static float readFI32(byte[] fullData, int offset) throws Exception { + public static float readFI32(byte[] fullData, int offset) { return (float) readInt16(fullData, offset + 2) + readUInt16(fullData, offset) / 65535f; } - public static String readString(byte[] fullData, int offset, int size) throws Exception { + public static String readString(byte[] fullData, int offset, int size) { byte[] data = new byte[size]; System.arraycopy(fullData, offset, data, 0, size); return new String(data); } - public static byte[] readBytes(byte[] fullData, int offset, int size) throws Exception { + public static byte[] readBytes(byte[] fullData, int offset, int size) { byte[] data = new byte[size]; System.arraycopy(fullData, offset, data, 0, size); return data; } - } diff --git a/src/main/java/utils/BinaryWriter.java b/src/main/java/utils/BinaryWriter.java index 27a77ce..00e81f4 100644 --- a/src/main/java/utils/BinaryWriter.java +++ b/src/main/java/utils/BinaryWriter.java @@ -14,7 +14,7 @@ */ public class BinaryWriter { - private FileOutputStream fos; + private final FileOutputStream fos; public BinaryWriter(String path) throws FileNotFoundException { fos = new FileOutputStream(new File(path)); @@ -72,11 +72,11 @@ public void writeBytes(byte[] bytes) throws IOException { fos.write(bytes); } - public static void writeUInt8(byte[] allData, int offset, int value) throws Exception { + public static void writeUInt8(byte[] allData, int offset, int value) { allData[offset] = (byte) value; } - public static void writeUInt16(byte[] allData, int offset, int value) throws Exception { + public static void writeUInt16(byte[] allData, int offset, int value) { ByteBuffer byteBuffer = ByteBuffer.allocate(2); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putShort((short) (value & 0xffffL)); @@ -84,7 +84,7 @@ public static void writeUInt16(byte[] allData, int offset, int value) throws Exc System.arraycopy(array, 0, allData, offset, 2); } - public static void writeUInt32(byte[] allData, int offset, long value) throws Exception { + public static void writeUInt32(byte[] allData, int offset, long value) { ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putInt((int) (value & 0xffffffffL)); @@ -92,14 +92,14 @@ public static void writeUInt32(byte[] allData, int offset, long value) throws Ex System.arraycopy(array, 0, allData, offset, 4); } - public static void writeFI32(byte[] fullData, int offset, float value) throws Exception { + public static void writeFI32(byte[] fullData, int offset, float value) { float intValue = (float) Math.floor(value); float decValue = value - intValue; writeUInt16(fullData, offset, (int) (decValue * 65535f)); writeUInt16(fullData, offset + 2, (int) intValue); } - public static void writeString(byte[] fullData, int offset, String string) throws Exception{ + public static void writeString(byte[] fullData, int offset, String string) { byte[] bytes = string.getBytes(StandardCharsets.UTF_8); System.arraycopy(bytes, 0, fullData, offset, bytes.length); } @@ -107,5 +107,4 @@ public static void writeString(byte[] fullData, int offset, String string) throw public static void writeBytes(byte[] fullData, int offset, byte[] bytes){ System.arraycopy(bytes, 0, fullData, offset, bytes.length); } - } diff --git a/src/main/java/utils/GlUtils.java b/src/main/java/utils/GlUtils.java index 0a77e0c..db4738a 100644 --- a/src/main/java/utils/GlUtils.java +++ b/src/main/java/utils/GlUtils.java @@ -2,7 +2,6 @@ package utils; -import com.jogamp.opengl.GL2ES1; //import static com.jogamp.opengl.GL2ES2.GL_FRAGMENT_SHADER; //import static com.jogamp.opengl.GL2ES2.GL_VERTEX_SHADER; import static com.jogamp.opengl.GL2.GL_FRAGMENT_SHADER; @@ -18,8 +17,8 @@ public class GlUtils { public static int createShaderProgram(String vertPath, String fragPath) { GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2(); - String vshaderSource[]; - String fshaderSource[]; + String[] vshaderSource; + String[] fshaderSource; int vShader = gl.glCreateShader(GL_VERTEX_SHADER); int fShader = gl.glCreateShader(GL_FRAGMENT_SHADER); diff --git a/src/main/java/utils/ImageTiler.java b/src/main/java/utils/ImageTiler.java index 8ca8d38..3797b74 100644 --- a/src/main/java/utils/ImageTiler.java +++ b/src/main/java/utils/ImageTiler.java @@ -3,17 +3,12 @@ import java.awt.Image; import java.awt.image.BufferedImage; -import java.io.File; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import javax.imageio.ImageIO; +import java.util.stream.Collectors; -import tileset.Tile; import tileset.Tileset; -import tileset.TilesetMaterial; /** * @author Trifindo @@ -22,14 +17,13 @@ public class ImageTiler { public static int[][] imageToTileLayer(BufferedImage img, Tileset tset, int cols, int rows, int tileSize) { img = Utils.resize(img, cols * tileSize, rows * tileSize, Image.SCALE_FAST); - List imgTiles = Arrays.asList(Utils.imageToImageArray(img, cols, rows)); - ArrayList indices = new ArrayList<>(cols * rows); + BufferedImage[] imgTiles = Utils.imageToImageArray(img, cols, rows); + List indices = new ArrayList<>(cols * rows); for (BufferedImage tileImg : imgTiles) { - ArrayList diffs = new ArrayList<>(tset.size()); - for (Tile tile : tset.getTiles()) { - diffs.add(Utils.imageDifferenceNorm(tile.getThumbnail(), tileImg)); - } + List diffs = tset.getTiles().stream() + .map(tile -> Utils.imageDifferenceNorm(tile.getThumbnail(), tileImg)) + .collect(Collectors.toList()); indices.add(diffs.indexOf(Collections.min(diffs))); } @@ -41,5 +35,4 @@ public static int[][] imageToTileLayer(BufferedImage img, Tileset tset, int cols } return tileGrid; } - } diff --git a/src/main/java/utils/LambdaUtils.java b/src/main/java/utils/LambdaUtils.java index 8d8b01a..9f3645c 100644 --- a/src/main/java/utils/LambdaUtils.java +++ b/src/main/java/utils/LambdaUtils.java @@ -5,7 +5,7 @@ * @author Trifindo */ public class LambdaUtils { - public static interface VoidInterface { - public void action(); + public interface VoidInterface { + void action(); } } diff --git a/src/main/java/utils/Utils.java b/src/main/java/utils/Utils.java index 03f5cf3..e4bf72b 100644 --- a/src/main/java/utils/Utils.java +++ b/src/main/java/utils/Utils.java @@ -10,13 +10,13 @@ import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; import java.io.IOException; import java.io.PrintWriter; import java.util.*; +import java.util.stream.IntStream; import javax.imageio.ImageIO; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; @@ -30,18 +30,17 @@ public class Utils { public static String[] readShaderAsResource(String filename) { - Vector lines = new Vector(); - Scanner sc; - sc = new Scanner(Utils.class.getClassLoader().getResourceAsStream(filename)); + Scanner sc = new Scanner(Objects.requireNonNull(Utils.class.getClassLoader().getResourceAsStream(filename))); + List lines = new ArrayList<>(); while (sc.hasNext()) { - lines.addElement(sc.nextLine()); + lines.add(sc.nextLine()); } String[] program = new String[lines.size()]; for (int i = 0; i < lines.size(); ++i) { - program[i] = (String) lines.elementAt(i) + "\n"; + program[i] = lines.get(i) + "\n"; } sc.close(); @@ -51,7 +50,7 @@ public static String[] readShaderAsResource(String filename) { public static BufferedImage loadTexImageAsResource(String path) { BufferedImage img = null; try { - img = ImageIO.read(Utils.class.getResource(path)); + img = ImageIO.read(Objects.requireNonNull(Utils.class.getResource(path))); } catch (IOException | IllegalArgumentException ex) { int size = 64; img = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); @@ -70,12 +69,10 @@ public static BufferedImage loadTexImageAsResource(String path) { } public static BufferedImage loadImageAsResource(String path) throws IOException, IllegalArgumentException { - BufferedImage img = ImageIO.read(Utils.class.getResource(path)); - return img; + return ImageIO.read(Objects.requireNonNull(Utils.class.getResource(path))); } - public static BufferedImage[] loadHorizontalImageArrayAsResource(String path, - int numTiles) { + public static BufferedImage[] loadHorizontalImageArrayAsResource(String path, int numTiles) { BufferedImage img = loadTexImageAsResource(path); BufferedImage[] array = new BufferedImage[numTiles]; @@ -88,8 +85,7 @@ public static BufferedImage[] loadHorizontalImageArrayAsResource(String path, return array; } - public static BufferedImage[] loadVerticalImageArrayAsResource(String path, - int numTiles) { + public static BufferedImage[] loadVerticalImageArrayAsResource(String path, int numTiles) { BufferedImage img = loadTexImageAsResource(path); BufferedImage[] array = new BufferedImage[numTiles]; @@ -172,54 +168,34 @@ public static BufferedImage toBufferedImage(Image img) { return bimage; } - public static float[] floatListToArray(ArrayList list) { + public static float[] floatListToArray(List list) { float[] array = new float[list.size()]; for (int i = 0; i < array.length; i++) { - array[i] = list.get(i).floatValue(); + array[i] = list.get(i); } return array; } - public static int[] intListToArray(ArrayList list) { - int[] array = new int[list.size()]; - for (int i = 0; i < array.length; i++) { - array[i] = list.get(i).intValue(); - } - return array; + public static int[] intListToArray(List list) { + return list.stream() + .filter(Objects::nonNull) + .mapToInt(Integer::intValue) + .toArray(); } - public static Face[] faceListToArray(ArrayList list) { + public static Face[] faceListToArray(List list) { Face[] array = new Face[list.size()]; - for (int i = 0; i < array.length; i++) { - Face f = list.get(i); - array[i] = f; - } + Arrays.setAll(array, list::get); return array; } - public static ArrayList cloneArrayListInt(ArrayList list) { - ArrayList newList = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - newList.add(new Integer(list.get(i).intValue())); - } - return newList; - } - - public static ArrayList cloneArrayListFloat(ArrayList list) { - ArrayList newList = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - newList.add(new Float(list.get(i).floatValue())); - } - return newList; - } - public static float[] cloneArray(float[] src) { float[] dst = new float[src.length]; System.arraycopy(src, 0, dst, 0, dst.length); return dst; } - public static void incrementAllElements(ArrayList list, int increment) { + public static void incrementAllElements(List list, int increment) { for (int i = 0; i < list.size(); i++) { list.set(i, list.get(i) + increment); } @@ -240,12 +216,12 @@ public static String removeMapCoordsFromName(String name) { try { if (nameHasMapCoords(name)) { String[] splitString = name.split("_"); - String newName = ""; + StringBuilder newName = new StringBuilder(); for (int i = 0; i < splitString.length - 3; i++) { - newName += splitString[i] + "_"; + newName.append(splitString[i]).append("_"); } - newName += splitString[splitString.length - 3]; - return newName; + newName.append(splitString[splitString.length - 3]); + return newName.toString(); } else { return name; } @@ -274,7 +250,7 @@ private static boolean canParseInteger(String string) { } } - public static String removeLastOcurrences(String string, char c) { + public static String removeLastOccurrences(String string, char c) { int nCharsToRemove = 0; for (int i = string.length() - 1; i >= 0; i--) { if (string.charAt(i) == c) { @@ -313,12 +289,8 @@ public static int[] cloneIntArray(int[] array) { } public static boolean containsArray(byte[] bigArray, byte[] smallArray, int offset) { - for (int i = 0; i < smallArray.length; i++) { - if (bigArray[offset + i] != smallArray[i]) { - return false; - } - } - return true; + return IntStream.range(0, smallArray.length) + .noneMatch(i -> bigArray[offset + i] != smallArray[i]); } public static void printArrayInFile(PrintWriter writer, float[] array, int cols) { @@ -343,7 +315,6 @@ public static void printArrayInFile(PrintWriter writer, int[] array, int cols) { public static BufferedImage resize(BufferedImage img, int newW, int newH) { return resize(img, newW, newH, Image.SCALE_SMOOTH); - } public static BufferedImage resize(BufferedImage img, int newW, int newH, int scalingType) { @@ -372,7 +343,7 @@ public static BufferedImage generateTransparentBackground(int size, int tileSize } - public static void floodFillMatrix(int screen[][], int x, int y, int newC) { + public static void floodFillMatrix(int[][] screen, int x, int y, int newC) { int prevC = screen[x][y]; if (newC == prevC) { return; @@ -382,7 +353,7 @@ public static void floodFillMatrix(int screen[][], int x, int y, int newC) { Utils.floodFillUtil(screen, x, y, prevC, newC, M, N); } - private static void floodFillUtil(int screen[][], int x, int y, int prevC, int newC, int M, int N) { + private static void floodFillUtil(int[][] screen, int x, int y, int prevC, int newC, int M, int N) { // Base cases if (x < 0 || x >= M || y < 0 || y >= N) { return; @@ -401,7 +372,7 @@ private static void floodFillUtil(int screen[][], int x, int y, int prevC, int n floodFillUtil(screen, x, y - 1, prevC, newC, M, N); } - public static void floodFillMatrix(int screen[][], boolean[][] mask, int x, int y, int newC) { + public static void floodFillMatrix(int[][] screen, boolean[][] mask, int x, int y, int newC) { int prevC = screen[x][y]; if (newC == prevC) { return; @@ -411,20 +382,16 @@ public static void floodFillMatrix(int screen[][], boolean[][] mask, int x, int Utils.floodFillUtil(screen, mask, x, y, prevC, newC, M, N); } - private static void floodFillUtil(int screen[][], boolean[][] mask, int x, int y, int prevC, int newC, int M, int N) { + private static void floodFillUtil(int[][] screen, boolean[][] mask, int x, int y, int prevC, int newC, int M, int N) { // Base cases if (x < 0 || x >= M || y < 0 || y >= N) { return; } - if (screen[x][y] != prevC) { - return; - } - - if (!mask[x][y]) { + if (screen[x][y] != prevC || !mask[x][y]) { return; } - // Replace the tile at (x, y) + // Replace the tile at (x, y) screen[x][y] = newC; // Recur for north, east, south and west @@ -434,7 +401,7 @@ private static void floodFillUtil(int screen[][], boolean[][] mask, int x, int y floodFillUtil(screen, mask, x, y - 1, prevC, newC, M, N); } - public static void floodFillMatrix(int screen[][], boolean[][] mask, int x, int y, int newC, int tileWidth, int tileHeight) { + public static void floodFillMatrix(int[][] screen, boolean[][] mask, int x, int y, int newC, int tileWidth, int tileHeight) { int prevC = screen[x][y]; if (newC == prevC) { return; @@ -444,7 +411,7 @@ public static void floodFillMatrix(int screen[][], boolean[][] mask, int x, int Utils.floodFillUtil(screen, mask, x, y, prevC, newC, M, N, tileWidth, tileHeight); } - private static void floodFillUtil(int screen[][], boolean[][] mask, int x, int y, int prevC, int newC, int M, int N, int tileWidth, int tileHeight) { + private static void floodFillUtil(int[][] screen, boolean[][] mask, int x, int y, int prevC, int newC, int M, int N, int tileWidth, int tileHeight) { if (!isTileAreaAvailable(screen, mask, x, y, prevC, newC, M, N, tileWidth, tileHeight)) { return; } @@ -452,11 +419,7 @@ private static void floodFillUtil(int screen[][], boolean[][] mask, int x, int y if (x < 0 || x >= M || y < 0 || y >= N) { return; } - if (screen[x][y] != prevC) { - return; - } - - if (!mask[x][y]) { + if (screen[x][y] != prevC || !mask[x][y]) { return; } @@ -477,7 +440,7 @@ private static void floodFillUtil(int screen[][], boolean[][] mask, int x, int y floodFillUtil(screen, mask, x, y - tileHeight, prevC, newC, M, N, tileWidth, tileHeight); } - private static boolean isTileAreaAvailable(int screen[][], boolean[][] mask, int x, int y, int prevC, int newC, int M, int N, int tileWidth, int tileHeight) { + private static boolean isTileAreaAvailable(int[][] screen, boolean[][] mask, int x, int y, int prevC, int newC, int M, int N, int tileWidth, int tileHeight) { try { for (int i = 0; i < tileWidth; i++) { for (int j = 0; j < tileHeight; j++) { @@ -492,7 +455,7 @@ private static boolean isTileAreaAvailable(int screen[][], boolean[][] mask, int return true; } - public static void floodFillMatrix(byte screen[][], int x, int y, byte newC) { + public static void floodFillMatrix(byte[][] screen, int x, int y, byte newC) { byte prevC = screen[x][y]; if (newC == prevC) { return; @@ -502,7 +465,7 @@ public static void floodFillMatrix(byte screen[][], int x, int y, byte newC) { Utils.floodFillUtil(screen, x, y, prevC, newC, M, N); } - private static void floodFillUtil(byte screen[][], int x, int y, byte prevC, byte newC, int M, int N) { + private static void floodFillUtil(byte[][] screen, int x, int y, byte prevC, byte newC, int M, int N) { // Base cases if (x < 0 || x >= M || y < 0 || y >= N) { return; @@ -536,27 +499,18 @@ public static Cursor loadCursor(String path) { public static Cursor loadCursor(String path, Point hotSpot) { Image img = Utils.loadTexImageAsResource(path); if (img != null) { - return Toolkit.getDefaultToolkit().createCustomCursor( - img, - new Point(0, 0), "custom cursor"); + return Toolkit.getDefaultToolkit().createCustomCursor(img, new Point(0, 0), "custom cursor"); } else { return Cursor.getDefaultCursor(); } } - public static boolean hasDuplicates(ArrayList array) { - Set set = new HashSet(); - for (int i : array) { - if (set.contains(i)) { - return true; - } - set.add(i); - } - return false; + public static boolean hasDuplicates(List array) { + Set set = new HashSet<>(); + return array.stream().anyMatch(i -> !set.add(i)); } public static class IntTuple { - public int e1, e2; public IntTuple(int e1, int e2) { @@ -592,7 +546,6 @@ public void changeBackground() { } public static class MutableBoolean { - public boolean value; public MutableBoolean(boolean value) { @@ -600,10 +553,7 @@ public MutableBoolean(boolean value) { } } - ; - public static class MutableInt { - public int value; public MutableInt(int value) { @@ -611,17 +561,11 @@ public MutableInt(int value) { } } - ; - public static class MutableLong { - public long value; public MutableLong(long value) { this.value = value; } } - - ; - } diff --git a/src/main/java/utils/image/Clusterer.java b/src/main/java/utils/image/Clusterer.java index 2fb043c..dd7988c 100644 --- a/src/main/java/utils/image/Clusterer.java +++ b/src/main/java/utils/image/Clusterer.java @@ -4,9 +4,11 @@ import java.awt.Color; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.List; import java.util.Random; import java.util.Set; import java.util.TreeSet; +import java.util.stream.Collectors; /** * @author Trifindo @@ -18,20 +20,19 @@ public static BufferedImage clusterColors(BufferedImage img, int numColors, int return floydSteinbergDithering(img, clusterColors(getPalette(img), numColors, maxIte, tol)); } - public static ArrayList getPalette(BufferedImage img) { - Set set = new TreeSet(); + public static List getPalette(BufferedImage img) { + Set set = new TreeSet<>(); for (int j = 0; j < img.getHeight(); j++) { for (int i = 0; i < img.getWidth(); i++) { set.add(new FastColor(img.getRGB(i, j), true)); } } - ArrayList colors = new ArrayList<>(); - colors.addAll(set); + List colors = new ArrayList<>(set); System.out.println("Number of colors original image: " + colors.size()); return colors; } - public static BufferedImage floydSteinbergDithering(BufferedImage oldImg, ArrayList palette) { + public static BufferedImage floydSteinbergDithering(BufferedImage oldImg, List palette) { BufferedImage img = new BufferedImage(oldImg.getWidth(), oldImg.getHeight(), BufferedImage.TYPE_INT_ARGB); img.getGraphics().drawImage(oldImg, 0, 0, null); img.getGraphics().dispose(); @@ -87,15 +88,15 @@ public static void applyQuantError(FastColor[][] d, int y, int x, float mul, int d[y][x] = new FastColor(r, g, b, a); } - public static ArrayList clusterColors(ArrayList colors, int numColors, int maxIte, float tol) { - ArrayList centroids = new ArrayList<>(numColors); - ArrayList lastCentroids = new ArrayList<>(numColors); + public static List clusterColors(List colors, int numColors, int maxIte, float tol) { + List centroids = new ArrayList<>(numColors); + List lastCentroids = new ArrayList<>(numColors); for (int i = 0; i < numColors; i++) { centroids.add(colors.get(new Random().nextInt(colors.size()))); lastCentroids.add(colors.get(new Random().nextInt(colors.size()))); } - ArrayList> colorsIndicesInClusters = new ArrayList<>(centroids.size()); + List> colorsIndicesInClusters = new ArrayList<>(centroids.size()); for (int i = 0; i < centroids.size(); i++) { colorsIndicesInClusters.add(new ArrayList<>()); } @@ -132,19 +133,17 @@ public static ArrayList clusterColors(ArrayList colors, int numCol } System.out.println("Number of centroids: " + centroids.size()); - for (int i = 0; i < centroids.size(); i++) { - System.out.println(centroids.get(i).getRGB()); + for (Color centroid : centroids) { + System.out.println(centroid.getRGB()); } return centroids; } - private static ArrayList copyColors(ArrayList colors) { - ArrayList copys = new ArrayList<>(colors.size()); - for (int i = 0; i < colors.size(); i++) { - copys.add(new Color(colors.get(i).getRGB(), true)); - } - return copys; + private static List copyColors(List colors) { + return colors.stream() + .map(color -> new Color(color.getRGB(), true)) + .collect(Collectors.toList()); } private static int getDifference(Color c1, Color c2) { @@ -155,24 +154,23 @@ private static int getDifference(Color c1, Color c2) { return rDiff + gDiff + bDiff + aDiff; } - private static FastColor getMeanColor(ArrayList colors, ArrayList indices) { + private static FastColor getMeanColor(List colors, List indices) { int rSum = 0; int gSum = 0; int bSum = 0; int aSum = 0; - for (int i = 0; i < indices.size(); i++) { - Color c = colors.get(indices.get(i)); + for (Integer index : indices) { + Color c = colors.get(index); rSum += c.getRed(); gSum += c.getGreen(); bSum += c.getBlue(); aSum += c.getAlpha(); } return new FastColor(rSum / indices.size(), gSum / indices.size(), bSum / indices.size(), aSum / indices.size()); - } - private static int getCloserColorIndex(Color c, ArrayList colors) { + private static int getCloserColorIndex(Color c, List colors) { int index = 0; int minDist = Integer.MAX_VALUE; for (int i = 0; i < colors.size(); i++) { @@ -193,5 +191,4 @@ private static int getDistanceToColor(Color c1, Color c2) { return rd * rd + gd * gd + bd * bd + ad * ad; } - } diff --git a/src/main/java/utils/image/FastColor.java b/src/main/java/utils/image/FastColor.java index bf3e770..93f277a 100644 --- a/src/main/java/utils/image/FastColor.java +++ b/src/main/java/utils/image/FastColor.java @@ -29,7 +29,6 @@ public Color getColor() { return new Color(getRGB(), true); } - @Override public int hashCode() { return hashCode; @@ -38,15 +37,11 @@ public int hashCode() { @Override public boolean equals(Object obj) { final FastColor other = (FastColor) obj; - if (this.hashCode != other.hashCode) { - return false; - } - return true; + return this.hashCode == other.hashCode; } @Override public int compareTo(FastColor o) { return this.hashCode - o.hashCode; } - } diff --git a/src/main/java/utils/swing/CheckboxListCellRenderer.java b/src/main/java/utils/swing/CheckboxListCellRenderer.java index d87ef44..f1d0465 100644 --- a/src/main/java/utils/swing/CheckboxListCellRenderer.java +++ b/src/main/java/utils/swing/CheckboxListCellRenderer.java @@ -11,9 +11,7 @@ */ public class CheckboxListCellRenderer extends JCheckBox implements ListCellRenderer { - public Component getListCellRendererComponent(JList list, Object value, int index, - boolean isSelected, boolean cellHasFocus) { - + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setComponentOrientation(list.getComponentOrientation()); setFont(list.getFont()); setBackground(list.getBackground()); diff --git a/src/main/java/utils/swing/JCheckboxList.java b/src/main/java/utils/swing/JCheckboxList.java index 44834c0..1009abb 100644 --- a/src/main/java/utils/swing/JCheckboxList.java +++ b/src/main/java/utils/swing/JCheckboxList.java @@ -44,21 +44,18 @@ public JCheckboxList(ListModel model) { protected class CellRenderer implements ListCellRenderer { - public Component getListCellRendererComponent( - JList list, JCheckBox value, int index, + public Component getListCellRendererComponent(JList list, JCheckBox value, int index, boolean isSelected, boolean cellHasFocus) { - JCheckBox checkbox = value; //Drawing checkbox, change the appearance here - checkbox.setBackground(isSelected ? getSelectionBackground() : getBackground()); + value.setBackground(isSelected ? getSelectionBackground() : getBackground()); //checkbox.setForeground(isSelected ? getSelectionForeground() : getForeground()); - checkbox.setEnabled(isEnabled()); - checkbox.setFont(getFont()); - checkbox.setFocusPainted(false); - checkbox.setBorderPainted(true); - checkbox.setBorder(isSelected ? UIManager - .getBorder("List.focusCellHighlightBorder") : noFocusBorder); - return checkbox; + value.setEnabled(isEnabled()); + value.setFont(getFont()); + value.setFocusPainted(false); + value.setBorderPainted(true); + value.setBorder(isSelected ? UIManager.getBorder("List.focusCellHighlightBorder") : noFocusBorder); + return value; } } } diff --git a/src/main/java/utils/swing/JScrollCheckboxList.java b/src/main/java/utils/swing/JScrollCheckboxList.java index 1c15ea6..314e8ea 100644 --- a/src/main/java/utils/swing/JScrollCheckboxList.java +++ b/src/main/java/utils/swing/JScrollCheckboxList.java @@ -6,7 +6,6 @@ import javax.swing.JScrollPane; import javax.swing.ListModel; import javax.swing.ListSelectionModel; -import java.awt.*; /** * @author Trifindo @@ -21,7 +20,7 @@ public JScrollCheckboxList() { checkboxList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); add(checkboxList); - DefaultListModel model = new DefaultListModel(); + DefaultListModel model = new DefaultListModel<>(); checkboxList.setModel(model); setViewportView(checkboxList); } @@ -40,6 +39,4 @@ public void setEnabled(boolean enabled) { model.getElementAt(i).setEnabled(enabled); } } - - } diff --git a/src/main/java/utils/swing/SwingUtils.java b/src/main/java/utils/swing/SwingUtils.java index d673575..70dbc01 100644 --- a/src/main/java/utils/swing/SwingUtils.java +++ b/src/main/java/utils/swing/SwingUtils.java @@ -11,7 +11,6 @@ */ public class SwingUtils { - public static void addListenerToJTextField(JTextField jtf, MutableBoolean enabled, Color color) { jtf.getDocument().addDocumentListener(new DocumentListener() { @Override @@ -38,13 +37,10 @@ public void changeBackground() { } public static class MutableBoolean { - public boolean value; public MutableBoolean(boolean value) { this.value = value; } } - - ; } diff --git a/src/main/java/utils/swing/ThumbnailFileChooser.java b/src/main/java/utils/swing/ThumbnailFileChooser.java index 1098044..ae65209 100644 --- a/src/main/java/utils/swing/ThumbnailFileChooser.java +++ b/src/main/java/utils/swing/ThumbnailFileChooser.java @@ -41,7 +41,7 @@ public class ThumbnailFileChooser extends JFileChooser { /** * Use a weak hash map to cache images until the next garbage collection (saves memory) */ - private final Map imageCache = new WeakHashMap(); + private final Map imageCache = new WeakHashMap<>(); public static void main(String[] args) throws Exception { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); @@ -63,7 +63,7 @@ public ThumbnailFileChooser() { private class ThumbnailView extends FileView { /** - * This thread pool is where the thumnnail icon loaders run + * This thread pool is where the thumbnail icon loaders run */ private final ExecutorService executor = Executors.newCachedThreadPool(); @@ -74,7 +74,7 @@ public Icon getIcon(File file) { // Our cache makes browsing back and forth lightning-fast! :D synchronized (imageCache) { - ImageIcon icon = (ImageIcon) imageCache.get(file); + ImageIcon icon = imageCache.get(file); if (icon == null) { // Create a new icon with the default image @@ -110,12 +110,7 @@ public void run() { icon.setImage(img); // Repaint the dialog so we see the new icon. - SwingUtilities.invokeLater(new Runnable() { - public void run() { - repaint(); - } - }); + SwingUtilities.invokeLater(ThumbnailFileChooser.this::repaint); } } - } \ No newline at end of file