quest list plugin: add ability to filter quests by any completion state

Co-authored-by: Adam <Adam@sigterm.info>
This commit is contained in:
Quasindro
2019-03-30 09:42:38 +01:00
committed by Adam
parent 867d402ec5
commit 3b25c6dc44

View File

@@ -25,13 +25,6 @@
package net.runelite.client.plugins.questlist;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.List;
import java.util.stream.Collectors;
import javax.inject.Inject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
@@ -59,6 +52,13 @@ import net.runelite.client.game.chatbox.ChatboxTextInput;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.Text;
import javax.inject.Inject;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.List;
import java.util.stream.Collectors;
@PluginDescriptor(
name = "Quest List",
@@ -69,17 +69,13 @@ public class QuestListPlugin extends Plugin
private static final int ENTRY_PADDING = 8;
private static final List<String> QUEST_HEADERS = ImmutableList.of("Free Quests", "Members' Quests", "Miniquests");
private static final int SPRITE_SHOW_COMPLETED = SpriteID.OPTIONS_ZOOM_SLIDER_THUMB;
private static final int SPRITE_HIDE_COMPLETED = SpriteID.SQUARE_CHECK_BOX;
private static final String MENU_OPEN = "Open";
private static final String MENU_CLOSE = "Close";
private static final String MENU_SHOW = "Show";
private static final String MENU_HIDE = "Hide";
private static final String MENU_TOGGLE = "Toggle";
private static final String MENU_SEARCH = "Search";
private static final String MENU_COMPLETED = "Completed Quests";
private static final String MENU_SHOW = "Show";
@Inject
private Client client;
@@ -92,18 +88,18 @@ public class QuestListPlugin extends Plugin
private ChatboxTextInput searchInput;
private Widget questSearchButton;
private Widget questHideCompletedButton;
private Widget questHideButton;
private EnumMap<QuestContainer, Collection<QuestWidget>> questSet;
private boolean hideCompleted;
private QuestState currentFilterState;
@Subscribe
public void onGameStateChanged(GameStateChanged e)
{
if (e.getGameState() == GameState.LOGGING_IN)
{
hideCompleted = false;
currentFilterState = QuestState.ALL;
}
}
@@ -128,19 +124,18 @@ public class QuestListPlugin extends Plugin
questSearchButton.setName(MENU_SEARCH);
questSearchButton.revalidate();
questHideCompletedButton = header.createChild(-1, WidgetType.GRAPHIC);
redrawHideCompletedButton();
questHideButton = header.createChild(-1, WidgetType.GRAPHIC);
redrawHideButton();
questHideCompletedButton.setOriginalWidth(18);
questHideCompletedButton.setOriginalHeight(17);
questHideCompletedButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questHideCompletedButton.setOriginalX(25);
questHideCompletedButton.setOriginalY(0);
questHideCompletedButton.setHasListener(true);
questHideCompletedButton.setOnOpListener((JavaScriptCallback) e -> toggleHideCompleted());
questHideCompletedButton.setName(MENU_COMPLETED);
questHideCompletedButton.revalidate();
questHideButton.setOriginalWidth(13);
questHideButton.setOriginalHeight(13);
questHideButton.setXPositionMode(WidgetPositionMode.ABSOLUTE_RIGHT);
questHideButton.setOriginalX(24);
questHideButton.setOriginalY(2);
questHideButton.setHasListener(true);
questHideButton.setOnOpListener((JavaScriptCallback) e -> toggleHidden());
questHideButton.setAction(1, MENU_TOGGLE);
questHideButton.revalidate();
questSet = new EnumMap<>(QuestContainer.class);
@@ -173,19 +168,22 @@ public class QuestListPlugin extends Plugin
}
}
private void toggleHideCompleted()
private void toggleHidden()
{
hideCompleted = !hideCompleted;
redrawHideCompletedButton();
QuestState[] questStates = QuestState.values();
int nextState = (currentFilterState.ordinal() + 1) % questStates.length;
currentFilterState = questStates[nextState];
redrawHideButton();
updateFilter();
client.playSoundEffect(SoundEffectID.UI_BOOP);
}
private void redrawHideCompletedButton()
private void redrawHideButton()
{
questHideCompletedButton.setSpriteId(hideCompleted ? SPRITE_HIDE_COMPLETED : SPRITE_SHOW_COMPLETED);
questHideCompletedButton.setAction(1, hideCompleted ? MENU_SHOW : MENU_HIDE);
questHideButton.setSpriteId(currentFilterState.getSpriteId());
questHideButton.setName(MENU_SHOW + " " + currentFilterState.getName());
}
private boolean isOnQuestTab()
@@ -324,9 +322,17 @@ public class QuestListPlugin extends Plugin
Widget quest = questInfo.getQuest();
QuestState questState = QuestState.getByColor(quest.getTextColor());
boolean hidden = !(filter.isEmpty()
|| questInfo.getTitle().contains(filter))
|| (filter.isEmpty() && hideCompleted && questState == QuestState.COMPLETE);
boolean hidden;
if (!filter.isEmpty())
{
// If searching, show result regardless of filtered state
hidden = !questInfo.getTitle().contains(filter);
}
else
{
// Otherwise hide if it doesn't match the filter state
hidden = currentFilterState != QuestState.ALL && questState != currentFilterState;
}
quest.setHidden(hidden);
quest.setOriginalY(y);
@@ -356,9 +362,14 @@ public class QuestListPlugin extends Plugin
@Getter
private enum QuestState
{
NOT_STARTED(0xff0000), IN_PROGRESS(0xffff00), COMPLETE(0xdc10d);
NOT_STARTED(0xff0000, "Not started", SpriteID.MINIMAP_ORB_HITPOINTS),
IN_PROGRESS(0xffff00, "In progress", SpriteID.MINIMAP_ORB_HITPOINTS_DISEASE),
COMPLETE(0xdc10d, "Completed", SpriteID.MINIMAP_ORB_HITPOINTS_POISON),
ALL(0, "All", SpriteID.MINIMAP_ORB_PRAYER);
private final int color;
private final String name;
private final int spriteId;
static QuestState getByColor(int color)
{