/*
* MegaMekLab - Copyright (C) 2010
*
* 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.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.Tank;
import megamek.common.TechConstants;
import megameklab.com.util.ImageHelper;
import megameklab.com.util.ImageHelperVehicle;
import megameklab.com.util.UnitUtil;
public class PrintWiGE implements Printable {
private Tank tank = null;
private Tank tank2 = null;
private ArrayList<Tank> tankList;
private int secondPageMargin = 373; // How far down the text should be
private boolean singlePrint = false;
PrinterJob masterPrintJob;
// printed for a second vehicle.
public PrintWiGE(ArrayList<Tank> list, boolean singlePrint, PrinterJob masterPrintJob) {
tankList = list;
this.singlePrint = singlePrint;
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;
// f.setPaper(this.paper);
printImage(g2d, pageFormat);
return Printable.PAGE_EXISTS;
}
public void printImage(Graphics2D g2d, PageFormat pageFormat) {
if (g2d == null) {
return;
}
System.gc();
g2d.drawImage(ImageHelper.getRecordSheet(tank, false), 18, 18, 558, 368, null);
if (tank.getOInternal(Tank.LOC_TURRET) > 0) {
g2d.drawImage(ImageHelperVehicle.getTurretImage(tank), 436, 173, 77, 96, null);
g2d.drawImage(ImageHelperVehicle.getTurretLabelImage(), 297, 248, 34, 11, null);
g2d.setFont(UnitUtil.deriveFont(true, 8.0f));
g2d.drawString("Turret Armor", 517, 51);
}
if (tank2 == null) {
g2d.drawImage(ImageHelperVehicle.getTableImage(tank), 18, 18 + secondPageMargin, 558, 368, null);
} else {
g2d.drawImage(ImageHelper.getRecordSheet(tank2, false), 18, 18 + secondPageMargin, 558, 368, null);
if (tank2.getOInternal(Tank.LOC_TURRET) > 0) {
g2d.drawImage(ImageHelperVehicle.getTurretImage(tank2), 436, 173 + secondPageMargin, 77, 96, null);
g2d.drawImage(ImageHelperVehicle.getTurretLabelImage(), 297, 248 + secondPageMargin, 34, 11, null);
g2d.setFont(UnitUtil.deriveFont(true, 8.0f));
g2d.drawString("Turret Armor", 517, 51 + secondPageMargin);
}
}
printTankData(g2d);
printArmor(g2d);
printWeaponsNEquipment(g2d);
Font font = UnitUtil.deriveFont(true, 9.0f);
g2d.setFont(font);
// Armor Pips
printFrontArmor(g2d, tank.getOArmor(Tank.LOC_FRONT), false);
printLeftArmor(g2d, tank.getOArmor(Tank.LOC_LEFT), false);
printRightArmor(g2d, tank.getOArmor(Tank.LOC_RIGHT), false);
printRearArmor(g2d, tank.getOArmor(Tank.LOC_REAR), false);
printTurretArmor(g2d, tank.getOArmor(Tank.LOC_TURRET), false);
// Internal Pips
printFrontStruct(g2d, tank.getOInternal(Tank.LOC_FRONT), false);
printLeftStruct(g2d, tank.getOInternal(Tank.LOC_LEFT), false);
printRightStruct(g2d, tank.getOInternal(Tank.LOC_RIGHT), false);
printRearStruct(g2d, tank.getOInternal(Tank.LOC_REAR), false);
printTurretStruct(g2d, tank.getOInternal(Tank.LOC_TURRET), false);
if (tank2 != null) {
// Armor Pips
printFrontArmor(g2d, tank2.getOArmor(Tank.LOC_FRONT), true);
printLeftArmor(g2d, tank2.getOArmor(Tank.LOC_LEFT), true);
printRightArmor(g2d, tank2.getOArmor(Tank.LOC_RIGHT), true);
printRearArmor(g2d, tank2.getOArmor(Tank.LOC_REAR), true);
printTurretArmor(g2d, tank2.getOArmor(Tank.LOC_TURRET), true);
// Internal Pips
printFrontStruct(g2d, tank2.getOInternal(Tank.LOC_FRONT), true);
printLeftStruct(g2d, tank2.getOInternal(Tank.LOC_LEFT), true);
printRightStruct(g2d, tank2.getOInternal(Tank.LOC_RIGHT), true);
printRearStruct(g2d, tank2.getOInternal(Tank.LOC_REAR), true);
printTurretStruct(g2d, tank2.getOInternal(Tank.LOC_TURRET), true);
}
printTankImage(g2d);
g2d.scale(pageFormat.getImageableWidth(), pageFormat.getImageableHeight());
}
private void printTankData(Graphics2D g2d) {
String tankName = tank.getChassis() + " " + tank.getModel();
g2d.setFont(UnitUtil.getNewFont(g2d, tankName, true, 180, 10.0f));
g2d.drawString(tankName, 49, 120);
Font font = UnitUtil.deriveFont(8.0f);
g2d.setFont(font);
if ((tank.getCrew() != null) && !tank.getCrew().getName().equalsIgnoreCase("unnamed")) {
Crew pilot = tank.getCrew();
g2d.drawString(pilot.getName(), 270, 120);
g2d.drawString(String.valueOf(pilot.getGunnery()), 295, 132);
g2d.drawString(String.valueOf(pilot.getPiloting()), 365, 132);
}
g2d.drawString(Integer.toString(tank.getWalkMP()), 79, 144);
if (!tank.hasWorkingMisc(MiscType.F_MASC, MiscType.S_SUPERCHARGER)) {
g2d.drawString(Integer.toString(tank.getRunMP()), 79, 155);
} else {
int mascMP = tank.getRunMP();
g2d.drawString(Integer.toString(tank.getRunMPwithoutMASC()) + " [" + mascMP + "]", 79, 155);
}
g2d.drawString(tank.getMovementModeAsString(), 88, 166);
String engineName = "Fusion Engine";
switch (tank.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, 79, 177);
if (tank.getWeight() >= 5) {
int tonnage = (int) Math.ceil(tank.getWeight());
g2d.drawString(Integer.toString(tonnage), 177, 134);
} else {
// DecimalFormatSymbols unusualSymbols =
// new DecimalFormatSymbols();
// unusualSymbols.setDecimalSeparator('.');
// unusualSymbols.setGroupingSeparator(',');
// DecimalFormat myFormatter = new DecimalFormat("#.###",
// unusualSymbols);
g2d.drawString(String.format("%1$,.1f", tank.getWeight()), 177, 134);
}
int nextDataLine = 153;
int startLine = 188;
int lineFeed = 8;
switch (tank.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 (tank.isMixedTech()) {
if (tank.isClan()) {
techBase = "Mixed Tech (Clan)";
} else {
techBase = "Mixed Tech (I.S.)";
}
} else if (tank.isClan()) {
techBase = "Clan";
}
g2d.drawString(techBase, 177, 145);
if ((tank.getSource() != null) && (tank.getSource().trim().length() > 0)) {
String sourceFluff = "Era: ";
font = UnitUtil.deriveFont(true, 8.0f);
g2d.setFont(font);
g2d.drawString(sourceFluff, 138, nextDataLine);
font = UnitUtil.getNewFont(g2d, tank.getSource(), false, 51, 8.0f);
g2d.setFont(font);
g2d.drawString(tank.getSource(), 177, nextDataLine);
} else {
String yearFluff = "Year: ";
font = UnitUtil.deriveFont(true, 8.0f);
g2d.setFont(font);
g2d.drawString(yearFluff, 138, nextDataLine);
font = UnitUtil.deriveFont(8.0f);
g2d.setFont(font);
g2d.drawString(String.format("%1$s", tank.getYear()), 177, nextDataLine);
}
// g2d.drawString(Integer.toString(tank.getYear()), 188, 155);
// Cost/BV
// DecimalFormatSymbols unusualSymbols =
// new DecimalFormatSymbols();
// unusualSymbols.setDecimalSeparator('.');
// unusualSymbols.setGroupingSeparator(',');
// DecimalFormat myFormatter = new DecimalFormat("#,###",
// unusualSymbols);
double bv = tank.calculateBattleValue(true, true);
if (bv != -1) {
font = UnitUtil.deriveFont(true, 8);
g2d.setFont(font);
g2d.drawString("BV: ", 35, 357);
font = UnitUtil.deriveFont(false, 8);
g2d.setFont(font);
g2d.drawString(String.format("%1$,d", tank.calculateBattleValue(true, true)), 50, 357);
}
// myFormatter = new DecimalFormat("#,###.##", unusualSymbols);
// g2d.drawString(myFormatter.format(tank.getCost(true)) + " C-bills",
// 52, 357);
if (UnitUtil.hasBAR(tank)) {
font = UnitUtil.deriveFont(true, 9.0f);
g2d.drawString("BAR: " + UnitUtil.getLowestBARRating(tank), 400, 64);
}
font = UnitUtil.deriveFont(true, 7);
g2d.setFont(font);
g2d.drawString(Integer.toString(Calendar.getInstance().get(Calendar.YEAR)), 62.5f, 374f);
if (tank2 != null) {
printTank2Data(g2d);
} else {
g2d.drawString(Integer.toString(Calendar.getInstance().get(Calendar.YEAR)), 62.5f, 374f + secondPageMargin);
}
}
private void printTank2Data(Graphics2D g2d) {
String tankName = tank2.getChassis().toUpperCase() + " " + tank2.getModel().toUpperCase();
g2d.setFont(UnitUtil.getNewFont(g2d, tankName, true, 180, 10.0f));
g2d.drawString(tankName, 49, 493);
Font font = UnitUtil.deriveFont(8.0f);
g2d.setFont(font);
if ((tank2.getCrew() != null) && !tank2.getCrew().getName().equalsIgnoreCase("unnamed")) {
Crew pilot = tank2.getCrew();
g2d.drawString(pilot.getName(), 270, 120 + secondPageMargin);
g2d.drawString(String.valueOf(pilot.getGunnery()), 295, 132 + secondPageMargin);
g2d.drawString(String.valueOf(pilot.getPiloting()), 365, 132 + secondPageMargin);
}
g2d.drawString(Integer.toString(tank2.getWalkMP()), 79, 144 + secondPageMargin);
if (!tank.hasWorkingMisc(MiscType.F_MASC, MiscType.S_SUPERCHARGER)) {
g2d.drawString(Integer.toString(tank.getRunMP()), 79, 155 + secondPageMargin);
} else {
int mascMP = tank.getRunMP();
g2d.drawString(Integer.toString(tank.getRunMPwithoutMASC()) + " [" + mascMP + "]", 79, 155 + secondPageMargin);
}
g2d.drawString(tank2.getMovementModeAsString(), 88, 537);
String engineName = "Fusion Engine";
switch (tank2.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, 79, 548);
if (tank2.getWeight() >= 5) {
int tonnage = (int) Math.ceil(tank2.getWeight());
g2d.drawString(Integer.toString(tonnage), 177, 505);
} else {
// DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols();
// unusualSymbols.setDecimalSeparator('.');
// unusualSymbols.setGroupingSeparator(',');
// DecimalFormat myFormatter = new DecimalFormat("#.###",
// unusualSymbols);
g2d.drawString(String.format("%1$,d", tank2.getWeight()), 177, 505);
}
int nextDataLine = 155 + secondPageMargin;
int startLine = 188;
int lineFeed = 8;
switch (tank2.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 (tank2.isMixedTech()) {
if (tank2.isClan()) {
techBase = "Mixed Tech (Clan)";
} else {
techBase = "Mixed Tech (I.S.)";
}
} else if (tank2.isClan()) {
techBase = "Clan";
}
g2d.drawString(techBase, 177, 145);
if ((tank2.getSource() != null) && (tank2.getSource().trim().length() > 0)) {
String sourceFluff = "Era: ";
font = UnitUtil.deriveFont(true, 8.0f);
g2d.setFont(font);
g2d.drawString(sourceFluff, 138, nextDataLine);
font = UnitUtil.getNewFont(g2d, tank2.getSource(), false, 51, 8.0f);
g2d.setFont(font);
g2d.drawString(tank2.getSource(), 177, nextDataLine);
} else {
String yearFluff = "Year: ";
font = UnitUtil.deriveFont(true, 8.0f);
g2d.setFont(font);
g2d.drawString(yearFluff, 138, nextDataLine);
font = UnitUtil.deriveFont(8.0f);
g2d.setFont(font);
g2d.drawString(String.format("%1$s", tank2.getYear()), 177, nextDataLine);
}
// Cost/BV
// DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols();
// unusualSymbols.setDecimalSeparator('.');
// unusualSymbols.setGroupingSeparator(',');
// DecimalFormat myFormatter = new DecimalFormat("#,###",
// unusualSymbols);
double bv = tank2.calculateBattleValue(true, true);
if (bv != -1) {
font = UnitUtil.deriveFont(true, 8);
g2d.setFont(font);
g2d.drawString("BV: ", 35, 357 + secondPageMargin);
font = UnitUtil.deriveFont(false, 8);
g2d.setFont(font);
g2d.drawString(String.format("%1$,d", tank2.calculateBattleValue(true, true)), 50, 357 + secondPageMargin);
}
// myFormatter = new DecimalFormat("#,###.##", unusualSymbols);
// g2d.drawString(myFormatter.format(tank2.getCost(true)) + " C-bills",
// 52, 728);
if (UnitUtil.hasBAR(tank2)) {
font = UnitUtil.deriveFont(true, 9.0f);
g2d.drawString("BAR: " + UnitUtil.getLowestBARRating(tank2), 400, 64 + secondPageMargin);
}
font = UnitUtil.deriveFont(true, 7);
g2d.setFont(font);
g2d.drawString("2011", 105f, 745.5f);
}
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(tank), g2d.getFont(), 478, 48);
//g2d.drawString(ImageHelperVehicle.getVehicleArmorTypeString(tank), 463, 48);
font = UnitUtil.deriveFont(true, 9.0f);
g2d.setFont(font);
g2d.drawString("(" + Integer.toString(tank.getArmor(Tank.LOC_FRONT)) + ")", 467, 60);
g2d.drawString("(" + tank.getArmor(Tank.LOC_RIGHT) + ")", 554, 210);
g2d.drawString("(" + tank.getArmor(Tank.LOC_LEFT) + ")", 384, 155);
g2d.drawString("(" + Integer.toString(tank.getArmor(Tank.LOC_REAR)) + ")", 467, 342);
if (tank.getOInternal(Tank.LOC_TURRET) > 0) {
g2d.drawString("(" + Integer.toString(tank.getArmor(Tank.LOC_TURRET)) + ")", 535, 60);
}
if (tank2 != null) {
font = UnitUtil.deriveFont(true, 11.0f);
g2d.setFont(font);
ImageHelper.printCenterString(g2d, ImageHelperVehicle.getVehicleArmorTypeString(tank2), g2d.getFont(), 478, 48 + secondPageMargin);
//g2d.drawString(ImageHelperVehicle.getVehicleArmorTypeString(tank2), 463, 48 + secondPageMargin);
font = UnitUtil.deriveFont(true, 9.0f);
g2d.setFont(font);
g2d.drawString("(" + Integer.toString(tank2.getArmor(Tank.LOC_FRONT)) + ")", 467, 60 + secondPageMargin);
g2d.drawString("(" + tank2.getArmor(Tank.LOC_RIGHT) + ")", 554, 210 + secondPageMargin);
g2d.drawString("(" + tank2.getArmor(Tank.LOC_LEFT) + ")", 384, 155 + secondPageMargin);
g2d.drawString("(" + Integer.toString(tank2.getArmor(Tank.LOC_REAR)) + ")", 467, 342 + secondPageMargin);
if (tank2.getOInternal(Tank.LOC_TURRET) > 0) {
g2d.drawString("(" + Integer.toString(tank2.getArmor(Tank.LOC_TURRET)) + ")", 535, 60 + secondPageMargin);
}
}
}
private void printWeaponsNEquipment(Graphics2D g2d) {
ImageHelperVehicle.printTankWeaponsNEquipment(tank, g2d);
if (tank2 != null) {
ImageHelperVehicle.printTankWeaponsNEquipment(tank2, g2d, secondPageMargin);
}
}
public void print(HashPrintRequestAttributeSet aset) {
try {
for (int pos = 0; pos < tankList.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);
tank = tankList.get(pos);
pj.setJobName(tank.getChassis() + " " + tank.getModel());
if (!singlePrint && ((pos + 1) < tankList.size())) {
tank2 = tankList.get(++pos);
} else {
tank2 = null;
}
try {
pj.print(aset);
} catch (Exception ex) {
ex.printStackTrace();
} finally {
System.gc();
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void printFrontArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 466f;
float baseY = 75.0f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.4f;
float shiftY = 7f;
int pipsPerLine = 3;
if (secondImage) {
baseY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(86, 1);
for (int lineCount = 1; lineCount <= 12; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
if (lineCount < 8) {
pipsPerLine += 1;
baseX -= shiftX / 2;
} else if (lineCount > 9) {
pipsPerLine -= 1;
baseX += shiftX / 2;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printRearArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
float baseX = 417.5f;
float baseY = 287f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.45f;
float shiftY = 6.45f;
int pipsPerLine = 18;
if (secondImage) {
baseY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(86, 1);
for (int lineCount = 1; lineCount <= 5; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
if (lineCount == 1) {
pipsPerLine += 2;
baseX -= shiftX;
} else if (lineCount == 2) {
pipsPerLine -= 2;
baseX += shiftX;
} else if (lineCount == 3) {
pipsPerLine -= 2;
baseX += shiftX;
} else if (lineCount == 4) {
pipsPerLine -= 2;
baseX += shiftX;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printTurretArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 453.2f;
float baseY = 230f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6f;
float shiftY = 6.5f;
int pipsPerLine = 7;
if (secondImage) {
baseY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(86, 1);
for (int lineCount = 1; lineCount <= 6; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
if ((lineCount == 2) || (lineCount == 4)) {
baseX -= shiftX;
pipsPerLine += 2;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printLeftArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
float baseX = 435f;
float baseY = 156f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.5f;
float shiftY = 7f;
int pipsPerLine = 2;
if (secondImage) {
baseY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(86, 1);
for (int lineCount = 1; lineCount <= 20; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
if ((lineCount == 2)) {
pipsPerLine += 2;
baseX -= shiftX * 1.6f;
} else if (lineCount == 3) {
pipsPerLine += 2;
baseX -= shiftX;
} else if (lineCount == 4) {
pipsPerLine -= 1;
baseX -= shiftX / 2;
} else if (lineCount == 5) {
baseX -= shiftX / 2;
} else if ((lineCount > 6) && (lineCount < 9)) {
baseX -= shiftX / 2;
} else if (lineCount == 10) {
baseX -= shiftX / 2;
} else if (lineCount == 12) {
pipsPerLine += 1;
baseX -= shiftX * 1.8;
} else if ((lineCount == 14) || (lineCount == 18)) {
pipsPerLine -= 1;
} else if (lineCount == 19) {
pipsPerLine = 1;
baseX += shiftX * 1.5;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printRightArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
float baseX = 502.5f;
float baseY = 156f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.5f;
float shiftY = 7f;
int pipsPerLine = 2;
if (secondImage) {
baseY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(86, 1);
for (int lineCount = 1; lineCount <= 20; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
if (lineCount == 2) {
pipsPerLine += 2;
baseX -= shiftX * 0.3f;
} else if (lineCount == 3) {
pipsPerLine += 2;
baseX -= shiftX;
} else if (lineCount == 4) {
pipsPerLine -= 1;
baseX += shiftX * 1.4f;
} else if (lineCount == 5) {
baseX += shiftX * .7f;
} else if ((lineCount > 6) && (lineCount < 9)) {
baseX += shiftX / 2;
} else if (lineCount == 10) {
baseX += shiftX / 2;
} else if (lineCount == 12) {
pipsPerLine += 1;
baseX += shiftX * .6;
} else if ((lineCount == 14) || (lineCount == 18)) {
pipsPerLine -= 1;
baseX += shiftX;
} else if (lineCount == 19) {
pipsPerLine = 1;
baseX += shiftX * 3f;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printFrontStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
float[] topCenter = new float[]
{ 472.4f, 154.4f };
float[] bottomCenter = new float[]
{ 472.4f, 160.7f };
float[] pipShift = new float[]
{ 7, 7 };
if (secondImage) {
topCenter[1] += secondPageMargin;
bottomCenter[1] += secondPageMargin;
}
int pips = Math.min(5, totalArmor);
totalArmor -= pips;
boolean shiftleft = true;
for (int pos = 1; pos <= pips; pos++) {
ImageHelperVehicle.drawTankISPip(g2d, topCenter[0], topCenter[1]);
topCenter[0] += (pipShift[0] * pos * (shiftleft ? -1 : 1));
shiftleft = !shiftleft;
}
shiftleft = true;
for (int pos = 1; pos <= totalArmor; pos++) {
ImageHelperVehicle.drawTankISPip(g2d, bottomCenter[0], bottomCenter[1]);
bottomCenter[0] += (pipShift[0] * pos * (shiftleft ? -1 : 1));
shiftleft = !shiftleft;
}
}
private void printTurretStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
float[] topColumn = new float[]
{ 472.4f, 207 };
float[] bottomColumn = new float[]
{ 472.4f, 215 };
float[] pipShift = new float[]
{ 7, 7 };
if (totalArmor < 1) {
return;
}
if (secondImage) {
topColumn[1] += secondPageMargin;
bottomColumn[1] += secondPageMargin;
}
int pips = Math.min(5, totalArmor);
totalArmor -= pips;
boolean shiftleft = true;
for (int pos = 1; pos <= pips; pos++) {
ImageHelperVehicle.drawTankISPip(g2d, topColumn[0], topColumn[1]);
topColumn[0] += (pipShift[0] * pos * (shiftleft ? -1 : 1));
shiftleft = !shiftleft;
}
shiftleft = true;
for (int pos = 1; pos <= totalArmor; pos++) {
ImageHelperVehicle.drawTankISPip(g2d, bottomColumn[0], bottomColumn[1]);
bottomColumn[0] += (pipShift[0] * pos * (shiftleft ? -1 : 1));
shiftleft = !shiftleft;
}
}
private void printLeftStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
int[] column = new int[]
{ 446, 194 };
int[] pipShift = new int[]
{ 2, 7 };
if (secondImage) {
column[1] += secondPageMargin;
}
for (int pos = 1; pos <= totalArmor; pos++) {
ImageHelperVehicle.drawTankISPip(g2d, column[0], column[1]);
column[0] -= pipShift[0];
column[1] += pipShift[1];
}
}
private void printRightStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
int[] column = new int[]
{ 496, 194 };
int[] pipShift = new int[]
{ 2, 7 };
if (secondImage) {
column[1] += secondPageMargin;
}
for (int pos = 1; pos <= totalArmor; pos++) {
ImageHelperVehicle.drawTankISPip(g2d, column[0], column[1]);
column[0] += pipShift[0];
column[1] += pipShift[1];
}
}
private void printRearStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
float[] column = new float[]
{ 472.4f, 272 };
float[] pipShift = new float[]
{ 7, 7 };
if (secondImage) {
column[1] += secondPageMargin;
}
boolean shiftleft = true;
for (int pos = 1; pos <= totalArmor; pos++) {
ImageHelperVehicle.drawTankISPip(g2d, column[0], column[1]);
column[0] += (pipShift[0] * pos * (shiftleft ? -1 : 1));
shiftleft = !shiftleft;
}
}
private void printArmorPoints(Graphics2D g2d, Vector<float[]> pipPoints, float totalArmor) {
printArmorPoints(g2d, pipPoints, totalArmor, 8.0f);
}
private void printArmorPoints(Graphics2D g2d, Vector<float[]> pipPoints, float totalArmor, float fontSize) {
ImageHelperVehicle.printArmorPoints(g2d, pipPoints, totalArmor, false);
/*pipPoints.trimToSize();
float pipSpace = pipPoints.size() / totalArmor;
for (float pos = 0; pos < pipPoints.size(); pos += pipSpace) {
int currentPip = (int) pos;
ImageHelperVehicle.drawTankArmorPip(g2d, pipPoints.get(currentPip)[0], pipPoints.get(currentPip)[1], fontSize);
if (--totalArmor <= 0) {
return;
}
}*/
}
private void printTankImage(Graphics2D g2d) {
Image img = ImageHelper.getFluffImage(tank, ImageHelper.imageVehicle);
int width = Math.min(148, img.getWidth(null));
int height = Math.min(99, img.getHeight(null));
int drawingX = 235 + ((148 - width) / 2);
int drawingY = 270 + ((99 - height) / 2);
g2d.drawImage(img, drawingX, drawingY, width, height, Color.BLACK, null);
if (tank2 != null) {
img = ImageHelper.getFluffImage(tank2, ImageHelper.imageVehicle);
width = Math.min(148, img.getWidth(null));
height = Math.min(99, img.getHeight(null));
drawingX = 235 + ((148 - width) / 2);
drawingY = 268 + ((99 - height) / 2) + secondPageMargin;
g2d.drawImage(img, drawingX, drawingY, width, height, Color.BLACK, null);
}
}
}