Use built-in name rendering in player indicators
- Change player indicators to use built-in player name rendering - Add support for drawing clan member rank icons thanks to built-in player name rendering Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -55,7 +55,7 @@ public interface PlayerIndicatorsConfig extends Config
|
||||
)
|
||||
default Color getOwnNameColor()
|
||||
{
|
||||
return new Color(0, 184, 212);
|
||||
return Color.WHITE;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
@@ -110,7 +110,7 @@ public interface PlayerIndicatorsConfig extends Config
|
||||
)
|
||||
default boolean drawTeamMemberNames()
|
||||
{
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
@@ -126,11 +126,11 @@ public interface PlayerIndicatorsConfig extends Config
|
||||
|
||||
@ConfigItem(
|
||||
position = 8,
|
||||
keyName = "drawNonClanMemberNames",
|
||||
name = "Draw non-clan member names",
|
||||
description = "Configures whether or not names of non-clan members should be drawn"
|
||||
keyName = "drawOthers",
|
||||
name = "Draw names of others",
|
||||
description = "Configures whether or not names of everyone except you should be drawn"
|
||||
)
|
||||
default boolean drawNonClanMemberNames()
|
||||
default boolean drawNonOwnNames()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -141,9 +141,9 @@ public interface PlayerIndicatorsConfig extends Config
|
||||
name = "Non-clan member color",
|
||||
description = "Color of non-clan member names"
|
||||
)
|
||||
default Color getNonClanMemberColor()
|
||||
default Color getNonOwnColor()
|
||||
{
|
||||
return Color.RED;
|
||||
return Color.WHITE;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
|
||||
@@ -35,6 +35,7 @@ import net.runelite.client.ui.overlay.OverlayLayer;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
||||
import net.runelite.client.util.Text;
|
||||
|
||||
@Singleton
|
||||
public class PlayerIndicatorsMinimapOverlay extends Overlay
|
||||
@@ -61,7 +62,7 @@ public class PlayerIndicatorsMinimapOverlay extends Overlay
|
||||
|
||||
private void renderPlayerOverlay(Graphics2D graphics, Player actor, Color color)
|
||||
{
|
||||
final String name = actor.getName().replace('\u00A0', ' ');
|
||||
final String name = Text.removeTags(actor.getName());
|
||||
|
||||
if (config.drawMinimapNames())
|
||||
{
|
||||
|
||||
@@ -32,6 +32,7 @@ import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
import net.runelite.client.ui.overlay.OverlayLayer;
|
||||
import net.runelite.client.ui.overlay.OverlayPosition;
|
||||
import net.runelite.client.ui.overlay.OverlayPriority;
|
||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
||||
@@ -47,35 +48,29 @@ public class PlayerIndicatorsOverlay extends Overlay
|
||||
{
|
||||
this.config = config;
|
||||
this.playerIndicatorsService = playerIndicatorsService;
|
||||
setLayer(OverlayLayer.ABOVE_SCENE);
|
||||
setPosition(OverlayPosition.DYNAMIC);
|
||||
setPriority(OverlayPriority.HIGH);
|
||||
setPriority(OverlayPriority.LOW);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension render(Graphics2D graphics)
|
||||
{
|
||||
playerIndicatorsService.forEachPlayer((player, color) -> renderPlayerOverlay(graphics, player, color));
|
||||
if (config.drawTiles())
|
||||
{
|
||||
playerIndicatorsService.forEachPlayer((player, color) -> renderPlayerOverlay(graphics, player, color));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private void renderPlayerOverlay(Graphics2D graphics, Player actor, Color color)
|
||||
{
|
||||
if (config.drawTiles())
|
||||
{
|
||||
Polygon poly = actor.getCanvasTilePoly();
|
||||
if (poly != null)
|
||||
{
|
||||
OverlayUtil.renderPolygon(graphics, poly, color);
|
||||
}
|
||||
}
|
||||
Polygon poly = actor.getCanvasTilePoly();
|
||||
|
||||
final String name = actor.getName().replace('\u00A0', ' ');
|
||||
net.runelite.api.Point textLocation = actor
|
||||
.getCanvasTextLocation(graphics, name, actor.getLogicalHeight() + 40);
|
||||
|
||||
if (textLocation != null)
|
||||
if (poly != null)
|
||||
{
|
||||
OverlayUtil.renderTextLocation(graphics, textLocation, name, color);
|
||||
OverlayUtil.renderPolygon(graphics, poly, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,12 +25,16 @@
|
||||
package net.runelite.client.plugins.playerindicators;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.eventbus.Subscribe;
|
||||
import com.google.inject.Provides;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Collection;
|
||||
import javax.inject.Inject;
|
||||
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.task.Schedule;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
|
||||
@PluginDescriptor(
|
||||
@@ -38,12 +42,16 @@ import net.runelite.client.ui.overlay.Overlay;
|
||||
)
|
||||
public class PlayerIndicatorsPlugin extends Plugin
|
||||
{
|
||||
|
||||
@Inject
|
||||
private PlayerIndicatorsOverlay playerIndicatorsOverlay;
|
||||
|
||||
@Inject
|
||||
private PlayerIndicatorsMinimapOverlay playerIndicatorsMinimapOverlay;
|
||||
|
||||
@Inject
|
||||
private PlayerIndicatorsService playerIndicatorsService;
|
||||
|
||||
@Provides
|
||||
PlayerIndicatorsConfig provideConfig(ConfigManager configManager)
|
||||
{
|
||||
@@ -55,4 +63,36 @@ public class PlayerIndicatorsPlugin extends Plugin
|
||||
{
|
||||
return Sets.newHashSet(playerIndicatorsOverlay, playerIndicatorsMinimapOverlay);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void startUp()
|
||||
{
|
||||
playerIndicatorsService.updateConfig(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void shutDown()
|
||||
{
|
||||
playerIndicatorsService.updateConfig(true);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onConfigChanged(ConfigChanged event)
|
||||
{
|
||||
if (event.getGroup().equals("playerindicators")
|
||||
|| event.getGroup().equals("runelite")
|
||||
|| event.getGroup().equals("minimap"))
|
||||
{
|
||||
playerIndicatorsService.updateConfig(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Schedule(
|
||||
period = 1,
|
||||
unit = ChronoUnit.SECONDS
|
||||
)
|
||||
public void updatePlayerNames()
|
||||
{
|
||||
playerIndicatorsService.updatePlayers();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,12 +28,18 @@ import java.awt.Color;
|
||||
import java.util.function.BiConsumer;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import net.runelite.api.ClanMember;
|
||||
import net.runelite.api.ClanMemberRank;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.IndexedSprite;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.PlayerNameMask;
|
||||
import net.runelite.client.util.Text;
|
||||
|
||||
@Singleton
|
||||
public class PlayerIndicatorsService
|
||||
{
|
||||
private static final int NUMBER_OF_RANKS = 8;
|
||||
private final Client client;
|
||||
private final PlayerIndicatorsConfig config;
|
||||
|
||||
@@ -44,10 +50,56 @@ public class PlayerIndicatorsService
|
||||
this.client = client;
|
||||
}
|
||||
|
||||
public void updateConfig(boolean reset)
|
||||
{
|
||||
// Update mask
|
||||
int baseMask = 0;
|
||||
|
||||
if (!reset)
|
||||
{
|
||||
if (config.drawFriendNames())
|
||||
{
|
||||
baseMask |= PlayerNameMask.DRAW_FRIEND_NAME;
|
||||
}
|
||||
|
||||
if (config.drawClanMemberNames())
|
||||
{
|
||||
baseMask |= PlayerNameMask.DRAW_CLAN_NAME;
|
||||
}
|
||||
|
||||
if (config.drawOwnName())
|
||||
{
|
||||
baseMask |= PlayerNameMask.DRAW_OWN_NAME;
|
||||
}
|
||||
|
||||
if (config.drawNonOwnNames())
|
||||
{
|
||||
baseMask |= PlayerNameMask.DRAW_ALL_EXCEPT_OWN_NAME;
|
||||
}
|
||||
}
|
||||
|
||||
client.setPlayerNameMask(baseMask);
|
||||
|
||||
for (Player player : client.getPlayers())
|
||||
{
|
||||
if (player != null && player.getName() != null)
|
||||
{
|
||||
player.setName(Text.removeTags(player.getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updatePlayers()
|
||||
{
|
||||
// Update player names
|
||||
forEachPlayer(this::injectData);
|
||||
}
|
||||
|
||||
public void forEachPlayer(final BiConsumer<Player, Color> consumer)
|
||||
{
|
||||
if (!config.drawOwnName() && !config.drawClanMemberNames()
|
||||
&& !config.drawFriendNames() && !config.drawNonClanMemberNames())
|
||||
&& !config.drawFriendNames() && !config.drawNonOwnNames()
|
||||
&& !config.drawTeamMemberNames())
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -63,7 +115,7 @@ public class PlayerIndicatorsService
|
||||
|
||||
boolean isClanMember = player.isClanMember();
|
||||
|
||||
if (player == client.getLocalPlayer())
|
||||
if (player == localPlayer)
|
||||
{
|
||||
if (config.drawOwnName())
|
||||
{
|
||||
@@ -82,10 +134,51 @@ public class PlayerIndicatorsService
|
||||
{
|
||||
consumer.accept(player, config.getTeamMemberColor());
|
||||
}
|
||||
else if (config.drawNonClanMemberNames() && !isClanMember)
|
||||
else if (config.drawNonOwnNames())
|
||||
{
|
||||
consumer.accept(player, config.getNonClanMemberColor());
|
||||
consumer.accept(player, config.getNonOwnColor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void injectData(final Player player, final Color color)
|
||||
{
|
||||
final StringBuilder stringBuilder = new StringBuilder();
|
||||
|
||||
final IndexedSprite[] modIcons = client.getModIcons();
|
||||
final int startIndex = modIcons.length - NUMBER_OF_RANKS;
|
||||
final String strippedName = Text.removeTags(player.getName());
|
||||
|
||||
if (startIndex >= 0 && player.isClanMember())
|
||||
{
|
||||
final ClanMember[] clanMembersArr = client.getClanMembers();
|
||||
|
||||
if (clanMembersArr != null && clanMembersArr.length > 0)
|
||||
{
|
||||
for (ClanMember clanMember : clanMembersArr)
|
||||
{
|
||||
if (clanMember != null && clanMember.getUsername().equals(strippedName))
|
||||
{
|
||||
if (clanMember.getRank() != ClanMemberRank.UNRANKED)
|
||||
{
|
||||
stringBuilder
|
||||
.append("<img=")
|
||||
.append(startIndex + clanMember.getRank().getValue())
|
||||
.append(">");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stringBuilder.append("<col=").append(parseColor(color)).append(">");
|
||||
player.setName(stringBuilder.toString() + strippedName);
|
||||
}
|
||||
|
||||
private static String parseColor(final Color color)
|
||||
{
|
||||
return String.format("%02X%02X%02X", color.getRed(), color.getGreen(), color.getBlue());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user