Merge pull request #9614 from abextm/clanmanager-empty-cache

ClanManager: handle startup with an empty cache
This commit is contained in:
Adam
2019-08-10 18:51:24 -04:00
committed by GitHub

View File

@@ -34,6 +34,7 @@ import java.util.Arrays;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import net.runelite.api.ClanMember; import net.runelite.api.ClanMember;
@@ -94,7 +95,7 @@ public class ClanManager
} }
}); });
private int modIconsLength; private int offset;
@Inject @Inject
private ClanManager(Client client, SpriteManager spriteManager) private ClanManager(Client client, SpriteManager spriteManager)
@@ -108,6 +109,7 @@ public class ClanManager
return clanRanksCache.getUnchecked(playerName); return clanRanksCache.getUnchecked(playerName);
} }
@Nullable
public BufferedImage getClanImage(final ClanMemberRank clanMemberRank) public BufferedImage getClanImage(final ClanMemberRank clanMemberRank)
{ {
if (clanMemberRank == ClanMemberRank.UNRANKED) if (clanMemberRank == ClanMemberRank.UNRANKED)
@@ -120,14 +122,13 @@ public class ClanManager
public int getIconNumber(final ClanMemberRank clanMemberRank) public int getIconNumber(final ClanMemberRank clanMemberRank)
{ {
return modIconsLength - CLANCHAT_IMAGES.length + clanMemberRank.ordinal() - 1; return offset + clanMemberRank.ordinal() - 1;
} }
@Subscribe @Subscribe
public void onGameStateChanged(GameStateChanged gameStateChanged) public void onGameStateChanged(GameStateChanged gameStateChanged)
{ {
if (gameStateChanged.getGameState() == GameState.LOGGED_IN if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN && offset == 0)
&& modIconsLength == 0)
{ {
loadClanChatIcons(); loadClanChatIcons();
} }
@@ -141,19 +142,31 @@ public class ClanManager
private void loadClanChatIcons() private void loadClanChatIcons()
{ {
final IndexedSprite[] modIcons = client.getModIcons();
final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + CLANCHAT_IMAGES.length);
int curPosition = newModIcons.length - CLANCHAT_IMAGES.length;
for (int i = 0; i < CLANCHAT_IMAGES.length; i++, curPosition++)
{ {
final int resource = CLANCHAT_IMAGES[i]; IndexedSprite[] modIcons = client.getModIcons();
clanChatImages[i] = clanChatImageFromSprite(spriteManager.getSprite(resource, 0)); offset = modIcons.length;
newModIcons[curPosition] = ImageUtil.getImageIndexedSprite(clanChatImages[i], client);
IndexedSprite blank = ImageUtil.getImageIndexedSprite(
new BufferedImage(modIcons[0].getWidth(), modIcons[0].getHeight(), BufferedImage.TYPE_INT_ARGB),
client);
modIcons = Arrays.copyOf(modIcons, offset + CLANCHAT_IMAGES.length);
Arrays.fill(modIcons, offset, modIcons.length, blank);
client.setModIcons(modIcons);
} }
client.setModIcons(newModIcons); for (int i = 0; i < CLANCHAT_IMAGES.length; i++)
modIconsLength = newModIcons.length; {
final int fi = i;
spriteManager.getSpriteAsync(CLANCHAT_IMAGES[i], 0, sprite ->
{
IndexedSprite[] modIcons = client.getModIcons();
clanChatImages[fi] = clanChatImageFromSprite(sprite);
modIcons[offset + fi] = ImageUtil.getImageIndexedSprite(clanChatImages[fi], client);
});
}
} }
private static String sanitize(String lookup) private static String sanitize(String lookup)