chat icon manager: add clan chat icons

This commit is contained in:
Adam
2021-05-26 15:23:19 -04:00
parent a3016289ec
commit 474ef1562b

View File

@@ -37,6 +37,7 @@ import net.runelite.api.EnumID;
import net.runelite.api.FriendsChatRank; import net.runelite.api.FriendsChatRank;
import net.runelite.api.GameState; import net.runelite.api.GameState;
import net.runelite.api.IndexedSprite; import net.runelite.api.IndexedSprite;
import net.runelite.api.clan.ClanTitle;
import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameStateChanged;
import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.EventBus;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
@@ -52,8 +53,10 @@ public class ChatIconManager
private final SpriteManager spriteManager; private final SpriteManager spriteManager;
private BufferedImage[] friendsChatRankImages; private BufferedImage[] friendsChatRankImages;
private BufferedImage[] clanRankImages;
private int friendsChatOffset; private int friendsChatOffset;
private int clanOffset;
@Inject @Inject
private ChatIconManager(Client client, SpriteManager spriteManager, EventBus eventBus) private ChatIconManager(Client client, SpriteManager spriteManager, EventBus eventBus)
@@ -74,11 +77,25 @@ public class ChatIconManager
return friendsChatRankImages[friendsChatRank.ordinal() - 1]; return friendsChatRankImages[friendsChatRank.ordinal() - 1];
} }
@Nullable
public BufferedImage getRankImage(final ClanTitle clanTitle)
{
int rank = clanTitle.getId();
int idx = clanRankToIdx(rank);
return clanRankImages[idx];
}
public int getIconNumber(final FriendsChatRank friendsChatRank) public int getIconNumber(final FriendsChatRank friendsChatRank)
{ {
return friendsChatOffset + friendsChatRank.ordinal() - 1; return friendsChatOffset + friendsChatRank.ordinal() - 1;
} }
public int getIconNumber(final ClanTitle clanTitle)
{
int rank = clanTitle.getId();
return clanOffset + clanRankToIdx(rank);
}
@Subscribe @Subscribe
public void onGameStateChanged(GameStateChanged gameStateChanged) public void onGameStateChanged(GameStateChanged gameStateChanged)
{ {
@@ -91,22 +108,25 @@ public class ChatIconManager
private void loadRankIcons() private void loadRankIcons()
{ {
final EnumComposition friendsChatIcons = client.getEnum(EnumID.FRIENDS_CHAT_RANK_ICONS); final EnumComposition friendsChatIcons = client.getEnum(EnumID.FRIENDS_CHAT_RANK_ICONS);
final EnumComposition clanIcons = client.getEnum(EnumID.CLAN_RANK_GRAPHIC);
{ {
IndexedSprite[] modIcons = client.getModIcons(); IndexedSprite[] modIcons = client.getModIcons();
friendsChatOffset = modIcons.length; friendsChatOffset = modIcons.length;
clanOffset = friendsChatOffset + friendsChatIcons.size();
IndexedSprite blank = ImageUtil.getImageIndexedSprite( IndexedSprite blank = ImageUtil.getImageIndexedSprite(
new BufferedImage(modIcons[0].getWidth(), modIcons[0].getHeight(), BufferedImage.TYPE_INT_ARGB), new BufferedImage(modIcons[0].getWidth(), modIcons[0].getHeight(), BufferedImage.TYPE_INT_ARGB),
client); client);
modIcons = Arrays.copyOf(modIcons, friendsChatOffset + friendsChatIcons.size()); modIcons = Arrays.copyOf(modIcons, friendsChatOffset + friendsChatIcons.size() + clanIcons.size());
Arrays.fill(modIcons, friendsChatOffset, modIcons.length, blank); Arrays.fill(modIcons, friendsChatOffset, modIcons.length, blank);
client.setModIcons(modIcons); client.setModIcons(modIcons);
} }
friendsChatRankImages = new BufferedImage[friendsChatIcons.size()]; friendsChatRankImages = new BufferedImage[friendsChatIcons.size()];
clanRankImages = new BufferedImage[clanIcons.size()];
final IndexedSprite[] modIcons = client.getModIcons(); final IndexedSprite[] modIcons = client.getModIcons();
@@ -120,6 +140,21 @@ public class ChatIconManager
modIcons[friendsChatOffset + fi] = ImageUtil.getImageIndexedSprite(friendsChatRankImages[fi], client); modIcons[friendsChatOffset + fi] = ImageUtil.getImageIndexedSprite(friendsChatRankImages[fi], client);
}); });
} }
for (int i = 0; i < clanIcons.size(); i++)
{
final int key = clanIcons.getKeys()[i];
final int idx = clanRankToIdx(key);
assert idx >= 0 && idx < clanIcons.size();
spriteManager.getSpriteAsync(clanIcons.getIntValue(key), 0, sprite ->
{
final BufferedImage img = ImageUtil.resizeCanvas(sprite, IMAGE_DIMENSION.width, IMAGE_DIMENSION.height);
clanRankImages[idx] = img;
modIcons[clanOffset + idx] = ImageUtil.getImageIndexedSprite(img, client);
});
}
} }
private static BufferedImage friendsChatImageFromSprite(final BufferedImage sprite) private static BufferedImage friendsChatImageFromSprite(final BufferedImage sprite)
@@ -127,4 +162,10 @@ public class ChatIconManager
final BufferedImage canvas = ImageUtil.resizeCanvas(sprite, IMAGE_DIMENSION.width, IMAGE_DIMENSION.height); final BufferedImage canvas = ImageUtil.resizeCanvas(sprite, IMAGE_DIMENSION.width, IMAGE_DIMENSION.height);
return ImageUtil.outlineImage(canvas, IMAGE_OUTLINE_COLOR); return ImageUtil.outlineImage(canvas, IMAGE_OUTLINE_COLOR);
} }
private static int clanRankToIdx(int key)
{
// keys are -5 to 264, with no 0
return key < 0 ? ~key : (key + 4);
}
} }