📄 tankmapset.java
字号:
/** * MegaMek - Copyright (C) 2000,2001,2002,2004 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.AWT.widget;import java.awt.*;import java.util.*;import megamek.client.ui.AWT.GUIPreferences;import megamek.client.ui.AWT.Messages;import megamek.common.*;import megamek.client.ui.AWT.widget.WidgetUtils;/** * Class which keeps set of all areas required to * represent Tank unit in MechDsiplay.ArmorPanel class. */public class TankMapSet implements DisplayMapSet{ private static final String IMAGE_DIR = "data/images/widgets"; private Component comp; private PMSimplePolygonArea[] areas = new PMSimplePolygonArea[12]; private PMSimpleLabel[] labels = new PMSimpleLabel[12]; private PMValueLabel[] vLabels = new PMValueLabel[12]; private Vector bgDrawers = new Vector(); private PMAreasGroup content = new PMAreasGroup(); private static final int INT_STR_OFFSET = 6; //Polygons for all areas private Polygon frontArmor = new Polygon( new int[]{0,19,109,128,105,92,37,23}, new int[]{55,27,27,55,68,49,49,68}, 8); //front internal structure private Polygon frontIS = new Polygon(new int[]{67,67,105,92,37,23,61,61}, new int[]{40,77,39,20,20,39,77,40},8); //Left armor private Polygon leftArmor = new Polygon(new int[]{0,0,23,23}, new int[]{26,214,200,39},4); //Left internal structure private Polygon leftIS = new Polygon(new int[]{61,23,23,23,40,33,33,46,54,58,61}, new int[]{77,39,200,200,183,168,120,94,94,85,85}, 11); //Right armor private Polygon rightArmor = new Polygon(new int[]{128,105,105,128}, new int[]{26,39,200,214}, 4); //Right internal structure private Polygon rightIS = new Polygon (new int[]{83,96,96,88,105,105,105,67,67,71,75}, new int[]{94,120,168,183,200,200,39,77,85,85,94}, 11); //Rear armor private Polygon rearArmor = new Polygon (new int[]{128,105,92,35,23,0,11,116}, new int[]{214,200,220,220,200,214,239,239},8); //Rear internal structure private Polygon rearIS = new Polygon(new int[]{105,88,79,50,40,23,35,92}, new int[]{200,183,202,202,183,200,220,220}, 8); //Turret armor private Polygon turretArmor = new Polygon(new int[]{64,74,89,89,39,39,54,64,64,64, 64,50,33,33,46,54,58,61,61,67, 67,71,75,83,96,96,88,79,64}, new int[]{187,187,160,139,139,160,187, 187,202,187,202,202,168,120, 94,94,85,85,40,40,85,85,94,94, 120,168,183,202,202},29); //Turret internal structure private Polygon turretIS = new Polygon(new int[]{39,39,54,74,89,89}, new int[]{139,160,187,187,160,139},6); 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 TankMapSet(Component c){ comp = c; setAreas(); setLabels(); setBackGround(); translateAreas(); setContent(); } public void setRest(){ } public PMAreasGroup getContentGroup(){ return content; } public Vector getBackgroundDrawers(){ return bgDrawers; } public void setEntity(Entity e){ Tank t = (Tank) e; int a = 1; int a0 = 1; for(int i = 1; i < 6; i++){ a = t.getArmor(i); a0 = t.getOArmor(i); vLabels[i].setValue(t.getArmorString(i)); WidgetUtils.setAreaColor(areas[i], vLabels[i], (double)a/(double)a0); } for(int i = 7; i < 12; i++){ a = t.getInternal(i-6); a0 = t.getOInternal(i-6); vLabels[i].setValue(t.getInternalString(i-6)); WidgetUtils.setAreaColor(areas[i], vLabels[i], (double)a/(double)a0); } } private void setContent(){ for(int i = 1; i < 6; i++){ content.addArea(areas[i]); content.addArea(labels[i]); content.addArea(vLabels[i]); } for(int i = 1; i < 6; i++){ content.addArea(areas[i + INT_STR_OFFSET]); content.addArea(labels[i + INT_STR_OFFSET]); content.addArea(vLabels[i + INT_STR_OFFSET]); } } private void setAreas(){ areas[Tank.LOC_FRONT] = new PMSimplePolygonArea(frontArmor); areas[Tank.LOC_RIGHT] = new PMSimplePolygonArea(rightArmor); areas[Tank.LOC_LEFT] = new PMSimplePolygonArea(leftArmor); areas[Tank.LOC_REAR] = new PMSimplePolygonArea(rearArmor); areas[Tank.LOC_TURRET] = new PMSimplePolygonArea(turretArmor); areas[Tank.LOC_FRONT + INT_STR_OFFSET] = new PMSimplePolygonArea(frontIS); areas[Tank.LOC_RIGHT + INT_STR_OFFSET] = new PMSimplePolygonArea(rightIS); areas[Tank.LOC_LEFT + INT_STR_OFFSET] = new PMSimplePolygonArea(leftIS); areas[Tank.LOC_REAR + INT_STR_OFFSET] = new PMSimplePolygonArea(rearIS); areas[Tank.LOC_TURRET + INT_STR_OFFSET] = new PMSimplePolygonArea(turretIS); } private void setLabels(){ FontMetrics fm = comp.getFontMetrics(FONT_LABEL); //Labels for Front view labels[Tank.LOC_FRONT] = WidgetUtils.createLabel(Messages.getString("TankMapSet.FrontArmor"), fm, Color.black,65,35); //$NON-NLS-1$ labels[Tank.LOC_FRONT + INT_STR_OFFSET] = WidgetUtils.createLabel(Messages.getString("TankMapSet.FrontIS"), fm, Color.black,63,57); //$NON-NLS-1$ labels[Tank.LOC_LEFT] = WidgetUtils.createLabel(Messages.getString("TankMapSet.LS"), fm, Color.black,19,135); //$NON-NLS-1$ labels[Tank.LOC_LEFT + INT_STR_OFFSET] = WidgetUtils.createLabel(Messages.getString("TankMapSet.LIS"), fm, Color.black,49,106); //$NON-NLS-1$ labels[Tank.LOC_RIGHT] = WidgetUtils.createLabel(Messages.getString("TankMapSet.RS"), fm, Color.black,124,135); //$NON-NLS-1$ labels[Tank.LOC_RIGHT + INT_STR_OFFSET] = WidgetUtils.createLabel(Messages.getString("TankMapSet.RIS"), fm, Color.black,95,106); //$NON-NLS-1$ labels[Tank.LOC_REAR] = WidgetUtils.createLabel(Messages.getString("TankMapSet.RearArmor"), fm, Color.black,65,257); //$NON-NLS-1$ labels[Tank.LOC_REAR + INT_STR_OFFSET] = WidgetUtils.createLabel(Messages.getString("TankMapSet.RearIS"), fm, Color.black,63,239); //$NON-NLS-1$ labels[Tank.LOC_TURRET] = WidgetUtils.createLabel(Messages.getString("TankMapSet.TurretArmor"), fm, Color.black,73,145); //$NON-NLS-1$ labels[Tank.LOC_TURRET + INT_STR_OFFSET] = WidgetUtils.createLabel(Messages.getString("TankMapSet.TurretIS"), fm, Color.black,73,173); //$NON-NLS-1$ //Value labels for all parts of mek //front fm = comp.getFontMetrics(FONT_VALUE); vLabels[Tank.LOC_FRONT] = WidgetUtils.createValueLabel(101, 37, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_FRONT + INT_STR_OFFSET] = WidgetUtils.createValueLabel(91, 58, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_LEFT] = WidgetUtils.createValueLabel(20, 150, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_LEFT + INT_STR_OFFSET] = WidgetUtils.createValueLabel(44, 121, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_RIGHT] = WidgetUtils.createValueLabel(125, 150, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_RIGHT + INT_STR_OFFSET] = WidgetUtils.createValueLabel(102, 121, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_REAR] = WidgetUtils.createValueLabel(99, 258, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_REAR + INT_STR_OFFSET] = WidgetUtils.createValueLabel(91, 241, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_TURRET] = WidgetUtils.createValueLabel(73, 159, "", fm); //$NON-NLS-1$ vLabels[Tank.LOC_TURRET + INT_STR_OFFSET] = WidgetUtils.createValueLabel(73, 193, "", 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(){ areas[Tank.LOC_FRONT].translate(8,0); areas[Tank.LOC_FRONT + INT_STR_OFFSET].translate(8,29); areas[Tank.LOC_LEFT].translate(8,29); areas[Tank.LOC_LEFT + INT_STR_OFFSET].translate(8,29); areas[Tank.LOC_RIGHT].translate(8,29); areas[Tank.LOC_RIGHT + INT_STR_OFFSET].translate(8,29); areas[Tank.LOC_REAR].translate(8, 29); areas[Tank.LOC_REAR + INT_STR_OFFSET].translate(8,29); areas[Tank.LOC_TURRET].translate(8,29); areas[Tank.LOC_TURRET + INT_STR_OFFSET].translate(8,29); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -