📄 mechmapset.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.swing.widget;import megamek.client.ui.swing.GUIPreferences;import megamek.client.ui.swing.Messages;import megamek.common.Entity;import megamek.common.Mech;import javax.swing.JComponent;import java.awt.Color;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Graphics;import java.awt.Image;import java.awt.Polygon;import java.util.Vector;/** * Very cumbersome class that handles set of polygonal areas and labels * for PicMap component to represent single mech unit in MechDisplay */public class MechMapSet 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 JComponent comp; //Points for build hot areas (may be too heavy, think of to load from exteranl file) // Mek armor - Front //Right hand private Polygon rightArm = new Polygon(new int[]{106, 105, 110, 114, 111, 108, 106, 109, 112, 119, 116, 122, 124, 118, 115, 112, 114, 113, 111, 95, 93, 93, 91, 91, 95, 99, 99, 102, 104, 101, 104, 106}, new int[]{89, 87, 86, 90, 94, 92, 94, 97, 98, 91, 81, 81, 78, 53, 50, 36, 33, 30, 25, 23, 25, 25, 27, 33, 37, 51, 78, 81, 81, 86, 91, 89}, 32); //Left hand private Polygon leftArm = new Polygon(new int[]{18, 19, 14, 10, 13, 16, 18, 15, 12, 5, 8, 2, 0, 6, 9, 12, 10, 11, 13, 29, 31, 31, 33, 33, 29, 25, 25, 22, 20, 23, 20, 18}, new int[]{89, 87, 86, 90, 94, 92, 94, 97, 98, 91, 81, 81, 78, 53, 50, 36, 33, 30, 25, 23, 25, 25, 27, 33, 37, 51, 78, 81, 81, 86, 91, 89}, 32); //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, 33, 33, 29, 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, 91, 91, 95, 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[]{18, 21, 37, 47, 54, 54, 61, 43, 45, 45, 43, 44, 19, 20, 18}, new int[]{104, 104, 65, 82, 82, 85, 85, 103, 103, 121, 121, 129, 129, 122, 122}, 15); //right Leg private Polygon rightLeg = new Polygon(new int[]{107, 104, 88, 77, 70, 70, 64, 82, 80, 80, 82, 81, 106, 105, 107}, new int[]{104, 104, 63, 82, 82, 85, 85, 103, 103, 121, 121, 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); //Left hand private Polygon inStLeftArm = new Polygon(new int[]{17, 11, 5, 5, 8, 8, 21, 21, 25, 25, 28, 51, 51, 29, 29}, new int[]{147, 170, 170, 194, 194, 197, 197, 194, 194, 170, 157, 157, 154, 154, 147}, 15); //Right hand private Polygon inStRightArm = new Polygon(new int[]{109, 115, 121, 121, 118, 118, 105, 105, 101, 101, 98, 75, 75, 97, 97}, new int[]{147, 170, 170, 194, 194, 197, 197, 194, 194, 170, 157, 157, 154, 154, 147}, 15); //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 MechMapSet(JComponent 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++) { a = m.getArmor(i);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -