Add implementation of getSprites as it has been inlined

This commit is contained in:
Adam
2018-11-22 07:25:57 -05:00
parent 3f2877d6c1
commit 14d6cd9670
3 changed files with 119 additions and 4 deletions

View File

@@ -38,6 +38,7 @@ import net.runelite.api.GraphicsObject;
import net.runelite.api.HashTable;
import net.runelite.api.HintArrowType;
import net.runelite.api.Ignore;
import net.runelite.api.IndexDataBase;
import net.runelite.api.IndexedSprite;
import net.runelite.api.InventoryID;
import net.runelite.api.MenuAction;
@@ -105,6 +106,7 @@ import net.runelite.rs.api.RSFriendContainer;
import net.runelite.rs.api.RSFriendManager;
import net.runelite.rs.api.RSHashTable;
import net.runelite.rs.api.RSIgnoreContainer;
import net.runelite.rs.api.RSIndexDataBase;
import net.runelite.rs.api.RSIndexedSprite;
import net.runelite.rs.api.RSItem;
import net.runelite.rs.api.RSItemContainer;
@@ -112,6 +114,7 @@ import net.runelite.rs.api.RSNPC;
import net.runelite.rs.api.RSName;
import net.runelite.rs.api.RSNameable;
import net.runelite.rs.api.RSPlayer;
import net.runelite.rs.api.RSSpritePixels;
import net.runelite.rs.api.RSWidget;
import org.slf4j.Logger;
@@ -1321,4 +1324,61 @@ public abstract class RSClientMixin implements RSClient
skills[++count - 1 & 31] = skill.ordinal();
client.setChangedSkillsCount(count);
}
@Inject
@Override
public RSSpritePixels[] getSprites(IndexDataBase source, int archiveId, int fileId)
{
RSIndexDataBase rsSource = (RSIndexDataBase) source;
byte[] configData = rsSource.getConfigData(archiveId, fileId);
if (configData == null)
{
return null;
}
decodeSprite(configData);
int indexedSpriteCount = getIndexedSpriteCount();
int maxWidth = getIndexedSpriteWidth();
int maxHeight = getIndexedSpriteHeight();
int[] offsetX = getIndexedSpriteOffsetXs();
int[] offsetY = getIndexedSpriteOffsetYs();
int[] widths = getIndexSpriteWidths();
int[] heights = getIndexedSpriteHeights();
byte[][] spritePixelsArray = getSpritePixels();
int[] indexedSpritePalette = getIndexedSpritePalette();
RSSpritePixels[] array = new RSSpritePixels[indexedSpriteCount];
for (int i = 0; i < indexedSpriteCount; ++i)
{
int width = widths[i];
int height = heights[i];
byte[] pixelArray = spritePixelsArray[i];
int[] pixels = new int[width * height];
RSSpritePixels spritePixels = createSpritePixels(pixels, width, height);
spritePixels.setMaxHeight(maxHeight);
spritePixels.setMaxWidth(maxWidth);
spritePixels.setOffsetX(offsetX[i]);
spritePixels.setOffsetY(offsetY[i]);
for (int j = 0; j < width * height; ++j)
{
pixels[j] = indexedSpritePalette[pixelArray[j] & 0xff];
}
array[i] = spritePixels;
}
setIndexedSpriteOffsetXs(null);
setIndexedSpriteOffsetYs(null);
setIndexSpriteWidths(null);
setIndexedSpriteHeights(null);
setIndexSpritePalette(null);
setSpritePixels(null);
return array;
}
}