From 09da86884abe1e9834a4e4da55090ecb7ba682e9 Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Sun, 24 Nov 2019 05:00:11 +0000 Subject: [PATCH] kourendlibrary: add tutorial overlay --- .../kourendlibrary/KourendLibraryConfig.java | 10 ++ .../kourendlibrary/KourendLibraryPlugin.java | 5 + .../KourendLibraryTutorialOverlay.java | 109 ++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java index 6ec40a00fd..af7b9d7e60 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryConfig.java @@ -52,4 +52,14 @@ public interface KourendLibraryConfig extends Config { return true; } + + @ConfigItem( + keyName = "showTutorialOverlay", + name = "Show tutorial overlay", + description = "Whether to show an overlay to help understand how to use the plugin" + ) + default boolean showTutorialOverlay() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java index b5ac1904e0..46abbec99e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java @@ -88,6 +88,9 @@ public class KourendLibraryPlugin extends Plugin @Inject private KourendLibraryOverlay overlay; + @Inject + private KourendLibraryTutorialOverlay tutorialOverlay; + @Inject private KourendLibraryConfig config; @@ -125,6 +128,7 @@ public class KourendLibraryPlugin extends Plugin .build(); overlayManager.add(overlay); + overlayManager.add(tutorialOverlay); updatePlayerBooks(); @@ -139,6 +143,7 @@ public class KourendLibraryPlugin extends Plugin { overlay.setHidden(true); overlayManager.remove(overlay); + overlayManager.remove(tutorialOverlay); clientToolbar.removeNavigation(navButton); buttonAttached = false; lastBookcaseClick = null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java new file mode 100644 index 0000000000..6d6f3b4796 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryTutorialOverlay.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2019 Hydrox6 + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.kourendlibrary; + +import net.runelite.api.Client; +import net.runelite.api.Player; +import net.runelite.api.coords.WorldPoint; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.ui.overlay.components.LineComponent; +import net.runelite.client.ui.overlay.components.PanelComponent; +import javax.inject.Inject; +import java.awt.Dimension; +import java.awt.Graphics2D; + +class KourendLibraryTutorialOverlay extends Overlay +{ + private final Client client; + private final KourendLibraryConfig config; + private final Library library; + + private final PanelComponent panelComponent; + private final LineComponent noDataMessageComponent; + private final LineComponent incompleteMessageComponent; + private final LineComponent completeMessageComponent; + private final LineComponent sidebarMessageComponent; + + @Inject + private KourendLibraryTutorialOverlay(Client client, KourendLibraryConfig config, Library library) + { + this.client = client; + this.config = config; + this.library = library; + + panelComponent = new PanelComponent(); + panelComponent.setPreferredSize(new Dimension(177, 0)); + + noDataMessageComponent = LineComponent.builder().left("Click on the white squares to start finding books.").build(); + incompleteMessageComponent = LineComponent.builder().left("Some books have been found. Keep checking marked bookcases to find more.").build(); + completeMessageComponent = LineComponent.builder().left("All books found.").build(); + sidebarMessageComponent = LineComponent.builder().left("Locations are in the sidebar.").build(); + + setPriority(OverlayPriority.LOW); + setPosition(OverlayPosition.TOP_LEFT); + } + + @Override + public Dimension render(Graphics2D graphics) + { + if (!config.showTutorialOverlay()) + { + return null; + } + + Player player = client.getLocalPlayer(); + if (player == null) + { + return null; + } + + WorldPoint playerLoc = player.getWorldLocation(); + if (playerLoc.getRegionID() != KourendLibraryPlugin.REGION) + { + return null; + } + + panelComponent.getChildren().clear(); + + switch (library.getState()) + { + case NO_DATA: + panelComponent.getChildren().add(noDataMessageComponent); + break; + case INCOMPLETE: + panelComponent.getChildren().add(incompleteMessageComponent); + panelComponent.getChildren().add(sidebarMessageComponent); + break; + case COMPLETE: + panelComponent.getChildren().add(completeMessageComponent); + panelComponent.getChildren().add(sidebarMessageComponent); + break; + } + + return panelComponent.render(graphics); + } +}