mixins: Fix low detail
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -649,6 +649,9 @@ public interface RSClient extends RSGameEngine, Client
|
||||
@Override
|
||||
boolean[] getPressedKeys();
|
||||
|
||||
@Import("isLowDetail")
|
||||
boolean isLowMemory();
|
||||
|
||||
@Import("isLowDetail")
|
||||
void setLowMemory(boolean lowMemory);
|
||||
|
||||
@@ -1201,6 +1204,9 @@ public interface RSClient extends RSGameEngine, Client
|
||||
@Import("VarpDefinition_get")
|
||||
RSVarpDefinition getVarpDefinition(int id);
|
||||
|
||||
@Construct
|
||||
RSFloorOverlayDefinition newFloorOverlayDefinition();
|
||||
|
||||
@Construct
|
||||
RSTileItem newTileItem();
|
||||
|
||||
@@ -1500,6 +1506,9 @@ public interface RSClient extends RSGameEngine, Client
|
||||
@Import("FloorUnderlayDefinition_cached")
|
||||
RSEvictingDualNodeHashTable getFloorUnderlayDefinitionCache();
|
||||
|
||||
@Import("FloorOverlayDefinition_archive")
|
||||
RSAbstractArchive getFloorOverlayDefinitionArchive();
|
||||
|
||||
@Import("FloorOverlayDefinition_cached")
|
||||
RSEvictingDualNodeHashTable getFloorOverlayDefinitionCache();
|
||||
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
package net.runelite.rs.api;
|
||||
|
||||
public interface RSFloorOverlayDefinition {}
|
||||
import net.runelite.mapping.Import;
|
||||
|
||||
public interface RSFloorOverlayDefinition
|
||||
{
|
||||
@Import("primaryRgb")
|
||||
int getPrimaryRgb();
|
||||
|
||||
@Import("texture")
|
||||
int getTexture();
|
||||
|
||||
@Import("decode")
|
||||
void decode(RSBuffer var1, int var2);
|
||||
|
||||
@Import("postDecode")
|
||||
void postDecode();
|
||||
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ public final class Canvas extends java.awt.Canvas {
|
||||
var19 = var4[var18];
|
||||
}
|
||||
|
||||
WorldMapIcon_1.method4556(var12, var16, var17, var6, var15, var14, var3, var19); // L: 313
|
||||
WorldMapIcon_1.addObjects(var12, var16, var17, var6, var15, var14, var3, var19); // L: 313
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ public final class Tiles {
|
||||
var25 = var9[var24];
|
||||
}
|
||||
|
||||
WorldMapIcon_1.method4556(var1, var22, var23, var11, var20 + var7 & 3, var19, var8, var25); // L: 347
|
||||
WorldMapIcon_1.addObjects(var1, var22, var23, var11, var20 + var7 & 3, var19, var8, var25); // L: 347
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +127,8 @@ public class WorldMapIcon_1 extends AbstractWorldMapIcon {
|
||||
descriptor = "(IIIIIILgs;Lgf;I)V",
|
||||
garbageValue = "-1640512620"
|
||||
)
|
||||
static final void method4556(int var0, int var1, int var2, int var3, int var4, int var5, Scene var6, CollisionMap var7) {
|
||||
@Export("addObjects")
|
||||
static final void addObjects(int var0, int var1, int var2, int var3, int var4, int var5, Scene var6, CollisionMap var7) {
|
||||
if (!Client.isLowDetail || (Tiles.Tiles_renderFlags[0][var1][var2] & 2) != 0 || (Tiles.Tiles_renderFlags[var0][var1][var2] & 16) == 0) { // L: 355 356 357
|
||||
if (var0 < Tiles.Tiles_minPlane) { // L: 360
|
||||
Tiles.Tiles_minPlane = var0;
|
||||
|
||||
Reference in New Issue
Block a user