All pastes #415493 Raw Edit

Untitled

public java v1 · immutable
#415493 ·published 2007-03-29 17:51 UTC
rendered paste body
/**	 * This method allows spiral searchs for a color. Set withing a bounds and	 * with a setable x,y. Thus searchs can begin in corners, center. top	 * center, ect.	 * 	 * @param colorMap	 *            the colors of the game screen sorted as short's in an array	 *            [x][y][0-2] where 0 is red, 1 is blue, 2 is green	 * @param rgb	 *            The RGB to search for	 * @param bounds	 *            The Rectange to search, specifies which part of the	 *            colorArray2d to search	 * @param startX	 *            The x to spiral out from	 * @param startY	 *            The y to spiral out from	 * @return the first match XY or null if no matches found	 */	public static final XY findXYspiral(short[][][] colorMap, RGB rgb,			Rectangle bounds, int startX, int startY) {		int dx = 0;		int dy = 0;		int relX, relY;		relX = startX + dx;		relY = startY + dy;		boolean valid = true;		int r = rgb.r, g = rgb.g, b = rgb.b;		if (colorMap[relX][relY][0] != r) {			valid = false;		} else if (colorMap[relX][relY][1] != g) {			valid = false;		} else if (colorMap[relX][relY][2] != b) {			valid = false;		}		int size = 0;		int bX = bounds.x;		int bY = bounds.y;		int bW = bounds.width;		int bH = bounds.height;		int maxsize = 0;		if (maxsize < startX - bX) {			maxsize = startX - bX;		}		if (maxsize < bX + bW - startX) {			maxsize = bX + bW - startX;		}		if (maxsize < startY - bY) {			maxsize = startY - bY;		}		if (maxsize < bY + bH - startY) {			maxsize = bY + bH - startY;		}		while (size < maxsize && !valid) {			if (dy == size && dx < size && dx > 0)				dx++;			else if (dx == 0 && dy >= 0) {				dy++;				dx++;				size++;			} else if (dy == size && dx < 0)				dx++;			else if (dy == (-1 * size) && dx > (-1 * size))				dx--;			else if (dx == size)				dy--;			else if (dx == -1 * size)				dy++;			relX = startX + dx;			relY = startY + dy;			if (bX < relX && relX < bX + bW && bY < relY && relY < bY + bH) {				// valid = true;				if (colorMap[relX][relY][0] != r) {					continue;					// valid = false;				}				if (colorMap[relX][relY][1] != g) {					continue;					// valid = false;				}				if (colorMap[relX][relY][2] != b) {					continue;					// valid = false;				}				valid = true;			}		}		if (valid) {			return new XY(relX, startY + dy);		}		return null;	}