rt4-client/client/src/main/java/rt4/AttachLocRequest.java
2022-06-27 12:26:41 -04:00

161 lines
5.6 KiB
Java

package rt4;
import org.openrs2.deob.annotation.OriginalArg;
import org.openrs2.deob.annotation.OriginalClass;
import org.openrs2.deob.annotation.OriginalMember;
import org.openrs2.deob.annotation.Pc;
@OriginalClass("client!cn")
public final class AttachLocRequest extends Node {
@OriginalMember(owner = "client!ka", name = "q", descriptor = "Lclient!ih;")
public static final LinkedList queue = new LinkedList();
@OriginalMember(owner = "client!cn", name = "p", descriptor = "I")
public int setLoops;
@OriginalMember(owner = "client!cn", name = "r", descriptor = "I")
public int x0Delta;
@OriginalMember(owner = "client!cn", name = "t", descriptor = "I")
public int locId;
@OriginalMember(owner = "client!cn", name = "u", descriptor = "I")
public int x;
@OriginalMember(owner = "client!cn", name = "v", descriptor = "I")
public int x1Delta;
@OriginalMember(owner = "client!cn", name = "w", descriptor = "I")
public int entityId;
@OriginalMember(owner = "client!cn", name = "D", descriptor = "I")
public int z0Delta;
@OriginalMember(owner = "client!cn", name = "E", descriptor = "I")
public int shape;
@OriginalMember(owner = "client!cn", name = "H", descriptor = "I")
public int z1Delta;
@OriginalMember(owner = "client!cn", name = "M", descriptor = "I")
public int z;
@OriginalMember(owner = "client!cn", name = "N", descriptor = "I")
public int resetLoops;
@OriginalMember(owner = "client!cn", name = "O", descriptor = "I")
public int angle;
@OriginalMember(owner = "client!ph", name = "a", descriptor = "(B)V")
public static void loop() {
while (true) {
@Pc(17) AttachLocRequest request = (AttachLocRequest) queue.removeHead();
if (request == null) {
return;
}
@Pc(40) PathingEntity entity;
@Pc(29) int playerId;
if (request.entityId < 0) {
playerId = -request.entityId - 1;
if (playerId == PlayerList.selfId) {
entity = PlayerList.self;
} else {
entity = PlayerList.players[playerId];
}
} else {
playerId = request.entityId - 1;
entity = NpcList.npcs[playerId];
}
if (entity != null) {
@Pc(63) LocType type = LocTypeList.get(request.locId);
if (Player.level < 3) {
}
@Pc(86) int width;
@Pc(83) int length;
if (request.angle == 1 || request.angle == 3) {
length = type.width;
width = type.length;
} else {
width = type.width;
length = type.length;
}
@Pc(103) int centerX1 = (width + 1 >> 1) + request.x;
@Pc(110) int centerX0 = (width >> 1) + request.x;
@Pc(117) int centerZ0 = (length >> 1) + request.z;
@Pc(126) int centerZ1 = (length + 1 >> 1) + request.z;
@Pc(130) int[][] tileHeights = SceneGraph.tileHeights[Player.level];
@Pc(157) int y = tileHeights[centerX1][centerZ1] + tileHeights[centerX0][centerZ1] + tileHeights[centerX0][centerZ0] + tileHeights[centerX1][centerZ0] >> 2;
@Pc(159) Entity attachment = null;
@Pc(164) int layer = Loc.LAYERS[request.shape];
if (layer == 0) {
@Pc(176) Wall wall = SceneGraph.getWall(Player.level, request.x, request.z);
if (wall != null) {
attachment = wall.primary;
}
} else if (layer == 1) {
@Pc(231) WallDecor wallDecor = SceneGraph.getWallDecor(Player.level, request.x, request.z);
if (wallDecor != null) {
attachment = wallDecor.primary;
}
} else if (layer == 2) {
@Pc(198) Scenery scenery = SceneGraph.getScenery(Player.level, request.x, request.z);
if (scenery != null) {
attachment = scenery.entity;
}
} else if (layer == 3) {
@Pc(216) GroundDecor groundDecor = SceneGraph.getGroundDecor(Player.level, request.x, request.z);
if (groundDecor != null) {
attachment = groundDecor.entity;
}
}
if (attachment != null) {
ChangeLocRequest.push(Player.level, request.z, 0, request.x, request.resetLoops + 1, -1, layer, 0, request.setLoops + 1);
entity.attachmentResetAt = request.resetLoops + client.loop;
entity.attachmentZFine = length * 64 + request.z * 128;
entity.attachmentXFine = width * 64 + request.x * 128;
entity.attachment = attachment;
@Pc(292) int x0Delta = request.x0Delta;
entity.attachmentY = y;
entity.attachmentSetAt = client.loop + request.setLoops;
@Pc(304) int x1Delta = request.x1Delta;
@Pc(307) int z0Delta = request.z0Delta;
@Pc(310) int z1Delta = request.z1Delta;
@Pc(316) int temp;
if (x0Delta > x1Delta) {
temp = x0Delta;
x0Delta = x1Delta;
x1Delta = temp;
}
entity.attachmentX1 = request.x + x1Delta;
if (z0Delta > z1Delta) {
temp = z0Delta;
z0Delta = z1Delta;
z1Delta = temp;
}
entity.attachmentZ0 = request.z + z0Delta;
entity.attachmentZ1 = z1Delta + request.z;
entity.atachmentX0 = request.x + x0Delta;
}
}
}
}
@OriginalMember(owner = "client!nh", name = "a", descriptor = "(IIIIIIIIIIIII)V")
public static void push(@OriginalArg(0) int x1Delta, @OriginalArg(1) int setLoops, @OriginalArg(2) int entityId, @OriginalArg(3) int resetLoops, @OriginalArg(4) int z, @OriginalArg(5) int z1Delta, @OriginalArg(6) int angle, @OriginalArg(7) int x0Delta, @OriginalArg(8) int x, @OriginalArg(9) int shape, @OriginalArg(11) int z0Delta, @OriginalArg(12) int locId) {
@Pc(7) AttachLocRequest req = new AttachLocRequest();
req.angle = angle;
req.resetLoops = resetLoops;
req.setLoops = setLoops;
req.z1Delta = z1Delta;
req.entityId = entityId;
req.x = x;
req.z0Delta = z0Delta;
req.z = z;
req.locId = locId;
req.x0Delta = x0Delta;
req.x1Delta = x1Delta;
req.shape = shape;
queue.addTail(req);
}
}