public void drawField(Canvas canvas) { canvas.drawPaint(mClearPaint); for (FE e : this) { setFieldRect(mFieldRect, e); e.draw(canvas, mFieldRect); } }
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); }
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; }