Swizzbeat Posted March 23, 2014 Share Posted March 23, 2014 (edited) import org.osbot.script.rs2.map.Position; import org.osbot.script.rs2.model.Entity; import java.awt.*; /** * Created with IntelliJ IDEA * User: Anthony * Date: 3/23/2014 */ public class PolygonArea { private Polygon polygon; public PolygonArea(Position... positions) { polygon = new Polygon(retrieveXPoints(positions), retrieveYPoints(positions), positions.length); } public boolean contains(Entity entity) { return polygon.contains(entity.getX(), entity.getY()); } public boolean contains(Position position) { return polygon.contains(position.getX(), position.getY()); } private int[] retrieveXPoints(Position[] positions) { int[] xPoints = new int[positions.length]; for (int i = 0; i < positions.length; i++) xPoints[i] = positions[i].getX(); return xPoints; } private int[] retrieveYPoints(Position[] positions) { int[] yPoints = new int[positions.length]; for (int i = 0; i < positions.length; i++) yPoints[i] = positions[i].getY(); return yPoints; } } Probably could be improved as well as have had more methods implemented/overridden but here's a basic class for creating a polygon area instead of being stuck with just a simple square. Edited April 21, 2014 by Swizzbeat 1 Link to comment Share on other sites More sharing options...
Joseph Posted March 23, 2014 Share Posted March 23, 2014 nice Antony 1 Link to comment Share on other sites More sharing options...
Billy Posted April 9, 2014 Share Posted April 9, 2014 (edited) import org.osbot.script.rs2.map.Position; import org.osbot.script.rs2.model.Entity; import java.awt.*; /** * Created with IntelliJ IDEA * User: Anthony * Date: 3/23/2014 */ @SuppressWarnings("serial") public class PolygonArea extends Polygon { public PolygonArea(Position... positions) { super(retrieveXPoints(positions), retrieveYPoints(positions), positions.length); } public boolean contains(Entity entity) { return contains(entity.getX(), entity.getY()); } public boolean contains(Position position) { return contains(position.getX(), position.getY()); } private static final int[] retrieveXPoints(Position[] positions) { int[] xPoints = new int[positions.length]; for (int i = 0; i < positions.length; i++) xPoints[i] = positions[i].getX(); return xPoints; } private static final int[] retrieveYPoints(Position[] positions) { int[] yPoints = new int[positions.length]; for (int i = 0; i < positions.length; i++) yPoints[i] = positions[i].getY(); return yPoints; } } No idea why you extend polygon then use a local variable polygon.Also no idea why the hell my indents were removed when I pasted this here... Edited April 9, 2014 by Billy Link to comment Share on other sites More sharing options...
Swizzbeat Posted April 9, 2014 Author Share Posted April 9, 2014 import org.osbot.script.rs2.map.Position; import org.osbot.script.rs2.model.Entity; import java.awt.*; /** * Created with IntelliJ IDEA * User: Anthony * Date: 3/23/2014 */ @SuppressWarnings("serial") public class PolygonArea extends Polygon { public PolygonArea(Position... positions) { super(retrieveXPoints(positions), retrieveYPoints(positions), positions.length); } public boolean contains(Entity entity) { return contains(entity.getX(), entity.getY()); } public boolean contains(Position position) { return contains(position.getX(), position.getY()); } private static final int[] retrieveXPoints(Position[] positions) { int[] xPoints = new int[positions.length]; for (int i = 0; i < positions.length; i++) xPoints[i] = positions[i].getX(); return xPoints; } private static final int[] retrieveYPoints(Position[] positions) { int[] yPoints = new int[positions.length]; for (int i = 0; i < positions.length; i++) yPoints[i] = positions[i].getY(); return yPoints; } } No idea why you extend polygon then use a local variable polygon. Also no idea why the hell my indents were removed when I pasted this here... I was overriding some other methods when I made this and never saw that I didn't remove it. Oh well. Also that code wouldn't even compile considering a call to the superclasses constructor has to be done before anything, including method calls. Link to comment Share on other sites More sharing options...
NotoriousPP Posted April 10, 2014 Share Posted April 10, 2014 This is what I use for my Polygon areas, it has some extra methods that prove to be useful at times. package tools; import org.osbot.script.rs2.map.Position; import org.osbot.script.rs2.model.Entity; import java.awt.*; /** * Created with IntelliJ IDEA. * User: NotoriousPP * Date: 2/6/14 * Time: 8:53 PM */ public class Area { private Polygon polyArea; public Area(Position... cords){ polyArea = new Polygon(); addPositions(cords); } public Area(int xL, int yL, int xH, int yH){ polyArea = new Polygon(); polyArea.addPoint(xL, yL); polyArea.addPoint(xH, yH); } public boolean contains(Entity e){ return polyArea.contains(e.getX(), e.getY()); } public boolean contains(Position p){ return polyArea.contains(p.getX(), p.getY()); } public Position getCenterTile(){ int lowX = 0, lowY = 0; int highX = 0, highY = 0; for(int i : polyArea.xpoints){ if(lowX == 0 || i < lowX){ lowX = i; } if(highX == 0 || i > highX){ highX = i; } } for(int i : polyArea.ypoints){ if(lowY == 0 || i < lowY){ lowY = i; } if(highY == 0 || i > highY){ highY = i; } } int x = ((highX + lowX)/2), y = ((highY + lowY)/2); return new Position(x,y,0); } public int getLowestX(){ int lowX = 0; for(int i : polyArea.xpoints){ if(lowX == 0 || i < lowX){ lowX = i; } } if(lowX != 0){ return lowX; } return -1; } public int getLowestY(){ int lowY = 0; for(int i : polyArea.ypoints){ if(lowY == 0 || i < lowY){ lowY = i; } } if(lowY != 0){ return lowY; } return -1; } public int getHighestX(){ int highX = 0; for(int i : polyArea.xpoints){ if(highX == 0 || i > highX){ highX = i; } } if(highX != 0){ return highX; } return -1; } public org.osbot.script.rs2.utility.Area getOSArea(){ return new org.osbot.script.rs2.utility.Area(getLowestX(), getLowestY(), getHighestX(), getHighestY()); } public int getHighestY(){ int highY = 0; for(int i : polyArea.ypoints){ if(highY == 0 || i > highY){ highY = i; } } if(highY != 0){ return highY; } return -1; } private void addPositions(Position... positions){ for (Position pos : positions){ polyArea.addPoint(pos.getX(), pos.getY()); } } } 1 Link to comment Share on other sites More sharing options...