Added wireframe rendering to DevTools for local player model
This commit is contained in:
@@ -155,6 +155,11 @@ public abstract class Actor extends Renderable
|
|||||||
return actor.getY();
|
return actor.getY();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getOrientation()
|
||||||
|
{
|
||||||
|
return actor.getOrientation();
|
||||||
|
}
|
||||||
|
|
||||||
public int getAnimation()
|
public int getAnimation()
|
||||||
{
|
{
|
||||||
return actor.getAnimation();
|
return actor.getAnimation();
|
||||||
|
|||||||
@@ -24,10 +24,15 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.api;
|
package net.runelite.api;
|
||||||
|
|
||||||
|
import java.awt.Polygon;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import net.runelite.rs.api.Model;
|
||||||
|
|
||||||
public class Player extends Actor
|
public class Player extends Actor
|
||||||
{
|
{
|
||||||
private Client client;
|
private final Client client;
|
||||||
private net.runelite.rs.api.Player player;
|
private final net.runelite.rs.api.Player player;
|
||||||
|
|
||||||
public Player(Client client, net.runelite.rs.api.Player player)
|
public Player(Client client, net.runelite.rs.api.Player player)
|
||||||
{
|
{
|
||||||
@@ -53,4 +58,72 @@ public class Player extends Actor
|
|||||||
{
|
{
|
||||||
return new PlayerComposition(player.getComposition());
|
return new PlayerComposition(player.getComposition());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Model getModel()
|
||||||
|
{
|
||||||
|
return player.getModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Polygon[] getPolygons()
|
||||||
|
{
|
||||||
|
List<Polygon> polys = new ArrayList<>();
|
||||||
|
Model model = getModel();
|
||||||
|
int localX = player.getX();
|
||||||
|
int localY = player.getY();
|
||||||
|
|
||||||
|
// models are orientated north (1024) and there are 2048 angles total
|
||||||
|
int orientation = (player.getOrientation() + 1024) % 2048;
|
||||||
|
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] verticesX = model.getVerticesX().clone();
|
||||||
|
int[] verticesY = model.getVerticesY();
|
||||||
|
int[] verticesZ = model.getVerticesZ().clone();
|
||||||
|
|
||||||
|
int[] trianglesX = model.getTrianglesX();
|
||||||
|
int[] trianglesY = model.getTrianglesY();
|
||||||
|
int[] trianglesZ = model.getTrianglesZ();
|
||||||
|
|
||||||
|
if (orientation != 0)
|
||||||
|
{
|
||||||
|
setOrientation(model, orientation, verticesX, verticesZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < trianglesX.length; i++)
|
||||||
|
{
|
||||||
|
Point x = Perspective.worldToCanvas(client, localX - verticesX[trianglesX[i]], localY - verticesZ[trianglesX[i]], -verticesY[trianglesX[i]]);
|
||||||
|
Point y = Perspective.worldToCanvas(client, localX - verticesX[trianglesY[i]], localY - verticesZ[trianglesY[i]], -verticesY[trianglesY[i]]);
|
||||||
|
Point z = Perspective.worldToCanvas(client, localX - verticesX[trianglesZ[i]], localY - verticesZ[trianglesZ[i]], -verticesY[trianglesZ[i]]);
|
||||||
|
|
||||||
|
int xx[] =
|
||||||
|
{
|
||||||
|
x.getX(), y.getX(), z.getX()
|
||||||
|
};
|
||||||
|
int yy[] =
|
||||||
|
{
|
||||||
|
x.getY(), y.getY(), z.getY()
|
||||||
|
};
|
||||||
|
polys.add(new Polygon(xx, yy, 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
return polys.toArray(new Polygon[polys.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setOrientation(Model model, int orientation, int[] verticesX, int[] verticesZ)
|
||||||
|
{
|
||||||
|
int sin = Perspective.SINE[orientation];
|
||||||
|
int cos = Perspective.COSINE[orientation];
|
||||||
|
|
||||||
|
int[] originalX = model.getVerticesX();
|
||||||
|
int[] originalZ = model.getVerticesZ();
|
||||||
|
|
||||||
|
for (int i = 0; i < originalX.length; ++i)
|
||||||
|
{
|
||||||
|
verticesX[i] = originalX[i] * cos + originalZ[i] * sin >> 16;
|
||||||
|
verticesZ[i] = originalZ[i] * cos - originalX[i] * sin >> 16;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.devtools;
|
package net.runelite.client.plugins.devtools;
|
||||||
|
|
||||||
import java.awt.BasicStroke;
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
@@ -35,7 +34,6 @@ import java.awt.Polygon;
|
|||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
|
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import net.runelite.api.Actor;
|
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.DecorativeObject;
|
import net.runelite.api.DecorativeObject;
|
||||||
import net.runelite.api.GameObject;
|
import net.runelite.api.GameObject;
|
||||||
@@ -46,10 +44,8 @@ import net.runelite.api.ItemLayer;
|
|||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
import net.runelite.api.Node;
|
import net.runelite.api.Node;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
import net.runelite.api.Point;
|
|
||||||
import net.runelite.api.Region;
|
import net.runelite.api.Region;
|
||||||
import net.runelite.api.Tile;
|
import net.runelite.api.Tile;
|
||||||
import net.runelite.api.TileObject;
|
|
||||||
import net.runelite.api.WallObject;
|
import net.runelite.api.WallObject;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
@@ -147,6 +143,7 @@ public class DevToolsOverlay extends Overlay
|
|||||||
|
|
||||||
String text = local.getName() + " (A: " + local.getAnimation() + ") (G: " + local.getGraphic() + ")";
|
String text = local.getName() + " (A: " + local.getAnimation() + ") (G: " + local.getGraphic() + ")";
|
||||||
OverlayUtil.renderActorOverlay(graphics, local, text, CYAN);
|
OverlayUtil.renderActorOverlay(graphics, local, text, CYAN);
|
||||||
|
renderPlayerWireframe(graphics, local, CYAN);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderNpcs(Graphics2D graphics)
|
private void renderNpcs(Graphics2D graphics)
|
||||||
@@ -368,8 +365,8 @@ public class DevToolsOverlay extends Overlay
|
|||||||
|
|
||||||
Widget childComponent = widgetChild.getChild(itemIndex);
|
Widget childComponent = widgetChild.getChild(itemIndex);
|
||||||
if (childComponent != null && !childComponent.isHidden()
|
if (childComponent != null && !childComponent.isHidden()
|
||||||
&& childComponent.getItemId() != ITEM_EMPTY
|
&& childComponent.getItemId() != ITEM_EMPTY
|
||||||
&& childComponent.getItemId() != ITEM_FILLED)
|
&& childComponent.getItemId() != ITEM_FILLED)
|
||||||
{
|
{
|
||||||
Rectangle componentBounds = childComponent.getBounds();
|
Rectangle componentBounds = childComponent.getBounds();
|
||||||
|
|
||||||
@@ -413,4 +410,21 @@ public class DevToolsOverlay extends Overlay
|
|||||||
graphics.drawString(text, textX, textY);
|
graphics.drawString(text, textX, textY);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
private void renderPlayerWireframe(Graphics2D graphics, Player player, Color color)
|
||||||
|
{
|
||||||
|
Polygon[] polys = player.getPolygons();
|
||||||
|
|
||||||
|
if (polys == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
graphics.setColor(color);
|
||||||
|
|
||||||
|
for (Polygon p : polys)
|
||||||
|
{
|
||||||
|
graphics.drawPolygon(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -52,4 +52,7 @@ public interface Actor extends Renderable
|
|||||||
|
|
||||||
@Import("combatInfoList")
|
@Import("combatInfoList")
|
||||||
CombatInfoList getCombatInfoList();
|
CombatInfoList getCombatInfoList();
|
||||||
|
|
||||||
|
@Import("orientation")
|
||||||
|
int getOrientation();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,25 @@
|
|||||||
|
|
||||||
package net.runelite.rs.api;
|
package net.runelite.rs.api;
|
||||||
|
|
||||||
|
import net.runelite.mapping.Import;
|
||||||
|
|
||||||
public interface Model
|
public interface Model
|
||||||
{
|
{
|
||||||
|
@Import("verticesX")
|
||||||
|
int[] getVerticesX();
|
||||||
|
|
||||||
|
@Import("verticesY")
|
||||||
|
int[] getVerticesY();
|
||||||
|
|
||||||
|
@Import("verticesZ")
|
||||||
|
int[] getVerticesZ();
|
||||||
|
|
||||||
|
@Import("indices1")
|
||||||
|
int[] getTrianglesX();
|
||||||
|
|
||||||
|
@Import("indices2")
|
||||||
|
int[] getTrianglesY();
|
||||||
|
|
||||||
|
@Import("indices3")
|
||||||
|
int[] getTrianglesZ();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public interface Player extends Actor
|
|||||||
@Import("name")
|
@Import("name")
|
||||||
String getName();
|
String getName();
|
||||||
|
|
||||||
@Import("model")
|
@Import("getModel")
|
||||||
Model getModel();
|
Model getModel();
|
||||||
|
|
||||||
@Import("combatLevel")
|
@Import("combatLevel")
|
||||||
|
|||||||
Reference in New Issue
Block a user