Merge pull request #8627 from Hydrox6/clue-scrolling

clue plugin: add widget scrolling feature
This commit is contained in:
Adam
2019-04-30 15:23:46 -04:00
committed by GitHub
5 changed files with 55 additions and 0 deletions

View File

@@ -282,6 +282,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
@@ -774,6 +775,7 @@ public class WidgetID
{
static final int CONTAINER = 0;
static final int LIST = 3;
static final int SCROLLBAR = 4;
}
static class Barrows_Puzzle

View File

@@ -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),

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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
);
}
}