⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 protomechmapset.java

📁 MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight
💻 JAVA
字号:
/** * MegaMek - Copyright (C) 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.swing.widget;import megamek.client.ui.swing.GUIPreferences;import megamek.common.Entity;import megamek.common.Protomech;import javax.swing.JComponent;import java.awt.Color;import java.awt.Font;import java.awt.FontMetrics;import java.awt.Image;import java.awt.Polygon;import java.util.Vector;/** * Class which keeps set of all areas required to * represent Protomech unit in MechDisplay.ArmorPanel class. */public class ProtomechMapSet implements DisplayMapSet {    private static final String IMAGE_DIR = "data/images/widgets";    // Boring list of labels.    private PMValueLabel[] sectionLabels =            new PMValueLabel[Protomech.NUM_PMECH_LOCATIONS];    private PMValueLabel[] armorLabels =            new PMValueLabel[Protomech.NUM_PMECH_LOCATIONS];    private PMValueLabel[] internalLabels =            new PMValueLabel[Protomech.NUM_PMECH_LOCATIONS];    private PMSimplePolygonArea[] areas = new PMSimplePolygonArea[Protomech.NUM_PMECH_LOCATIONS];    private Polygon head = new Polygon(new int[]{50, 50, 60, 80, 90, 90, 80, 60},            new int[]{40, 20, 10, 10, 20, 40, 50, 50},            8);    private Polygon mainGun = new Polygon(new int[]{20, 20, 50, 50},            new int[]{30, 0, 0, 30},            4);    private Polygon leftArm = new Polygon(new int[]{0, 0, 20, 30, 40, 30, 20, 20, 10},            new int[]{100, 40, 30, 30, 60, 60, 70, 110, 110},            9);    private Polygon rightArm = new Polygon(new int[]{120, 120, 110, 100, 110, 120, 140, 140, 130},            new int[]{110, 70, 60, 60, 30, 30, 40, 100, 110, 110},            9);    private Polygon torso = new Polygon(new int[]{40, 40, 30, 50, 50, 60, 80, 90, 90, 110, 100, 100},            new int[]{130, 60, 30, 30, 40, 50, 50, 40, 30, 30, 60, 130},            12);    private Polygon legs = new Polygon(new int[]{0, 0, 10, 30, 30, 40, 100, 110, 110, 130, 140, 140, 100, 90, 90, 80, 60, 50, 50, 40},            new int[]{240, 230, 220, 220, 160, 130, 130, 160, 220, 220, 230, 240, 240, 230, 190, 170, 170, 190, 230, 240},            20);    //Reference to Component (required for Image handling)    private JComponent comp;    //Content group which will be sent to PicMap component    private PMAreasGroup content = new PMAreasGroup();    //Set of Backgrpund drawers which will be sent to PicMap component    private Vector bgDrawers = new Vector();    private static final Font FONT_VALUE = new Font("SansSerif", Font.PLAIN, GUIPreferences.getInstance().getInt("AdvancedMechDisplayArmorLargeFontSize")); //$NON-NLS-1$    /**     * This constructor have to be called anly from addNotify() method     */    public ProtomechMapSet(JComponent c) {        comp = c;        setAreas();        setBackGround();    }    /*    ** Set the armor diagram on the mapset.    */    private void setAreas() {        areas[Protomech.LOC_HEAD] = new PMSimplePolygonArea(head);        areas[Protomech.LOC_LEG] = new PMSimplePolygonArea(legs);        areas[Protomech.LOC_LARM] = new PMSimplePolygonArea(leftArm);        areas[Protomech.LOC_RARM] = new PMSimplePolygonArea(rightArm);        areas[Protomech.LOC_TORSO] = new PMSimplePolygonArea(torso);        areas[Protomech.LOC_MAINGUN] = new PMSimplePolygonArea(mainGun);        for (int i = 0; i <= 5; i++) {            content.addArea(areas[i]);        }        FontMetrics fm = comp.getFontMetrics(FONT_VALUE);        for (int i = 0; i < Protomech.NUM_PMECH_LOCATIONS; i++) {            sectionLabels[i] = new PMValueLabel(fm, Color.black);            content.addArea(sectionLabels[i]);            armorLabels[i] = new PMValueLabel(fm, Color.yellow.brighter());            content.addArea(armorLabels[i]);            internalLabels[i] = new PMValueLabel(fm, Color.red.brighter());            content.addArea(internalLabels[i]);        }        sectionLabels[0].moveTo(70, 30);        armorLabels[0].moveTo(60, 45);        internalLabels[0].moveTo(80, 45);        sectionLabels[1].moveTo(70, 70);        armorLabels[1].moveTo(70, 85);        internalLabels[1].moveTo(70, 100);        sectionLabels[2].moveTo(125, 55);        armorLabels[2].moveTo(125, 70);        internalLabels[2].moveTo(125, 85);        sectionLabels[3].moveTo(15, 55);        armorLabels[3].moveTo(15, 70);        internalLabels[3].moveTo(15, 85);        sectionLabels[4].moveTo(70, 150);        armorLabels[4].moveTo(60, 165);        internalLabels[4].moveTo(80, 165);        sectionLabels[5].moveTo(35, 15);        armorLabels[5].moveTo(25, 30);        internalLabels[5].moveTo(45, 30);    }    public PMAreasGroup getContentGroup() {        return content;    }    public Vector getBackgroundDrawers() {        return bgDrawers;    }    /**     * Show the diagram for the given Protomech.     *     * @param entity - the <code>Entity</code> to be displayed.     *               This should be a <code>Protomech</code> unit.     */    public void setEntity(Entity entity) {        Protomech proto = (Protomech) entity;        int armor = 0;        int internal = 0;        int loc = proto.locations();        if (loc != Protomech.NUM_PMECH_LOCATIONS) {            armorLabels[5].setVisible(false);            internalLabels[5].setVisible(false);            sectionLabels[5].setVisible(false);        } else {            armorLabels[5].setVisible(true);            internalLabels[5].setVisible(true);            sectionLabels[5].setVisible(true);        }        for (int i = 0; i < loc; i++) {            armor = proto.getArmor(i);            internal = proto.getInternal(i);            armorLabels[i].setValue(proto.getArmorString(i));            internalLabels[i].setValue(proto.getInternalString(i));            sectionLabels[i].setValue(proto.getLocationAbbr(i));        }    }    /*    ** Sets the background on the mapset.    */    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));    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -