zScripz Posted May 9, 2014 Share Posted May 9, 2014 1. In OSBot 1 we had obj.getMouseDestination().getBoundingBox() which returned a rectangle, which was very useful in drawing objects on screen. I've looked around ObjectDefinition and the new Model, but haven't found any way to access this, if its even still here. I will update as I find things, but liking the new api a lot. Its going to be extremely easy for new scripters to learn how to script. 1 Link to comment Share on other sites More sharing options...
Novak Posted May 9, 2014 Share Posted May 9, 2014 try something like getPolygon. I havent looked at it much but that would be my guess 1 Link to comment Share on other sites More sharing options...
PolishCivil Posted May 9, 2014 Share Posted May 9, 2014 (edited) public static short[][] getScreenCoordinates(Client client, int gridX, int gridY, int gridZ, Model model) { int cameraX = client.getCameraX(); int cameraY = client.getCameraY(); int cameraZ = client.getCameraZ(); int sinP = Utilities.CAMERA_SIN[client.getCameraPitch()]; int cosP = Utilities.CAMERA_COS[client.getCameraPitch()]; int sinY = Utilities.CAMERA_SIN[client.getCameraYaw()]; int cosY = Utilities.CAMERA_COS[client.getCameraYaw()]; if (model.getTriangleCount() < 0) { return new short[0][]; } short[][] screenCoords = new short[model.getVerticeCount()][]; for (int n = 0; n < model.getVerticeCount(); n++) { int x0 = model.getVerticesX()[n] + gridX; int z0 = model.getVerticesZ()[n] + gridY; int y0 = model.getVerticesY()[n] + Utilities.getTileHeight(client.getBot(), x0, z0, gridZ) - cameraZ; int n15 = (z0 -= cameraY) * sinY + (x0 -= cameraX) * cosY >> 16; z0 = z0 * cosY - x0 * sinY >> 16; x0 = n15; n15 = y0 * cosP - z0 * sinP >> 16; z0 = y0 * sinP + z0 * cosP >> 16; y0 = n15; if (z0 >= 50) { x0 = 260 + (x0 << 9) / z0; y0 = 171 + (y0 << 9) / z0; if (x0 >= 0 && y0 >= 0) { screenCoords[n] = new short[2]; screenCoords[n][0] = (short) x0; screenCoords[n][1] = (short) y0; } } } return screenCoords; } + public static Polygon getBoundingBox(Client client, Model model, int gridX, int gridY) { short[][] screenCoordinates = Utilities.getScreenCoordinates(client.getBot(), gridX, gridY, client.getPlane(), model); Polygon temp = new Polygon(); int minX = Integer.MAX_VALUE; int minY = Integer.MAX_VALUE; int maxX = 0; int maxY = 0; for (int triangleId = 0; triangleId < model.getTriangleCount(); triangleId++) try { int triangleA = model.getTrianglesA()[triangleId]; int triangleB = model.getTrianglesB()[triangleId]; int triangleC = model.getTrianglesC()[triangleId]; short[] pointA = screenCoordinates[triangleA]; short[] pointB = screenCoordinates[triangleB]; short[] pointC = screenCoordinates[triangleC]; if (pointA != null && pointB != null && pointC != null) { int aX = pointA[0]; int aY = pointA[1]; int bX = pointB[0]; int bY = pointB[1]; int cX = pointB[0]; int cY = pointB[1]; if (aX < minX) { minX = aX; } if (bX < minX) { minX = bX; } if (cX < minX) { minX = cX; } if (aY < minY) { minY = aY; } if (bY < minY) { minY = bY; } if (cY < minY) { minY = cY; } //maxes if (aX > maxX) { maxX = aX; } if (bX > maxX) { maxX = bX; } if (cX > maxX) { maxX = cX; } if (aY > maxY) { maxY = aY; } if (bY > maxY) { maxY = bY; } if (cY > maxY) { maxY = cY; } } } catch (ArrayIndexOutOfBoundsException var13) { } temp.addPoint(minX, minY); temp.addPoint(minX + (maxX - minX), minY); temp.addPoint(maxX, maxY); temp.addPoint(minX, maxY); return temp; } Edited May 9, 2014 by PolishCivil 1 Link to comment Share on other sites More sharing options...
Kenneh Posted May 9, 2014 Share Posted May 9, 2014 graphics2D.draw(npc.getPosition().getPolygon(bot)); ? Link to comment Share on other sites More sharing options...
PolishCivil Posted May 9, 2014 Share Posted May 9, 2014 graphics2D.draw(npc.getPosition().getPolygon(bot)); ? Its position's polygon. (bad) Link to comment Share on other sites More sharing options...
Kenneh Posted May 9, 2014 Share Posted May 9, 2014 Its position's polygon. (bad) I'm sure it'l suffice instead of re-creating the bounds for an object. Link to comment Share on other sites More sharing options...
Dog_ Posted May 9, 2014 Share Posted May 9, 2014 I'm sure it'l suffice instead of re-creating the bounds for an object.some objects are small 1 Link to comment Share on other sites More sharing options...