mixins: Fix low detail

This commit is contained in:
Owain van Brakel
2022-03-30 15:03:06 +02:00
parent 5078be94b6
commit 7f56a4f050
6 changed files with 94 additions and 4 deletions

View File

@@ -143,12 +143,15 @@ import static net.runelite.mixins.CameraMixin.STANDARD_PITCH_MAX;
import static net.runelite.mixins.CameraMixin.STANDARD_PITCH_MIN;
import net.runelite.rs.api.RSAbstractArchive;
import net.runelite.rs.api.RSArchive;
import net.runelite.rs.api.RSBuffer;
import net.runelite.rs.api.RSChatChannel;
import net.runelite.rs.api.RSClanChannel;
import net.runelite.rs.api.RSClient;
import net.runelite.rs.api.RSCollisionMap;
import net.runelite.rs.api.RSDualNode;
import net.runelite.rs.api.RSEnumComposition;
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
import net.runelite.rs.api.RSFloorOverlayDefinition;
import net.runelite.rs.api.RSFriendSystem;
import net.runelite.rs.api.RSIndexedSprite;
import net.runelite.rs.api.RSInterfaceParent;
@@ -2880,5 +2883,66 @@ public abstract class RSClientMixin implements RSClient
return modelData.newModelData(modelData, true, true, true, true);
}
@Inject
public static RSFloorOverlayDefinition loadFloorOverlay(int var0)
{
RSFloorOverlayDefinition var1 = (RSFloorOverlayDefinition) client.getFloorOverlayDefinitionCache().get(var0);
if (var1 == null)
{
byte[] var2 = client.getFloorOverlayDefinitionArchive().loadData(4, var0);
var1 = client.newFloorOverlayDefinition();
if (var2 != null)
{
RSBuffer var3 = client.newBuffer(var2);
var1.decode(var3, var0);
}
var1.postDecode();
client.getFloorOverlayDefinitionCache().put((RSDualNode) var1, (long) var0);
}
return var1;
}
@Copy("addObjects")
@Replace("addObjects")
@SuppressWarnings("InfiniteRecursion")
public static void copy$addObjects(int var0, int var1, int var2, int var3, int var4, int var5, RSScene var6, RSCollisionMap var7)
{
boolean resetLowMemory = false;
byte tileSetting = client.getTileSettings()[var0][var1][var2];
if (client.isLowMemory())
{
byte[] var10000 = client.getTileSettings()[var0][var1];
var10000[var2] &= -17;
if (var5 == 22)
{
int TileOverlay = client.getTileOverlays()[var0][var1][var2] & 255;
if (TileOverlay > 0)
{
RSFloorOverlayDefinition floorOverlayDefinition = loadFloorOverlay(TileOverlay - 1);
if (floorOverlayDefinition.getTexture() < 0 && floorOverlayDefinition.getPrimaryRgb() == 16711935)
{
client.setLowMemory(false);
resetLowMemory = true;
}
}
}
}
copy$addObjects(var0, var1, var2, var3, var4, var5, var6, var7);
client.getTileSettings()[var0][var1][var2] = tileSetting;
if (resetLowMemory)
{
client.setLowMemory(true);
}
}
}