Vilius Posted October 27, 2015 Share Posted October 27, 2015 (edited) Hello, I wanted to ask, how do I color map or minimap tiles of a certain area. I have an area defined by my players position with an integer added to it (area = myPlayer().getArea(size); ), and I want it to be displayed on the map or the minimap for lower cpu usage. so how would I do it? Edited October 27, 2015 by Viliuks Quote Link to comment Share on other sites More sharing options...
Woody Posted October 27, 2015 Share Posted October 27, 2015 (edited) My bad, @Bobrocket corrected me, but I found this public Point minimapTranslate(Position pos) { //Get local position coordinates int x = pos.getX() - getMap().getBaseX(); int y = pos.getY() - getMap().getBaseY(); //Get the players current offset from the provided position //Using grid coordinates we get a more accurate result when we're in //the process of walking between two tiles. //1 tile = 2 units, in rX and rY int rX = (x * 4 + 2) - (myPlayer().getGridX() / 32); int rY = (y * 4 + 2) - (myPlayer().getGridY() / 32); //Get the current minimap position and camera rotation offsets. //these are often changing even without moving/rotating the camera. //^ This is probably to prevent autoclicking int offset = client.accessor.getMinimapX(); int minimapAngle = client.accessor.getMinimapRotation(); int angle = minimapAngle + offset & 0x7FF; //Calculates the sine and cosine vars to be used for rotation from the //minimap center. The minimap zoom is also random and often changing. //These are scaled up to improve accuracy in the following calculations int sin = (GraphicUtilities.CAMERA_SIN[angle] * 256) / (client.accessor.getMinimapZoom() + 256); int cos = (GraphicUtilities.CAMERA_COS[angle] * 256) / (client.accessor.getMinimapZoom() + 256); //Standard trigonometry; calculate the offset from minimap centre //Then downscale the result by right shift. We use 16 instead of 8 due to the unit of //rX and rY being doubled in comparison to real X,Y coords int mX = rY * sin + rX * cos >> 16; int mY = rY * cos - rX * sin >> 16; //Return the point. 644 and 80 are the minimap X, Y coordinates return new Point(644 + mX, 80 - mY); } You can do g.drawOval(minimapTranslate(position.get(i)).x -4, minimapTranslate(position.get(i)).y -2, 6, 6); Edited October 27, 2015 by Woody 1 Quote Link to comment Share on other sites More sharing options...
Bobrocket Posted October 27, 2015 Share Posted October 27, 2015 MiniMapTileDestination#getBoundingBox will return a rectangle, which you can use to paint #getBoundingBox != drawing the actual rectangle. Something like this should work: <graphics 2D object>.drawShape(new Position(1, 2, 3).getPolygon(getBot())); 2 Quote Link to comment Share on other sites More sharing options...
Flamezzz Posted October 27, 2015 Share Posted October 27, 2015 To draw an arbitrary area on the minimap you could do: Area area = myPlayer().getArea(4); Polygon p = new Polygon(); for(int i = 0; i < area.getPolygon().npoints; i++) { short[] mm = GraphicUtilities.getMinimapScreenCoordinate(bot, area.getPolygon().xpoints[i], area.getPolygon().ypoints[i]); p.addPoint(mm[0], mm[1]); } g.setColor(Color.RED); g.draw(p); 1 Quote Link to comment Share on other sites More sharing options...
Vilius Posted October 27, 2015 Author Share Posted October 27, 2015 To draw an arbitrary area on the minimap you could do: Area area = myPlayer().getArea(4); Polygon p = new Polygon(); for(int i = 0; i < area.getPolygon().npoints; i++) { short[] mm = GraphicUtilities.getMinimapScreenCoordinate(bot, area.getPolygon().xpoints[i], area.getPolygon().ypoints[i]); p.addPoint(mm[0], mm[1]); } g.setColor(Color.RED); g.draw(p); Thanks, exactly what I needed. Quote Link to comment Share on other sites More sharing options...
Woody Posted October 27, 2015 Share Posted October 27, 2015 To draw an arbitrary area on the minimap you could do: Area area = myPlayer().getArea(4); Polygon p = new Polygon(); for(int i = 0; i < area.getPolygon().npoints; i++) { short[] mm = GraphicUtilities.getMinimapScreenCoordinate(bot, area.getPolygon().xpoints[i], area.getPolygon().ypoints[i]); p.addPoint(mm[0], mm[1]); } g.setColor(Color.RED); g.draw(p); 2 Quote Link to comment Share on other sites More sharing options...