📄 boardview1.java
字号:
// 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 + -