/**
* MegaMek - Copyright (C) 2000,2001,2002,2004,2005 Ben Mazur (bmazur@sev.org)
*
* 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 megamek.client.ui.swing.widget;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Image;
import java.awt.Polygon;
import java.util.Vector;
import javax.swing.JComponent;
import megamek.client.ui.Messages;
import megamek.client.ui.swing.GUIPreferences;
import megamek.common.Entity;
import megamek.common.SupportVTOL;
import megamek.common.VTOL;
/**
* Class which keeps set of all areas required to represent Tank unit in
* MechDsiplay.ArmorPanel class.
*/
public class VTOLMapSet implements DisplayMapSet {
private static final String IMAGE_DIR = "data/images/widgets";
private JComponent comp;
private PMSimplePolygonArea[] areas = new PMSimplePolygonArea[16];
private PMSimpleLabel[] labels = new PMSimpleLabel[23];
private PMValueLabel[] vLabels = new PMValueLabel[17];
private Vector<BackGroundDrawer> bgDrawers = new Vector<BackGroundDrawer>();
private PMAreasGroup content = new PMAreasGroup();
// Polygons for all areas
private Polygon frontArmor = new Polygon(new int[] { 30, 60, 90, 120 },
new int[] { 30, 0, 0, 30 }, 4);
// front internal structure
private Polygon frontIS = new Polygon(new int[] { 30, 120, 90, 60 },
new int[] { 30, 30, 45, 45 }, 4);
// Left armor
private Polygon leftArmor1 = new Polygon(new int[] { 30, 30, 60, 60 },
new int[] { 75, 30, 45, 75 }, 4);
private Polygon leftArmor2 = new Polygon(new int[] { 30, 30, 60, 60 },
new int[] { 135, 90, 90, 150 }, 4);
// Left internal structure
private Polygon leftIS1 = new Polygon(new int[] { 60, 60, 75, 75 },
new int[] { 75, 45, 45, 75 }, 4);
private Polygon leftIS2 = new Polygon(new int[] { 60, 60, 75, 75 },
new int[] { 150, 90, 90, 150 }, 4);
// Right armor
private Polygon rightArmor1 = new Polygon(new int[] { 90, 90, 120, 120 },
new int[] { 75, 45, 30, 75 }, 4);
private Polygon rightArmor2 = new Polygon(new int[] { 90, 90, 120, 120 },
new int[] { 150, 90, 90, 135 }, 4);
// Right internal structure
private Polygon rightIS1 = new Polygon(new int[] { 75, 75, 90, 90 },
new int[] { 75, 45, 45, 75 }, 4);
private Polygon rightIS2 = new Polygon(new int[] { 75, 75, 90, 90 },
new int[] { 150, 90, 90, 150 }, 4);
// Rear armor
private Polygon rearArmor = new Polygon(new int[] { 67, 67, 83, 83 },
new int[] { 180, 150, 150, 180 }, 4);
// Rear internal structure
private Polygon rearIS = new Polygon(new int[] { 67, 67, 83, 83 },
new int[] { 240, 180, 180, 240 }, 4);
// Rotor armor
private Polygon rotorArmor1 = new Polygon(new int[] { 0, 0, 45, 45 },
new int[] { 90, 75, 75, 90 }, 4);
private Polygon rotorArmor2 = new Polygon(new int[] { 105, 105, 150, 150 },
new int[] { 90, 75, 75, 90 }, 4);
// Rotor internal structure
private Polygon rotorIS = new Polygon(new int[] { 45, 45, 105, 105 },
new int[] { 90, 75, 75, 90 }, 4);
private static final Font FONT_LABEL = new Font(
"SansSerif", Font.PLAIN, GUIPreferences.getInstance().getInt("AdvancedMechDisplayArmorSmallFontSize")); //$NON-NLS-1$
private static final Font FONT_VALUE = new Font(
"SansSerif", Font.PLAIN, GUIPreferences.getInstance().getInt("AdvancedMechDisplayArmorLargeFontSize")); //$NON-NLS-1$
public VTOLMapSet(JComponent c) {
comp = c;
setAreas();
setLabels();
setBackGround();
translateAreas();
setContent();
}
public void setRest() {
}
public PMAreasGroup getContentGroup() {
return content;
}
public Vector<BackGroundDrawer> getBackgroundDrawers() {
return bgDrawers;
}
public void setEntity(Entity e) {
VTOL t = (VTOL) e;
int a = 1;
int a0 = 1;
int x = 0;
for (int i = 1; i <= 8; i++) {
switch (i) {
case 1:
x = 1;
break;
case 2:
x = 2;
break;
case 3:
x = 2;
break;
case 4:
x = 3;
break;
case 5:
x = 3;
break;
case 6:
x = 4;
break;
case 7:
x = 5;
break;
case 8:
x = 5;
break;
}
a = t.getArmor(x);
a0 = t.getOArmor(x);
vLabels[i].setValue(t.getArmorString(x));
WidgetUtils.setAreaColor(areas[i], vLabels[i], (double) a
/ (double) a0);
}
for (int i = 9; i <= 15; i++) {
switch (i) {
case 9:
x = 1;
break;
case 10:
x = 2;
break;
case 11:
x = 2;
break;
case 12:
x = 3;
break;
case 13:
x = 3;
break;
case 14:
x = 4;
break;
case 15:
x = 5;
break;
}
a = t.getInternal(x);
a0 = t.getOInternal(x);
vLabels[i].setValue(t.getInternalString(x));
WidgetUtils.setAreaColor(areas[i], vLabels[i], (double) a
/ (double) a0);
}
if (t instanceof SupportVTOL)
vLabels[16].setValue(String.valueOf(((SupportVTOL)t).getBARRating()));
else {
labels[22].setVisible(false);
vLabels[16].setVisible(false);
}
}
private void setContent() {
for (int i = 1; i <= 15; i++) {
content.addArea(areas[i]);
content.addArea(vLabels[i]);
}
for (int i = 1; i <= 21; i++) {
content.addArea(labels[i]);
}
content.addArea(vLabels[16]);
content.addArea(labels[22]);
}
private void setAreas() {
areas[1] = new PMSimplePolygonArea(frontArmor);
areas[2] = new PMSimplePolygonArea(rightArmor1);
areas[3] = new PMSimplePolygonArea(rightArmor2);
areas[4] = new PMSimplePolygonArea(leftArmor1);
areas[5] = new PMSimplePolygonArea(leftArmor2);
areas[6] = new PMSimplePolygonArea(rearIS);
areas[7] = new PMSimplePolygonArea(rotorArmor1);
areas[8] = new PMSimplePolygonArea(rotorArmor2);
areas[9] = new PMSimplePolygonArea(frontIS);
areas[10] = new PMSimplePolygonArea(rightIS1);
areas[11] = new PMSimplePolygonArea(rightIS2);
areas[12] = new PMSimplePolygonArea(leftIS1);
areas[13] = new PMSimplePolygonArea(leftIS2);
areas[14] = new PMSimplePolygonArea(rearArmor);
areas[15] = new PMSimplePolygonArea(rotorIS);
}
private void setLabels() {
FontMetrics fm = comp.getFontMetrics(FONT_LABEL);
// Labels for Front view
labels[1] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.FrontArmor"), fm, Color.black, 68, 20); //$NON-NLS-1$
labels[2] = WidgetUtils.createLabel(
Messages.getString("VTOLMapSet.RS"), fm, Color.black, 104, 50); //$NON-NLS-1$
labels[3] = WidgetUtils.createLabel(
Messages.getString("VTOLMapSet.RS"), fm, Color.black, 104, 100); //$NON-NLS-1$
labels[4] = WidgetUtils.createLabel(
Messages.getString("VTOLMapSet.LS"), fm, Color.black, 44, 50); //$NON-NLS-1$
labels[5] = WidgetUtils.createLabel(
Messages.getString("VTOLMapSet.LS"), fm, Color.black, 44, 100); //$NON-NLS-1$
labels[6] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RearArmor1"), fm, Color.black, 76, 185); //$NON-NLS-1$
labels[7] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RearArmor2"), fm, Color.black, 76, 195); //$NON-NLS-1$
labels[8] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RotorArmor"), fm, Color.black, 18, 82); //$NON-NLS-1$
labels[9] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RotorArmor"), fm, Color.black, 123, 82); //$NON-NLS-1$
labels[10] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.FrontIS"), fm, Color.black, 68, 35); //$NON-NLS-1$
labels[11] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.LIS1"), fm, Color.black, 68, 48); //$NON-NLS-1$
labels[12] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.LIS2"), fm, Color.black, 68, 57); //$NON-NLS-1$
labels[13] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.LIS1"), fm, Color.black, 68, 100); //$NON-NLS-1$
labels[14] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.LIS2"), fm, Color.black, 68, 110); //$NON-NLS-1$
labels[15] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RIS1"), fm, Color.black, 84, 48); //$NON-NLS-1$
labels[16] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RIS2"), fm, Color.black, 84, 57); //$NON-NLS-1$
labels[17] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RIS1"), fm, Color.black, 84, 100); //$NON-NLS-1$
labels[18] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RIS2"), fm, Color.black, 84, 110); //$NON-NLS-1$
labels[19] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RearIS1"), fm, Color.black, 76, 152); //$NON-NLS-1$
labels[20] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RearIS2"), fm, Color.black, 76, 161); //$NON-NLS-1$
labels[21] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.RotorIS"), fm, Color.black, 73, 82); //$NON-NLS-1$
labels[22] = WidgetUtils.createLabel(Messages
.getString("VTOLMapSet.BARRating"), fm, Color.white, 65, 198); //$NON-NLS-1$
// Value labels for all parts of mek
// front
fm = comp.getFontMetrics(FONT_VALUE);
vLabels[1] = WidgetUtils.createValueLabel(101, 22, "", fm); //$NON-NLS-1$ Front
vLabels[2] = WidgetUtils.createValueLabel(44, 65, "", fm); //$NON-NLS-1$ LS
vLabels[3] = WidgetUtils.createValueLabel(44, 115, "", fm); //$NON-NLS-1$ LS
vLabels[4] = WidgetUtils.createValueLabel(105, 65, "", fm); //$NON-NLS-1$ RS
vLabels[5] = WidgetUtils.createValueLabel(105, 115, "", fm); //$NON-NLS-1$ RS
vLabels[6] = WidgetUtils.createValueLabel(76, 207, "", fm); //$NON-NLS-1$ Rear
vLabels[7] = WidgetUtils.createValueLabel(38, 83, "", fm); //$NON-NLS-1$ Rotor
vLabels[8] = WidgetUtils.createValueLabel(143, 83, "", fm); //$NON-NLS-1$ Rotor
vLabels[9] = WidgetUtils.createValueLabel(94, 37, "", fm); //$NON-NLS-1$ Front
vLabels[10] = WidgetUtils.createValueLabel(68, 68, "", fm); //$NON-NLS-1$ LS
vLabels[11] = WidgetUtils.createValueLabel(68, 122, "", fm); //$NON-NLS-1$ LS
vLabels[12] = WidgetUtils.createValueLabel(84, 68, "", fm); //$NON-NLS-1$ RS
vLabels[13] = WidgetUtils.createValueLabel(84, 122, "", fm); //$NON-NLS-1$ RS
vLabels[14] = WidgetUtils.createValueLabel(76, 172, "", fm); //$NON-NLS-1$ Rear
vLabels[15] = WidgetUtils.createValueLabel(98, 83, "", fm); //$NON-NLS-1$ Rotor
vLabels[16] = WidgetUtils.createValueLabel(100, 200, "", fm); //$NON-NLS-1$
}
private void setBackGround() {
Image tile = comp.getToolkit().getImage(IMAGE_DIR + "/tile.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
int b = BackGroundDrawer.TILING_BOTH;
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.TILING_HORIZONTAL | BackGroundDrawer.VALIGN_TOP;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/h_line.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.TILING_HORIZONTAL | BackGroundDrawer.VALIGN_BOTTOM;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/h_line.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.TILING_VERTICAL | BackGroundDrawer.HALIGN_LEFT;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/v_line.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.TILING_VERTICAL | BackGroundDrawer.HALIGN_RIGHT;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/v_line.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.NO_TILING | BackGroundDrawer.VALIGN_TOP
| BackGroundDrawer.HALIGN_LEFT;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/tl_corner.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.NO_TILING | BackGroundDrawer.VALIGN_BOTTOM
| BackGroundDrawer.HALIGN_LEFT;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/bl_corner.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.NO_TILING | BackGroundDrawer.VALIGN_TOP
| BackGroundDrawer.HALIGN_RIGHT;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/tr_corner.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
b = BackGroundDrawer.NO_TILING | BackGroundDrawer.VALIGN_BOTTOM
| BackGroundDrawer.HALIGN_RIGHT;
tile = comp.getToolkit().getImage(IMAGE_DIR + "/br_corner.gif"); //$NON-NLS-1$
PMUtil.setImage(tile, comp);
bgDrawers.addElement(new BackGroundDrawer(tile, b));
}
private void translateAreas() {
}
}