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;
}
}

View File

@@ -26,7 +26,6 @@ package net.runelite.rs.api;
import java.util.Map;
import net.runelite.api.Client;
import net.runelite.api.IndexDataBase;
import net.runelite.api.SpritePixels;
import net.runelite.api.World;
import net.runelite.api.widgets.Widget;
@@ -373,9 +372,53 @@ public interface RSClient extends RSGameEngine, Client
@Import("createSprite")
RSSpritePixels createItemSprite(int itemId, int quantity, int thickness, int borderColor, int stackable, boolean noted);
@Import("getSpritesAsSpritePixels")
@Override
RSSpritePixels[] getSprites(IndexDataBase source, int archiveId, int fileId);
@Import("decodeSprite")
void decodeSprite(byte[] data);
@Import("indexedSpriteCount")
int getIndexedSpriteCount();
@Import("indexedSpriteWidth")
int getIndexedSpriteWidth();
@Import("indexedSpriteHeight")
int getIndexedSpriteHeight();
@Import("indexedSpriteOffsetXs")
int[] getIndexedSpriteOffsetXs();
@Import("indexedSpriteOffsetXs")
void setIndexedSpriteOffsetXs(int[] indexedSpriteOffsetXs);
@Import("indexedSpriteOffsetYs")
int[] getIndexedSpriteOffsetYs();
@Import("indexedSpriteOffsetYs")
void setIndexedSpriteOffsetYs(int[] indexedSpriteOffsetYs);
@Import("indexSpriteWidths")
int[] getIndexSpriteWidths();
@Import("indexSpriteWidths")
void setIndexSpriteWidths(int[] indexSpriteWidths);
@Import("indexedSpriteHeights")
int[] getIndexedSpriteHeights();
@Import("indexedSpriteHeights")
void setIndexedSpriteHeights(int[] indexedSpriteHeights);
@Import("spritePixels")
byte[][] getSpritePixels();
@Import("spritePixels")
void setSpritePixels(byte[][] spritePixels);
@Import("indexedSpritePalette")
int[] getIndexedSpritePalette();
@Import("indexedSpritePalette")
void setIndexSpritePalette(int[] indexSpritePalette);
@Import("indexSprites")
@Override

View File

@@ -47,4 +47,16 @@ public interface RSSpritePixels extends SpritePixels
@Import("setRaster")
void setRaster();
@Import("maxWidth")
void setMaxWidth(int maxWidth);
@Import("maxHeight")
void setMaxHeight(int maxHeight);
@Import("offsetX")
void setOffsetX(int offsetX);
@Import("offsetY")
void setOffsetY(int offsetY);
}