From e9881dd540175642ed4e09acb0a35860f6637ee9 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 4 Feb 2019 09:50:39 +0000 Subject: [PATCH 1/2] Add ColorUtil#fromObject to generate color from object Add utility method that can generate color based on object hashCode. Signed-off-by: Tomas Slusny --- .../net/runelite/client/util/ColorUtil.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java index d37028f9dd..5445d55183 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ColorUtil.java @@ -27,6 +27,7 @@ package net.runelite.client.util; import com.google.common.primitives.Ints; import java.awt.Color; import java.util.regex.Pattern; +import javax.annotation.Nonnull; public class ColorUtil { @@ -226,4 +227,20 @@ public class ColorUtil return null; } } + + /** + * Creates color from passed object hash code + * @param object object with hashCode + * @param skipAlpha skips alpha + * @return color + */ + public static Color fromObject(@Nonnull final Object object, boolean skipAlpha) + { + int i = object.hashCode(); + int r = (i >> 24) & 0xFF; + int g = (i >> 16) & 0xFF; + int b = (i >> 8) & 0xFF; + int a = i & 0xFF; + return new Color(r, g, b, skipAlpha ? 255 : a); + } } From 94e4a210a34f0921fc283e821cc59130d250dd5c Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 4 Feb 2019 10:18:07 +0000 Subject: [PATCH 2/2] Recolor party pings and names based on name color hash Signed-off-by: Tomas Slusny --- .../runelite/client/plugins/party/PartyConfig.java | 11 ++++++++++- .../client/plugins/party/PartyPingOverlay.java | 8 +++++++- .../runelite/client/plugins/party/PartyPlugin.java | 12 +++++++++--- .../client/plugins/party/PartyStatsOverlay.java | 1 + .../client/plugins/party/data/PartyData.java | 2 ++ .../client/plugins/party/data/PartyTilePingData.java | 2 ++ .../client/plugins/party/messages/TilePing.java | 4 ++-- 7 files changed, 33 insertions(+), 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyConfig.java index 1bf03191c5..cf33302d21 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyConfig.java @@ -61,7 +61,6 @@ public interface PartyConfig extends Config return true; } - @ConfigItem( keyName = "messages", name = "Join messages", @@ -71,4 +70,14 @@ public interface PartyConfig extends Config { return true; } + + @ConfigItem( + keyName = "recolorNames", + name = "Recolor names", + description = "Recolor stats overlay names based on unique color hash" + ) + default boolean recolorNames() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPingOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPingOverlay.java index faaf2774bc..e6cc7dcf83 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPingOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPingOverlay.java @@ -110,6 +110,12 @@ class PartyPingOverlay extends Overlay return; } - OverlayUtil.renderPolygon(graphics, poly, new Color(255, 0, 0, ping.getAlpha())); + final Color color = new Color( + ping.getColor().getRed(), + ping.getColor().getGreen(), + ping.getColor().getBlue(), + ping.getAlpha()); + + OverlayUtil.renderPolygon(graphics, poly, color); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java index 109c817f39..3544aab95a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyPlugin.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.party; import com.google.inject.Binder; import com.google.inject.Provides; +import java.awt.Color; import java.awt.event.KeyEvent; import java.time.temporal.ChronoUnit; import java.util.ArrayList; @@ -71,6 +72,7 @@ import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.worldmap.WorldMapPoint; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; +import net.runelite.client.util.ColorUtil; import net.runelite.client.ws.PartyMember; import net.runelite.client.ws.PartyService; import net.runelite.client.ws.WSClient; @@ -228,7 +230,9 @@ public class PartyPlugin extends Plugin implements KeyListener } event.consume(); - wsClient.send(new TilePing(selectedSceneTile.getWorldLocation())); + final TilePing tilePing = new TilePing(selectedSceneTile.getWorldLocation()); + tilePing.setMemberId(party.getLocalMember().getMemberId()); + wsClient.send(tilePing); } @Subscribe @@ -238,7 +242,9 @@ public class PartyPlugin extends Plugin implements KeyListener if (config.pings()) { - pendingTilePings.add(new PartyTilePingData(event.getPoint())); + final PartyData partyData = getPartyData(event.getMemberId()); + final Color color = partyData != null ? partyData.getColor() : Color.RED; + pendingTilePings.add(new PartyTilePingData(event.getPoint(), color)); } if (config.sounds()) @@ -470,7 +476,7 @@ public class PartyPlugin extends Plugin implements KeyListener worldMapManager.add(worldMapPoint); } - return new PartyData(u, name, worldMapPoint); + return new PartyData(u, name, worldMapPoint, ColorUtil.fromObject(name, true)); }); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatsOverlay.java index b00b22dfef..2b9e1820f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/PartyStatsOverlay.java @@ -102,6 +102,7 @@ public class PartyStatsOverlay extends Overlay final TitleComponent name = TitleComponent.builder() .text(v.getName()) + .color(config.recolorNames() ? v.getColor() : Color.WHITE) .build(); panel.getChildren().add(name); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java index a7ff8a3dbd..2593c4fe8f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyData.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.party.data; +import java.awt.Color; import java.util.UUID; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -40,6 +41,7 @@ public class PartyData private final String name; private final WorldMapPoint worldMapPoint; private final PanelComponent panel = new PanelComponent(); + private final Color color; private int hitpoints; private int maxHitpoints; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java index 9c01bf78e2..467e69dd2a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/data/PartyTilePingData.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.party.data; +import java.awt.Color; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; @@ -35,5 +36,6 @@ import net.runelite.api.coords.WorldPoint; public class PartyTilePingData { private final WorldPoint point; + private final Color color; private int alpha = 255; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/TilePing.java b/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/TilePing.java index d43012669e..1378403333 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/TilePing.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/party/messages/TilePing.java @@ -26,10 +26,10 @@ package net.runelite.client.plugins.party.messages; import lombok.Value; import net.runelite.api.coords.WorldPoint; -import net.runelite.http.api.ws.messages.party.PartyMessage; +import net.runelite.http.api.ws.messages.party.PartyMemberMessage; @Value -public class TilePing extends PartyMessage +public class TilePing extends PartyMemberMessage { private final WorldPoint point; }