interface styles: add RuneScape cross sprites option
@@ -1632,6 +1632,11 @@ public interface Client extends GameEngine
|
|||||||
*/
|
*/
|
||||||
NodeCache getItemCompositionCache();
|
NodeCache getItemCompositionCache();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the array of cross sprites that appear and animate when left-clicking
|
||||||
|
*/
|
||||||
|
SpritePixels[] getCrossSprites();
|
||||||
|
|
||||||
EnumComposition getEnum(int id);
|
EnumComposition getEnum(int id);
|
||||||
|
|
||||||
void draw2010Menu();
|
void draw2010Menu();
|
||||||
|
|||||||
@@ -62,4 +62,14 @@ public interface InterfaceStylesConfig extends Config
|
|||||||
{
|
{
|
||||||
return false;
|
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 javax.inject.Inject;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.GameState;
|
||||||
import net.runelite.api.HealthBar;
|
import net.runelite.api.HealthBar;
|
||||||
import net.runelite.api.SpriteID;
|
import net.runelite.api.SpriteID;
|
||||||
import net.runelite.api.SpritePixels;
|
import net.runelite.api.SpritePixels;
|
||||||
import net.runelite.api.events.BeforeMenuRender;
|
import net.runelite.api.events.BeforeMenuRender;
|
||||||
import net.runelite.api.events.ConfigChanged;
|
import net.runelite.api.events.ConfigChanged;
|
||||||
|
import net.runelite.api.events.GameStateChanged;
|
||||||
import net.runelite.api.events.PostHealthBar;
|
import net.runelite.api.events.PostHealthBar;
|
||||||
import net.runelite.api.events.WidgetPositioned;
|
import net.runelite.api.events.WidgetPositioned;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
@@ -69,6 +71,8 @@ public class InterfaceStylesPlugin extends Plugin
|
|||||||
@Inject
|
@Inject
|
||||||
private SpriteManager spriteManager;
|
private SpriteManager spriteManager;
|
||||||
|
|
||||||
|
private SpritePixels[] defaultCrossSprites;
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
InterfaceStylesConfig provideConfig(ConfigManager configManager)
|
InterfaceStylesConfig provideConfig(ConfigManager configManager)
|
||||||
{
|
{
|
||||||
@@ -89,6 +93,7 @@ public class InterfaceStylesPlugin extends Plugin
|
|||||||
restoreWidgetDimensions();
|
restoreWidgetDimensions();
|
||||||
removeGameframe();
|
removeGameframe();
|
||||||
restoreHealthBars();
|
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()
|
private void updateAllOverrides()
|
||||||
{
|
{
|
||||||
removeGameframe();
|
removeGameframe();
|
||||||
@@ -134,6 +155,7 @@ public class InterfaceStylesPlugin extends Plugin
|
|||||||
restoreWidgetDimensions();
|
restoreWidgetDimensions();
|
||||||
adjustWidgetDimensions();
|
adjustWidgetDimensions();
|
||||||
overrideHealthBars();
|
overrideHealthBars();
|
||||||
|
overrideCrossSprites();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@@ -283,6 +305,62 @@ public class InterfaceStylesPlugin extends Plugin
|
|||||||
clientThread.invokeLater(client::resetHealthBarCaches);
|
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()
|
private void restoreWidgetDimensions()
|
||||||
{
|
{
|
||||||
for (WidgetOffset widgetOffset : WidgetOffset.values())
|
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")
|
@Import("viewportWalking")
|
||||||
void setViewportWalking(boolean viewportWalking);
|
void setViewportWalking(boolean viewportWalking);
|
||||||
|
|
||||||
|
@Import("crossSprites")
|
||||||
|
@Override
|
||||||
|
RSSpritePixels[] getCrossSprites();
|
||||||
}
|
}
|
||||||
|
|||||||