boolean isFieldArtillery = (entity instanceof Infantry) && ((Infantry) entity).hasActiveFieldArtillery(); copy(game, prev); prev = new MoveStep(null, MoveStepType.FORWARDS); prev.setFromEntity(entity, game); prev.isCarefulPath = isCareful(); prev.isJumpingPath = isJumping(); setFirstStep(prev.mpUsed == 0); // Bug 1519330 - its not a first step when continuing after a fall } else if (prev.isFirstStep() // Some step types don't remove first step status && ((prev.getType() == MoveStepType.CLIMB_MODE_ON) || (prev.getType() == MoveStepType.CLIMB_MODE_OFF))) { setFirstStep(true); switch (getType()) { case UNLOAD: case DISCONNECT: setMp(0); break; case LOAD: case TOW: setMp(1); break; case MOUNT: setMp(0); break; case TURN_LEFT: case TURN_RIGHT:
if (!step.getEntity().isAirborne() || !step.getEntity().isAero()) { return; if (((IAero) step.getEntity()).isSpheroid()) { return; int distTraveled = step.getDistance(); int velocity = step.getVelocity(); if (bv.game.getBoard().onGround()) { velocity *= 16; if (step.getVelocityLeft() > 0) { col = Color.RED; String turnString = null; StringBuffer turnStringBuf = new StringBuffer(); turnStringBuf.append("<").append(step.getNStraight()) .append(">"); if (step.dueFreeTurn()) { col = Color.GREEN; } else if (step.canAeroTurn(bv.game)) { col = Color.YELLOW;
/** * Turns VTOL bombing on or off for this step. */ public void setVTOLBombing(boolean bombing) { if (bombing) { setTarget(new HexTarget(getPosition(), getGame().getBoard(), Targetable.TYPE_HEX_AERO_BOMB)); } else { setTarget(null); } }
/** * 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()); }
/** * Searches the movement path for the first step that has the given position and sets it as * a VTOL bombing step. If found, any previous bombing step is cleared. If the coordinates are not * part of the path nothing is changed. * * @param pos The <code>Coords</code> of the hex to be bombed. * @return Whether the position was found in the movement path */ public boolean setVTOLBombStep(Coords pos) { boolean foundPos = false; MoveStep prevBombing = null; for (MoveStep step : steps) { if (step.getPosition().equals(pos)) { if (step.isVTOLBombingStep()) { return true; } else { step.setVTOLBombing(true); foundPos = true; } } else if (step.isVTOLBombingStep()) { prevBombing = step; } } if (foundPos && prevBombing != null) { prevBombing.setVTOLBombing(false); } return foundPos; }
final MoveStepType stepType = getType(); final boolean isInfantry = entity instanceof Infantry; Coords curPos = getPosition(); Coords lastPos = prev.getPosition(); boolean isUnjammingRAC = entity.isUnjammingRAC(); prevStepOnPavement = prev.isPavementStep(); isTurning = prev.isTurning(); isUnloaded = prev.isUnloaded(); if (isInfantry && ((getMpUsed() - getMp()) == 0)) { setFirstStep(true); && !prev.getCrushedBuildingLocs().isEmpty()) { return; if ((prev.getAltitude() > 0) || game.getBoard().inSpace()) { if (!isFirstStep() && (prev.getMovementType(false) == EntityMovementType.MOVE_ILLEGAL)) { return; && (velocity != 0) && (getNTurns() > 2)) { return; && (velocity != 0) && (getNTurns() > 1)) { return; if (useAeroAtmosphere(game, entity)
IHex destHex = game.getBoard().getHex(getPosition()); if (!entity.isAirborne() && Compute.canMoveOnPavement(game, prev.getPosition(), getPosition(), this)) { setPavementStep(true); } else { setPavementStep(false); setOnlyPavement(false); setHasJustStood(false); if (prev.isThisStepBackwards() != isThisStepBackwards()) { setDistance(0); // start over after shifting gears addDistance(1); setNMoved(getNMoved() + 1); if ((entity.getMovementMode() != EntityMovementMode.SPHEROID) && (getNMoved() >= 16)) { setVelocityLeft(getVelocityLeft() - 1); setNMoved(0); && !useSpheroidAtmosphere(game, entity)) { setVelocityLeft(getVelocityLeft() - 1); setNTurns(0); setNStraight(getNStraight() + 1); if (useAeroAtmosphere(game, entity)) { if (game.getBoard().onGround() && (getNStraight() > 7)) {
containedStepTypes.add(step.getType()); step.compile(getGame(), getEntity(), prev); } catch (final RuntimeException re) { step.setMovementType(EntityMovementType.MOVE_ILLEGAL); final Coords land = step.getPosition(); if ((start == null) || (land == null)) { step.setMovementType(EntityMovementType.MOVE_ILLEGAL); } else { final int distance = start.distance(land); if (isJumping() && (getEntity().getJumpType() != Mech.JUMP_BOOSTER)) { if (step.isThisStepBackwards() || (step.getDistance() > distance)) { step.setMovementType(EntityMovementType.MOVE_ILLEGAL); step.setMovementType(EntityMovementType.MOVE_ILLEGAL); && (entity instanceof Jumpship) && !(entity instanceof Warship) && !step.isFirstStep() && (contains(MoveStepType.TURN_LEFT) || contains(MoveStepType.TURN_RIGHT))) { step.setMovementType(EntityMovementType.MOVE_ILLEGAL); if ((step.getType() == MoveStepType.LAY_MINE)) { boolean containsOtherLayMineStep = false; for (int i = 0; i < steps.size() - 1; i++) {
for (int i = 0; i < temp.size(); i++) { MoveStep step = temp.elementAt(i); if ((step.getTargetPosition() != null) && (step.getTarget(getGame()) != null)) { step = new MoveStep(this, step.getType(), step.getTarget(getGame()), step.getTargetPosition()); } else if (step.getTarget(getGame()) != null) { step = new MoveStep(this, step.getType(), step.getTarget(getGame())); } else if (step.getRecoveryUnit() != -1) { step = new MoveStep(this, step.getType(), step.getRecoveryUnit(), -1); } else if (step.getMineToLay() != -1) { step = new MoveStep(this, step.getType(), step.getMineToLay()); } else if (step.getLaunched().size() > 0) { step = new MoveStep(this, step.getType(), step.getLaunched()); } else if (step.getManeuverType() != ManeuverType.MAN_NONE) { step = new MoveStep(this, step.getType(), -1, -1, step.getManeuverType()); } else if (step.isManeuver()) { step = new MoveStep(this, step.getType(), step.hasNoCost(), step.isManeuver()); } else if (step.hasNoCost()) { step = new MoveStep(this, step.getType(), step.hasNoCost()); } else if (null != step.getMinefield()) { step = new MoveStep(this, step.getType(), step.getMinefield()); } else { step = new MoveStep(this, step.getType()); for (MoveStep step : steps) { if (!left) { if (!step.getPosition().equals(getEntity().getPosition()) || !(step.getElevation() == getEntity().getElevation())) { if (step.getPosition().equals(getEntity().getPosition())
for (final Enumeration<MoveStep> i = md.getSteps(); i.hasMoreElements();) { final MoveStep step = i.nextElement(); boolean isPavementStep = step.isPavementStep(); if (step.getMovementType(md.isEndStep(step)) == EntityMovementType.MOVE_ILLEGAL) { break; moveType = step.getMovementType(md.isEndStep(step)); distance = step.getDistance(); curPos = step.getPosition(); curFacing = step.getFacing(); curElevation = step.getElevation(); if ((step.getType() == MoveStepType.VTAKEOFF) && entity.isAero()) { rollTarget = ((IAero)entity).checkVerticalTakeOff(); if ((step.getType() == MoveStepType.LAND) && entity.isAero()) { rollTarget = ((IAero) entity).checkLanding(moveType, step.getVelocity(), curPos, curFacing, false); checkNag(rollTarget, nagReport, psrList); if ((step.getType() == MoveStepType.VLAND) && entity.isAero()) { rollTarget = ((IAero) entity).checkLanding(moveType, step.getVelocity(), curPos, curFacing, true); checkNag(rollTarget, nagReport, psrList);
final Point stepPos = bv.getHexLocation(step.getPosition()); stepPos.translate(-bounds.x, -bounds.y); Shape FacingArrow = bv.facingPolys[step.getFacing()]; Shape moveArrow = bv.movementPolys[step.getFacing()]; switch (step.getMovementType(isLastStep)) { case MOVE_RUN: case MOVE_VTOL_RUN: case MOVE_OVER_THRUST: if (step.isUsingMASC()) { col = GUIPreferences.getInstance().getColor( "AdvancedMoveMASCColor"); break; default: if ((step.getType() == MoveStepType.BACKWARDS) || (step.getType() == MoveStepType.LATERAL_LEFT_BACKWARDS) || (step.getType() == MoveStepType.LATERAL_RIGHT_BACKWARDS)) { col = GUIPreferences.getInstance().getColor( "AdvancedMoveBackColor"); switch (step.getType()) { case FORWARDS: case SWIM: if (step.getEntity().getMovementMode() == EntityMovementMode.WIGE) { climb = Messages.getString("BoardView1.WIGEClimb"); //$NON-NLS-1$ } else {
final Coords dest = getPosition(); final IHex destHex = game.getBoard().getHex(dest); final Entity entity = getEntity(); && (getMovementType(false) == EntityMovementType.MOVE_JUMP)) { IHex hex = game.getBoard().getHex(getPosition()); int maxElevation = (2 + entity.getElevation() + game.getBoard() .getHex(entity.getPosition()).surface()) && isThisStepBackwards() && !(isJumping() && (entity.getJumpType() == Mech.JUMP_BOOSTER)) && (((destAlt != srcAlt) && !game.getOptions().booleanOption( OptionsConstants.ADVGRNDMOV_TACOPS_WALK_BACKWARDS)) || (game.getOptions() setLeapDistance(srcAlt - destAlt); && (destAlt != srcAlt) && !(entity instanceof VTOL) && !(isJumping() && (entity.getJumpType() == Mech.JUMP_BOOSTER))) { if (game.getOptions().booleanOption(OptionsConstants.ADVGRNDMOV_TACOPS_WALK_BACKWARDS) && (Math.abs(destAlt - srcAlt) > 1)) { && !(destHex.containsTerrain(Terrains.ICE) && (elevation >= 0)) && !dest.equals(entity.getPosition()) && !isFirstStep() && !isPavementStep()) { return false;
|| (gear == MovementDisplay.GEAR_DFA) || ((cmd.getMpUsed() > ce.getWalkMP()) && !(cmd.getLastStep().isOnlyPavement() && (cmd.getMpUsed() <= (ce.getWalkMP() + 1)))) || (opts.booleanOption("tacops_tank_crews") if ((gear != MovementDisplay.GEAR_JUMP) && !((cmd.getLastStep() != null) && cmd.getLastStep().isFirstStep() && (cmd.getLastStep().getType() == MoveStepType.LAY_MINE))) { clear(); if (ce.isAero() && (null != cmd.getLastStep()) && (cmd.getLastStep().getNDown() == 1) && (cmd.getLastStep().getVelocity() < 12) && !(((IAero) ce).isSpheroid() || clientgui.getClient() .getGame().getPlanetaryConditions().isVacuum())) { MoveStep ms = cmd.getLastStep(); if ((ms != null) && ((ms.getType() == MoveStepType.CLIMB_MODE_ON) || (ms .getType() == MoveStepType.CLIMB_MODE_OFF))) { MoveStep lastStep = cmd.getLastStep(); cmd.removeLastStep(); if (lastStep.getType() == MoveStepType.CLIMB_MODE_ON) { cmd.addStep(MoveStepType.CLIMB_MODE_OFF);
for (final Enumeration<MoveStep> i = md.getSteps(); i.hasMoreElements();) { final MoveStep step = i.nextElement(); if (step.getMovementType(md.isEndStep(step)) == EntityMovementType.MOVE_ILLEGAL) { break; if (step.getType() == MoveStepType.RAM) { ramStep = step; ramSrc = step.getPosition(); ramEl = step.getElevation(); || !target.getPosition().equals(ramStep.getPosition())) { return new ToHitData(TargetRoll.IMPOSSIBLE, "Could not reach target with movement"); return toHit(game, target, ramSrc, ramEl, priorSrc, ramStep.getMovementType(true));
final Coords prev = prevStep.getPosition(); final int prevEl = prevStep.getElevation(); final EntityMovementMode moveMode = getEntity() .getMovementMode(); final IHex srcHex = game.getBoard().getHex(prev); final IHex destHex = game.getBoard().getHex(getPosition()); final boolean isInfantry = getEntity() instanceof Infantry; final boolean isSuperHeavyMech = (getEntity() instanceof Mech) && ((Mech) getEntity()).isSuperHeavy(); final boolean isMechanizedInfantry = isInfantry && ((Infantry) getEntity()).isMechanized(); final boolean isProto = getEntity() instanceof Protomech; final boolean isMech = getEntity() instanceof Mech; final boolean isAmphibious = getEntity().hasWorkingMisc(MiscType.F_FULLY_AMPHIBIOUS) || getEntity().hasWorkingMisc(MiscType.F_LIMITED_AMPHIBIOUS); int nSrcEl = srcHex.getLevel() + prevEl; int nDestEl = destHex.getLevel() + elevation; && (getEntity().getWalkMP() == 0) && (moveMode != EntityMovementMode.SUBMARINE) && getEntity().getPosition().equals(prev) && (getEntity().getPosition().distance(getPosition()) == 1) && (!isJumping())) { mp = 0; return; !game.getOptions().booleanOption(OptionsConstants.ADVGRNDMOV_NO_NIGHT_MOVE_PEN); boolean carefulExempt = (moveMode == EntityMovementMode.VTOL) || isJumping();
setFromEntity(getEntity(), game); return; facing = prev.getFacing(); position = prev.getPosition(); distance = prev.getDistance(); mpUsed = prev.mpUsed; totalHeat = prev.totalHeat;
@Override public Rectangle getBounds() { bounds = new Rectangle(bv.getHexLocation(step.getPosition()), bv.hex_size); return bounds; }
if (step.getMovementType(md.isEndStep(step)) == EntityMovementType.MOVE_ILLEGAL) { break; moveType = step.getMovementType(md.isEndStep(step)); curPos = step.getPosition(); curFacing = step.getFacing(); if (step.getType() == MoveStepType.VTAKEOFF) { rollTarget = ((IAero)entity).checkVerticalTakeOff(); checkNag(rollTarget, nagReport, psrList); if (step.getType() == MoveStepType.LAND) { rollTarget = ((IAero) entity).checkLanding(moveType, step.getVelocity(), curPos, curFacing, false); checkNag(rollTarget, nagReport, psrList); if (step.getType() == MoveStepType.VLAND) { rollTarget = ((IAero) entity).checkLanding(moveType, step.getVelocity(), curPos, curFacing, true); checkNag(rollTarget, nagReport, psrList); if (step.getType() == MoveStepType.EJECT && (entity instanceof Mech)) { rollTarget = Server.getEjectModifiers(game, entity, 0, false);
@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)); } }
switch (md.getLastStep().getMovementType(true)) { case MOVE_RUN: case MOVE_VTOL_RUN: break; movementTarget = md.getLastStep().getPosition(); } else { movementTarget = null; final MoveStep step = i.nextElement(); if ((null != previousStep) && ((step.getType() == MoveStepType.UP) || (step.getType() == MoveStepType.DOWN) || (step.getType() == MoveStepType.ACC) || (step.getType() == MoveStepType.DEC) || (step.getType() == MoveStepType.ACCN) || (step.getType() == MoveStepType.DECN))) { || (step.getType() == MoveStepType.CONVERT_MODE && previousStep.getType() == MoveStepType.CONVERT_MODE) || step.getType() == MoveStepType.BOOTLEGGER)) { pathSprites.get(pathSprites.size() - 1).setHidden(true);