/*
* MegaMekLab - Copyright (C) 2009
*
* 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 PrintDualTurretVehicle 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 PrintDualTurretVehicle(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, true), 18, 18, 558, 368, null);
if (tank2 == null) {
g2d.drawImage(ImageHelperVehicle.getTableImage(tank), 18, 18 + secondPageMargin, 558, 368, null);
} else {
g2d.drawImage(ImageHelper.getRecordSheet(tank2, true), 18, 18, 558, 368, null);
}
printTankData(g2d);
printArmor(g2d);
printWeaponsNEquipment(g2d);
// 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);
printRearTurretArmor(g2d, tank.getOArmor(Tank.LOC_TURRET), false);
printFrontTurretArmor(g2d, tank.getOArmor(Tank.LOC_TURRET_2), 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);
printRearTurretStruct(g2d, tank.getOInternal(Tank.LOC_TURRET), false);
printFrontTurretStruct(g2d, tank.getOInternal(Tank.LOC_TURRET_2), 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);
printRearTurretArmor(g2d, tank2.getOArmor(Tank.LOC_TURRET), true);
printFrontTurretArmor(g2d, tank2.getOArmor(Tank.LOC_TURRET_2), 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);
printRearTurretStruct(g2d, tank2.getOInternal(Tank.LOC_TURRET), true);
printFrontTurretStruct(g2d, tank2.getOInternal(Tank.LOC_TURRET_2), 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, 515);
if (!tank.hasWorkingMisc(MiscType.F_MASC, MiscType.S_SUPERCHARGER)) {
g2d.drawString(Integer.toString(tank.getRunMP()), 79, 526);
} else {
int mascMP = tank.getRunMP();
g2d.drawString(Integer.toString(tank.getRunMPwithoutMASC()) + " [" + mascMP + "]", 79, 526);
}
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 = tank.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", tank.calculateBattleValue(true, true)), 50, 357 + secondPageMargin);
}
// 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(Integer.toString(Calendar.getInstance().get(Calendar.YEAR)), 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), font, 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, 59);
g2d.drawString("(" + tank.getArmor(Tank.LOC_RIGHT) + ")", 559, 245);
g2d.drawString("(" + tank.getArmor(Tank.LOC_LEFT) + ")", 386, 193);
g2d.drawString("(" + Integer.toString(tank.getArmor(Tank.LOC_REAR)) + ")", 467, 352);
g2d.drawString("(" + Integer.toString(tank.getArmor(Tank.LOC_TURRET)) + ")", 457, 200);
g2d.drawString("(" + Integer.toString(tank.getArmor(Tank.LOC_TURRET_2)) + ")", 442, 115);
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, 64 + secondPageMargin);
g2d.drawString("(" + Integer.toString(tank2.getArmor(Tank.LOC_RIGHT)) + ")", 559, 230 + secondPageMargin);
g2d.drawString("(" + tank2.getArmor(Tank.LOC_LEFT) + ")", 384, 175 + 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)) + ")", 455, 186 + 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();
}
}
@SuppressWarnings("unused")
private void printExtraFrontArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
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 (secondImage) {
topColumn[1] += secondPageMargin;
middleColumn[1] += secondPageMargin;
bottomColumn[1] += secondPageMargin;
for (int pos = 0; pos < extraArmor.length; pos++) {
extraArmor[pos][1] += secondPageMargin;
}
}
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] });
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printFrontArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 438f;
float baseY = 72f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.5f;
float shiftY = 6.5f;
int pipsPerLine = 14;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(73, 1);
pipPlotter.add(new float[]
{ 423, 65 });
pipPlotter.add(new float[]
{ 531, 65 });
for (int lineCount = 1; lineCount <= 9; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
if (lineCount == 4) {
pipsPerLine = 4;
baseX += shiftX * 9f;
}
if (lineCount == 6) {
pipsPerLine = 3;
baseX += shiftX;
}
if (lineCount == 8) {
pipsPerLine = 1;
baseX += shiftX;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printRearArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 428f;
float baseY = 306f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.5f;
float shiftY = 6.5f;
int pipsPerLine = 16;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(64, 1);
for (int lineCount = 1; lineCount <= 4; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
@SuppressWarnings("unused")
private void printExtraRearArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
int[] topColumn = new int[]
{ 420, 291 };
int[] middleColumn = new int[]
{ 420, 298 };
int[] bottomColumn = new int[]
{ 420, 305 };
int[] pipShift = new int[]
{ 5, 5 };
if (secondImage) {
topColumn[1] += secondPageMargin;
middleColumn[1] += secondPageMargin;
bottomColumn[1] += secondPageMargin;
}
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 });
printArmorPoints(g2d, pipPlotter, totalArmor, 7.0f);
}
private void printRearTurretArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 449f;
float baseY = 253f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.25f;
float shiftY = 6.25f;
int pipsPerLine = 10;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(60, 1);
for (int lineCount = 1; lineCount <= 6; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printFrontTurretArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 463f;
float baseY = 123f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 5.5f;
float shiftY = 5.5f;
int pipsPerLine = 6;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(46, 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 = 10;
baseX -= shiftX * 2;
}
pointY += shiftY;
pointX = baseX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
@SuppressWarnings("unused")
private void printExtraTurretArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float[] topColumn = new float[]
{ 456.5f, 232f };
float[] bottomColumn = new float[]
{ 453.5f, 238f };
float[] pipShift = new float[]
{ 4.5f, 4.5f };
float fontSize = 5.5f;
if (secondImage) {
topColumn[1] += secondPageMargin;
bottomColumn[1] += secondPageMargin;
}
int pips = 9;
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 <= 70; pos++) {
pipPlotter.add(new float[]
{ bottomColumn[0], bottomColumn[1] });
bottomColumn[0] += pipShift[0];
if ((pos % 11) == 0) {
bottomColumn[1] += pipShift[1];
pipShift[0] *= -1;
bottomColumn[0] += pipShift[0];
}
}
printArmorPoints(g2d, pipPlotter, totalArmor, fontSize);
}
private void printLeftArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 441f;
float baseY = 163f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.5f;
float shiftY = 6.5f;
int pipsPerLine = 3;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(90, 1);
for (int lineCount = 1; lineCount <= 6; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointY += shiftY;
}
if (lineCount == 1) {
pipsPerLine = 8;
baseY -= shiftY * 3.5f;
}
if (lineCount == 2) {
pipsPerLine = 17;
baseY -= shiftY * 3.5f;
}
if (lineCount == 3) {
pipsPerLine = 5;
baseY += shiftY * 21.5f;
pointX += shiftX;
}
if (lineCount == 4) {
pipsPerLine = 31;
baseY -= shiftY * 24.5f;
}
if (lineCount == 5) {
pipsPerLine = 21;
baseY += shiftY * 10.5f;
}
pointY = baseY;
pointX -= shiftX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printRightArmor(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 514f;
float baseY = 163f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6.5f;
float shiftY = 6.5f;
int pipsPerLine = 3;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(90, 1);
for (int lineCount = 1; lineCount <= 6; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointY += shiftY;
}
if (lineCount == 1) {
pipsPerLine = 8;
baseY -= shiftY * 3.5f;
}
if (lineCount == 2) {
pipsPerLine = 17;
baseY -= shiftY * 3.5f;
}
if (lineCount == 3) {
pipsPerLine = 5;
baseY += shiftY * 21.5f;
pointX -= shiftX;
}
if (lineCount == 4) {
pipsPerLine = 31;
baseY -= shiftY * 24.5f;
}
if (lineCount == 5) {
pipsPerLine = 21;
baseY += shiftY * 10.5f;
}
pointY = baseY;
pointX += shiftX;
}
printArmorPoints(g2d, pipPlotter, totalArmor);
}
private void printFrontStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 462f;
float baseY = 163f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 7f;
float shiftY = 7f;
int pipsPerLine = 5;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(73, 1);
for (int lineCount = 1; lineCount <= 2; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
pointY += shiftY;
pointX = baseX;
}
printStructPoints(g2d, pipPlotter, totalArmor);
}
private void printRearTurretStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 462f;
float baseY = 220f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 7f;
float shiftY = 7f;
int pipsPerLine = 5;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(73, 1);
for (int lineCount = 1; lineCount <= 2; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
pointY += shiftY;
pointX = baseX;
}
printStructPoints(g2d, pipPlotter, totalArmor);
}
private void printFrontTurretStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
if (totalArmor < 1) {
return;
}
float baseX = 464f;
float baseY = 147f;
float pointX = baseX;
float pointY = baseY;
float shiftX = 6f;
float shiftY = 6f;
int pipsPerLine = 5;
if (secondImage) {
baseY += secondPageMargin;
pointY += secondPageMargin;
}
Vector<float[]> pipPlotter = new Vector<float[]>(73, 1);
for (int lineCount = 1; lineCount <= 2; lineCount++) {
for (int point = 0; point < pipsPerLine; point++) {
pipPlotter.add(new float[]
{ pointX, pointY });
pointX += shiftX;
}
pointY += shiftY;
pointX = baseX;
}
printTurretISPoints(g2d, pipPlotter, totalArmor);
}
private void printLeftStruct(Graphics2D g2d, int totalArmor, boolean secondImage) {
int[] column = new int[]
{ 447, 178 };
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[]
{ 506, 178 };
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) {
int[] column = new int[]
{ 445, 291 };
int[] pipShift = new int[]
{ 7, 7 };
if (secondImage) {
column[1] += secondPageMargin;
}
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 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) {
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 printTurretISPoints(Graphics2D g2d, Vector<float[]> pipPoints, float totalArmor) {
pipPoints.trimToSize();
float pipSpace = pipPoints.size() / totalArmor;
for (float pos = 0; pos < pipPoints.size(); pos += pipSpace) {
int currentPip = (int) pos;
ImageHelperVehicle.drawTankISTurretPip(g2d, (int) pipPoints.get(currentPip)[0], (int) pipPoints.get(currentPip)[1]);
if (--totalArmor <= 0) {
return;
}
}
}
private void printStructPoints(Graphics2D g2d, Vector<float[]> pipPoints, float totalArmor) {
pipPoints.trimToSize();
float pipSpace = pipPoints.size() / totalArmor;
for (float pos = 0; pos < pipPoints.size(); pos += pipSpace) {
int currentPip = (int) pos;
ImageHelperVehicle.drawTankISPip(g2d, (int) pipPoints.get(currentPip)[0], (int) pipPoints.get(currentPip)[1]);
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(93, img.getHeight(null));
int drawingX = 235 + ((148 - width) / 2);
int drawingY = 276 + ((93 - 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(93, img.getHeight(null));
drawingX = 235 + ((148 - width) / 2);
drawingY = 276 + ((93 - height) / 2) + secondPageMargin;
g2d.drawImage(img, drawingX, drawingY, width, height, Color.BLACK, null);
}
}
}