Example #1
0
 public void drawField(Canvas canvas) {
   canvas.drawPaint(mClearPaint);
   for (FE e : this) {
     setFieldRect(mFieldRect, e);
     e.draw(canvas, mFieldRect);
   }
 }
Example #2
0
 public final void nextElement(FE element) throws BuildException {
   if (element == null || mCurrRow < 0 || mCurrRow >= mRows.size()) {
     throw new BuildException().setMissingData("Field2D", "NextElement null or no row yet");
   }
   List<FE> row = mRows.get(mCurrRow);
   element.mY = mCurrRow;
   element.mX = row.size();
   row.add(element);
 }
Example #3
0
  public int isReachable(FE fromField, FieldElement target, FieldElement.Neighbor[] neighborTypes) {
    if (fromField.equals(target)) {
      return 0;
    }
    if (neighborTypes == null || neighborTypes.length == 0) {
      return -1;
    }
    // clear pathfinding data
    for (FE e : this) {
      e.mPathfindingValue = 0;
    }
    mPathfindingNodes.clear();

    // ant algorithm, start with fromField
    mPathfindingNodes.add(fromField);
    fromField.mPathfindingValue = 1;
    do {
      FieldElement currField = mPathfindingNodes.poll();
      for (FieldElement.Neighbor n : neighborTypes) {

        if (hasNeighbor(currField, n)) {
          FE nextField = getNeighbor(currField, n);
          if (nextField.equals(target)) {
            return currField.mPathfindingValue;
          }
          if (nextField.mPathfindingValue == 0 && !nextField.isBlocked()) {
            // field not yet reached and
            // the next field is not blocked, go on
            mPathfindingNodes.add(nextField);
            nextField.mPathfindingValue = currField.mPathfindingValue + 1;
          }
        }
      }
    } while (!mPathfindingNodes.isEmpty());
    return -1;
  }