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_WINDOW = 0;
|
||||||
static final int EMOTE_CONTAINER = 1;
|
static final int EMOTE_CONTAINER = 1;
|
||||||
|
static final int EMOTE_SCROLLBAR = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static class Cluescroll
|
static class Cluescroll
|
||||||
@@ -772,6 +773,7 @@ public class WidgetID
|
|||||||
{
|
{
|
||||||
static final int CONTAINER = 0;
|
static final int CONTAINER = 0;
|
||||||
static final int LIST = 3;
|
static final int LIST = 3;
|
||||||
|
static final int SCROLLBAR = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
static class Barrows_Puzzle
|
static class Barrows_Puzzle
|
||||||
|
|||||||
@@ -75,9 +75,11 @@ public enum WidgetInfo
|
|||||||
|
|
||||||
EMOTE_WINDOW(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_WINDOW),
|
EMOTE_WINDOW(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_WINDOW),
|
||||||
EMOTE_CONTAINER(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_CONTAINER),
|
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_WINDOW(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.CONTAINER),
|
||||||
MUSIC_TRACK_LIST(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.LIST),
|
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_TITLE(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TITLE),
|
||||||
DIARY_QUEST_WIDGET_TEXT(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TEXT),
|
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 ClueScrollPlugin plugin;
|
||||||
private final Client client;
|
private final Client client;
|
||||||
|
|
||||||
|
private boolean hasScrolled;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClueScrollEmoteOverlay(ClueScrollPlugin plugin, Client client)
|
private ClueScrollEmoteOverlay(ClueScrollPlugin plugin, Client client)
|
||||||
{
|
{
|
||||||
@@ -57,6 +59,7 @@ class ClueScrollEmoteOverlay extends Overlay
|
|||||||
|
|
||||||
if (!(clue instanceof EmoteClue))
|
if (!(clue instanceof EmoteClue))
|
||||||
{
|
{
|
||||||
|
hasScrolled = false;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,19 +84,29 @@ class ClueScrollEmoteOverlay extends Overlay
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget firstEmoteWidget = null;
|
||||||
|
Widget secondEmoteWidget = null;
|
||||||
|
|
||||||
for (Widget emoteWidget : emoteContainer.getDynamicChildren())
|
for (Widget emoteWidget : emoteContainer.getDynamicChildren())
|
||||||
{
|
{
|
||||||
if (emoteWidget.getSpriteId() == emoteClue.getFirstEmote().getSpriteId())
|
if (emoteWidget.getSpriteId() == emoteClue.getFirstEmote().getSpriteId())
|
||||||
{
|
{
|
||||||
|
firstEmoteWidget = emoteWidget;
|
||||||
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null,
|
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null,
|
||||||
emoteClue.getSecondEmote() != null ? "1st" : null);
|
emoteClue.getSecondEmote() != null ? "1st" : null);
|
||||||
}
|
}
|
||||||
else if (emoteClue.getSecondEmote() != null
|
else if (emoteClue.getSecondEmote() != null
|
||||||
&& emoteWidget.getSpriteId() == emoteClue.getSecondEmote().getSpriteId())
|
&& emoteWidget.getSpriteId() == emoteClue.getSecondEmote().getSpriteId())
|
||||||
{
|
{
|
||||||
|
secondEmoteWidget = emoteWidget;
|
||||||
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null, "2nd");
|
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null, "2nd");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!hasScrolled)
|
||||||
|
{
|
||||||
|
hasScrolled = true;
|
||||||
|
plugin.scrollToWidget(WidgetInfo.EMOTE_CONTAINER, WidgetInfo.EMOTE_SCROLLBAR, firstEmoteWidget, secondEmoteWidget);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ class ClueScrollMusicOverlay extends Overlay
|
|||||||
private final ClueScrollPlugin plugin;
|
private final ClueScrollPlugin plugin;
|
||||||
private final Client client;
|
private final Client client;
|
||||||
|
|
||||||
|
private boolean hasScrolled;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ClueScrollMusicOverlay(ClueScrollPlugin plugin, Client client)
|
private ClueScrollMusicOverlay(ClueScrollPlugin plugin, Client client)
|
||||||
{
|
{
|
||||||
@@ -60,6 +62,7 @@ class ClueScrollMusicOverlay extends Overlay
|
|||||||
|
|
||||||
if (!(clue instanceof MusicClue))
|
if (!(clue instanceof MusicClue))
|
||||||
{
|
{
|
||||||
|
hasScrolled = false;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,6 +98,11 @@ class ClueScrollMusicOverlay extends Overlay
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!hasScrolled)
|
||||||
|
{
|
||||||
|
hasScrolled = true;
|
||||||
|
plugin.scrollToWidget(WidgetInfo.MUSIC_TRACK_LIST, WidgetInfo.MUSIC_TRACK_SCROLLBAR, found);
|
||||||
|
}
|
||||||
plugin.highlightWidget(graphics, found, trackList, PADDING, null);
|
plugin.highlightWidget(graphics, found, trackList, PADDING, null);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ import net.runelite.api.NPC;
|
|||||||
import net.runelite.api.ObjectComposition;
|
import net.runelite.api.ObjectComposition;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.Scene;
|
import net.runelite.api.Scene;
|
||||||
|
import net.runelite.api.ScriptID;
|
||||||
import net.runelite.api.Tile;
|
import net.runelite.api.Tile;
|
||||||
import net.runelite.api.TileObject;
|
import net.runelite.api.TileObject;
|
||||||
import net.runelite.api.coords.LocalPoint;
|
import net.runelite.api.coords.LocalPoint;
|
||||||
@@ -739,4 +740,33 @@ public class ClueScrollPlugin extends Plugin
|
|||||||
textComponent.setText(text);
|
textComponent.setText(text);
|
||||||
textComponent.render(graphics);
|
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