📄 armlessmechmapset.java
字号:
/** * MegaMek - Copyright (C) 2000-2002 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.widget.WidgetUtils;import megamek.client.ui.AWT.GUIPreferences;import megamek.client.ui.AWT.Messages;import megamek.common.*;/** * Very cumbersome class that handles set of polygonal areas and labels * for PicMap component to represent single mech unit in MechDisplay */public class ArmlessMechMapSet implements DisplayMapSet{ private static final String IMAGE_DIR = "data/images/widgets"; //Because of keeping all areas of single type in one array //some index offset values required private static final int REAR_AREA_OFFSET = 7; private static final int INT_STRUCTURE_OFFSET = 11; //Array of polygonal areas - parts of mech body. private PMSimplePolygonArea[] areas = new PMSimplePolygonArea[19]; //Array of fixed labels - short names of body parts private PMSimpleLabel[] labels = new PMSimpleLabel[19]; //Array of value labels to show armor and IS values private PMValueLabel[] vLabels = new PMValueLabel[20]; //Heat control area private PMPicPolygonalArea heatHotArea; //Set of Background Drawers private Vector bgDrawers = new Vector(); //Main areas group that keeps everything in itself and is passed to PicMap component private PMAreasGroup content = new PMAreasGroup(); //Reference to Component class (need to manage images and fonts) private Component comp; //Points for build hot areas (may be too heavy, think of to load from exteranl file) // Mek armor - Front //Head private Polygon head = new Polygon( new int[] {53,71,81,83,83,62,41,41,43}, new int[] {32,32,22,22,8,0,8,22,22}, 9); //Central Torso private Polygon centralTorso = new Polygon( new int[]{48,54,70,76,76,48}, new int[]{45,85,85,45,36,36}, 6); //left Torso private Polygon leftTorso = new Polygon( new int[]{54,48,48,62,62,53,43,41, 41,31,29,27,25,26,47}, new int[] {82,45,36,36,32,32,22,22,20,25,27,33, 37,47,82}, 15); //right Torso private Polygon rightTorso = new Polygon( new int[]{70,76,76,62,62,71,81, 83,83,93,95,97,99,98,77}, new int[] {82,45,36,36,32,32,22,22,20,25,27, 33,37,47,82}, 15); //Left Leg private Polygon leftLeg = new Polygon(new int[] {0,7,37,47,54,54,61,34,40, 40,34,33,7,6,0}, new int[] {104,104,65,82,82,85,85,102,104,121,123, 129,129,122,122},15); //right Leg private Polygon rightLeg = new Polygon(new int[] {125,118,88,77,70,70,64,91, 85,85,91,92,118,119,125}, new int[] {104,104,63,82,82,85,85,102,104,121, 123,129,129,122,122},15); //Mek Armor - Rear //Left Torso private Polygon rearLeftTorso = new Polygon(new int[] {142,142,148,139,123,123,142}, new int[] {14,43,76,76,44,17,14}, 7); //Central Torso private Polygon rearCentralTorso = new Polygon(new int[] {142,148,162,168,168,142}, new int[] {44,76,76,44,14,14}, 6); //Right Torso private Polygon rearRightTorso = new Polygon(new int[]{168,168,162,171,187,187,168}, new int[]{14,43,76,76,44,17,14},7); //Internal Structure //Head private Polygon intStHead = new Polygon(new int[]{78,48,48,78}, new int[]{149, 149, 127, 127}, 4); //Central Torso private Polygon inStCentralTorso = new Polygon(new int[]{75,75,51,51}, new int[]{203,149,149,203},4); //Left Torso private Polygon inStLeftTorso = new Polygon(new int[]{32,32,51,51}, new int[]{188,160,160,193},4); //Right Torso private Polygon inStRightTorso = new Polygon(new int[]{94,94,75,75}, new int[]{188,160,160,193},4); //Left Leg private Polygon inStLeftLeg = new Polygon(new int[]{51,51,44,44,47,47,20, 20,41,41,44,44}, new int[] {195,199,199,206,206, 230,230,206,206,192,192,195},12); //right Leg private Polygon inStRightLeg = new Polygon(new int[]{75,75,82,82,79,79,106, 106,85,85,82,82}, new int[]{195,199,199,206,206, 230,230,206,206,192,192,195},12); //Heat control private Polygon heatControl = new Polygon(new int[]{149,159,159,149}, new int[]{100,100,220,220},4); private Image heatImage; 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 ArmlessMechMapSet(Component c){ comp = c; setAreas(); setLabels(); setGroups(); setBackGround(); } public PMAreasGroup getContentGroup(){ return content; } public Vector getBackgroundDrawers(){ return bgDrawers; } public void setEntity(Entity e){ Mech m = (Mech) e; boolean mtHeat = false; if (e.getGame() != null && e.getGame().getOptions().booleanOption("maxtech_heat")) { mtHeat = true; } int a = 1; int a0 = 1; for (int i = 0; i< m.locations(); i++){ if(i == Mech.LOC_LARM || i == Mech.LOC_RARM) { continue; } a = m.getArmor(i); a0 = m.getOArmor(i); vLabels[i].setValue(m.getArmorString(i)); WidgetUtils.setAreaColor(areas[i], vLabels[i], (double)a/(double)a0); if(m.hasRearArmor(i)){ a = m.getArmor(i, true); a0 = m.getOArmor(i, true); vLabels[i + REAR_AREA_OFFSET].setValue(m.getArmorString(i,true)); WidgetUtils.setAreaColor(areas[i + REAR_AREA_OFFSET], vLabels[i + REAR_AREA_OFFSET], (double)a/(double)a0); } a = m.getInternal(i); a0 = m.getOInternal(i); vLabels[i + INT_STRUCTURE_OFFSET].setValue(m.getInternalString(i));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -