project: Mixins for HD
This commit is contained in:
@@ -29,6 +29,7 @@ import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashSet;
|
||||
@@ -2290,5 +2291,25 @@ public abstract class RSClientMixin implements RSClient
|
||||
|
||||
@Inject
|
||||
public static RSArchive[] archives = new RSArchive[21];
|
||||
|
||||
@Inject
|
||||
@FieldHook("rndHue")
|
||||
public static void rndHue(int idx)
|
||||
{
|
||||
int rndHue = client.getRndHue();
|
||||
|
||||
if (rndHue >= -8 && rndHue <= 8)
|
||||
{
|
||||
RSScene scene = client.getScene();
|
||||
|
||||
byte[][][] underlays = client.getTileUnderlays();
|
||||
byte[][][] overlays = client.getTileOverlays();
|
||||
byte[][][] tileShapes = client.getTileShapes();
|
||||
|
||||
scene.setUnderlayIds(Arrays.copyOf(underlays, underlays.length));
|
||||
scene.setOverlayIds(Arrays.copyOf(overlays, overlays.length));
|
||||
scene.setTileShapes(Arrays.copyOf(tileShapes, tileShapes.length));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@ import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSModel;
|
||||
import net.runelite.rs.api.RSModelData;
|
||||
import net.runelite.rs.api.RSVertexNormal;
|
||||
|
||||
@Mixin(RSModelData.class)
|
||||
public abstract class RSModelDataMixin implements RSModelData
|
||||
@@ -43,6 +44,15 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
@Inject
|
||||
private float[] faceTextureUVCoordinates;
|
||||
|
||||
@Inject
|
||||
private int[] vertexNormalsX;
|
||||
|
||||
@Inject
|
||||
private int[] vertexNormalsY;
|
||||
|
||||
@Inject
|
||||
private int[] vertexNormalsZ;
|
||||
|
||||
@Copy("toModel")
|
||||
@Replace("toModel")
|
||||
@SuppressWarnings("InfiniteRecursion")
|
||||
@@ -61,11 +71,50 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
computeTextureUVCoordinates();
|
||||
}
|
||||
|
||||
vertexNormals();
|
||||
|
||||
RSModel rsModel = (RSModel) model;
|
||||
rsModel.setVertexNormalsX(vertexNormalsX);
|
||||
rsModel.setVertexNormalsY(vertexNormalsY);
|
||||
rsModel.setVertexNormalsZ(vertexNormalsZ);
|
||||
rsModel.setFaceTextureUVCoordinates(faceTextureUVCoordinates);
|
||||
return model;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void vertexNormals()
|
||||
{
|
||||
RSVertexNormal[] vertexNormals = getVertexNormals();
|
||||
RSVertexNormal[] vertexVertices = getVertexVertices();
|
||||
|
||||
if (vertexNormals != null && vertexNormalsX == null)
|
||||
{
|
||||
int verticesCount = getVerticesCount();
|
||||
|
||||
vertexNormalsX = new int[verticesCount];
|
||||
vertexNormalsY = new int[verticesCount];
|
||||
vertexNormalsZ = new int[verticesCount];
|
||||
|
||||
for (int i = 0; i < verticesCount; ++i)
|
||||
{
|
||||
RSVertexNormal vertexNormal;
|
||||
|
||||
if (vertexVertices != null && (vertexNormal = vertexVertices[i]) != null)
|
||||
{
|
||||
vertexNormalsX[i] = vertexNormal.getX();
|
||||
vertexNormalsY[i] = vertexNormal.getY();
|
||||
vertexNormalsZ[i] = vertexNormal.getZ();
|
||||
}
|
||||
else if ((vertexNormal = vertexNormals[i]) != null)
|
||||
{
|
||||
vertexNormalsX[i] = vertexNormal.getX();
|
||||
vertexNormalsY[i] = vertexNormal.getY();
|
||||
vertexNormalsZ[i] = vertexNormal.getZ();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void computeTextureUVCoordinates()
|
||||
{
|
||||
@@ -171,6 +220,6 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
}
|
||||
}
|
||||
|
||||
this.faceTextureUVCoordinates = faceTextureUCoordinates;
|
||||
faceTextureUVCoordinates = faceTextureUCoordinates;
|
||||
}
|
||||
}
|
||||
@@ -63,13 +63,22 @@ public abstract class RSModelMixin implements RSModel
|
||||
@Inject
|
||||
private float[] rl$faceTextureUVCoordinates;
|
||||
|
||||
@Inject
|
||||
private int[] rl$vertexNormalsX;
|
||||
|
||||
@Inject
|
||||
private int[] rl$vertexNormalsY;
|
||||
|
||||
@Inject
|
||||
private int[] rl$vertexNormalsZ;
|
||||
|
||||
@MethodHook(value = "<init>", end = true)
|
||||
@Inject
|
||||
public void rl$init(RSModel[] models, int length)
|
||||
{
|
||||
if (this.getFaceTextures() != null)
|
||||
if (getFaceTextures() != null)
|
||||
{
|
||||
int count = this.getTrianglesCount();
|
||||
int count = getTrianglesCount();
|
||||
float[] uv = new float[count * 6];
|
||||
int idx = 0;
|
||||
|
||||
@@ -91,6 +100,8 @@ public abstract class RSModelMixin implements RSModel
|
||||
|
||||
setFaceTextureUVCoordinates(uv);
|
||||
}
|
||||
|
||||
vertexNormals();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -154,6 +165,9 @@ public abstract class RSModelMixin implements RSModel
|
||||
if (model != null && model != this)
|
||||
{
|
||||
RSModel rsModel = (RSModel) model;
|
||||
rsModel.setVertexNormalsX(rl$vertexNormalsX);
|
||||
rsModel.setVertexNormalsY(rl$vertexNormalsY);
|
||||
rsModel.setVertexNormalsZ(rl$vertexNormalsZ);
|
||||
rsModel.setFaceTextureUVCoordinates(rl$faceTextureUVCoordinates);
|
||||
}
|
||||
return model;
|
||||
@@ -176,6 +190,9 @@ public abstract class RSModelMixin implements RSModel
|
||||
{
|
||||
// Animated models are usually a shared Model instance that is global
|
||||
RSModel rsModel = (RSModel) sharedModel;
|
||||
rsModel.setVertexNormalsX(rl$vertexNormalsX);
|
||||
rsModel.setVertexNormalsY(rl$vertexNormalsY);
|
||||
rsModel.setVertexNormalsZ(rl$vertexNormalsZ);
|
||||
rsModel.setFaceTextureUVCoordinates(rl$faceTextureUVCoordinates);
|
||||
}
|
||||
|
||||
@@ -217,7 +234,7 @@ public abstract class RSModelMixin implements RSModel
|
||||
for (int i = 0; i < frame.getTransformCount(); i++)
|
||||
{
|
||||
int type = frame.getTransformTypes()[i];
|
||||
this.animate(skin.getTypes()[type], skin.getList()[type], frame.getTranslatorX()[i],
|
||||
animate(skin.getTypes()[type], skin.getList()[type], frame.getTranslatorX()[i],
|
||||
frame.getTranslatorY()[i], frame.getTranslatorZ()[i]);
|
||||
}
|
||||
}
|
||||
@@ -316,10 +333,10 @@ public abstract class RSModelMixin implements RSModel
|
||||
@Inject
|
||||
public Shape getConvexHull(int localX, int localY, int orientation, int tileHeight)
|
||||
{
|
||||
int[] x2d = new int[this.getVerticesCount()];
|
||||
int[] y2d = new int[this.getVerticesCount()];
|
||||
int[] x2d = new int[getVerticesCount()];
|
||||
int[] y2d = new int[getVerticesCount()];
|
||||
|
||||
Perspective.modelToCanvas(client, this.getVerticesCount(), localX, localY, tileHeight, orientation, this.getVerticesX(), this.getVerticesZ(), this.getVerticesY(), x2d, y2d);
|
||||
Perspective.modelToCanvas(client, getVerticesCount(), localX, localY, tileHeight, orientation, getVerticesX(), getVerticesZ(), getVerticesY(), x2d, y2d);
|
||||
|
||||
return Jarvis.convexHull(x2d, y2d);
|
||||
}
|
||||
@@ -335,7 +352,7 @@ public abstract class RSModelMixin implements RSModel
|
||||
@Override
|
||||
public void setSceneId(int sceneId)
|
||||
{
|
||||
this.rl$sceneId = sceneId;
|
||||
rl$sceneId = sceneId;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@@ -377,6 +394,114 @@ public abstract class RSModelMixin implements RSModel
|
||||
@Override
|
||||
public void setFaceTextureUVCoordinates(float[] faceTextureUVCoordinates)
|
||||
{
|
||||
this.rl$faceTextureUVCoordinates = faceTextureUVCoordinates;
|
||||
rl$faceTextureUVCoordinates = faceTextureUVCoordinates;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void vertexNormals()
|
||||
{
|
||||
if (rl$vertexNormalsX == null)
|
||||
{
|
||||
int verticesCount = getVerticesCount();
|
||||
|
||||
rl$vertexNormalsX = new int[verticesCount];
|
||||
rl$vertexNormalsY = new int[verticesCount];
|
||||
rl$vertexNormalsZ = new int[verticesCount];
|
||||
|
||||
int[] trianglesX = getTrianglesX();
|
||||
int[] trianglesY = getTrianglesY();
|
||||
int[] trianglesZ = getTrianglesZ();
|
||||
int[] verticesX = getVerticesX();
|
||||
int[] verticesY = getVerticesY();
|
||||
int[] verticesZ = getVerticesZ();
|
||||
|
||||
for (int i = 0; i < getTrianglesCount(); ++i)
|
||||
{
|
||||
int var9 = trianglesX[i];
|
||||
int var10 = trianglesY[i];
|
||||
int var11 = trianglesZ[i];
|
||||
|
||||
int var12 = verticesX[var10] - verticesX[var9];
|
||||
int var13 = verticesY[var10] - verticesY[var9];
|
||||
int var14 = verticesZ[var10] - verticesZ[var9];
|
||||
int var15 = verticesX[var11] - verticesX[var9];
|
||||
int var16 = verticesY[var11] - verticesY[var9];
|
||||
int var17 = verticesZ[var11] - verticesZ[var9];
|
||||
|
||||
int var18 = var13 * var17 - var16 * var14;
|
||||
int var19 = var14 * var15 - var17 * var12;
|
||||
|
||||
int var20;
|
||||
for (var20 = var12 * var16 - var15 * var13; var18 > 8192 || var19 > 8192 || var20 > 8192 || var18 < -8192 || var19 < -8192 || var20 < -8192; var20 >>= 1)
|
||||
{
|
||||
var18 >>= 1;
|
||||
var19 >>= 1;
|
||||
}
|
||||
|
||||
int var21 = (int) Math.sqrt(var18 * var18 + var19 * var19 + var20 * var20);
|
||||
if (var21 <= 0)
|
||||
{
|
||||
var21 = 1;
|
||||
}
|
||||
|
||||
var18 = var18 * 256 / var21;
|
||||
var19 = var19 * 256 / var21;
|
||||
var20 = var20 * 256 / var21;
|
||||
|
||||
rl$vertexNormalsX[var9] += var18;
|
||||
rl$vertexNormalsY[var9] += var19;
|
||||
rl$vertexNormalsZ[var9] += var20;
|
||||
|
||||
rl$vertexNormalsX[var10] += var18;
|
||||
rl$vertexNormalsY[var10] += var19;
|
||||
rl$vertexNormalsZ[var10] += var20;
|
||||
|
||||
rl$vertexNormalsX[var11] += var18;
|
||||
rl$vertexNormalsY[var11] += var19;
|
||||
rl$vertexNormalsZ[var11] += var20;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int[] getVertexNormalsX()
|
||||
{
|
||||
return rl$vertexNormalsX;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setVertexNormalsX(int[] vertexNormalsX)
|
||||
{
|
||||
rl$vertexNormalsX = vertexNormalsX;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int[] getVertexNormalsY()
|
||||
{
|
||||
return rl$vertexNormalsY;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setVertexNormalsY(int[] vertexNormalsY)
|
||||
{
|
||||
rl$vertexNormalsY = vertexNormalsY;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int[] getVertexNormalsZ()
|
||||
{
|
||||
return rl$vertexNormalsZ;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setVertexNormalsZ(int[] vertexNormalsZ)
|
||||
{
|
||||
rl$vertexNormalsZ = vertexNormalsZ;
|
||||
}
|
||||
}
|
||||
@@ -99,6 +99,15 @@ public abstract class RSSceneMixin implements RSScene
|
||||
@Inject
|
||||
private static int rl$hoverY = -1;
|
||||
|
||||
@Inject
|
||||
private static byte[][][] rl$underlayIds;
|
||||
|
||||
@Inject
|
||||
private static byte[][][] rl$overlayIds;
|
||||
|
||||
@Inject
|
||||
private static byte[][][] rl$tileShapes;
|
||||
|
||||
@Replace("draw")
|
||||
void drawScene(int cameraX, int cameraY, int cameraZ, int cameraPitch, int cameraYaw, int plane)
|
||||
{
|
||||
@@ -1120,7 +1129,7 @@ public abstract class RSSceneMixin implements RSScene
|
||||
Tile tile = tiles[plane][x][y];
|
||||
if (tile != null && rl$tiles[plane][x][y] == 0 && blocking(plane, x, y))
|
||||
{
|
||||
this.iterateDeque(tile, var2);
|
||||
iterateDeque(tile, var2);
|
||||
++var2;
|
||||
}
|
||||
}
|
||||
@@ -1189,4 +1198,46 @@ public abstract class RSSceneMixin implements RSScene
|
||||
rl$hoverY = y;
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public byte[][][] getUnderlayIds()
|
||||
{
|
||||
return rl$underlayIds;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setUnderlayIds(byte[][][] underlayIds)
|
||||
{
|
||||
rl$underlayIds = underlayIds;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public byte[][][] getOverlayIds()
|
||||
{
|
||||
return rl$overlayIds;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setOverlayIds(byte[][][] overlayIds)
|
||||
{
|
||||
rl$overlayIds = overlayIds;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public byte[][][] getTileShapes()
|
||||
{
|
||||
return rl$tileShapes;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setTileShapes(byte[][][] tileShapes)
|
||||
{
|
||||
rl$tileShapes = tileShapes;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user