project: Mixins
This commit is contained in:
@@ -69,6 +69,7 @@ import static net.runelite.api.MenuAction.UNKNOWN;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.MessageNode;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.ModelData;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.NPCComposition;
|
||||
import net.runelite.api.NameableContainer;
|
||||
@@ -145,6 +146,7 @@ import net.runelite.rs.api.RSArchive;
|
||||
import net.runelite.rs.api.RSChatChannel;
|
||||
import net.runelite.rs.api.RSClanChannel;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSDualNode;
|
||||
import net.runelite.rs.api.RSEnumComposition;
|
||||
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
|
||||
import net.runelite.rs.api.RSFriendSystem;
|
||||
@@ -292,6 +294,9 @@ public abstract class RSClientMixin implements RSClient
|
||||
@Inject
|
||||
public long delayNanoTime;
|
||||
|
||||
@Inject
|
||||
public RSEvictingDualNodeHashTable tmpModelDataCache = newEvictingDualNodeHashTable(16);
|
||||
|
||||
@Inject
|
||||
private List<String> outdatedScripts = new ArrayList<>();
|
||||
|
||||
@@ -1054,11 +1059,11 @@ public abstract class RSClientMixin implements RSClient
|
||||
int targetIndex = 0;
|
||||
if (target instanceof NPC)
|
||||
{
|
||||
targetIndex = ((NPC)target).getIndex() + 1;
|
||||
targetIndex = ((NPC) target).getIndex() + 1;
|
||||
}
|
||||
else if (target instanceof Player)
|
||||
{
|
||||
targetIndex = -(((Player)target).getPlayerId() + 1);
|
||||
targetIndex = -(((Player) target).getPlayerId() + 1);
|
||||
}
|
||||
|
||||
RSProjectile projectile = client.newProjectile(id, plane, startX, startY, startZ, startCycle, endCycle, slope, startHeight, targetIndex, endHeight);
|
||||
@@ -2611,7 +2616,7 @@ public abstract class RSClientMixin implements RSClient
|
||||
{
|
||||
for (int i = 0; i < colorToFind.length; ++i)
|
||||
{
|
||||
modeldata.recolor(colorToFind[i], colorToReplace[i]);
|
||||
modeldata.rs$recolor(colorToFind[i], colorToReplace[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2791,5 +2796,45 @@ public abstract class RSClientMixin implements RSClient
|
||||
check("Widget_cachedSpriteMasks", client.getSpriteMasksCache());
|
||||
check("WorldMapElement_cachedSprites", client.getSpritesCache());
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData mergeModels(ModelData[] var0, int var1)
|
||||
{
|
||||
return newModelData(var0, var1);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData mergeModels(ModelData... var0)
|
||||
{
|
||||
return newModelData(var0, var0.length);
|
||||
}
|
||||
|
||||
@Inject
|
||||
public IndexDataBase getIndex(int id)
|
||||
{
|
||||
return RSClientMixin.archives[id];
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData loadModelData(int var0)
|
||||
{
|
||||
RSModelData modelData = (RSModelData) this.tmpModelDataCache.get(var0);
|
||||
|
||||
if (modelData == null)
|
||||
{
|
||||
modelData = getModelData(RSClientMixin.archives[7], var0, 0);
|
||||
if (modelData == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
this.tmpModelDataCache.put((RSDualNode) modelData, (long) var0);
|
||||
}
|
||||
|
||||
return modelData.newModelData(modelData, true, true, true, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,12 +24,18 @@
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import net.runelite.api.Model;
|
||||
import net.runelite.api.ModelData;
|
||||
import net.runelite.api.mixins.Copy;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Replace;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.api.model.Triangle;
|
||||
import net.runelite.api.model.Vertex;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSModel;
|
||||
import net.runelite.rs.api.RSModelData;
|
||||
@@ -124,13 +130,13 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
return;
|
||||
}
|
||||
|
||||
final int[] vertexPositionsX = getVertexX();
|
||||
final int[] vertexPositionsY = getVertexY();
|
||||
final int[] vertexPositionsZ = getVertexZ();
|
||||
final int[] vertexPositionsX = getVerticesX();
|
||||
final int[] vertexPositionsY = getVerticesY();
|
||||
final int[] vertexPositionsZ = getVerticesZ();
|
||||
|
||||
final int[] trianglePointsX = getTrianglePointsX();
|
||||
final int[] trianglePointsY = getTrianglePointsY();
|
||||
final int[] trianglePointsZ = getTrianglePointsZ();
|
||||
final int[] trianglePointsX = getFaceIndices1();
|
||||
final int[] trianglePointsY = getFaceIndices2();
|
||||
final int[] trianglePointsZ = getFaceIndices3();
|
||||
|
||||
final short[] texTriangleX = getTexTriangleX();
|
||||
final short[] texTriangleY = getTexTriangleY();
|
||||
@@ -138,7 +144,7 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
|
||||
final byte[] textureCoords = getTextureCoords();
|
||||
|
||||
int faceCount = getTriangleFaceCount();
|
||||
int faceCount = getFaceCount();
|
||||
float[] faceTextureUCoordinates = new float[faceCount * 6];
|
||||
|
||||
for (int i = 0; i < faceCount; i++)
|
||||
@@ -222,4 +228,215 @@ public abstract class RSModelDataMixin implements RSModelData
|
||||
|
||||
faceTextureUVCoordinates = faceTextureUCoordinates;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Inject
|
||||
public List<Vertex> getVertices()
|
||||
{
|
||||
int[] verticesX = getVerticesX();
|
||||
int[] verticesY = getVerticesY();
|
||||
int[] verticesZ = getVerticesZ();
|
||||
|
||||
List<Vertex> vertices = new ArrayList<Vertex>(getVerticesCount());
|
||||
|
||||
for (int i = 0; i < getVerticesCount(); ++i)
|
||||
{
|
||||
Vertex v = new Vertex(
|
||||
verticesX[i],
|
||||
verticesY[i],
|
||||
verticesZ[i]
|
||||
);
|
||||
vertices.add(v);
|
||||
}
|
||||
|
||||
return vertices;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Inject
|
||||
public List<Triangle> getTriangles()
|
||||
{
|
||||
int[] trianglesX = getFaceIndices1();
|
||||
int[] trianglesY = getFaceIndices2();
|
||||
int[] trianglesZ = getFaceIndices3();
|
||||
|
||||
List<Vertex> vertices = getVertices();
|
||||
List<Triangle> triangles = new ArrayList<>(getFaceCount());
|
||||
|
||||
for (int i = 0; i < getFaceCount(); ++i)
|
||||
{
|
||||
int triangleX = trianglesX[i];
|
||||
int triangleY = trianglesY[i];
|
||||
int triangleZ = trianglesZ[i];
|
||||
|
||||
Triangle triangle = new Triangle(
|
||||
vertices.get(triangleX),
|
||||
vertices.get(triangleY),
|
||||
vertices.get(triangleZ)
|
||||
);
|
||||
triangles.add(triangle);
|
||||
}
|
||||
|
||||
return triangles;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel light()
|
||||
{
|
||||
return this.toModel(ModelData.DEFAULT_AMBIENT, ModelData.DEFAULT_CONTRAST, ModelData.DEFAULT_X, ModelData.DEFAULT_Y, ModelData.DEFAULT_Z);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel light(int var1, int var2, int var3, int var4, int var5)
|
||||
{
|
||||
return this.toModel(var1, var2, var3, var4, var5);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData recolor(short colorToReplace, short colorToReplaceWith)
|
||||
{
|
||||
this.rs$recolor(colorToReplace, colorToReplaceWith);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData retexture(short find, short replace)
|
||||
{
|
||||
this.rs$retexture(find, replace);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneVertices()
|
||||
{
|
||||
int[] newVericesX = Arrays.copyOf(this.getVerticesX(), this.getVerticesX().length);
|
||||
int[] newVericesY = Arrays.copyOf(this.getVerticesY(), this.getVerticesX().length);
|
||||
int[] newVericesZ = Arrays.copyOf(this.getVerticesZ(), this.getVerticesX().length);
|
||||
|
||||
this.setVerticesX(newVericesX);
|
||||
this.setVerticesY(newVericesY);
|
||||
this.setVerticesZ(newVericesZ);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneColors()
|
||||
{
|
||||
short[] newFaceColor = Arrays.copyOf(this.getFaceColors(), this.getFaceColors().length);
|
||||
this.setFaceColors(newFaceColor);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneTextures()
|
||||
{
|
||||
short[] newFaceColor = Arrays.copyOf(this.getFaceTextures(), this.getFaceTextures().length);
|
||||
this.setFaceTextures(newFaceColor);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData cloneTransparencies()
|
||||
{
|
||||
byte[] newFaceColor = Arrays.copyOf(this.getFaceTransparencies(), this.getFaceTransparencies().length);
|
||||
this.setFaceTransparencies(newFaceColor);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData rotateY90Ccw()
|
||||
{
|
||||
for (int var1 = 0; var1 < this.getVerticesCount(); ++var1)
|
||||
{
|
||||
int var2 = this.getVerticesX()[var1];
|
||||
this.getVerticesX()[var1] = this.getVerticesZ()[var1];
|
||||
this.getVerticesZ()[var1] = -var2;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData rotateY180Ccw()
|
||||
{
|
||||
for (int var1 = 0; var1 < this.getVerticesCount(); ++var1)
|
||||
{
|
||||
this.getVerticesX()[var1] = -this.getVerticesX()[var1];
|
||||
this.getVerticesZ()[var1] = -this.getVerticesZ()[var1];
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData rotateY270Ccw()
|
||||
{
|
||||
for (int var1 = 0; var1 < this.getVerticesCount(); ++var1)
|
||||
{
|
||||
int var2 = this.getVerticesZ()[var1];
|
||||
this.getVerticesZ()[var1] = this.getVerticesX()[var1];
|
||||
this.getVerticesX()[var1] = -var2;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData scale(int var1, int var2, int var3)
|
||||
{
|
||||
for (int i = 0; i < this.getVerticesCount(); ++i)
|
||||
{
|
||||
this.getVerticesX()[i] = this.getVerticesX()[i] * var1 / 128;
|
||||
this.getVerticesY()[i] = this.getVerticesY()[i] * var2 / 128;
|
||||
this.getVerticesZ()[i] = this.getVerticesZ()[i] * var3 / 128;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModelData translate(int var1, int var2, int var3)
|
||||
{
|
||||
for (int i = 0; i < this.getVerticesCount(); ++i)
|
||||
{
|
||||
int[] vertexX = this.getVerticesX();
|
||||
int[] vertexY = this.getVerticesY();
|
||||
int[] vertexZ = this.getVerticesZ();
|
||||
|
||||
vertexX[i] += var1;
|
||||
vertexY[i] += var2;
|
||||
vertexZ[i] += var3;
|
||||
}
|
||||
|
||||
this.invalidate();
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -196,6 +196,51 @@ public abstract class RSModelMixin implements RSModel
|
||||
rsModel.setFaceTextureUVCoordinates(rl$faceTextureUVCoordinates);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel rotateY90Ccw()
|
||||
{
|
||||
this.rs$rotateY90Ccw();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel rotateY180Ccw()
|
||||
{
|
||||
this.rs$rotateY180Ccw();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel rotateY270Ccw()
|
||||
{
|
||||
this.rs$rotateY270Ccw();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel scale(int var1, int var2, int var3)
|
||||
{
|
||||
this.rs$scale(var1, var2, var3);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public RSModel translate(int var1, int var2, int var3)
|
||||
{
|
||||
this.rs$translate(var1, var2, var3);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void interpolateFrames(RSFrames frames, int frameId, RSFrames nextFrames, int nextFrameId, int interval, int intervalCount)
|
||||
{
|
||||
|
||||
@@ -125,30 +125,30 @@ public abstract class RSSequenceDefinitionMixin implements RSSequenceDefinition
|
||||
rotation &= 3;
|
||||
if (rotation == 1)
|
||||
{
|
||||
animatedModel.rotateY270Ccw();
|
||||
animatedModel.rs$rotateY270Ccw();
|
||||
}
|
||||
else if (rotation == 2)
|
||||
{
|
||||
animatedModel.rotateY180Ccw();
|
||||
animatedModel.rs$rotateY180Ccw();
|
||||
}
|
||||
else if (rotation == 3)
|
||||
{
|
||||
animatedModel.rotateY90Ccw();
|
||||
animatedModel.rs$rotateY90Ccw();
|
||||
}
|
||||
animatedModel.interpolateFrames(frames, frameIdx, nextFrames, nextFrameIdx, interval,
|
||||
getFrameLengths()[frame]);
|
||||
// reapply rotation after animating
|
||||
if (rotation == 1)
|
||||
{
|
||||
animatedModel.rotateY90Ccw();
|
||||
animatedModel.rs$rotateY90Ccw();
|
||||
}
|
||||
else if (rotation == 2)
|
||||
{
|
||||
animatedModel.rotateY180Ccw();
|
||||
animatedModel.rs$rotateY180Ccw();
|
||||
}
|
||||
else if (rotation == 3)
|
||||
{
|
||||
animatedModel.rotateY270Ccw();
|
||||
animatedModel.rs$rotateY270Ccw();
|
||||
}
|
||||
return animatedModel;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user