/* * MegaMekLab - Copyright (C) 2011 * * Original author - jtighe (torren@users.sourceforge.net) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. */ package megameklab.com.ui.Vehicle.Printing; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.io.File; import java.util.ArrayList; import java.util.Calendar; import java.util.Vector; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.standard.PrintQuality; import megamek.common.Engine; import megamek.common.MiscType; import megamek.common.Tank; import megamek.common.TechConstants; import megameklab.com.util.ImageHelper; import megameklab.com.util.ImageHelperVehicle; import megameklab.com.util.UnitUtil; import com.kitfox.svg.SVGException; public class PrintNavalVehicle implements Printable { private Tank sub = null; private ArrayList<Tank> subList; PrinterJob masterPrintJob; private int topmargin = 0; private int leftmargin = 8; public PrintNavalVehicle(ArrayList<Tank> list, PrinterJob masterPrintJob) { subList = list; this.masterPrintJob = masterPrintJob; } public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { if (pageIndex >= 1) { return Printable.NO_SUCH_PAGE; } Graphics2D g2d = (Graphics2D) graphics; printImage(g2d, pageFormat); return Printable.PAGE_EXISTS; } public void printImage(Graphics2D g2d, PageFormat pageFormat) { if (g2d == null) { return; } System.gc(); //g2d.drawImage(ImageHelper.getRecordSheet(sub, false), 18, 18, 558, 736, null); try { ImageHelper.loadSVGImage(new File("data/images/recordsheets/NavalArmorDiagram.svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/NavalCritTable.svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/NavalData.svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/NavalHitTable.svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/NavalMotiveDmgTable.svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/TankSheetCopyrightInfo.svg")).render(g2d); } catch (SVGException e) { e.printStackTrace(); } printTankData(g2d); printArmor(g2d); printWeaponsNEquipment(g2d); // Armor/IS Pips try { ImageHelper.loadSVGImage(new File("data/images/recordsheets/Naval_Left_Armor_"+sub.getArmor(Tank.LOC_LEFT)+".svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/Naval_Rear_Armor_"+sub.getArmor(Tank.LOC_REAR)+".svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/Naval_Front_Armor_"+sub.getArmor(Tank.LOC_FRONT)+".svg")).render(g2d); ImageHelper.loadSVGImage(new File("data/images/recordsheets/Naval_Right_Armor_"+sub.getArmor(Tank.LOC_RIGHT)+".svg")).render(g2d); if (!sub.hasNoTurret()) { ImageHelper.loadSVGImage(new File("data/images/recordsheets/Naval_Turret_Armor_"+sub.getArmor(Tank.LOC_TURRET)+".svg")).render(g2d); } ImageHelper.loadSVGImage(new File("data/images/recordsheets/Naval_IS_"+sub.getInternal(Tank.LOC_LEFT)+".svg")).render(g2d); if (!sub.hasNoTurret()) { ImageHelper.loadSVGImage(new File("data/images/recordsheets/Naval_TURRET_IS_"+sub.getInternal(Tank.LOC_TURRET)+".svg")).render(g2d); } } catch (SVGException e) { e.printStackTrace(); } /* printFrontArmor(g2d, sub.getOArmor(Tank.LOC_FRONT), false, sub.hasModularArmor(Tank.LOC_FRONT)); printLeftArmor(g2d, sub.getOArmor(Tank.LOC_LEFT), false, sub.hasModularArmor(Tank.LOC_LEFT)); printRightArmor(g2d, sub.getOArmor(Tank.LOC_RIGHT), false, sub.hasModularArmor(Tank.LOC_RIGHT)); printRearArmor(g2d, sub.getOArmor(Tank.LOC_REAR), false, sub.hasModularArmor(Tank.LOC_REAR)); printTurretArmor(g2d, sub.getOArmor(Tank.LOC_TURRET), false, sub.hasModularArmor(Tank.LOC_TURRET)); */ // Internal Pips /* printFrontStruct(g2d, sub.getOInternal(Tank.LOC_FRONT), false); printLeftStruct(g2d, sub.getOInternal(Tank.LOC_LEFT), false); printRightStruct(g2d, sub.getOInternal(Tank.LOC_RIGHT), false); printRearStruct(g2d, sub.getOInternal(Tank.LOC_REAR), false); printTurretStruct(g2d, sub.getOInternal(Tank.LOC_TURRET), false); */ printTankImage(g2d); g2d.scale(pageFormat.getImageableWidth(), pageFormat.getImageableHeight()); } private void printTankData(Graphics2D g2d) { String subName = sub.getChassis() + " " + sub.getModel(); g2d.setFont(UnitUtil.getNewFont(g2d, subName, true, 180, 10.0f)); g2d.drawString(subName, 50+leftmargin, topmargin+119) ; Font font = UnitUtil.deriveFont(8.0f); g2d.setFont(font); /*if ((sub.getCrew() != null) && !sub.getCrew().getName().equalsIgnoreCase("unnamed")) { Crew pilot = sub.getCrew(); g2d.drawString(pilot.getName(), 270+leftmargin, topmargin+117) ; g2d.drawString(String.valueOf(pilot.getGunnery()), 295+leftmargin, topmargin+132) ; g2d.drawString(String.valueOf(pilot.getPiloting()), 365+leftmargin, topmargin+132) ; }*/ g2d.drawString(Integer.toString(sub.getWalkMP()), 79+leftmargin, topmargin+144) ; if (!sub.hasWorkingMisc(MiscType.F_MASC, MiscType.S_SUPERCHARGER)) { g2d.drawString(Integer.toString(sub.getRunMP()), 79+leftmargin, topmargin+154) ; } else { int mascMP = sub.getRunMP(); g2d.drawString(Integer.toString(sub.getRunMPwithoutMASC()) + " [" + mascMP + "]", 79+leftmargin, topmargin+154) ; } g2d.drawString(sub.getMovementModeAsString(), 90+leftmargin, topmargin+165) ; String engineName = "Fusion Engine"; switch (sub.getEngine().getEngineType()) { case Engine.COMBUSTION_ENGINE: engineName = "I.C.E."; break; case Engine.LIGHT_ENGINE: engineName = "Light Fusion Engine"; break; case Engine.XL_ENGINE: engineName = "XL Fusion Engine"; break; case Engine.XXL_ENGINE: engineName = "XXL Fusion Engine"; break; case Engine.COMPACT_ENGINE: engineName = "Compact Fusion Engine"; break; case Engine.FUEL_CELL: engineName = "Fuel Cell Engine"; break; default: break; } g2d.drawString(engineName, 79f+leftmargin, topmargin+176.5f) ; if (sub.getWeight() >= 5) { int tonnage = (int) Math.ceil(sub.getWeight()); g2d.drawString(Integer.toString(tonnage), 177+leftmargin, topmargin+133) ; } else { // DecimalFormatSymbols unusualSymbols = // new DecimalFormatSymbols(); // unusualSymbols.setDecimalSeparator('.'); // unusualSymbols.setGroupingSeparator(','); // DecimalFormat myFormatter = new DecimalFormat("#.###", // unusualSymbols); g2d.drawString(String.format("%1$,d", sub.getWeight()), 177+leftmargin, topmargin+134) ; } int nextDataLine = 153 + topmargin; int startLine = 188 + leftmargin; int lineFeed = 8; switch (sub.getTechLevel()) { case TechConstants.T_INTRO_BOXSET: ImageHelper.printCenterString(g2d, "(Intro)", font, startLine, nextDataLine); nextDataLine += lineFeed; break; case TechConstants.T_IS_TW_NON_BOX: case TechConstants.T_IS_TW_ALL: case TechConstants.T_CLAN_TW: break; case TechConstants.T_IS_ADVANCED: case TechConstants.T_CLAN_ADVANCED: ImageHelper.printCenterString(g2d, "(Advanced)", font, startLine, nextDataLine); nextDataLine += lineFeed; break; case TechConstants.T_IS_EXPERIMENTAL: case TechConstants.T_CLAN_EXPERIMENTAL: ImageHelper.printCenterString(g2d, "(Experimental)", font, startLine, nextDataLine); nextDataLine += lineFeed; break; case TechConstants.T_IS_UNOFFICIAL: case TechConstants.T_CLAN_UNOFFICIAL: ImageHelper.printCenterString(g2d, "(Unofficial)", font, startLine, nextDataLine); nextDataLine += lineFeed; break; } String techBase = "Inner Sphere"; if (sub.isMixedTech()) { if (sub.isClan()) { techBase = "Mixed Tech (Clan)"; } else { techBase = "Mixed Tech (I.S.)"; } } else if (sub.isClan()) { techBase = "Clan"; } g2d.drawString(techBase, 178+leftmargin, topmargin+144) ; if ((sub.getSource() != null) && (sub.getSource().trim().length() > 0)) { String sourceFluff = "Era: "; font = UnitUtil.deriveFont(true, 8.0f); g2d.setFont(font); g2d.drawString(sourceFluff, 142 + leftmargin, nextDataLine); font = UnitUtil.getNewFont(g2d, sub.getSource(), false, 51, 8.0f); g2d.setFont(font); g2d.drawString(sub.getSource(), 178 + leftmargin, nextDataLine); } else { String yearFluff = "Year: "; font = UnitUtil.deriveFont(true, 8.0f); g2d.setFont(font); g2d.drawString(yearFluff, 143 + leftmargin, nextDataLine); font = UnitUtil.deriveFont(8.0f); g2d.setFont(font); g2d.drawString(String.format("%1$s", sub.getYear()), 177+ leftmargin, nextDataLine); } // g2d.drawString(Integer.toString(sub.getYear()), 188+leftmargin, topmargin+155) ; // Cost/BV // DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(); // unusualSymbols.setDecimalSeparator('.'); // unusualSymbols.setGroupingSeparator(','); // DecimalFormat myFormatter = new DecimalFormat("#,###", // unusualSymbols); double bv = sub.calculateBattleValue(true, true); if (bv != -1) { font = UnitUtil.deriveFont(true, 8); g2d.setFont(font); g2d.drawString("BV: ", 30+leftmargin, topmargin+368) ; font = UnitUtil.deriveFont(false, 8); g2d.setFont(font); g2d.drawString(String.format("%1$,d", sub.calculateBattleValue(true, true)), 45+leftmargin, topmargin+368) ; } // myFormatter = new DecimalFormat("#,###.##", unusualSymbol); // g2d.drawString(myFormatter.format(sub.getCost(true)) + " C-bills", // 52+leftmargin, topmargin+357) ; if (UnitUtil.hasBAR(sub)) { font = UnitUtil.deriveFont(true, 9.0f); g2d.drawString("BAR: " + UnitUtil.getLowestBARRating(sub), 400+leftmargin, topmargin+64) ; } g2d.setFont(UnitUtil.deriveFont(true, 7.0f)); g2d.drawString(Integer.toString(Calendar.getInstance().get(Calendar.YEAR)), leftmargin+42, topmargin+770); } private void printArmor(Graphics2D g2d) { // Armor Font font = UnitUtil.deriveFont(true, 9.0f); g2d.setFont(font); font = UnitUtil.deriveFont(true, 11.0f); g2d.setFont(font); ImageHelper.printCenterString(g2d, ImageHelperVehicle.getVehicleArmorTypeString(sub), g2d.getFont(), 478+leftmargin, topmargin+48); //g2d.drawString(ImageHelperVehicle.getVehicleArmorTypeString(sub), 463+leftmargin, topmargin+48); font = UnitUtil.deriveFont(true, 9.0f); g2d.setFont(font); g2d.drawString(Integer.toString(sub.getArmor(Tank.LOC_FRONT)), 476+leftmargin, topmargin+55.f); ImageHelper.printRotatedText(g2d, Integer.toString(sub.getArmor(Tank.LOC_RIGHT)), 90, 568+leftmargin, topmargin+374); ImageHelper.printRotatedText(g2d, Integer.toString(sub.getArmor(Tank.LOC_LEFT)), 270, 397+leftmargin, topmargin+316); g2d.drawString(Integer.toString(sub.getArmor(Tank.LOC_REAR)), 475+leftmargin, topmargin+665.5f); if (sub.getOInternal(Tank.LOC_TURRET) > 0) { g2d.drawString(Integer.toString(sub.getArmor(Tank.LOC_TURRET)), 474+leftmargin, topmargin+398.5f); } } private void printWeaponsNEquipment(Graphics2D g2d) { ImageHelperVehicle.printTankWeaponsNEquipment(sub, g2d, 3, 14); } public void print(HashPrintRequestAttributeSet aset) { try { for (int pos = 0; pos < subList.size(); pos++) { PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintService(masterPrintJob.getPrintService()); aset.add(PrintQuality.HIGH); PageFormat pageFormat = new PageFormat(); pageFormat = pj.getPageFormat(null); Paper p = pageFormat.getPaper(); p.setImageableArea(0, 0, p.getWidth(), p.getHeight()); pageFormat.setPaper(p); pj.setPrintable(this, pageFormat); sub = subList.get(pos); pj.setJobName(sub.getChassis() + " " + sub.getModel()); try { pj.print(aset); } catch (Exception ex) { ex.printStackTrace(); } finally { System.gc(); } } } catch (Exception ex) { ex.printStackTrace(); } } private void printExtraFrontArmor(Graphics2D g2d, int totalArmor, boolean secondImage, boolean hasModularArmor) { float[] topColumn = { 442, 90 }; float[] middleColumn = { 498, 125 }; float[] bottomColumn = { 493, 136.2f }; float[] pipShift = { 6, 6 }; float[][] extraArmor = { { 429, 90 }, { 429, 97 }, { 518, 90 }, { 518, 97 }, { 436f, 93.5f }, { 436f, 100.5f }, { 513f, 93.5f }, { 513f, 100.5f }, { 513f, 107.5f }, { 436f, 107.5f } }; if (totalArmor < 1) { return; } Vector<float[]> pipPlotter = new Vector<float[]>(20); for (int pos = 1; pos <= 72; pos++) { pipPlotter.add(new float[] { topColumn[0], topColumn[1] }); topColumn[0] += pipShift[0]; if ((pos % 12) == 0) { topColumn[1] += pipShift[1]; pipShift[0] *= -1; topColumn[0] += pipShift[0]; } } pipShift[0] *= -1; for (int pos = 1; pos <= 16; pos++) { pipPlotter.add(new float[] { middleColumn[0], middleColumn[1] }); middleColumn[0] += pipShift[0]; if ((pos % 8) == 0) { middleColumn[1] += pipShift[1]; pipShift[0] *= -1; middleColumn[0] += pipShift[0]; } } for (int pos = 1; pos <= 18; pos++) { pipPlotter.add(new float[] { bottomColumn[0], bottomColumn[1] }); bottomColumn[0] += pipShift[0]; if ((pos % 6) == 0) { bottomColumn[1] += pipShift[1] - 0.5f; pipShift[0] *= -1; bottomColumn[0] += pipShift[0]; } } for (int pos = 0; pos < 10; pos++) { pipPlotter.add(new float[] { extraArmor[pos][0], extraArmor[pos][1] }); } ImageHelperVehicle.printArmorPoints(g2d, pipPlotter, totalArmor, hasModularArmor); } @SuppressWarnings("unused") private void printFrontArmor(Graphics2D g2d, int totalArmor, boolean secondImage, boolean hasModularArmor) { float[] topColumn = { 444, 90 }; float[] middleColumn = { 500, 125 }; float[] bottomColumn = { 493, 132 }; float[] pipShift = { 7, 7 }; float[][] extraArmor = { { 430, 90 }, { 430, 97 }, { 519, 90 }, { 519, 97 }, { 437f, 93.5f }, { 437f, 100.5f }, { 513f, 93.5f }, { 513f, 100.5f }, { 513f, 107.5f }, { 437f, 107.5f } }; if (totalArmor < 1) { return; } if (totalArmor > 86) { printExtraFrontArmor(g2d, totalArmor, secondImage, hasModularArmor); return; } Vector<float[]> pipPlotter = new Vector<float[]>(20); for (int pos = 1; pos <= 50; pos++) { pipPlotter.add(new float[] { topColumn[0], topColumn[1] }); topColumn[0] += pipShift[0]; if ((pos % 10) == 0) { topColumn[1] += pipShift[1]; pipShift[0] *= -1; topColumn[0] += pipShift[0]; } } for (int pos = 1; pos <= 8; pos++) { pipPlotter.add(new float[] { middleColumn[0], middleColumn[1] }); middleColumn[0] += pipShift[0]; } for (int pos = 1; pos <= 18; pos++) { pipPlotter.add(new float[] { bottomColumn[0], bottomColumn[1] }); bottomColumn[0] += pipShift[0]; if ((pos % 6) == 0) { bottomColumn[1] += pipShift[1]; pipShift[0] *= -1; bottomColumn[0] += pipShift[0]; } } for (int pos = 1; pos <= 10; pos++) { pipPlotter.add(new float[] { extraArmor[pos - 1][0], extraArmor[pos - 1][1] }); } ImageHelperVehicle.printArmorPoints(g2d, pipPlotter, totalArmor, hasModularArmor); } @SuppressWarnings("unused") private void printRearArmor(Graphics2D g2d, int totalArmor, boolean secondImage, boolean hasModularArmor) { if (totalArmor > 51) { printExtraRearArmor(g2d, totalArmor, secondImage, hasModularArmor); return; } int[] topColumn = new int[] { 422, 291 }; int[] middleColumn = new int[] { 422, 298 }; int[] bottomColumn = new int[] { 422, 305 }; int[] pipShift = new int[] { 7, 7 }; int pips = 17; Vector<float[]> pipPlotter = new Vector<float[]>(20); for (int pos = 1; pos <= pips; pos++) { pipPlotter.add(new float[] { topColumn[0], topColumn[1] }); topColumn[0] += pipShift[0]; } pips = 17; for (int pos = 1; pos <= pips; pos++) { pipPlotter.add(new float[] { middleColumn[0], middleColumn[1] }); middleColumn[0] += pipShift[0]; } pips = 17; for (int pos = 1; pos <= pips; pos++) { pipPlotter.add(new float[] { bottomColumn[0], bottomColumn[1] }); bottomColumn[0] += pipShift[0]; } ImageHelperVehicle.printArmorPoints(g2d, pipPlotter, totalArmor, hasModularArmor); } private void printExtraRearArmor(Graphics2D g2d, int totalArmor, boolean secondImage, boolean hasModularArmor) { int[] topColumn = new int[] { 420, 291 }; int[] middleColumn = new int[] { 420, 298 }; int[] bottomColumn = new int[] { 420, 305 }; int[] pipShift = new int[] { 5, 5 }; int pips = 24; Vector<float[]> pipPlotter = new Vector<float[]>(20); for (int pos = 1; pos <= pips; pos++) { pipPlotter.add(new float[] { topColumn[0], topColumn[1] }); topColumn[0] += pipShift[0]; } pips = 24; for (int pos = 1; pos <= pips; pos++) { pipPlotter.add(new float[] { middleColumn[0], middleColumn[1] }); middleColumn[0] += pipShift[0]; } pips = 24; for (int pos = 1; pos <= pips; pos++) { pipPlotter.add(new float[] { bottomColumn[0], bottomColumn[1] }); bottomColumn[0] += pipShift[0]; } pipPlotter.add(new float[] { 482, 312 }); ImageHelperVehicle.printArmorPoints(g2d, pipPlotter, totalArmor, 7.0f, hasModularArmor); } @SuppressWarnings("unused") private void printTurretArmor(Graphics2D g2d, int totalArmor, boolean secondImage, boolean hasModularArmor) { if (totalArmor < 1) { return; } float[] topColumn = new float[] { 458f, 233f }; float[] bottomColumn = new float[] { 451.5f, 240f }; float[] pipShift = new float[] { 6f, 6f }; // float fontSize = 8.0f; int pips = 7; Vector<float[]> pipPlotter = new Vector<float[]>(20); for (int pos = 1; pos <= pips; pos++) { pipPlotter.add(new float[] { topColumn[0], topColumn[1] }); topColumn[0] += pipShift[0]; } for (int pos = 1; pos <= 45; pos++) { pipPlotter.add(new float[] { bottomColumn[0], bottomColumn[1] }); bottomColumn[0] += pipShift[0]; if ((pos % 9) == 0) { bottomColumn[1] += pipShift[1]; pipShift[0] *= -1; bottomColumn[0] += pipShift[0]; } } ImageHelperVehicle.printArmorPoints(g2d, pipPlotter, totalArmor, hasModularArmor); } @SuppressWarnings("unused") private void printLeftArmor(Graphics2D g2d, int totalArmor, boolean secondImage, boolean hasModularArmor) { float[] topColumn = new float[] { 418.5f, 92.5f }; float[] pipShift = new float[] { 7, 7 }; Vector<float[]> pipPlotter = new Vector<float[]>(20); for (int pos = 1; pos <= 90; pos++) { pipPlotter.add(new float[] { topColumn[0], topColumn[1] }); switch (pos) { case 1: case 2: topColumn[1] += pipShift[1]; break; case 4: case 6: case 9: case 12: case 21: case 27: case 46: case 49: case 52: case 70: case 74: case 85: case 88: topColumn[1] += pipShift[1]; pipShift[0] *= -1; break; case 78: topColumn[1] += pipShift[1]; pipShift[0] *= -1; topColumn[0] -= 1.3; break; case 82: topColumn[1] += pipShift[1]; pipShift[0] *= -1; topColumn[0] += 1.3; break; case 43: topColumn[1] += pipShift[1]; pipShift[0] *= -1; topColumn[0] += pipShift[0]; break; case 39: topColumn[1] += pipShift[1]; pipShift[0] = Math.abs(pipShift[0]); topColumn[0] -= pipShift[0] * 5.2; break; case 55: topColumn[1] += pipShift[1]; topColumn[0] -= pipShift[0] * 2.2; break; case 58: case 60: case 62: case 64: topColumn[1] += pipShift[1]; topColumn[0] -= pipShift[0] * 1.25; break; case 66: topColumn[1] += pipShift[1] * 1.3; topColumn[0] -= pipShift[0]; break; case 16: case 33: topColumn[1] += pipShift[1]; pipShift[0] *= -1; topColumn[0] -= pipShift[0] * .5; break; case 79: case 81: case 87: topColumn[0] += pipShift[0] * .85; break; default: topColumn[0] += pipShift[0]; break; } } ImageHelperVehicle.printArmorPoints(g2d, pipPlotter, totalArmor, hasModularArmor); } @SuppressWarnings("unused") private void printRightArmor(Graphics2D g2d, int totalArmor, boolean secondImage, boolean hasModularArmor) { float[] topColumn = new float[] { 530f, 92 }; float[] pipShift = new float[] { 7, 7 }; Vector<float[]> pipPlotter = new Vector<float[]>(20); for (int pos = 1; pos <= 90; pos++) { pipPlotter.add(new float[] { topColumn[0], topColumn[1] }); switch (pos) { case 1: case 2: topColumn[1] += pipShift[1]; break; case 4: case 6: case 9: case 12: case 16: case 21: case 27: case 33: case 46: case 49: case 52: case 70: case 74: // case 78: case 85: case 82: case 88: topColumn[1] += pipShift[1]; pipShift[0] *= -1; break; case 78: topColumn[1] += pipShift[1]; topColumn[0] += 1.5f; pipShift[0] *= -.9f; break; case 43: topColumn[1] += pipShift[1]; pipShift[0] *= -1; topColumn[0] -= pipShift[0]; break; case 39: topColumn[1] += pipShift[1]; pipShift[0] = Math.abs(pipShift[0]); topColumn[0] += pipShift[0] * 5.5; break; case 55: topColumn[1] += pipShift[1]; topColumn[0] += pipShift[0] * 2.2; break; case 58: case 60: case 62: case 64: topColumn[1] += pipShift[1]; topColumn[0] += pipShift[0] * 1.25; break; case 66: topColumn[1] += pipShift[1] * 1.25; topColumn[0] += pipShift[0]; break; case 89: topColumn[0] -= pipShift[0] * .9; break; default: topColumn[0] -= pipShift[0]; break; } } ImageHelperVehicle.printArmorPoints(g2d, pipPlotter, totalArmor, hasModularArmor); } @SuppressWarnings("unused") private void printFrontStruct(Graphics2D g2d, int totalArmor, boolean secondImage) { int[] topColumn = new int[] { 462, 148 }; int[] bottomColumn = new int[] { 462, 156 }; int[] pipShift = new int[] { 7, 7 }; int pips = Math.min(5, totalArmor); totalArmor -= pips; topColumn[0] += pipShift[0] * ((5 - pips) / 2); for (int pos = 1; pos <= pips; pos++) { ImageHelperVehicle.drawTankISPip(g2d, topColumn[0], topColumn[1]); topColumn[0] += pipShift[0]; } bottomColumn[0] += pipShift[0] * ((5 - totalArmor) / 2); for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, bottomColumn[0], bottomColumn[1]); bottomColumn[0] += pipShift[0]; } } @SuppressWarnings("unused") private void printTurretStruct(Graphics2D g2d, int totalArmor, boolean secondImage) { float[] leftStart = new float[] { 447, 287 }; float[] leftEnd = new float[] { 447, 342 }; float[] midStart = new float[] { 454, 287 }; float[] midEnd = new float[] { 454, 342 }; float[] rightStart = new float[] { 461, 287 }; float[] rightEnd = new float[] { 461, 342 }; int pipsPerLine = totalArmor/3; int rest = totalArmor%3; Vector<float[]> leftPips; Vector<float[]> rightPips; Vector<float[]> midPips; if (rest == 2) { leftPips = ImageHelper.getPointsAlongLine(leftStart, leftEnd, pipsPerLine+1); midPips = ImageHelper.getPointsAlongLine(midStart, midEnd, pipsPerLine); rightPips = ImageHelper.getPointsAlongLine(rightStart, rightEnd, pipsPerLine+1); } else if (rest == 1) { leftPips = ImageHelper.getPointsAlongLine(leftStart, leftEnd, pipsPerLine); midPips = ImageHelper.getPointsAlongLine(midStart, midEnd, pipsPerLine+1); rightPips = ImageHelper.getPointsAlongLine(rightStart, rightEnd, pipsPerLine); } else { leftPips = ImageHelper.getPointsAlongLine(leftStart, leftEnd, pipsPerLine); midPips = ImageHelper.getPointsAlongLine(midStart, midEnd, pipsPerLine); rightPips = ImageHelper.getPointsAlongLine(rightStart, rightEnd, pipsPerLine); } for (float[] pip : leftPips) { ImageHelperVehicle.drawTankISPip(g2d, pip[0], pip[1]); } for (float[] pip : midPips) { ImageHelperVehicle.drawTankISPip(g2d, pip[0], pip[1]); } for (float[] pip : rightPips) { ImageHelperVehicle.drawTankISPip(g2d, pip[0], pip[1]); } } @SuppressWarnings("unused") private void printLeftStruct(Graphics2D g2d, int totalArmor, boolean secondImage) { int[] column = new int[] { 444, 164 }; int[] pipShift = new int[] { 2, 7 }; for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, column[0], column[1]); column[0] -= pipShift[0]; column[1] += pipShift[1]; } } @SuppressWarnings("unused") private void printRightStruct(Graphics2D g2d, int totalArmor, boolean secondImage) { int[] column = new int[] { 505, 164 }; int[] pipShift = new int[] { 2, 7 }; for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, column[0], column[1]); column[0] += pipShift[0]; column[1] += pipShift[1]; } } @SuppressWarnings("unused") private void printRearStruct(Graphics2D g2d, int totalArmor, boolean secondImage) { int[] column = new int[] { 445, 275 }; int[] pipShift = new int[] { 7, 7 }; column[0] += pipShift[0] * ((10 - totalArmor) / 2); for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, column[0], column[1]); column[0] += pipShift[0]; } } private void printTankImage(Graphics2D g2d) { Image img = ImageHelper.getFluffImage(sub, ImageHelper.imageVehicle); int width = Math.min(148, img.getWidth(null)); int height = Math.min(99, img.getHeight(null)); int drawingX = 247 + ((148 - width) / 2); int drawingY = 280 + ((99 - height) / 2); g2d.drawImage(img, drawingX, drawingY, width, height, Color.BLACK, null); } }