/* * MegaMekLab - Copyright (C) 2008 * * 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.geom.AffineTransform; 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.Crew; import megamek.common.Engine; import megamek.common.MiscType; import megamek.common.SupportVTOL; import megamek.common.Tank; import megamek.common.TechConstants; import megamek.common.VTOL; import megameklab.com.util.ImageHelper; import megameklab.com.util.ImageHelperVehicle; import megameklab.com.util.UnitUtil; import com.kitfox.svg.SVGException; public class PrintVTOL implements Printable { private VTOL vtol = null; private ArrayList<VTOL> vtolList; PrinterJob masterPrintJob; public PrintVTOL(ArrayList<VTOL> list, PrinterJob masterPrintJob) { vtolList = 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(); try { ImageHelper.loadSVGImage(new File("data/images/recordsheets/VTOLCommonTemplate.svg")).render(g2d); if (vtol.hasNoTurret()) { ImageHelper.loadSVGImage(new File("data/images/recordsheets/VTOLNoTurretTemplate.svg")).render(g2d); } else { ImageHelper.loadSVGImage(new File("data/images/recordsheets/VTOLTurretTemplate.svg")).render(g2d); } ImageHelper.loadSVGImage(new File("data/images/recordsheets/VTOLCatalystLogo.svg")).render(g2d); } catch (SVGException e) { e.printStackTrace(); } printVTOLData(g2d); printArmor(g2d); printWeaponsNEquipment(g2d); // Armor Pips printFrontArmor(g2d, vtol.getOArmor(Tank.LOC_FRONT)); printLeftArmor(g2d, vtol.getOArmor(Tank.LOC_LEFT)); printRightArmor(g2d, vtol.getOArmor(Tank.LOC_RIGHT)); printRearArmor(g2d, vtol.getOArmor(Tank.LOC_REAR)); printRotorArmor(g2d, vtol.getOArmor(VTOL.LOC_ROTOR)); if (!vtol.hasNoTurret()) { printTurretArmor(g2d, vtol.getOArmor(VTOL.LOC_TURRET)); } // Internal Pips printFrontStruct(g2d, vtol.getOInternal(Tank.LOC_FRONT)); printLeftStruct(g2d, vtol.getOInternal(Tank.LOC_LEFT)); printRightStruct(g2d, vtol.getOInternal(Tank.LOC_RIGHT)); printRearStruct(g2d, vtol.getOInternal(Tank.LOC_REAR)); printRotorStruct(g2d, vtol.getOInternal(VTOL.LOC_ROTOR)); if (!vtol.hasNoTurret()) { printTurretStruct(g2d, vtol.getOInternal(VTOL.LOC_TURRET)); } printVTOLImage(g2d); g2d.scale(pageFormat.getImageableWidth(), pageFormat.getImageableHeight()); } private void printVTOLData(Graphics2D g2d) { String VTOLName = vtol.getChassis() + " " + vtol.getModel(); g2d.setFont(UnitUtil.getNewFont(g2d, VTOLName, true, 180, 10.0f)); g2d.drawString(VTOLName, 55, 119); Font font = UnitUtil.deriveFont(true, 13.5f); g2d.setFont(font); if (vtol instanceof SupportVTOL) { g2d.drawString("SUPPORT", 73, 86.5f); } font = UnitUtil.deriveFont(8.0f); g2d.setFont(font); if ((vtol.getCrew() != null) && !vtol.getCrew().getName().equalsIgnoreCase("unnamed")) { Crew pilot = vtol.getCrew(); g2d.drawString(pilot.getName(), 276, 120); g2d.drawString(String.valueOf(pilot.getGunnery()), 301, 131); g2d.drawString(String.valueOf(pilot.getPiloting()), 371, 132); } g2d.drawString(Integer.toString(vtol.getWalkMP()), 85, 144); if (!vtol.hasWorkingMisc(MiscType.F_MASC, MiscType.S_JETBOOSTER)) { g2d.drawString(Integer.toString(vtol.getRunMP()), 85, 154); } else { int mascMP = vtol.getRunMP(); g2d.drawString(Integer.toString(vtol.getRunMPwithoutMASC()) + " [" + mascMP + "]", 85, 154); } String engineName = "Fusion Engine"; switch (vtol.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"; break; default: break; } g2d.drawString(engineName, 85, 165); if (vtol.getWeight() >= 5) { int tonnage = (int) Math.ceil(vtol.getWeight()); g2d.drawString(Integer.toString(tonnage), 183, 133); } else { g2d.drawString(String.format("%1$,d", vtol.getWeight()), 183, 133); } int nextDataLine = 153; float startLine = 200; int lineFeed = 8; String techBase = "Inner Sphere"; if (vtol.isMixedTech()) { if (vtol.isClan()) { techBase = "Mixed Tech (Clan)"; } else { techBase = "Mixed Tech (I.S.)"; } } else if (vtol.isClan()) { techBase = "Clan"; } font = UnitUtil.getNewFont(g2d, techBase, false, 52, 8); g2d.setFont(font); g2d.drawString(techBase, 183, 144.5f); switch (vtol.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; } font = UnitUtil.deriveFont(8.0f); g2d.setFont(font); if ((vtol.getSource() != null) && (vtol.getSource().trim().length() > 0)) { String sourceFluff = "Era: "; font = UnitUtil.deriveFont(true, 8.0f); g2d.setFont(font); g2d.drawString(sourceFluff, 150, nextDataLine); font = UnitUtil.getNewFont(g2d, vtol.getSource(), false, 51, 8.0f); g2d.setFont(font); g2d.drawString(vtol.getSource(), 183, nextDataLine); } else { String yearFluff = "Year: "; font = UnitUtil.deriveFont(true, 8.0f); g2d.setFont(font); g2d.drawString(yearFluff, 150, nextDataLine); font = UnitUtil.deriveFont(8.0f); g2d.setFont(font); g2d.drawString(String.format("%1$s", vtol.getYear()), 183, nextDataLine); } // Cost/BV // DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(); // unusualSymbols.setDecimalSeparator('.'); // unusualSymbols.setGroupingSeparator(','); // DecimalFormat myFormatter = new DecimalFormat("#,###", // unusualSymbols); double bv = vtol.calculateBattleValue(true, true); if (bv != -1) { font = UnitUtil.deriveFont(true, 8); g2d.setFont(font); g2d.drawString("BV: ", 35, 365); font = UnitUtil.deriveFont(false, 8); g2d.setFont(font); g2d.drawString( String.format("%1$,d", vtol.calculateBattleValue(true, true)), 50, 365); } // myFormatter = new DecimalFormat("#,###.##", unusualSymbols); // g2d.drawString(myFormatter.format(vtol.getCost(true)) + " C-bills", // 52, 357); if (UnitUtil.hasBAR(vtol)) { font = UnitUtil.deriveFont(true, 9.0f); g2d.drawString("BAR: " + UnitUtil.getLowestBARRating(vtol), 400, 55); } font = UnitUtil.deriveFont(true, 6.5f); g2d.setFont(font); g2d.drawString( Integer.toString(Calendar.getInstance().get(Calendar.YEAR)), 39.5f, 763.3f); } private void printArmor(Graphics2D g2d) { // Armor Font font = UnitUtil.deriveFont(true, 10.0f); g2d.setFont(font); ImageHelper.printCenterString(g2d, ImageHelperVehicle.getVehicleArmorTypeString(vtol), g2d.getFont(), 438, 45); //g2d.drawString(ImageHelperVehicle.getVehicleArmorTypeString(vtol), 463, //45); font = UnitUtil.deriveFont(true, 9.0f); g2d.setFont(font); g2d.drawString(Integer.toString(vtol.getArmor(Tank.LOC_FRONT)), 480 + (vtol.hasNoTurret() ? 0 : 60), 64 + (vtol.hasNoTurret() ? 0 : 48.5f)); if (vtol.hasNoTurret()) { g2d.drawString(Integer.toString(vtol.getArmor(Tank.LOC_RIGHT)), 544, 262 + (vtol.hasNoTurret() ? 0 : 36.5f)); g2d.drawString(Integer.toString(vtol.getArmor(Tank.LOC_LEFT)), 417, 195 + (vtol.hasNoTurret() ? 0 : 36.5f)); } else { AffineTransform at = new AffineTransform(); at.setToRotation(Math.toRadians(90), 547, 292); AffineTransform oldat = g2d.getTransform(); g2d.transform(at); g2d.drawString(Integer.toString(vtol.getArmor(Tank.LOC_RIGHT)), 547, 292); g2d.setTransform(oldat); at.setToRotation(Math.toRadians(270), 427, 232); g2d.transform(at); g2d.drawString(Integer.toString(vtol.getArmor(Tank.LOC_LEFT)), 427, 232); g2d.setTransform(oldat); } g2d.drawString(Integer.toString(vtol.getArmor(Tank.LOC_REAR)), 482, 344 + (vtol.hasNoTurret() ? 0 : 33)); g2d.drawString(Integer.toString(vtol.getArmor(VTOL.LOC_ROTOR)), 548 + (vtol.hasNoTurret() ? 0 : 8), 140 + (vtol.hasNoTurret() ? 0 : 36.5f)); if (!vtol.hasNoTurret()) { g2d.drawString(Integer.toString(vtol.getArmor(VTOL.LOC_TURRET)), 444, 75); } } private void printWeaponsNEquipment(Graphics2D g2d) { ImageHelperVehicle.printVTOLWeaponsNEquipment(vtol, g2d, 6, 9); } public void print(HashPrintRequestAttributeSet aset) { try { for (int pos = 0; pos < vtolList.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); vtol = vtolList.get(pos); pj.setJobName(vtol.getChassis() + " " + vtol.getModel()); try { pj.print(aset); } catch (Exception ex) { ex.printStackTrace(); } finally { System.gc(); } } } catch (Exception ex) { ex.printStackTrace(); } } private void printFrontArmor(Graphics2D g2d, int totalArmor) { float turretVTOLOffset = vtol.hasNoTurret() ? 0 : 25; float[] topColumn = { 471, 82 + turretVTOLOffset }; float[] middleColumn = { 466, 88 + turretVTOLOffset }; float[] pipShift = { 6, 6 }; if (totalArmor < 1) { return; } int pips = Math.min(5, totalArmor); totalArmor -= pips; for (int pos = 1; pos <= pips; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, topColumn[0], topColumn[1], 8.0f); topColumn[0] += pipShift[0]; } for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, middleColumn[0], middleColumn[1], 8.0f); middleColumn[0] += pipShift[0]; if ((pos % 7) == 0) { middleColumn[1] += pipShift[1]; pipShift[0] *= -1; middleColumn[0] += pipShift[0]; } if (pos == 28) { middleColumn[0] += pipShift[0]; } } } private void printTurretArmor(Graphics2D g2d, int totalArmor) { if (totalArmor < 1) { return; } if (totalArmor <= 10) { float[] topColumn = { 473, 62 }; float[] middleColumn = { 473, 70 }; float[] pipShift = { 6, 6 }; int pips = Math.min(5, totalArmor); totalArmor -= pips; for (int pos = 1; pos <= pips; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, topColumn[0], topColumn[1], 8.0f); topColumn[0] += pipShift[0]; } for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, middleColumn[0], middleColumn[1], 8.0f); middleColumn[0] += pipShift[0]; } } else { float[] topColumn = { 473.5f, 57.5f }; float[] middleColumn = { 471.5f, 64f }; float[] midldeColumn2 = { 466f, 70.5f}; float[] bottomColumn = { 469.5f, 77f}; float[] pipShift = { 5.5f, 5.5f }; int pips = Math.min(5, totalArmor); totalArmor -= pips; for (int pos = 1; pos <= pips; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, topColumn[0], topColumn[1], 7.0f); topColumn[0] += pipShift[0]; } pips = Math.min(6, totalArmor); totalArmor -= pips; for (int pos = 1; pos <= pips; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, middleColumn[0], middleColumn[1], 7.0f); middleColumn[0] += pipShift[0]; } pips = Math.min(8, totalArmor); totalArmor -= pips; for (int pos = 1; pos <= pips; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, midldeColumn2[0], midldeColumn2[1], 7.0f); midldeColumn2[0] += pipShift[0]; } for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, bottomColumn[0], bottomColumn[1], 7.0f); bottomColumn[0] += pipShift[0]; } } } private void printRearArmor(Graphics2D g2d, int totalArmor) { float turretVTOLOffset = vtol.hasNoTurret() ? 0 : 30.5f; float[] topColumn = new float[] { 485f, 256 + turretVTOLOffset }; float[] pipShift = new float[] { 6, 6 }; float fontSize = 8.0f; if (totalArmor > 11) { fontSize = 7; pipShift[0] = pipShift[1] = 5; } if (totalArmor > 13) { fontSize = 6; pipShift[0] = pipShift[1] = 4.5f; } if (totalArmor > 15) { fontSize = 7; float[] firstColStart = new float[] { 481, 256 + turretVTOLOffset }; float[] firstColEnd = new float[] { 481, 307 + turretVTOLOffset }; float[] secondColStart = new float[] { 489, 256 + turretVTOLOffset }; float[] secondColEnd = new float[] { 489, 307 + turretVTOLOffset }; int firstColPips = totalArmor / 2; int secondColPips = (totalArmor / 2); Vector<float[]> first = ImageHelper.getPointsAlongLine( firstColStart, firstColEnd, firstColPips); Vector<float[]> second = ImageHelper.getPointsAlongLine( secondColStart, secondColEnd, secondColPips); for (float[] pip : first) { ImageHelperVehicle.drawTankArmorPip(g2d, pip[0], pip[1], fontSize); } for (float[] pip : second) { ImageHelperVehicle.drawTankArmorPip(g2d, pip[0], pip[1], fontSize); } if ((totalArmor % 2) != 0) { ImageHelperVehicle.drawTankArmorPip(g2d, 485, 312 + turretVTOLOffset, fontSize); } return; } for (int pos = 1; pos <= totalArmor; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, topColumn[0], topColumn[1], fontSize); topColumn[1] += pipShift[1]; } } private void printRotorArmor(Graphics2D g2d, int totalArmor) { float turretVTOLOffset = vtol.hasNoTurret() ? 0 : 36.5f; float[][] armor = { { 405, 154.5f + turretVTOLOffset }, { 562, 154.5f + turretVTOLOffset } }; for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, armor[pos][0], armor[pos][1]); } } private void printLeftArmor(Graphics2D g2d, int totalArmor) { float turretVTOLYOffset = vtol.hasNoTurret() ? 0 : 36.5f; float turretVTOLXOffset = vtol.hasNoTurret() ? 0 : -10; float[] topColumn = new float[] { 454 + turretVTOLXOffset, 106 + turretVTOLYOffset }; float[] pipShift = new float[] { 6, 6 }; float fontSize = 8.0f; for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, topColumn[0], topColumn[1], fontSize); switch (pos) { case 0: topColumn[1] += pipShift[1]; break; case 2: topColumn[1] += pipShift[1]; topColumn[0] += pipShift[0]; break; case 3: pipShift[0] *= -1; topColumn[0] += pipShift[0]; break; case 5: case 8: case 11: case 14: case 19: case 21: case 23: case 25: topColumn[1] += pipShift[1]; pipShift[0] *= -1; break; case 17: topColumn[1] += pipShift[1] * 3.75; topColumn[0] += pipShift[0] * -2.25; break; case 27: pipShift[0] *= -1; topColumn[1] += pipShift[1]; break; case 28: topColumn[0] += pipShift[0]; break; case 29: case 30: case 31: topColumn[1] += pipShift[1]; break; default: topColumn[0] += pipShift[0]; break; } } } private void printRightArmor(Graphics2D g2d, int totalArmor) { float turretVTOLOffset = vtol.hasNoTurret() ? 0 : 36.5f; float turretVTOLXOffset = vtol.hasNoTurret() ? 0 : 10; float[] topColumn = new float[] { 513 + turretVTOLXOffset, 106 + turretVTOLOffset }; float[] pipShift = new float[] { 6, 6 }; float fontSize = 8.0f; for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankArmorPip(g2d, topColumn[0], topColumn[1], fontSize); switch (pos) { case 0: topColumn[1] += pipShift[1]; break; case 2: topColumn[1] += pipShift[1]; topColumn[0] -= pipShift[0]; break; case 3: pipShift[0] *= -1; topColumn[0] -= pipShift[0]; break; case 5: case 8: case 11: case 14: case 19: case 21: case 23: case 25: topColumn[1] += pipShift[1]; pipShift[0] *= -1; break; case 17: topColumn[1] += pipShift[1] * 3.75; topColumn[0] -= pipShift[0] * -2.10; break; case 27: pipShift[0] *= -1; topColumn[1] += pipShift[1]; break; case 28: topColumn[0] -= pipShift[0]; break; case 29: case 30: case 31: topColumn[1] += pipShift[1]; break; default: topColumn[0] -= pipShift[0]; break; } } } private void printFrontStruct(Graphics2D g2d, int totalArmor) { float turretVTOLYOffset = vtol.hasNoTurret() ? 0 : 36.5f; float turretVTOLXOffset = vtol.hasNoTurret() ? 0 : 1; float[][] struct = { { 483.5f + turretVTOLXOffset, 119 + turretVTOLYOffset }, { 483.5f + turretVTOLXOffset, 128 + turretVTOLYOffset }, { 483.5f + turretVTOLXOffset, 137 + turretVTOLYOffset } }; if (totalArmor > 3) { struct = new float[][] { { 477 + turretVTOLXOffset, 119 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 128 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 137 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 119 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 128 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 137 + turretVTOLYOffset } }; } for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, struct[pos][0], struct[pos][1]); } } private void printRotorStruct(Graphics2D g2d, int totalArmor) { float turretVTOLXOffset = vtol.hasNoTurret() ? 0 : 1; float turretVTOLYOffset = vtol.hasNoTurret() ? 0 : 36.5f; float[][] struct = { { 483.5f + turretVTOLXOffset, 148 + turretVTOLYOffset }, { 433.5f + turretVTOLXOffset, 148 + turretVTOLYOffset }, { 533.5f + turretVTOLXOffset, 148 + turretVTOLYOffset } }; if (totalArmor > 3) { struct = new float[][] { { 483.5f + turretVTOLXOffset, 148 + turretVTOLYOffset }, { 433.5f + turretVTOLXOffset, 148 + turretVTOLYOffset }, { 533.5f + turretVTOLXOffset, 148 + turretVTOLYOffset }, { 463.5f + turretVTOLXOffset, 148 + turretVTOLYOffset }, { 453.5f + turretVTOLXOffset, 148 + turretVTOLYOffset }, { 513.5f + turretVTOLXOffset, 148 + turretVTOLYOffset } }; } for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, struct[pos][0], struct[pos][1]); } } private void printLeftStruct(Graphics2D g2d, int totalArmor) { float turretVTOLXOffset = vtol.hasNoTurret() ? 0 : 1f; float turretVTOLYOffset = vtol.hasNoTurret() ? 0 : 36.5f; float[][] struct = { { 477 + turretVTOLXOffset, 164 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 178 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 192 + turretVTOLYOffset } }; if (totalArmor > 3) { struct = new float[][] { { 477 + turretVTOLXOffset, 164 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 171 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 178 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 185 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 192 + turretVTOLYOffset }, { 477 + turretVTOLXOffset, 199 + turretVTOLYOffset } }; } for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, struct[pos][0], struct[pos][1]); } } private void printTurretStruct(Graphics2D g2d, int totalArmor) { float[][] struct = { { 476, 79 }, { 485, 79 }, { 494, 79 }, { 476, 86 }, { 485, 86 }, { 494, 86 } }; for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, struct[pos][0], struct[pos][1]); } } private void printRightStruct(Graphics2D g2d, int totalArmor) { float turretVTOLXOffset = vtol.hasNoTurret() ? 0 : 1f; float turretVTOLYOffset = vtol.hasNoTurret() ? 0 : 36.5f; float[][] struct = { { 490 + turretVTOLXOffset, 164 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 178 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 192 + turretVTOLYOffset } }; if (totalArmor > 3) { struct = new float[][] { { 490 + turretVTOLXOffset, 164 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 171 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 178 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 185 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 192 + turretVTOLYOffset }, { 490 + turretVTOLXOffset, 199 + turretVTOLYOffset } }; } for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, struct[pos][0], struct[pos][1]); } } private void printRearStruct(Graphics2D g2d, int totalArmor) { float turretVTOLXOffset = vtol.hasNoTurret() ? 0 : 1; float turretVTOLYOffset = vtol.hasNoTurret() ? 0 : 36.5f; float[][] struct = { { 483.5f + turretVTOLXOffset, 216 + turretVTOLYOffset }, { 483.5f + turretVTOLXOffset, 225 + turretVTOLYOffset }, { 483.5f + turretVTOLXOffset, 234 + turretVTOLYOffset } }; if (totalArmor > 3) { struct = new float[][] { { 479 + turretVTOLXOffset, 216 + turretVTOLYOffset }, { 479 + turretVTOLXOffset, 225 + turretVTOLYOffset }, { 479 + turretVTOLXOffset, 234 + turretVTOLYOffset }, { 488.5f + turretVTOLXOffset, 216 + turretVTOLYOffset }, { 488.5f + turretVTOLXOffset, 225 + turretVTOLYOffset }, { 488.5f + turretVTOLXOffset, 234 + turretVTOLYOffset } }; } for (int pos = 0; pos < totalArmor; pos++) { ImageHelperVehicle.drawTankISPip(g2d, struct[pos][0], struct[pos][1]); } } private void printVTOLImage(Graphics2D g2d) { Image img = ImageHelper.getFluffImage(vtol, ImageHelper.imageVehicle); int width, height, drawingX, drawingY; if (vtol.hasNoTurret()) { width = Math.min(148, img.getWidth(null)); height = Math.min(120, img.getHeight(null)); drawingX = 246 + ((148 - width) / 2); drawingY = 258 + ((120 - height) / 2); } else { width = Math.min(148, img.getWidth(null)); height = Math.min(97, img.getHeight(null)); drawingX = 246 + ((148 - width) / 2); drawingY = 280 + ((97 - height) / 2); } g2d.drawImage(img, drawingX, drawingY, width, height, Color.BLACK, null); } }