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

📄 boardview1.java

📁 MegaMek is a networked Java clone of BattleTech, a turn-based sci-fi boardgame for 2+ players. Fight
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        // check if it's on any entities        for (Iterator i = entitySprites.iterator(); i.hasNext();) {            final EntitySprite eSprite = (EntitySprite) i.next();            if (eSprite.isInside(point)) {                stringsSize += 3;            }        }        // check if it's on any attacks        for (Iterator i = attackSprites.iterator(); i.hasNext();) {            final AttackSprite aSprite = (AttackSprite) i.next();            if (aSprite.isInside(point)) {                stringsSize += 1 + aSprite.weaponDescs.size();            }        }        // If the hex contains a building or rubble, make more space.        // Also if it contains woods or jungle.        if (mhex != null) {            if (mhex.containsTerrain(Terrains.RUBBLE))                stringsSize++;            if (mhex.containsTerrain(Terrains.FUEL_TANK))                stringsSize++;            if (mhex.containsTerrain(Terrains.BUILDING))                stringsSize++;            if (mhex.containsTerrain(Terrains.BRIDGE))                stringsSize++;            if (mhex.containsTerrain(Terrains.JUNGLE))                 stringsSize ++;            else if (mhex.containsTerrain(Terrains.WOODS))                 stringsSize ++;        }        stringsSize += game.getNbrMinefields(mcoords);                // Artillery        final Vector artilleryAttacks = getArtilleryAttacksAtLocation(mcoords);        stringsSize += artilleryAttacks.size();        // Artillery fire adjustment        final Mounted curWeapon = getSelectedArtilleryWeapon();        if (curWeapon != null)            stringsSize++;        // if the size is zip, you must a'quit        if (stringsSize == 0) {            return null;        }        // now we can allocate an array of strings        String[] strings = new String[stringsSize];        int stringsIndex = 0;        // are we on a hex?        if (mhex != null) {            strings[stringsIndex] = Messages.getString("BoardView1.Hex") + mcoords.getBoardNum() //$NON-NLS-1$                    + Messages.getString("BoardView1.level") + mhex.getElevation(); //$NON-NLS-1$            stringsIndex += 1;            if (mhex.containsTerrain(Terrains.JUNGLE)) {                int ttl = mhex.getTerrain(Terrains.JUNGLE).getLevel();                if (ttl == 1)                    strings[stringsIndex] = "Light Jungle";                else if (ttl == 2)                    strings[stringsIndex] = "Heavy Jungle";                else if (ttl == 3)                    strings[stringsIndex] = "Ultra-Heavy Jungle";                else                    strings[stringsIndex] = "Jungle";                stringsIndex += 1;            } else if (mhex.containsTerrain(Terrains.WOODS)) {                int ttl = mhex.getTerrain(Terrains.WOODS).getLevel();                if (ttl == 1)                    strings[stringsIndex] = "Light Woods";                else if (ttl == 2)                    strings[stringsIndex] = "Heavy Woods";                else if (ttl == 3)                    strings[stringsIndex] = "Ultra-Heavy Woods";                else                    strings[stringsIndex] = "Woods";                stringsIndex += 1;            }            // Do we have rubble?            if (mhex.containsTerrain(Terrains.RUBBLE)) {                strings[stringsIndex] = Messages.getString("BoardView1.Rubble"); //$NON-NLS-1$                stringsIndex += 1;            }            // Do we have a building?            if ((mhex.containsTerrain(Terrains.FUEL_TANK)) || (mhex.containsTerrain(Terrains.BUILDING))) {                // Get the building.                Building bldg = game.getBoard().getBuildingAt(mcoords);                StringBuffer buf = new StringBuffer(Messages.getString("BoardView1.Height")); //$NON-NLS-1$                // Each hex of a building has its own elevation.                buf.append(mhex.terrainLevel(Terrains.BLDG_ELEV));                buf.append(" "); //$NON-NLS-1$                buf.append(bldg.toString());                buf.append(Messages.getString("BoardView1.CF")); //$NON-NLS-1$                buf.append(bldg.getCurrentCF());                strings[stringsIndex] = buf.toString();                stringsIndex += 1;            }            // Do we have a bridge?            if (mhex.containsTerrain(Terrains.BRIDGE)) {                // Get the building.                Building bldg = game.getBoard().getBuildingAt(mcoords);                StringBuffer buf = new StringBuffer(Messages.getString("BoardView1.Height")); //$NON-NLS-1$                // Each hex of a building has its own elevation.                buf.append(mhex.terrainLevel(Terrains.BRIDGE_ELEV));                buf.append(" "); //$NON-NLS-1$                buf.append(bldg.toString());                buf.append(Messages.getString("BoardView1.CF")); //$NON-NLS-1$                buf.append(bldg.getCurrentCF());                strings[stringsIndex] = buf.toString();                stringsIndex += 1;            }            if (game.containsMinefield(mcoords)) {                Vector minefields = game.getMinefields(mcoords);                for (int i = 0; i < minefields.size(); i++) {                    Minefield mf = (Minefield) minefields.elementAt(i);                    String owner = " (" + game.getPlayer(mf.getPlayerId()).getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$                    switch (mf.getType()) {                        case (Minefield.TYPE_CONVENTIONAL):                            strings[stringsIndex] = mf.getName() + Messages.getString("BoardView1.minefield") + " " + owner; //$NON-NLS-1$ //$NON-NLS-2$                            break;                        case (Minefield.TYPE_THUNDER):                            strings[stringsIndex] = mf.getName() + Messages.getString("BoardView1.minefield") + "(" + mf.getDamage() + ")" + owner; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$                            break;                        case (Minefield.TYPE_COMMAND_DETONATED):                            strings[stringsIndex] = mf.getName() + Messages.getString("BoardView1.minefield") + " " + owner; //$NON-NLS-1$ //$NON-NLS-2$                            break;                        case (Minefield.TYPE_VIBRABOMB):                            if (mf.getPlayerId() == localPlayer.getId()) {                                strings[stringsIndex] = mf.getName() + Messages.getString("BoardView1.minefield") + "(" + mf.getSetting() + ") " + owner; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$                            } else {                                strings[stringsIndex] = mf.getName() + Messages.getString("BoardView1.minefield") + " " + owner; //$NON-NLS-1$ //$NON-NLS-2$                            }                            break;                        case (Minefield.TYPE_THUNDER_ACTIVE):                            strings[stringsIndex] = mf.getName() + Messages.getString("BoardView1.minefield") + "(" + mf.getDamage() + ")" + owner; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$                            break;                        case (Minefield.TYPE_THUNDER_INFERNO):                            strings[stringsIndex] = mf.getName() + Messages.getString("BoardView1.minefield") + "(" + mf.getDamage() + ")" + owner; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$                            break;                    }                    stringsIndex++;                }            }        }        // check if it's on any entities        for (Iterator i = entitySprites.iterator(); i.hasNext();) {            final EntitySprite eSprite = (EntitySprite) i.next();            if (eSprite.isInside(point)) {                final String[] entityStrings = eSprite.getTooltip();                System.arraycopy(entityStrings, 0, strings, stringsIndex, entityStrings.length);                stringsIndex += entityStrings.length;            }        }        // check if it's on any attacks        for (Iterator i = attackSprites.iterator(); i.hasNext();) {            final AttackSprite aSprite = (AttackSprite) i.next();            if (aSprite.isInside(point)) {                final String[] attackStrings = aSprite.getTooltip();                System.arraycopy(attackStrings, 0, strings, stringsIndex, attackStrings.length);                stringsIndex += 1 + aSprite.weaponDescs.size();            }        }                // check artillery attacks        for (Iterator i = artilleryAttacks.iterator(); i.hasNext();) {            final ArtilleryAttackAction aaa = (ArtilleryAttackAction) i.next();            final WeaponResult wr = aaa.getWR();            final Entity ae = game.getEntity(wr.waa.getEntityId());            String s = null;            if (ae != null) {                if (wr.waa.getWeaponId() > -1) {                    Mounted weap = ae.getEquipment(wr.waa.getWeaponId());                    s = weap.getName();                    if (wr.waa.getAmmoId() > -1) {                        Mounted ammo = ae.getEquipment(wr.waa.getAmmoId());                        s += "(" + ammo.getName() + ")";                    }                }            }            if (s == null) {                s = Messages.getString("BoardView1.Artillery");            }            strings[stringsIndex++] = Messages.getString("BoardView1.ArtilleryAttack",                    new Object[]{s, new Integer(aaa.turnsTilHit), wr.toHit.getValueAsString()});        }        //check artillery fire adjustment        if (curWeapon != null && selectedEntity != null) {            //process targetted hexes            int amod;            //Check the predesignated hexes            if (selectedEntity.getOwner().getArtyAutoHitHexes().contains(mcoords)) {                amod = TargetRoll.AUTOMATIC_SUCCESS;            } else {                amod = selectedEntity.aTracker.getModifier(curWeapon, mcoords);            }            if (amod == TargetRoll.AUTOMATIC_SUCCESS) {                strings[stringsIndex] = Messages.getString("BoardView1.ArtilleryAutohit");            } else {                strings[stringsIndex] = Messages.getString("BoardView1.ArtilleryAdjustment", new Object[]{new Integer(amod)});            }        }        StringBuffer buf = new StringBuffer();        for (String aString : strings ) {            buf.append(aString);            buf.append('\n');        }        return buf.toString();    }    private void redrawMovingEntity(Entity entity, Coords position, int facing) {        Integer entityId = new Integer(entity.getId());        EntitySprite sprite = (EntitySprite) entitySpriteIds.get(entityId);        ArrayList<Sprite> newSprites;        HashMap<Integer, Sprite> newSpriteIds;        if (sprite != null) {            newSprites = new ArrayList<Sprite>(entitySprites);            newSpriteIds = new HashMap<Integer, Sprite>(entitySpriteIds);            newSprites.remove(sprite);            entitySprites = newSprites;            entitySpriteIds = newSpriteIds;        }        MovingEntitySprite mSprite =                (MovingEntitySprite) movingEntitySpriteIds.get(entityId);        newSprites = new ArrayList<Sprite>(movingEntitySprites);        newSpriteIds = new HashMap<Integer, Sprite>(movingEntitySpriteIds);        if (mSprite != null) {            newSprites.remove(mSprite);        }        if (entity.getPosition() != null) {            mSprite = new MovingEntitySprite(entity, position, facing);            newSprites.add(mSprite);            newSpriteIds.put(entityId, mSprite);        }        movingEntitySprites = newSprites;        movingEntitySpriteIds = newSpriteIds;    }    public boolean isMovingUnits() {        return movingUnits.size() > 0;    }    /**     * Clears the sprite for an entity and prepares it to be re-drawn.     * Replaces the old sprite with the new!     * <p/>     * Try to prevent annoying ConcurrentModificationExceptions     */    public void redrawEntity(Entity entity) {        Integer entityId = new Integer(entity.getId());        EntitySprite sprite = (EntitySprite) entitySpriteIds.get(entityId);        ArrayList<Sprite> newSprites = new ArrayList<Sprite>(entitySprites);        HashMap<Integer, Sprite> newSpriteIds = new HashMap<Integer, Sprite>(entitySpriteIds);        if (sprite != null) {            newSprites.remove(sprite);        }        Coords position = entity.getPosition();        if (position != null) {            sprite = new EntitySprite(entity);            newSprites.add(sprite);            newSpriteIds.put(entityId, sprite);        }        entitySprites = newSprites;        entitySpriteIds = newSpriteIds;        for (Sprite spriteTemp : C3Sprites) {            C3Sprite c3sprite = (C3Sprite) spriteTemp;            if (c3sprite.entityId == entity.getId())                C3Sprites.remove(c3sprite);            else if (c3sprite.masterId == entity.getId()) {                // Only redraw client-to-master; otherwise                // we leave stray lines when we move.                if (entity.hasC3()) {                    C3Sprites.add(new C3Sprite(game.getEntity(c3sprite.entityId), game.getEntity(c3sprite.masterId)));                }                C3Sprites.remove(c3sprite);            }        }        if (entity.hasC3() || entity.hasC3i()) addC3Link(entity);        repaint(100);    }    /**     * Clears all old entity sprites out of memory and sets up new ones.     */    private void redrawAllEntities() {        ArrayList<Sprite> newSprites = new ArrayList<Sprite>(game.getNoOfEntities());        HashMap<Integer, Sprite> newSpriteIds = new HashMap<Integer, Sprite>(game.getNoOfEntities());        ArrayList<Sprite> newWrecks = new ArrayList<Sprite>();        Enumeration e = game.getWreckedEntities();        while (e.hasMoreElements()) {            Entity entity = (Entity) e.nextElement();            if (!(entity instanceof Infantry) && (entity.getPosition() != null)) {                WreckSprite ws = new WreckSprite(entity);                newWrecks.add(ws);            }        }        clearC3Networks();        for (Enumeration i = game.getEntities(); i.hasMoreElements();) {            final Entity entity = (Entity) i.nextElement();            if (entity.getPosition() == null) continue;            EntitySprite sprite = new EntitySprite(entity);            newSprites.add(sprite);    

⌨️ 快捷键说明

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