Merge pull request #3153 from Owain94/low-detail

This commit is contained in:
Owain van Brakel
2022-04-06 23:30:03 +02:00
committed by GitHub
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);
}
}
}

View File

@@ -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();

View File

@@ -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();
}

View File

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

View File

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

View File

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