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

📄 mechview.java

📁 MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight
💻 JAVA
字号:
/* * MegaMek - Copyright (C) 2000,2001,2002,2003,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. *//* * MechView.java * * Created on January 20, 2003 by Ryan McConnell */package megamek.client.ui.AWT;import megamek.common.Entity;import megamek.common.EquipmentType;import megamek.common.GunEmplacement;import megamek.common.IArmorState;import megamek.common.Infantry;import megamek.common.Mech;import megamek.common.Mounted;import megamek.common.Protomech;import megamek.common.Tank;import megamek.common.TechConstants;import megamek.common.WeaponType;import java.util.Enumeration;/** * A utility class for retrieving mech information in a formatted string. * */public class MechView {    private Entity mech;    private boolean isMech;    private boolean isInf;    private boolean isVehicle;    private boolean isProto;    private boolean isGunEmplacement;    StringBuffer sBasic = new StringBuffer();    StringBuffer sLoadout = new StringBuffer();    StringBuffer sFluff = new StringBuffer("");    public MechView(Entity entity) {        mech = entity;        isMech = entity instanceof Mech;        isInf = entity instanceof Infantry;        isVehicle = entity instanceof Tank;        isProto = entity instanceof Protomech;        isGunEmplacement = entity instanceof GunEmplacement;        sLoadout.append( getWeapons() )            .append("\r\n") //$NON-NLS-1$            .append(getAmmo())            .append("\r\n") //$NON-NLS-1$            .append(getMisc()) //has to occur before basic is processed            .append("\r\n") //$NON-NLS-1$            .append(getFailed());        sBasic.append( mech.getShortNameRaw() );        sBasic.append("\r\n"); //$NON-NLS-1$        if ( !isInf ) {            sBasic.append( Math.round(mech.getWeight()) )                .append(Messages.getString("MechView.tons") ); //$NON-NLS-1$        }        if (mech.isMixedTech()) {            if (mech.isClan()) {                sBasic.append(Messages.getString("MechView.MixedClan"));            } else {                sBasic.append(Messages.getString("MechView.MixedIS"));            }        } else {            sBasic.append(TechConstants.getLevelDisplayableName(mech.getTechLevel()));        }        sBasic.append("\n"); //$NON-NLS-1$        if ( mech.hasC3M() || mech.hasC3S() || mech.hasC3i()) {            sBasic.append( Messages.getString("MechView.Linkedc3bv")); //$NON-NLS-1$            sBasic.append( mech.calculateBattleValue(true) );        }        if ( !isGunEmplacement ) {            sBasic.append("\n"); //$NON-NLS-1$            sBasic.append( Messages.getString("MechView.Movement") ) //$NON-NLS-1$                .append( mech.getWalkMP() )                .append( "/" ) //$NON-NLS-1$                .append( mech.getRunMPasString() );            if (mech.getJumpMP() > 0) {                sBasic.append( "/" ) //$NON-NLS-1$                    .append( mech.getJumpMP() );            }        }        if (isVehicle) {            sBasic.append(" (") //$NON-NLS-1$                .append(entity.getMovementModeAsString())                .append(")"); //$NON-NLS-1$        }        sBasic.append( "\n" ); //$NON-NLS-1$        if ( isMech || isVehicle ) {            sBasic.append( Messages.getString("MechView.Engine") ); //$NON-NLS-1$            sBasic.append(mech.getEngine().getShortEngineName());            sBasic.append("\n"); //$NON-NLS-1$        }        if ( isMech ) {            Mech aMech = (Mech)mech;            sBasic.append( Messages.getString("MechView.HeatSinks") ) //$NON-NLS-1$                .append( aMech.heatSinks() );            if (aMech.getHeatCapacity() > aMech.heatSinks()) {                sBasic.append( " [" ) //$NON-NLS-1$                    .append( aMech.getHeatCapacity() )                    .append( "]" ); //$NON-NLS-1$            }            if (aMech.getCockpitType() != Mech.COCKPIT_STANDARD) {                sBasic.append("\n"); //$NON-NLS-1$                sBasic.append(Messages.getString("MechView.Cockpit"));                sBasic.append(aMech.getCockpitTypeString());            }            if (aMech.getGyroType() != Mech.GYRO_STANDARD) {                sBasic.append("\n");                sBasic.append(Messages.getString("MechView.Gyro"));                sBasic.append(aMech.getGyroTypeString());            }            sBasic.append("\n");        }        sBasic.append("\n"); //$NON-NLS-1$        if ( !isGunEmplacement ) {            sBasic.append( getInternalAndArmor() );        } else {            sBasic.append( Messages.getString("MechView.ConstructionFactor"))                .append(renderArmor                        (mech.getArmor(GunEmplacement.LOC_BUILDING)))                .append('\n'); //$NON-NLS-1$            if ( ((GunEmplacement) mech).hasTurret() ) {                sBasic.append(Messages.getString("MechView.TurretArmor"))                    .append(renderArmor                            (mech.getArmor(GunEmplacement.LOC_TURRET)))                    .append('\n'); //$NON-NLS-1$            }        }                if(mech.getFluff() != null)            sFluff.append(mech.getFluff());    }    public String getMechReadoutBasic() {        return sBasic.toString();    }    public String getMechReadoutLoadout() {        return sLoadout.toString();    }        public String getMechReadoutFluff() {        return sFluff.toString();    }    public String getMechReadout() {        return getMechReadoutBasic() + "\n" + getMechReadoutLoadout() + "\n" + getMechReadoutFluff(); //$NON-NLS-1$    }        private String getInternalAndArmor() {        StringBuffer sIntArm = new StringBuffer();        int maxArmor = mech.getTotalInternal() * 2 + 3;        sIntArm.append( Messages.getString("MechView.Internal") ) //$NON-NLS-1$            .append( mech.getTotalInternal() );        if (isMech) {            sIntArm.append(Messages.getString("MechView."               + EquipmentType.getStructureTypeName(mech.getStructureType())));        }        sIntArm.append( "\n" ); //$NON-NLS-1$        sIntArm.append(Messages.getString("MechView.Armor")) //$NON-NLS-1$            .append( mech.getTotalArmor() );        if ( isMech ) {            sIntArm.append( "/" ) //$NON-NLS-1$                .append( maxArmor );        }        if (!isInf && !isProto) {            sIntArm.append(Messages.getString("MechView."               + EquipmentType.getArmorTypeName(mech.getArmorType())));        }        sIntArm.append( "\n" ); //$NON-NLS-1$        // Walk through the entity's locations.        for ( int loc = 0; loc < mech.locations(); loc++ ) {            // Skip empty sections.            if ( IArmorState.ARMOR_NA == mech.getInternal(loc) ||                 ( isVehicle && (( loc == Tank.LOC_TURRET &&                                   ((Tank)mech).hasNoTurret() ) ||                                 (loc == Tank.LOC_BODY))) ) {                continue;            }            if ( mech.getLocationAbbr(loc).length() < 2 ) {                sIntArm.append( " " ); //$NON-NLS-1$            }            sIntArm.append( mech.getLocationAbbr(loc) )                .append( ": " ); //$NON-NLS-1$            sIntArm.append( renderArmor(mech.getInternal(loc)) )                .append("   "); //$NON-NLS-1$            if ( IArmorState.ARMOR_NA != mech.getArmor(loc) ) {                sIntArm.append( renderArmor(mech.getArmor(loc)) );            }            if ( mech.hasRearArmor(loc) ) {                sIntArm.append( " (" ) //$NON-NLS-1$                    .append( renderArmor(mech.getArmor(loc, true)) )                    .append( ")" ); //$NON-NLS-1$            }            sIntArm.append( "\n" ); //$NON-NLS-1$        }        return sIntArm.toString();    }    private String getWeapons() {        StringBuffer sWeapons = new StringBuffer();        for (Mounted mounted : mech.getWeaponList()) {            WeaponType wtype = (WeaponType)mounted.getType();            sWeapons.append( mounted.getDesc() )                .append( "  [" ) //$NON-NLS-1$                .append( mech.getLocationAbbr(mounted.getLocation()) );            if (mounted.isSplit()) {                sWeapons.append("/") // $NON-NLS-1$                    .append(mech.getLocationAbbr(mounted.getSecondLocation()));            }            sWeapons.append( "]" ); //$NON-NLS-1$            if (mech.isClan() &&                 mounted.getType().getInternalName().substring(0,2).equals("IS")) { //$NON-NLS-1$                sWeapons.append(Messages.getString("MechView.IS")); //$NON-NLS-1$            }            if (!mech.isClan() &&                mounted.getType().getInternalName().substring(0,2).equals("CL")) { //$NON-NLS-1$                sWeapons.append(Messages.getString("MechView.Clan")); //$NON-NLS-1$            }            if (wtype.hasFlag(WeaponType.F_ONESHOT)) {                sWeapons.append(" <") //$NON-NLS-1$                    .append(mounted.getLinked().getDesc())                    .append(">"); //$NON-NLS-1$            }            sWeapons.append(" ").append(wtype.getHeat()).append(Messages.getString("MechView.Heat")); //$NON-NLS-1$ //$NON-NLS-2$            sWeapons.append("\n"); //$NON-NLS-1$        }        return sWeapons.toString();    }        private String getAmmo() {        StringBuffer sAmmo = new StringBuffer();        for (Mounted mounted : mech.getAmmo()) {            if (mounted.getLocation() != Entity.LOC_NONE) {                sAmmo.append( mounted.getDesc() )                    .append( "  [" ) //$NON-NLS-1$                    .append( mech.getLocationAbbr(mounted.getLocation()) )                    .append( "]\n" ); //$NON-NLS-1$            }        }        return sAmmo.toString();    }    private String getMisc() {        StringBuffer sMisc = new StringBuffer();        for (Mounted mounted: mech.getMisc()) {            String name = mounted.getName();            if (name.indexOf("Jump Jet") != -1 //$NON-NLS-1$                     ||(name.indexOf("CASE") != -1 && mech.isClan()) //$NON-NLS-1$                    || name.indexOf("Heat Sink") != -1 //$NON-NLS-1$                    || name.indexOf("Endo Steel") != -1 //$NON-NLS-1$                    || name.indexOf("Ferro-Fibrous") != -1) { //$NON-NLS-1$                // These items are displayed elsewhere, so skip them here.                continue;            }            sMisc.append( mounted.getDesc() )                .append( "  [" ) //$NON-NLS-1$                .append( mech.getLocationAbbr(mounted.getLocation()) )                .append( "]" ); //$NON-NLS-1$            if (mech.isClan() &&                 mounted.getType().getInternalName().substring(0,2).equals("IS")) { //$NON-NLS-1$                sMisc.append(Messages.getString("MechView.IS")); //$NON-NLS-1$            }            if (!mech.isClan() &&                mounted.getType().getInternalName().substring(0,2).equals("CL")) { //$NON-NLS-1$                sMisc.append(Messages.getString("MechView.Clan")); //$NON-NLS-1$            }            sMisc.append("\n"); //$NON-NLS-1$        }        String capacity = mech.getUnusedString();        if ( capacity != null && capacity.length() > 0 ) {            sMisc.append( Messages.getString("MechView.CarringCapacity") ) //$NON-NLS-1$                .append( capacity )                .append( "\n" ); //$NON-NLS-1$        }        return sMisc.toString();    }    private String getFailed() {        StringBuffer sFailed = new StringBuffer();        Enumeration eFailed = mech.getFailedEquipment();        if (eFailed.hasMoreElements()) {            sFailed.append("The following equipment\n slots failed to load:\n"); //$NON-NLS-1$            while (eFailed.hasMoreElements()) {                sFailed.append(eFailed.nextElement()).append("\n"); //$NON-NLS-1$            }        }        return sFailed.toString();    }        private static String renderArmor(int nArmor)    {        if (nArmor <= 0) {            return "xx"; //$NON-NLS-1$        }		return makeLength(String.valueOf(nArmor), 2, true);    }    private static final String SPACES = "                                   "; //$NON-NLS-1$    private static String makeLength(String s, int n, boolean bRightJustify)    {        int l = s.length();        if (l == n) {            return s;        }        else if (l < n) {            if (bRightJustify) {                return SPACES.substring(0, n - l) + s;            }			return s + SPACES.substring(0, n - l);        }        else {            return s.substring(0, n - 2) + ".."; //$NON-NLS-1$        }    }}

⌨️ 快捷键说明

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