Added the Area class

This commit is contained in:
JKetelaar
2014-11-01 00:33:28 +01:00
parent 0117b7471f
commit 64f2596a24
2 changed files with 125 additions and 0 deletions
@@ -1,7 +1,11 @@
package org.rev317.min.api.methods;
import org.rev317.min.Loader;
import org.rev317.min.accessors.Client;
import org.rev317.min.api.wrappers.Tile;
import java.awt.*;
/**
* @author Everel
*/
@@ -153,4 +157,6 @@ public class Calculations {
}
}
}
+119
View File
@@ -0,0 +1,119 @@
package org.rev317.min.api.wrappers;
import java.awt.*;
import java.util.ArrayList;
/**
*
* @author Matt, JKetelaar
*
*/
public class Area {
private Polygon p;
/**
* Initializes a PolygonArea with the tiles given
*
* @param tiles
* tiles to use in the area
*/
public Area(Tile... tiles) {
this.p = new Polygon();
for (int i = 0; i < tiles.length; i++) {
p.addPoint(tiles[i].getX(), tiles[i].getY());
}
}
/**
* Adds a tile to the area
*
* @param t
* The tile to add the area
*/
public void addTile(Tile t) {
p.addPoint(t.getX(), t.getY());
}
/**
* Gets all the tiles that are points in the area
*
* @return the tiles.
*/
public Tile[] getPoints() {
Tile[] tiles = new Tile[p.npoints];
for (int i = 0; i < tiles.length; i++)
tiles[i] = new Tile(p.xpoints[i], p.ypoints[i]);
return tiles;
}
/**
* Gets all the tiles that are contained within the points.
*
* @return the tiles.
*/
public Tile[] getTiles() {
int lowestX = -1;
int lowestY = -1;
int highestX = -1;
int highestY = -1;
ArrayList<Tile> t = new ArrayList<Tile>();
for (int i : p.xpoints) {
if (i < lowestX || lowestX == -1) {
lowestX = i;
}
if (i > highestX || highestX == -1) {
highestX = i;
}
}
for (int i : p.ypoints) {
if (i < lowestY || lowestY == -1) {
lowestY = i;
}
if (i > highestY || highestY == -1) {
highestY = i;
}
}
for (int x = lowestX - 1; x < highestX + 1; x++) {
for (int y = lowestY - 1; y < highestY + 1; y++) {
if (this.contains(x, y)) {
t.add(new Tile(x, y));
}
}
}
return t.toArray(new Tile[t.size()]);
}
/**
* Checks if a tile is in the area
*
* @param tile
* The tile to check
* @return <b>true</b> if area does contain the tile, otherwise <b>false</b>
*/
public boolean contains(Tile tile) {
return this.contains(tile.getX(), tile.getY());
}
/**
* Checks if a tile is in the area
*
* @param x The x-axis from the tile
* @param y The y-axis from the tile
*
* @return True if the area does contain the tile, otherwise false
*/
public boolean contains(int x, int y) {
int i;
int j;
boolean result = false;
for (i = 0, j = p.npoints - 1; i < p.npoints; j = i++) {
if ((p.ypoints[i] > y - 1) != (p.ypoints[j] > y - 1)
&& (x <= (p.xpoints[j] - p.xpoints[i]) * (y - p.ypoints[i])
/ (p.ypoints[j] - p.ypoints[i]) + p.xpoints[i])) {
result = !result;
}
}
return result;
}
}