clue plugin: add widget scroll feature
This commit is contained in:
@@ -280,6 +280,7 @@ public class WidgetID
|
||||
{
|
||||
static final int EMOTE_WINDOW = 0;
|
||||
static final int EMOTE_CONTAINER = 1;
|
||||
static final int EMOTE_SCROLLBAR = 2;
|
||||
}
|
||||
|
||||
static class Cluescroll
|
||||
@@ -772,6 +773,7 @@ public class WidgetID
|
||||
{
|
||||
static final int CONTAINER = 0;
|
||||
static final int LIST = 3;
|
||||
static final int SCROLLBAR = 4;
|
||||
}
|
||||
|
||||
static class Barrows_Puzzle
|
||||
|
||||
@@ -75,9 +75,11 @@ public enum WidgetInfo
|
||||
|
||||
EMOTE_WINDOW(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_WINDOW),
|
||||
EMOTE_CONTAINER(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_CONTAINER),
|
||||
EMOTE_SCROLLBAR(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_SCROLLBAR),
|
||||
|
||||
MUSIC_WINDOW(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.CONTAINER),
|
||||
MUSIC_TRACK_LIST(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.LIST),
|
||||
MUSIC_TRACK_SCROLLBAR(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.SCROLLBAR),
|
||||
|
||||
DIARY_QUEST_WIDGET_TITLE(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TITLE),
|
||||
DIARY_QUEST_WIDGET_TEXT(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TEXT),
|
||||
|
||||
@@ -41,6 +41,8 @@ class ClueScrollEmoteOverlay extends Overlay
|
||||
private final ClueScrollPlugin plugin;
|
||||
private final Client client;
|
||||
|
||||
private boolean hasScrolled;
|
||||
|
||||
@Inject
|
||||
private ClueScrollEmoteOverlay(ClueScrollPlugin plugin, Client client)
|
||||
{
|
||||
@@ -57,6 +59,7 @@ class ClueScrollEmoteOverlay extends Overlay
|
||||
|
||||
if (!(clue instanceof EmoteClue))
|
||||
{
|
||||
hasScrolled = false;
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -81,19 +84,29 @@ class ClueScrollEmoteOverlay extends Overlay
|
||||
return null;
|
||||
}
|
||||
|
||||
Widget firstEmoteWidget = null;
|
||||
Widget secondEmoteWidget = null;
|
||||
|
||||
for (Widget emoteWidget : emoteContainer.getDynamicChildren())
|
||||
{
|
||||
if (emoteWidget.getSpriteId() == emoteClue.getFirstEmote().getSpriteId())
|
||||
{
|
||||
firstEmoteWidget = emoteWidget;
|
||||
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null,
|
||||
emoteClue.getSecondEmote() != null ? "1st" : null);
|
||||
}
|
||||
else if (emoteClue.getSecondEmote() != null
|
||||
&& emoteWidget.getSpriteId() == emoteClue.getSecondEmote().getSpriteId())
|
||||
{
|
||||
secondEmoteWidget = emoteWidget;
|
||||
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null, "2nd");
|
||||
}
|
||||
}
|
||||
if (!hasScrolled)
|
||||
{
|
||||
hasScrolled = true;
|
||||
plugin.scrollToWidget(WidgetInfo.EMOTE_CONTAINER, WidgetInfo.EMOTE_SCROLLBAR, firstEmoteWidget, secondEmoteWidget);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,8 @@ class ClueScrollMusicOverlay extends Overlay
|
||||
private final ClueScrollPlugin plugin;
|
||||
private final Client client;
|
||||
|
||||
private boolean hasScrolled;
|
||||
|
||||
@Inject
|
||||
private ClueScrollMusicOverlay(ClueScrollPlugin plugin, Client client)
|
||||
{
|
||||
@@ -60,6 +62,7 @@ class ClueScrollMusicOverlay extends Overlay
|
||||
|
||||
if (!(clue instanceof MusicClue))
|
||||
{
|
||||
hasScrolled = false;
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -95,6 +98,11 @@ class ClueScrollMusicOverlay extends Overlay
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!hasScrolled)
|
||||
{
|
||||
hasScrolled = true;
|
||||
plugin.scrollToWidget(WidgetInfo.MUSIC_TRACK_LIST, WidgetInfo.MUSIC_TRACK_SCROLLBAR, found);
|
||||
}
|
||||
plugin.highlightWidget(graphics, found, trackList, PADDING, null);
|
||||
|
||||
return null;
|
||||
|
||||
@@ -55,6 +55,7 @@ import net.runelite.api.NPC;
|
||||
import net.runelite.api.ObjectComposition;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.Scene;
|
||||
import net.runelite.api.ScriptID;
|
||||
import net.runelite.api.Tile;
|
||||
import net.runelite.api.TileObject;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
@@ -739,4 +740,33 @@ public class ClueScrollPlugin extends Plugin
|
||||
textComponent.setText(text);
|
||||
textComponent.render(graphics);
|
||||
}
|
||||
|
||||
void scrollToWidget(WidgetInfo list, WidgetInfo scrollbar, Widget ... toHighlight)
|
||||
{
|
||||
final Widget parent = client.getWidget(list);
|
||||
int averageCentralY = 0;
|
||||
int nonnullCount = 0;
|
||||
for (Widget widget : toHighlight)
|
||||
{
|
||||
if (widget != null)
|
||||
{
|
||||
averageCentralY += widget.getRelativeY() + widget.getHeight() / 2;
|
||||
nonnullCount += 1;
|
||||
}
|
||||
}
|
||||
if (nonnullCount == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
averageCentralY /= nonnullCount;
|
||||
final int newScroll = Math.max(0, Math.min(parent.getScrollHeight(),
|
||||
averageCentralY - parent.getHeight() / 2));
|
||||
|
||||
client.runScript(
|
||||
ScriptID.UPDATE_SCROLLBAR,
|
||||
scrollbar.getId(),
|
||||
list.getId(),
|
||||
newScroll
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user