interface styles: add RuneScape cross sprites option
@@ -1632,6 +1632,11 @@ public interface Client extends GameEngine
|
||||
*/
|
||||
NodeCache getItemCompositionCache();
|
||||
|
||||
/**
|
||||
* Returns the array of cross sprites that appear and animate when left-clicking
|
||||
*/
|
||||
SpritePixels[] getCrossSprites();
|
||||
|
||||
EnumComposition getEnum(int id);
|
||||
|
||||
void draw2010Menu();
|
||||
|
||||
@@ -62,4 +62,14 @@ public interface InterfaceStylesConfig extends Config
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "rsCrossSprites",
|
||||
name = "RuneScape cross sprites",
|
||||
description = "Replaces left-click cross sprites with the ones in RuneScape"
|
||||
)
|
||||
default boolean rsCrossSprites()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -31,11 +31,13 @@ import java.awt.image.BufferedImage;
|
||||
import javax.inject.Inject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.HealthBar;
|
||||
import net.runelite.api.SpriteID;
|
||||
import net.runelite.api.SpritePixels;
|
||||
import net.runelite.api.events.BeforeMenuRender;
|
||||
import net.runelite.api.events.ConfigChanged;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.api.events.PostHealthBar;
|
||||
import net.runelite.api.events.WidgetPositioned;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
@@ -69,6 +71,8 @@ public class InterfaceStylesPlugin extends Plugin
|
||||
@Inject
|
||||
private SpriteManager spriteManager;
|
||||
|
||||
private SpritePixels[] defaultCrossSprites;
|
||||
|
||||
@Provides
|
||||
InterfaceStylesConfig provideConfig(ConfigManager configManager)
|
||||
{
|
||||
@@ -89,6 +93,7 @@ public class InterfaceStylesPlugin extends Plugin
|
||||
restoreWidgetDimensions();
|
||||
removeGameframe();
|
||||
restoreHealthBars();
|
||||
restoreCrossSprites();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -126,6 +131,22 @@ public class InterfaceStylesPlugin extends Plugin
|
||||
}
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onGameStateChanged(GameStateChanged gameStateChanged)
|
||||
{
|
||||
if (gameStateChanged.getGameState() != GameState.LOGIN_SCREEN)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* The cross sprites aren't loaded yet when the initial config change event is received.
|
||||
* So run the overriding for cross sprites when we reach the login screen,
|
||||
* at which point the cross sprites will have been loaded.
|
||||
*/
|
||||
overrideCrossSprites();
|
||||
}
|
||||
|
||||
private void updateAllOverrides()
|
||||
{
|
||||
removeGameframe();
|
||||
@@ -134,6 +155,7 @@ public class InterfaceStylesPlugin extends Plugin
|
||||
restoreWidgetDimensions();
|
||||
adjustWidgetDimensions();
|
||||
overrideHealthBars();
|
||||
overrideCrossSprites();
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -283,6 +305,62 @@ public class InterfaceStylesPlugin extends Plugin
|
||||
clientThread.invokeLater(client::resetHealthBarCaches);
|
||||
}
|
||||
|
||||
private void overrideCrossSprites()
|
||||
{
|
||||
if (config.rsCrossSprites())
|
||||
{
|
||||
// If we've already replaced them,
|
||||
// we don't need to replace them again
|
||||
if (defaultCrossSprites != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SpritePixels[] crossSprites = client.getCrossSprites();
|
||||
|
||||
if (crossSprites == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
defaultCrossSprites = new SpritePixels[crossSprites.length];
|
||||
System.arraycopy(crossSprites, 0, defaultCrossSprites, 0, defaultCrossSprites.length);
|
||||
|
||||
for (int i = 0; i < crossSprites.length; i++)
|
||||
{
|
||||
SpritePixels newSprite = getFileSpritePixels("rs3/cross_sprites/" + i + ".png");
|
||||
|
||||
if (newSprite == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
crossSprites[i] = newSprite;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
restoreCrossSprites();
|
||||
}
|
||||
}
|
||||
|
||||
private void restoreCrossSprites()
|
||||
{
|
||||
if (defaultCrossSprites == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SpritePixels[] crossSprites = client.getCrossSprites();
|
||||
|
||||
if (crossSprites != null && defaultCrossSprites.length == crossSprites.length)
|
||||
{
|
||||
System.arraycopy(defaultCrossSprites, 0, crossSprites, 0, defaultCrossSprites.length);
|
||||
}
|
||||
|
||||
defaultCrossSprites = null;
|
||||
}
|
||||
|
||||
private void restoreWidgetDimensions()
|
||||
{
|
||||
for (WidgetOffset widgetOffset : WidgetOffset.values())
|
||||
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -1009,4 +1009,8 @@ public interface RSClient extends RSGameEngine, Client
|
||||
|
||||
@Import("viewportWalking")
|
||||
void setViewportWalking(boolean viewportWalking);
|
||||
|
||||
@Import("crossSprites")
|
||||
@Override
|
||||
RSSpritePixels[] getCrossSprites();
|
||||
}
|
||||
|
||||