private double calcBridgeHazard(Entity movingUnit, IHex hex, MoveStep step, boolean jumpLanding, IBoard board, StringBuilder logMsg) { logMsg.append("\n\tCalculating bridge hazard: "); // if we are going to BWONGGG into a bridge from below, then it's treated as a building. // Otherwise, bridge collapse checks have already been handled in validatePaths int bridgeElevation = hex.terrainLevel(Terrains.BRIDGE_ELEV); if ((bridgeElevation > step.getElevation()) && (bridgeElevation <= (step.getElevation() + movingUnit.getHeight()))) { return calcBuildingHazard(step, movingUnit, jumpLanding, board, logMsg); } return 0; }
/** * Apply PSR modifier for difficult terrain at the move step position * * @param roll the PSR to modify * @param step the move step the PSR occurs at */ public void addPilotingModifierForTerrain(PilotingRollData roll, MoveStep step) { if (step.getElevation() > 0) { return; } addPilotingModifierForTerrain(roll, step.getPosition()); }
/** * get final elevation relative to the hex. */ public int getFinalElevation() { if (getLastStep() != null) { return getLastStep().getElevation(); } return getEntity().getElevation(); }
|| (moveType == EntityMovementType.MOVE_SUBMARINE_WALK) || (moveType == EntityMovementType.MOVE_SUBMARINE_RUN)) { costStringBuf.append("{").append(step.getElevation()) .append("}");
if(bridgeElevation == step.getElevation()) { logMsg.append("Unit (0) crossing bridge."); return 0;
/** * Worker method that adds "UP" and "DOWN" steps to the given move path collection if * the entity is eligible to do so * * @param result The collection of move paths to improve * @param last The last step along the parent move path * @param entity The entity taking the move path * @param movePath The parent movePath * @see AbstractPathFinder.AdjacencyMap */ void addUpAndDown(Collection<MovePath> result, final MoveStep last, final Entity entity, final MovePath mp) { Coords pos; int elevation; pos = last != null ? last.getPosition() : entity.getPosition(); elevation = last != null ? last.getElevation() : entity.getElevation(); if (entity.canGoUp(elevation, pos)) { result.add(mp.clone().addStep(MoveStepType.UP)); } if (entity.canGoDown(elevation, pos)) { result.add(mp.clone().addStep(MoveStepType.DOWN)); } } }
/** * Returns the highest elevation along a jump path. * * @return */ public Coords getJumpPathHighestPoint() { Coords highestCoords = null; int highestElevation = 0; for (MoveStep step : steps) { if (getGame().getBoard().getHex(step.getPosition()).getLevel() > highestElevation) { highestElevation = step.getElevation(); highestCoords = step.getPosition(); } } return highestCoords; }
&& (curBldg.getBldgClass() == Building.HANGAR) && (curHex.terrainLevel(Terrains.BLDG_ELEV) > height()) && (step.getElevation() < curHex .terrainLevel(Terrains.BLDG_ELEV))) { return 0; if (step.getElevation() < curHex.terrainLevel(Terrains.BLDG_ELEV)) { rv += 2; } else if (((step.getElevation() == curHex .terrainLevel(Terrains.BLDG_ELEV)) || (step.getElevation() == curHex .terrainLevel(Terrains.BRIDGE_ELEV))) && (step.getMovementType(false) != EntityMovementType.MOVE_JUMP)) { int prevEl = getElevation(); if (prevStep != null) { prevEl = prevStep.getElevation(); && (curBldg != null) && (prevStep != null) && (step.getElevation() != prevStep.getElevation()) && ((step.getType() == MoveStepType.UP) || (step.getType() == MoveStepType.DOWN))) { rv = 8;
if (en.game.getBoard().onGround() && (getElevation() > 0)) { if (en instanceof Dropship) { thresh = vel * 8;
int bgMod = curHex.getBogDownModifier(getMovementMode(), this instanceof LargeSupportTank); if ((!lastPos.equals(curPos) || (step.getElevation() != lastElev)) && (bgMod != TargetRoll.AUTOMATIC_SUCCESS) && (moveType != EntityMovementType.MOVE_JUMP) && (step.getElevation() == 0) && !isPavementStep) { roll.append( new PilotingRollData(getId(), bgMod, "avoid bogging down"));
MoveStep lastMS = this.boardView1.pathSprites.get(lastStepIdx) .getStep(); elevation = lastMS.getElevation(); } else {
ramStep = step; ramSrc = step.getPosition(); ramEl = step.getElevation();
} else { ramSrc = step.getPosition(); ramEl = step.getElevation();
@Override public boolean shouldStay(MovePath edge) { if (edge.getEntity().isAero()) { /* * isMovemementPossible is currently not working for aero units, * so we have to use a substitute. */ if (edge.length() == 0) { return true; } else { MoveStep lastStep = edge.getLastStep(); return (lastStep == null) || lastStep.getMovementType(true) != EntityMovementType.MOVE_ILLEGAL; } } Coords previousPosition; int previousElevation; if (edge.length() > 1) { MoveStep previousStep = edge.getSecondLastStep(); previousElevation = previousStep.getElevation(); previousPosition = previousStep.getPosition(); } else { Entity entity = edge.getEntity(); previousElevation = entity.getElevation(); previousPosition = entity.getPosition(); } return (edge.getLastStep().isMovementPossible( game, previousPosition, previousElevation)); } }
/** * Checks if the entity is moving into depth 1+ water. If so, returns the * target roll for the piloting skill check. */ public PilotingRollData checkWaterMove(MoveStep step, EntityMovementType moveType, IHex curHex, Coords lastPos, Coords curPos, boolean isPavementStep) { if ((curHex.terrainLevel(Terrains.WATER) > 0) && (step.getElevation() < 0) && !lastPos.equals(curPos) && (moveType != EntityMovementType.MOVE_JUMP) && (getMovementMode() != EntityMovementMode.HOVER) && (getMovementMode() != EntityMovementMode.VTOL) && (getMovementMode() != EntityMovementMode.NAVAL) && (getMovementMode() != EntityMovementMode.HYDROFOIL) && (getMovementMode() != EntityMovementMode.SUBMARINE) && (getMovementMode() != EntityMovementMode.INF_UMU) && (getMovementMode() != EntityMovementMode.BIPED_SWIM) && (getMovementMode() != EntityMovementMode.QUAD_SWIM) && (getMovementMode() != EntityMovementMode.WIGE) && canFall() && !isPavementStep) { return checkWaterMove(curHex.terrainLevel(Terrains.WATER), moveType); } return checkWaterMove(0, moveType); }
public PilotingRollData checkBogDown(MoveStep step, IHex curHex, Coords lastPos, Coords curPos, boolean isPavementStep) { PilotingRollData roll = new PilotingRollData(getId(), 4, "entering boggy terrain"); int bgMod = curHex.getBogDownModifier(getMovementMode(), false); final boolean onBridge = (curHex.terrainLevel(Terrains.BRIDGE) > 0) && (getElevation() == curHex.terrainLevel(Terrains.BRIDGE_ELEV)); if (!lastPos.equals(curPos) && (bgMod != TargetRoll.AUTOMATIC_SUCCESS) && (step.getMovementType(false) != EntityMovementType.MOVE_JUMP) && (getMovementMode() != EntityMovementMode.HOVER) && (getMovementMode() != EntityMovementMode.VTOL) && (getMovementMode() != EntityMovementMode.WIGE) && (step.getElevation() == 0) && !isPavementStep && !onBridge) { roll.append(new PilotingRollData(getId(), bgMod, "avoid bogging down")); } else { roll.addModifier(TargetRoll.CHECK_FALSE, "Check false: Not entering bog-down terrain, " + "or jumping/hovering over such terrain"); } return roll; }
} else { chargeSrc = step.getPosition(); chargeEl = step.getElevation();
if (!left) { if (!step.getPosition().equals(getEntity().getPosition()) || !(step.getElevation() == getEntity().getElevation())) { && (step.getElevation() == getEntity().getElevation())) {
.containsTerrainExit(Terrains.BRIDGE, src2destDir) && (moveStep.getElevation() == srcHex .terrainLevel(Terrains.BRIDGE_ELEV)))) && (destHex.containsTerrainExit(Terrains.ROAD, dest2srcDir)
final int prevEl = prevStep.getElevation(); final EntityMovementMode moveMode = getEntity() .getMovementMode();