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

📄 tdbfile.java

📁 MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * MegaMek - Copyright (C) 2000-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. *//* * TdbFile.java *  -based on MtfFile.java, modifications by Ryan McConnell * Created on April 1, 2003, 2:48 PM */package megamek.common.loaders;import java.io.*;import java.util.Hashtable;import java.util.Vector;import java.util.Enumeration;import megamek.common.BipedMech;import megamek.common.CriticalSlot;import megamek.common.Engine;import megamek.common.Entity;import megamek.common.EquipmentType;import megamek.common.LocationFullException;import megamek.common.Mech;import megamek.common.MiscType;import megamek.common.Mounted;import megamek.common.QuadMech;import megamek.common.TechConstants;import megamek.common.WeaponType;import gd.xml.*;import gd.xml.tiny.*;public class TdbFile implements IMechLoader {    private ParsedXML root = null;    /**     * The names of the various elements recognized by this parser.     */    private static final String  CREATOR_SECTION    = "creator";    private static final String  BASICS_SECTION    = "basics";    private static final String  ITEM_DEFS_SECTION    = "itemdefs";    private static final String  MOUNTED_ITEMS_SECTION    = "mounteditems";    private static final String  CRIT_DEFS_SECTION    = "critdefs";    private static final String  NAME               = "name";    private static final String  VERSION            = "version";    private static final String  MODEL              = "model";    private static final String  VARIANT            = "variant";    private static final String  TECHNOLOGY         = "technology";    private static final String  MOVEMECHMOD        = "movemechmod";    private static final String  TONNAGE            = "tonnage"; // also attribute    private static final String  TYPE               = "type";    private static final String  OMNI               = "isomni";    private static final String  WALK               = "walk";    private static final String  JUMP               = "jump";    private static final String  HEAT_SINKS         = "heatsinks";    private static final String  ARMOR              = "armor"; // also attribute    private static final String  ENGINE             = "engine";    private static final String  GYRO               = "gyro";    private static final String  COCKPIT            = "cockpit";    private static final String  STRUCTURE          = "internal"; // also attribute    private static final String  MOUNTED_ITEM       = "mounteditem";    private static final String  LOCATION           = "location";    private static final String  TARGSYS            = "targsys";    /**     * The names of the attributes recognized by this parser.     */    private static final String  LEVEL              = "level";    private static final String  COUNT              = "count";    private static final String  POINTS             = "points";    private static final String  REAR_MOUNTED       = "rearmounted";    private static final String  IS_SPREAD          = "isspread";    private static final String  ITEM_INDEX         = "itemindex";    private static final String  REAR_ARMOR         = "reararmor";    private static final String  RATING             = "rating";    /**     * Special values recognized by this parser.     */    private static final String  TRUE               = "True";    private static final String  FALSE              = "False";    private static final String  DOUBLE             = "Double";    private static final String  LASER              = "Laser";    private static final String  COMPACT            = "Compact (2)";    private static final String  TRUE_LOWER         = "true";    private String creatorName = "Unknown";    private String creatorVersion = "Unknown";    private String name;    private boolean isOmni = false;    private String model;    private String variant;    private String chassisConfig;    private String techBase;    private static final String techYear = "3068"; // TDB doesn't have era    private String rulesLevel;    private String LAMTonnage;    private String tonnage;    private String heatSinks;    private boolean dblSinks;    private String walkMP;    private String jumpMP;    private int larmArmor;    private int rarmArmor;    private int ltArmor;    private int rtArmor;    private int ctArmor;    private int headArmor;    private int llegArmor;    private int rlegArmor;    private int ltrArmor;    private int rtrArmor;    private int ctrArmor;    private String[][][] critData;    private boolean isRearMounted[];    private boolean isSplit[];    private String armorType;    private String engineType;    private int engineRating;    private String structureType;    private String targSysStr;    private String gyroType = "Standard";    private String cockpitType = "Standard";    private boolean clanTC = false;    private Hashtable hSharedEquip = new Hashtable();    private Vector vSplitWeapons = new Vector();    /** Creates new TdbFile */    public TdbFile(InputStream is) throws EntityLoadingException {        try {            root = TinyParser.parseXML(is);        }        catch (ParseException e) {            throw new EntityLoadingException("   Failure to parse XML ("+e.getLocalizedMessage()+")");        }        // Arbitrarily sized static arrays suck, or so a computer        //  science teacher once told me.        isRearMounted = new boolean[256];        isSplit = new boolean[256];        critData = new String[8][12][2];        parseNode((ParsedXML)root.elements().nextElement());    }    private void parseNode(ParsedXML node) throws EntityLoadingException {        if (!node.getTypeName().equals("tag")) {            // We only want to parse element nodes, text nodes            //  are implicitly parsed when needed.            return;        }        Enumeration children = node.elements();        if (node.getName().equals(CREATOR_SECTION)) {            parseCreatorNode(node);        } else if (node.getName().equals(BASICS_SECTION)) {            parseBasicsNode(node);        } else if (node.getName().equals(ITEM_DEFS_SECTION)) {            return; // don't need item defs section of xml        } else if (node.getName().equals(MOUNTED_ITEMS_SECTION)) {            parseMountedNode(node);        } else if (node.getName().equals(CRIT_DEFS_SECTION)) {            parseCritNode(node);        } else if (children != null) {            // Use recursion to process all the children            while (children.hasMoreElements()) {                parseNode((ParsedXML)children.nextElement());            }        }    }    private void parseCreatorNode(ParsedXML node) throws EntityLoadingException {        if (!node.getTypeName().equals("tag")) {            // We only want to parse element nodes, text nodes            //  are directly parsed below.            return;        }        Enumeration children = node.elements();        if (node.getName().equals(NAME)) {            creatorName = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(VERSION)) {            creatorVersion = ((ParsedXML)children.nextElement()).getContent();        } else if (children != null) {            // Use recursion to process all the children            while (children.hasMoreElements()) {                parseCreatorNode((ParsedXML)children.nextElement());            }        }        // Other tags (that don't match any if blocks above)        //  are simply ignored.    }    private void parseBasicsNode(ParsedXML node) throws EntityLoadingException {        if (!node.getTypeName().equals("tag")) {            // We only want to parse element nodes, text nodes            //  are directly parsed below.            return;        }        Enumeration children = node.elements();        if (node.getName().equals(NAME)) {            name = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(MODEL)) {            model = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(OMNI)) {            isOmni = ((ParsedXML)children.nextElement()).getContent().equals(TRUE_LOWER);        } else if (node.getName().equals(VARIANT)) {            variant = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(TECHNOLOGY)) {            techBase = ((ParsedXML)children.nextElement()).getContent();            rulesLevel = node.getAttribute(LEVEL);        } else if (node.getName().equals(TONNAGE)) {            tonnage = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(TYPE)) {            chassisConfig = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(MOVEMECHMOD)) {            // This tag seems to indicate the pod space on an omnimech            //  or the tonnage of the conversion equipment for            //  a LAM (Land Air Mech).            LAMTonnage = node.getAttribute(TONNAGE);        } else if (node.getName().equals(WALK)) {            walkMP = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(JUMP)) {            jumpMP = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(HEAT_SINKS)) {            if (((ParsedXML)children.nextElement()).getContent().indexOf(DOUBLE) != -1) {                dblSinks = true;            } else {                dblSinks = false;            }            heatSinks = node.getAttribute(COUNT);        } else if (node.getName().equals(ARMOR)) {            armorType = ((ParsedXML)children.nextElement()).getContent();        } else if (node.getName().equals(ENGINE)) {

⌨️ 快捷键说明

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