chat icon manager: add clan chat icons
This commit is contained in:
@@ -37,6 +37,7 @@ import net.runelite.api.EnumID;
|
||||
import net.runelite.api.FriendsChatRank;
|
||||
import net.runelite.api.GameState;
|
||||
import net.runelite.api.IndexedSprite;
|
||||
import net.runelite.api.clan.ClanTitle;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
import net.runelite.client.eventbus.EventBus;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
@@ -52,8 +53,10 @@ public class ChatIconManager
|
||||
private final SpriteManager spriteManager;
|
||||
|
||||
private BufferedImage[] friendsChatRankImages;
|
||||
private BufferedImage[] clanRankImages;
|
||||
|
||||
private int friendsChatOffset;
|
||||
private int clanOffset;
|
||||
|
||||
@Inject
|
||||
private ChatIconManager(Client client, SpriteManager spriteManager, EventBus eventBus)
|
||||
@@ -74,11 +77,25 @@ public class ChatIconManager
|
||||
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)
|
||||
{
|
||||
return friendsChatOffset + friendsChatRank.ordinal() - 1;
|
||||
}
|
||||
|
||||
public int getIconNumber(final ClanTitle clanTitle)
|
||||
{
|
||||
int rank = clanTitle.getId();
|
||||
return clanOffset + clanRankToIdx(rank);
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
public void onGameStateChanged(GameStateChanged gameStateChanged)
|
||||
{
|
||||
@@ -91,22 +108,25 @@ public class ChatIconManager
|
||||
private void loadRankIcons()
|
||||
{
|
||||
final EnumComposition friendsChatIcons = client.getEnum(EnumID.FRIENDS_CHAT_RANK_ICONS);
|
||||
final EnumComposition clanIcons = client.getEnum(EnumID.CLAN_RANK_GRAPHIC);
|
||||
|
||||
{
|
||||
IndexedSprite[] modIcons = client.getModIcons();
|
||||
friendsChatOffset = modIcons.length;
|
||||
clanOffset = friendsChatOffset + friendsChatIcons.size();
|
||||
|
||||
IndexedSprite blank = ImageUtil.getImageIndexedSprite(
|
||||
new BufferedImage(modIcons[0].getWidth(), modIcons[0].getHeight(), BufferedImage.TYPE_INT_ARGB),
|
||||
client);
|
||||
|
||||
modIcons = Arrays.copyOf(modIcons, friendsChatOffset + friendsChatIcons.size());
|
||||
modIcons = Arrays.copyOf(modIcons, friendsChatOffset + friendsChatIcons.size() + clanIcons.size());
|
||||
Arrays.fill(modIcons, friendsChatOffset, modIcons.length, blank);
|
||||
|
||||
client.setModIcons(modIcons);
|
||||
}
|
||||
|
||||
friendsChatRankImages = new BufferedImage[friendsChatIcons.size()];
|
||||
clanRankImages = new BufferedImage[clanIcons.size()];
|
||||
|
||||
final IndexedSprite[] modIcons = client.getModIcons();
|
||||
|
||||
@@ -120,6 +140,21 @@ public class ChatIconManager
|
||||
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)
|
||||
@@ -127,4 +162,10 @@ public class ChatIconManager
|
||||
final BufferedImage canvas = ImageUtil.resizeCanvas(sprite, IMAGE_DIMENSION.width, IMAGE_DIMENSION.height);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user