project: Upstream merge (#1228)
* menuentryswapper - Add volcanic mine entrance to swapQuick * idle notifier: notify when adding feathers or heads to shafts * client: cache and reuse Graphics * client: cache config values
This commit is contained in:
@@ -71,6 +71,8 @@ public final class AnimationID
|
|||||||
public static final int FLETCHING_STRING_YEW_LONGBOW = 6688;
|
public static final int FLETCHING_STRING_YEW_LONGBOW = 6688;
|
||||||
public static final int FLETCHING_STRING_MAGIC_SHORTBOW = 6683;
|
public static final int FLETCHING_STRING_MAGIC_SHORTBOW = 6683;
|
||||||
public static final int FLETCHING_STRING_MAGIC_LONGBOW = 6689;
|
public static final int FLETCHING_STRING_MAGIC_LONGBOW = 6689;
|
||||||
|
public static final int FLETCHING_ATTACH_FEATHERS_TO_ARROWSHAFT = 8481;
|
||||||
|
public static final int FLETCHING_ATTACH_HEADS = 8480;
|
||||||
public static final int GEM_CUTTING_OPAL = 890;
|
public static final int GEM_CUTTING_OPAL = 890;
|
||||||
public static final int GEM_CUTTING_JADE = 891;
|
public static final int GEM_CUTTING_JADE = 891;
|
||||||
public static final int GEM_CUTTING_REDTOPAZ = 892;
|
public static final int GEM_CUTTING_REDTOPAZ = 892;
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import java.awt.Image;
|
|||||||
/**
|
/**
|
||||||
* Represents the clients primary image buffer.
|
* Represents the clients primary image buffer.
|
||||||
*/
|
*/
|
||||||
public interface MainBufferProvider
|
public interface MainBufferProvider extends BufferProvider
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Gets the image currently loaded in the buffer.
|
* Gets the image currently loaded in the buffer.
|
||||||
|
|||||||
@@ -128,6 +128,31 @@ public class Hooks implements Callbacks
|
|||||||
private long lastCheck;
|
private long lastCheck;
|
||||||
private boolean shouldProcessGameTick;
|
private boolean shouldProcessGameTick;
|
||||||
|
|
||||||
|
private static MainBufferProvider lastMainBufferProvider;
|
||||||
|
private static Graphics2D lastGraphics;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Graphics2D for the MainBufferProvider image
|
||||||
|
* This caches the Graphics2D instance so it can be reused
|
||||||
|
* @param mainBufferProvider
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static Graphics2D getGraphics(MainBufferProvider mainBufferProvider)
|
||||||
|
{
|
||||||
|
if (lastGraphics == null || lastMainBufferProvider != mainBufferProvider)
|
||||||
|
{
|
||||||
|
if (lastGraphics != null)
|
||||||
|
{
|
||||||
|
log.debug("Graphics reset!");
|
||||||
|
lastGraphics.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
lastMainBufferProvider = mainBufferProvider;
|
||||||
|
lastGraphics = (Graphics2D) mainBufferProvider.getImage().getGraphics();
|
||||||
|
}
|
||||||
|
return lastGraphics;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> void post(Class<T> eventClass, Event event)
|
public <T> void post(Class<T> eventClass, Event event)
|
||||||
{
|
{
|
||||||
@@ -293,9 +318,7 @@ public class Hooks implements Callbacks
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Image image = mainBufferProvider.getImage();
|
final Graphics2D graphics2d = getGraphics(mainBufferProvider);
|
||||||
final Image finalImage;
|
|
||||||
final Graphics2D graphics2d = (Graphics2D) image.getGraphics();
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -311,8 +334,6 @@ public class Hooks implements Callbacks
|
|||||||
// Draw clientUI overlays
|
// Draw clientUI overlays
|
||||||
clientUi.paintOverlays(graphics2d);
|
clientUi.paintOverlays(graphics2d);
|
||||||
|
|
||||||
graphics2d.dispose();
|
|
||||||
|
|
||||||
if (client.isGpu())
|
if (client.isGpu())
|
||||||
{
|
{
|
||||||
// processDrawComplete gets called on GPU by the gpu plugin at the end of its
|
// processDrawComplete gets called on GPU by the gpu plugin at the end of its
|
||||||
@@ -321,6 +342,8 @@ public class Hooks implements Callbacks
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stretch the game image if the user has that enabled
|
// Stretch the game image if the user has that enabled
|
||||||
|
Image image = mainBufferProvider.getImage();
|
||||||
|
final Image finalImage;
|
||||||
if (client.isStretchedEnabled())
|
if (client.isStretchedEnabled())
|
||||||
{
|
{
|
||||||
GraphicsConfiguration gc = clientUi.getGraphicsConfiguration();
|
GraphicsConfiguration gc = clientUi.getGraphicsConfiguration();
|
||||||
@@ -388,8 +411,7 @@ public class Hooks implements Callbacks
|
|||||||
public void drawScene()
|
public void drawScene()
|
||||||
{
|
{
|
||||||
MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
||||||
BufferedImage image = (BufferedImage) bufferProvider.getImage();
|
Graphics2D graphics2d = getGraphics(bufferProvider);
|
||||||
Graphics2D graphics2d = image.createGraphics();
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -399,18 +421,13 @@ public class Hooks implements Callbacks
|
|||||||
{
|
{
|
||||||
log.warn("Error during overlay rendering", ex);
|
log.warn("Error during overlay rendering", ex);
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
graphics2d.dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawAboveOverheads()
|
public void drawAboveOverheads()
|
||||||
{
|
{
|
||||||
MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
||||||
BufferedImage image = (BufferedImage) bufferProvider.getImage();
|
Graphics2D graphics2d = getGraphics(bufferProvider);
|
||||||
Graphics2D graphics2d = image.createGraphics();
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -420,17 +437,12 @@ public class Hooks implements Callbacks
|
|||||||
{
|
{
|
||||||
log.warn("Error during overlay rendering", ex);
|
log.warn("Error during overlay rendering", ex);
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
graphics2d.dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void drawAfterWidgets()
|
public static void drawAfterWidgets()
|
||||||
{
|
{
|
||||||
MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider();
|
||||||
BufferedImage image = (BufferedImage) bufferProvider.getImage();
|
Graphics2D graphics2d = getGraphics(bufferProvider);
|
||||||
Graphics2D graphics2d = image.createGraphics();
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -441,10 +453,6 @@ public class Hooks implements Callbacks
|
|||||||
{
|
{
|
||||||
log.warn("Error during overlay rendering", ex);
|
log.warn("Error during overlay rendering", ex);
|
||||||
}
|
}
|
||||||
finally
|
|
||||||
{
|
|
||||||
graphics2d.dispose();
|
|
||||||
}
|
|
||||||
|
|
||||||
// WidgetItemOverlays render at ABOVE_WIDGETS, reset widget item
|
// WidgetItemOverlays render at ABOVE_WIDGETS, reset widget item
|
||||||
// list for next frame.
|
// list for next frame.
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ public class IdleNotifierPlugin extends Plugin
|
|||||||
case CRAFTING_LEATHER:
|
case CRAFTING_LEATHER:
|
||||||
case CRAFTING_POTTERS_WHEEL:
|
case CRAFTING_POTTERS_WHEEL:
|
||||||
case CRAFTING_POTTERY_OVEN:
|
case CRAFTING_POTTERY_OVEN:
|
||||||
/* Fletching(Cutting, Stringing) */
|
/* Fletching(Cutting, Stringing, Adding feathers and heads) */
|
||||||
case FLETCHING_BOW_CUTTING:
|
case FLETCHING_BOW_CUTTING:
|
||||||
case FLETCHING_STRING_NORMAL_SHORTBOW:
|
case FLETCHING_STRING_NORMAL_SHORTBOW:
|
||||||
case FLETCHING_STRING_OAK_SHORTBOW:
|
case FLETCHING_STRING_OAK_SHORTBOW:
|
||||||
@@ -229,6 +229,8 @@ public class IdleNotifierPlugin extends Plugin
|
|||||||
case FLETCHING_STRING_MAPLE_LONGBOW:
|
case FLETCHING_STRING_MAPLE_LONGBOW:
|
||||||
case FLETCHING_STRING_YEW_LONGBOW:
|
case FLETCHING_STRING_YEW_LONGBOW:
|
||||||
case FLETCHING_STRING_MAGIC_LONGBOW:
|
case FLETCHING_STRING_MAGIC_LONGBOW:
|
||||||
|
case FLETCHING_ATTACH_FEATHERS_TO_ARROWSHAFT:
|
||||||
|
case FLETCHING_ATTACH_HEADS:
|
||||||
/* Smithing(Anvil, Furnace, Cannonballs */
|
/* Smithing(Anvil, Furnace, Cannonballs */
|
||||||
case SMITHING_ANVIL:
|
case SMITHING_ANVIL:
|
||||||
case SMITHING_SMELTING:
|
case SMITHING_SMELTING:
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import java.awt.Rectangle;
|
|||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -469,38 +470,46 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
|
|||||||
|
|
||||||
private void safeRender(Client client, Overlay overlay, OverlayLayer layer, Graphics2D graphics, Point point)
|
private void safeRender(Client client, Overlay overlay, OverlayLayer layer, Graphics2D graphics, Point point)
|
||||||
{
|
{
|
||||||
final Graphics2D subGraphics = (Graphics2D) graphics.create();
|
|
||||||
|
|
||||||
if (!isResizeable && (layer == OverlayLayer.ABOVE_SCENE || layer == OverlayLayer.UNDER_WIDGETS))
|
if (!isResizeable && (layer == OverlayLayer.ABOVE_SCENE || layer == OverlayLayer.UNDER_WIDGETS))
|
||||||
{
|
{
|
||||||
subGraphics.setClip(client.getViewportXOffset(),
|
graphics.setClip(client.getViewportXOffset(),
|
||||||
client.getViewportYOffset(),
|
client.getViewportYOffset(),
|
||||||
client.getViewportWidth(),
|
client.getViewportWidth(),
|
||||||
client.getViewportHeight());
|
client.getViewportHeight());
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
graphics.setClip(0, 0, client.getCanvasWidth(), client.getCanvasHeight());
|
||||||
|
}
|
||||||
|
|
||||||
final OverlayPosition position = overlay.getPosition();
|
final OverlayPosition position = overlay.getPosition();
|
||||||
|
|
||||||
// Set font based on configuration
|
// Set font based on configuration
|
||||||
if (position == OverlayPosition.DYNAMIC || position == OverlayPosition.DETACHED)
|
if (position == OverlayPosition.DYNAMIC || position == OverlayPosition.DETACHED)
|
||||||
{
|
{
|
||||||
subGraphics.setFont(this.standardFont); // TODO MAKE USE CONFIG SYSTEM
|
graphics.setFont(this.standardFont); // TODO MAKE USE CONFIG SYSTEM
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (position == OverlayPosition.TOOLTIP)
|
else if (position == OverlayPosition.TOOLTIP)
|
||||||
{
|
{
|
||||||
subGraphics.setFont(this.tooltipFont);
|
graphics.setFont(this.tooltipFont);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
subGraphics.setFont(this.interfaceFont);
|
graphics.setFont(this.interfaceFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
subGraphics.translate(point.x, point.y);
|
// Reset the default color
|
||||||
|
graphics.setColor(Color.WHITE);
|
||||||
|
|
||||||
|
// Get transform so we can reset it after drawing
|
||||||
|
AffineTransform transform = graphics.getTransform();
|
||||||
|
graphics.translate(point.x, point.y);
|
||||||
|
|
||||||
final Dimension overlayDimension;
|
final Dimension overlayDimension;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
overlayDimension = overlay.render(subGraphics);
|
overlayDimension = overlay.render(graphics);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -509,7 +518,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
subGraphics.dispose();
|
graphics.setTransform(transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Dimension dimension = MoreObjects.firstNonNull(overlayDimension, new Dimension());
|
final Dimension dimension = MoreObjects.firstNonNull(overlayDimension, new Dimension());
|
||||||
|
|||||||
Reference in New Issue
Block a user