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.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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user