Add tooltip and custom icon to World Map fairy ring destinations

This commit is contained in:
Morgan Lewis
2018-05-14 16:22:56 -04:00
committed by Adam
parent c8d7779248
commit 78e0a654cc
5 changed files with 321 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
/*
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
* 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 HOLDER 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.worldmap;
import java.awt.image.BufferedImage;
import lombok.Getter;
import net.runelite.api.coords.WorldPoint;
@Getter
enum FairyRingLocation
{
AIR("AIR", new WorldPoint(2699, 3249, 0)),
AIQ("AIQ", new WorldPoint(2995, 3112, 0)),
AJR("AJR", new WorldPoint(2779, 3615, 0)),
AJS("AJS", new WorldPoint(2499, 3898, 0)),
AKQ("AKQ", new WorldPoint(2318, 3617, 0)),
AKS("AKS", new WorldPoint(2570, 2958, 0)),
ALP("ALP", new WorldPoint(2502, 3638, 0)),
ALQ("ALQ", new WorldPoint(3598, 3496, 0)),
ALS("ALS", new WorldPoint(2643, 3497, 0)),
BIP("BIP", new WorldPoint(3409, 3326, 0)),
BIQ("BIQ", new WorldPoint(3248, 3095, 0)),
BIS("BIS", new WorldPoint(2635, 3268, 0)),
BJQ("BJQ", new WorldPoint(1737, 5342, 0)),
BJS("BJS", new WorldPoint(2147, 3069, 0)),
BKP("BKP", new WorldPoint(2384, 3037, 0)),
BKR("BKR", new WorldPoint(3468, 3433, 0)),
BLP("BLP", new WorldPoint(2432, 5127, 0)),
BLR("BLR", new WorldPoint(2739, 3353, 0)),
CIP("CIP", new WorldPoint(2512, 3886, 0)),
CIQ("CIQ", new WorldPoint(2527, 3129, 0)),
CJR("CJR", new WorldPoint(2704, 3578, 0)),
CKR("CKR", new WorldPoint(2800, 3005, 0)),
CKS("CKS", new WorldPoint(3446, 3472, 0)),
CLP("CLP", new WorldPoint(3081, 3208, 0)),
CLS("CLS", new WorldPoint(2681, 3083, 0)),
DIP("DIP", new WorldPoint(3039, 4757, 0)),
DIS("DIS", new WorldPoint(3109, 3149, 0)),
DJP("DJP", new WorldPoint(2657, 3232, 0)),
DJR("DJR", new WorldPoint(1452, 3659, 0)),
DKP("DKP", new WorldPoint(2899, 3113, 0)),
DKR("DKR", new WorldPoint(3126, 3496, 0)),
DKS("DKS", new WorldPoint(2743, 3721, 0)),
DLQ("DLQ", new WorldPoint(3422, 3018, 0)),
DLR("DLR", new WorldPoint(2212, 3101, 0)),
CIS("CIS", new WorldPoint(1638, 3868, 0)),
CLR("CLR", new WorldPoint(2737, 2739, 0)),
ZANARIS("Zanaris", new WorldPoint(2411, 4436, 0));
private final String code;
private final WorldPoint location;
private final FairyRingPoint fairyRingPoint;
FairyRingLocation(String code, WorldPoint location)
{
this.code = code;
this.location = location;
this.fairyRingPoint = new FairyRingPoint(code, location);
}
static void setIcon(BufferedImage image)
{
for (FairyRingLocation fairyRingLocation : values())
{
fairyRingLocation.fairyRingPoint.setImage(image);
}
}
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
* 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 HOLDER 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.worldmap;
import net.runelite.api.coords.WorldPoint;
import static net.runelite.client.plugins.worldmap.WorldMapPlugin.BLANK_ICON;
import net.runelite.client.ui.overlay.worldmap.WorldMapPoint;
class FairyRingPoint extends WorldMapPoint
{
FairyRingPoint(String tooltip, WorldPoint worldPoint)
{
super(worldPoint, BLANK_ICON);
setTooltip("Fairy Ring - " + tooltip);
}
}

View File

@@ -0,0 +1,60 @@
/*
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
* 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 HOLDER 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.worldmap;
import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem;
@ConfigGroup(
keyName = WorldMapPlugin.CONFIG_KEY,
name = "World Map",
description = "Various World Map enhancements"
)
public interface WorldMapConfig extends Config
{
@ConfigItem(
keyName = WorldMapPlugin.CONFIG_KEY_FAIRY_RING_TOOLTIPS,
name = "Show fairy ring codes in tooltip",
description = "Display the code for fairy rings in the icon tooltip",
position = 1
)
default boolean fairyRingTooltips()
{
return true;
}
@ConfigItem(
keyName = WorldMapPlugin.CONFIG_KEY_FAIRY_RING_ICON,
name = "Show fairy ring travel icon",
description = "Override the travel icon for fairy rings",
position = 2
)
default boolean fairyRingIcon()
{
return true;
}
}

View File

@@ -0,0 +1,131 @@
/*
* Copyright (c) 2018, Morgan Lewis <https://github.com/MESLewis>
* 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 HOLDER 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.worldmap;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
import com.google.inject.Provides;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Arrays;
import javax.imageio.ImageIO;
import net.runelite.api.events.ConfigChanged;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager;
@PluginDescriptor(
name = "World Map"
)
public class WorldMapPlugin extends Plugin
{
static final BufferedImage BLANK_ICON;
static final BufferedImage FAIRY_TRAVEL_ICON;
static final String CONFIG_KEY = "worldmap";
static final String CONFIG_KEY_FAIRY_RING_TOOLTIPS = "fairyRingTooltips";
static final String CONFIG_KEY_FAIRY_RING_ICON = "fairyRingIcon";
static
{
//A size of 17 gives us a buffer when triggering tooltips
final int iconBufferSize = 17;
BLANK_ICON = new BufferedImage(iconBufferSize, iconBufferSize, BufferedImage.TYPE_INT_ARGB);
try
{
synchronized (ImageIO.class)
{
FAIRY_TRAVEL_ICON = new BufferedImage(iconBufferSize, iconBufferSize, BufferedImage.TYPE_INT_ARGB);
final BufferedImage icon = ImageIO.read(WorldMapPlugin.class.getResourceAsStream("fairy_ring_travel.png"));
FAIRY_TRAVEL_ICON.getGraphics().drawImage(icon, 1, 1, null);
}
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
@Inject
private WorldMapConfig config;
@Inject
private WorldMapPointManager worldMapPointManager;
@Provides
WorldMapConfig provideConfig(ConfigManager configManager)
{
return configManager.getConfig(WorldMapConfig.class);
}
@Subscribe
public void onConfigChanged(ConfigChanged event)
{
if (event.getGroup().equals(CONFIG_KEY))
{
switch (event.getKey())
{
case CONFIG_KEY_FAIRY_RING_TOOLTIPS:
if (config.fairyRingTooltips())
{
Arrays.stream(FairyRingLocation.values())
.map(FairyRingLocation::getFairyRingPoint)
.forEach(worldMapPointManager::add);
}
else
{
worldMapPointManager.removeIf(FairyRingPoint.class::isInstance);
}
break;
case CONFIG_KEY_FAIRY_RING_ICON:
FairyRingLocation.setIcon(config.fairyRingIcon() ? FAIRY_TRAVEL_ICON : BLANK_ICON);
break;
}
}
}
@Override
protected void startUp() throws Exception
{
FairyRingLocation.setIcon(config.fairyRingIcon() ? FAIRY_TRAVEL_ICON : BLANK_ICON);
if (config.fairyRingTooltips())
{
Arrays.stream(FairyRingLocation.values())
.map(FairyRingLocation::getFairyRingPoint)
.forEach(worldMapPointManager::add);
}
}
@Override
protected void shutDown() throws Exception
{
worldMapPointManager.removeIf(FairyRingPoint.class::isInstance);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB