/** * Generate all possible paths given a starting movement path. * This includes increases and decreases in elevation. */ @Override protected List<MovePath> GenerateAllPaths(MovePath mp) { List<MovePath> altitudePaths = AeroPathUtil.generateValidAltitudeChanges(mp); List<MovePath> fullMovePaths = new ArrayList<>(); for(MovePath altitudePath : altitudePaths) { fullMovePaths.addAll(super.GenerateAllPaths(altitudePath.clone())); } return fullMovePaths; }
/** * Generates a list of possible step combinations that should be done at the beginning of a path * Has side effect of updating the visited coordinates map and adding it to the list of generated paths * @return List of all possible "starting" paths */ protected List<MovePath> generateStartingPaths(MovePath startingEdge) { List<MovePath> startingPaths = new ArrayList<>(); MovePath defaultPath = startingEdge.clone(); aerospacePaths.add(defaultPath); visitedCoords.put(new CoordsWithFacing(defaultPath), defaultPath.getMpUsed()); startingPaths.add(defaultPath); MovePath reverseEdge = startingEdge.clone(); reverseEdge.addStep(MoveStepType.YAW); aerospacePaths.add(reverseEdge); visitedCoords.put(new CoordsWithFacing(reverseEdge), reverseEdge.getMpUsed()); startingPaths.add(defaultPath); return startingPaths; }
MovePath path = startingPath.clone(); for(int deltaVelocity = 0; deltaVelocity < currentVelocity - desiredVelocity; deltaVelocity++) { path.addStep(MoveStepType.DEC); paths.add(startingPath.clone()); MovePath path = startingPath.clone(); for(int deltaVelocity = 0; deltaVelocity < upperBound - desiredVelocity; deltaVelocity++) { path.addStep(MoveStepType.ACC);
result.add(mp.clone().addStep(MoveStepType.TURN_RIGHT)); result.add(mp.clone().addStep(MoveStepType.TURN_LEFT)); result.add(mp.clone().addStep(MoveStepType.CAREFUL_STAND)); } else { result.add(mp.clone().addStep(MoveStepType.GET_UP)); result.add(mp.clone().addStep(MoveStepType.LATERAL_RIGHT_BACKWARDS)); result.add(mp.clone().addStep(MoveStepType.LATERAL_LEFT_BACKWARDS)); } else { result.add(mp.clone().addStep(MoveStepType.LATERAL_RIGHT)); result.add(mp.clone().addStep(MoveStepType.LATERAL_LEFT)); result.add(mp.clone().addStep(MoveStepType.BACKWARDS)); } else { result.add(mp.clone().addStep(MoveStepType.FORWARDS));
/** * Function that generates all possible "legal" moves resulting from the given path * and updates the set of visited coordinates so we don't visit them again. * @param parentPath The path for which to generate child nodes * @param visitedCoords Set of visited coordinates so we don't loop around * @return List of valid children. Between 0 and 3 inclusive. */ private List<MovePath> generateChildNodes(MovePath parentPath, Set<Coords> visitedCoords) { List<MovePath> children = new ArrayList<>(); // the children of a move path are: // turn left and step forward one // step forward one // turn right and step forward one MovePath leftChild = parentPath.clone(); leftChild.addStep(MoveStepType.TURN_LEFT); leftChild.addStep(MoveStepType.FORWARDS); processChild(leftChild, children, visitedCoords); MovePath centerChild = parentPath.clone(); centerChild.addStep(MoveStepType.FORWARDS); processChild(centerChild, children, visitedCoords); MovePath rightChild = parentPath.clone(); rightChild.addStep(MoveStepType.TURN_RIGHT); rightChild.addStep(MoveStepType.FORWARDS); processChild(rightChild, children, visitedCoords); return children; }
/** * 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)); } } }
MovePath pathCopy = movePath.clone(); List<TargetRoll> pilotingRolls = getPSRList(pathCopy); double successProbability = 1.0;
MovePath left = clone(); MovePath right = clone(); result.add((clone()).addStep(MovePath.MoveStepType.FORWARDS)); for (int turn = 0; turn < 2; turn++) { left.addStep(MovePath.MoveStepType.TURN_LEFT); right.addStep(MovePath.MoveStepType.TURN_RIGHT); result.add(left.clone().addStep(MovePath.MoveStepType.FORWARDS)); result.add(right.clone().addStep(MovePath.MoveStepType.FORWARDS)); result.add(clone().addStep(MovePath.MoveStepType.TURN_LEFT)); result.add(clone().addStep(MovePath.MoveStepType.TURN_RIGHT)); result.add(clone().addStep(MovePath.MoveStepType.CAREFUL_STAND)); } else { result.add(clone().addStep(MovePath.MoveStepType.GET_UP)); result.add(clone().addStep(MoveStepType.LATERAL_RIGHT)); result.add(clone().addStep(MovePath.MoveStepType.LATERAL_LEFT)); result.add(clone().addStep(MovePath.MoveStepType.LATERAL_RIGHT_BACKWARDS)); result.add(clone().addStep(MovePath.MoveStepType.LATERAL_LEFT_BACKWARDS)); result.add(clone().addStep(MovePath.MoveStepType.FORWARDS)); result.add(clone().addStep(MovePath.MoveStepType.TURN_RIGHT));
!UnitType.isSpheroidDropship(mp.getEntity())) { if(!mp.containsAnyOther(MoveStepType.ACC)) { result.add(mp.clone().addStep(MoveStepType.ACC)); result.add(mp.clone().addStep(MoveStepType.DEC)); result.add(mp.clone().addStep(MoveStepType.FORWARDS)); result.add(mp.clone().addStep(MoveStepType.TURN_RIGHT)); result.add(mp.clone().addStep(MoveStepType.TURN_LEFT)); || (c.getY() == (game.getBoard().getHeight() - 1))) && (mp.getFinalVelocity() > 0)) { result.add(mp.clone().addStep(MoveStepType.RETURN));
Mockito.when(mockPath.clone()).thenReturn(mockPath); Mockito.when(mockPath.getEntity()).thenReturn(mockMech);
pf.addStopCondition(timeoutCondition); pf.run(this.clone()); MovePath finPath = pf.getComputedPath(dest);
MovePath pathCopy = path.clone();
MovePath altitudePath = startingPath.clone();
MovePath tmpMp = mp.clone(); for (int i = 0; i < 8; i++){ if (type == MAN_SIDE_SLIP_LEFT){
private void removeLastStep() { cmd.removeLastStep(); if (cmd.length() == 0) { clear(); if ((gear == MovementDisplay.GEAR_JUMP) && (!cmd.isJumping())) { cmd.addStep(MoveStepType.START_JUMP); } else if (ce().isConvertingNow()) { cmd.addStep(MoveStepType.CONVERT_MODE); } } else { clientgui.bv.drawMovementData(ce(), cmd); clientgui.bv.setWeaponFieldofFire(ce(), cmd); // Set the button's label to "Done" // if the entire move is impossible. MovePath possible = cmd.clone(); possible.clipToPossible(); if (possible.length() == 0) { butDone.setText("<html><b>" + Messages.getString("MovementDisplay.Done") + "</b></html>"); //$NON-NLS-1$ } } updateButtons(); }