Merge pull request #1197 from DevDennis/clip-ground-items-overlay
Clip overlays on the above scene layer to the viewport
This commit is contained in:
@@ -78,6 +78,10 @@ public interface Client extends GameEngine
|
|||||||
|
|
||||||
int getViewportWidth();
|
int getViewportWidth();
|
||||||
|
|
||||||
|
int getViewportXOffset();
|
||||||
|
|
||||||
|
int getViewportYOffset();
|
||||||
|
|
||||||
int getScale();
|
int getScale();
|
||||||
|
|
||||||
Point getMouseCanvasPosition();
|
Point getMouseCanvasPosition();
|
||||||
|
|||||||
@@ -508,8 +508,8 @@ public class Perspective
|
|||||||
int minY = Math.min(Math.min(a.getY(), b.getY()), c.getY());
|
int minY = Math.min(Math.min(a.getY(), b.getY()), c.getY());
|
||||||
|
|
||||||
// For some reason, this calculation is always 4 pixels short of the actual in-client one
|
// For some reason, this calculation is always 4 pixels short of the actual in-client one
|
||||||
int maxX = Math.max(Math.max(a.getX(), b.getX()), c.getX()) + 4;
|
int maxX = Math.max(Math.max(a.getX(), b.getX()), c.getX()) + client.getViewportXOffset();
|
||||||
int maxY = Math.max(Math.max(a.getY(), b.getY()), c.getY()) + 4;
|
int maxY = Math.max(Math.max(a.getY(), b.getY()), c.getY()) + client.getViewportYOffset();
|
||||||
|
|
||||||
// ...and the rectangles in the fixed client are shifted 4 pixels right and down
|
// ...and the rectangles in the fixed client are shifted 4 pixels right and down
|
||||||
if (!client.isResized())
|
if (!client.isResized())
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import java.awt.Rectangle;
|
|||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -225,7 +224,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
|
|||||||
{
|
{
|
||||||
if (value == null)
|
if (value == null)
|
||||||
{
|
{
|
||||||
value = new ArrayList<>();
|
value = new CopyOnWriteArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
value.add(overlay);
|
value.add(overlay);
|
||||||
@@ -318,7 +317,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
|
|||||||
|
|
||||||
if (overlayPosition == OverlayPosition.DYNAMIC || overlayPosition == OverlayPosition.TOOLTIP)
|
if (overlayPosition == OverlayPosition.DYNAMIC || overlayPosition == OverlayPosition.TOOLTIP)
|
||||||
{
|
{
|
||||||
safeRender(overlay, graphics, new Point());
|
safeRender(client, overlay, layer, graphics, new Point());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -339,7 +338,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
|
|||||||
location.setLocation(overlay.getPreferredLocation());
|
location.setLocation(overlay.getPreferredLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
safeRender(overlay, graphics, location);
|
safeRender(client, overlay, layer, graphics, location);
|
||||||
dimension.setSize(overlay.getBounds().getSize());
|
dimension.setSize(overlay.getBounds().getSize());
|
||||||
|
|
||||||
if (dimension.width == 0 && dimension.height == 0)
|
if (dimension.width == 0 && dimension.height == 0)
|
||||||
@@ -489,9 +488,16 @@ public class OverlayRenderer extends MouseListener implements KeyListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void safeRender(Overlay overlay, Graphics2D graphics, Point point)
|
private void safeRender(Client client, Overlay overlay, OverlayLayer layer, Graphics2D graphics, Point point)
|
||||||
{
|
{
|
||||||
final Graphics2D subGraphics = (Graphics2D) graphics.create();
|
final Graphics2D subGraphics = (Graphics2D) graphics.create();
|
||||||
|
if (!isResizeable && (layer == OverlayLayer.ABOVE_SCENE || layer == OverlayLayer.UNDER_WIDGETS))
|
||||||
|
{
|
||||||
|
subGraphics.setClip(client.getViewportXOffset(),
|
||||||
|
client.getViewportYOffset(),
|
||||||
|
client.getViewportWidth(),
|
||||||
|
client.getViewportHeight());
|
||||||
|
}
|
||||||
subGraphics.translate(point.x, point.y);
|
subGraphics.translate(point.x, point.y);
|
||||||
final Dimension dimension = MoreObjects.firstNonNull(overlay.render(subGraphics), new Dimension());
|
final Dimension dimension = MoreObjects.firstNonNull(overlay.render(subGraphics), new Dimension());
|
||||||
subGraphics.dispose();
|
subGraphics.dispose();
|
||||||
|
|||||||
@@ -252,6 +252,14 @@ public interface RSClient extends RSGameEngine, Client
|
|||||||
@Override
|
@Override
|
||||||
int getViewportWidth();
|
int getViewportWidth();
|
||||||
|
|
||||||
|
@Import("Viewport_xOffset")
|
||||||
|
@Override
|
||||||
|
int getViewportXOffset();
|
||||||
|
|
||||||
|
@Import("Viewport_yOffset")
|
||||||
|
@Override
|
||||||
|
int getViewportYOffset();
|
||||||
|
|
||||||
@Import("isResized")
|
@Import("isResized")
|
||||||
@Override
|
@Override
|
||||||
boolean isResized();
|
boolean isResized();
|
||||||
|
|||||||
Reference in New Issue
Block a user