devtools: add movement flags
This commit is contained in:
@@ -35,6 +35,7 @@ import java.awt.Rectangle;
|
||||
import java.awt.Shape;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import net.runelite.api.Client;
|
||||
@@ -114,7 +115,7 @@ class DevToolsOverlay extends Overlay
|
||||
renderNpcs(graphics);
|
||||
}
|
||||
|
||||
if (plugin.getGroundItems().isActive() || plugin.getGroundObjects().isActive() || plugin.getGameObjects().isActive() || plugin.getWalls().isActive() || plugin.getDecorations().isActive() || plugin.getTileLocation().isActive())
|
||||
if (plugin.getGroundItems().isActive() || plugin.getGroundObjects().isActive() || plugin.getGameObjects().isActive() || plugin.getWalls().isActive() || plugin.getDecorations().isActive() || plugin.getTileLocation().isActive() || plugin.getMovementFlags().isActive())
|
||||
{
|
||||
renderTileObjects(graphics);
|
||||
}
|
||||
@@ -235,6 +236,11 @@ class DevToolsOverlay extends Overlay
|
||||
{
|
||||
renderTileTooltip(graphics, tile);
|
||||
}
|
||||
|
||||
if (plugin.getMovementFlags().isActive())
|
||||
{
|
||||
renderMovementInfo(graphics, tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -249,6 +255,35 @@ class DevToolsOverlay extends Overlay
|
||||
}
|
||||
}
|
||||
|
||||
private void renderMovementInfo(Graphics2D graphics, Tile tile)
|
||||
{
|
||||
Polygon poly = Perspective.getCanvasTilePoly(client, tile.getLocalLocation());
|
||||
|
||||
if (poly == null || !poly.contains(client.getMouseCanvasPosition().getX(), client.getMouseCanvasPosition().getY()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (client.getCollisionMaps() != null)
|
||||
{
|
||||
int[][] flags = client.getCollisionMaps()[client.getPlane()].getFlags();
|
||||
int data = flags[tile.getSceneLocation().getX()][tile.getSceneLocation().getY()];
|
||||
|
||||
Set<MovementFlag> movementFlags = MovementFlag.getSetFlags(data);
|
||||
|
||||
if (movementFlags.isEmpty())
|
||||
{
|
||||
toolTipManager.add(new Tooltip("No movement flags"));
|
||||
}
|
||||
else
|
||||
{
|
||||
movementFlags.forEach(flag -> toolTipManager.add(new Tooltip(flag.toString())));
|
||||
}
|
||||
|
||||
OverlayUtil.renderPolygon(graphics, poly, GREEN);
|
||||
}
|
||||
}
|
||||
|
||||
private void renderGroundItems(Graphics2D graphics, Tile tile, Player player)
|
||||
{
|
||||
ItemLayer itemLayer = tile.getItemLayer();
|
||||
|
||||
@@ -112,6 +112,7 @@ class DevToolsPanel extends PluginPanel
|
||||
|
||||
container.add(plugin.getLineOfSight());
|
||||
container.add(plugin.getValidMovement());
|
||||
container.add(plugin.getMovementFlags());
|
||||
container.add(plugin.getInteracting());
|
||||
container.add(plugin.getExamine());
|
||||
|
||||
|
||||
@@ -129,6 +129,7 @@ public class DevToolsPlugin extends Plugin
|
||||
private DevToolsButton chunkBorders;
|
||||
private DevToolsButton mapSquares;
|
||||
private DevToolsButton validMovement;
|
||||
private DevToolsButton movementFlags;
|
||||
private DevToolsButton lineOfSight;
|
||||
private DevToolsButton cameraPosition;
|
||||
private DevToolsButton worldMapLocation;
|
||||
@@ -175,6 +176,7 @@ public class DevToolsPlugin extends Plugin
|
||||
|
||||
lineOfSight = new DevToolsButton("Line Of Sight");
|
||||
validMovement = new DevToolsButton("Valid Movement");
|
||||
movementFlags = new DevToolsButton("Movement Flags");
|
||||
interacting = new DevToolsButton("Interacting");
|
||||
examine = new DevToolsButton("Examine");
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (c) 2020, Pratted <https://github.com/Pratted>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package net.runelite.client.plugins.devtools;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.CollisionDataFlag;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* An enum that binds a name to each movement flag.
|
||||
*
|
||||
* @see CollisionDataFlag
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
enum MovementFlag
|
||||
{
|
||||
BLOCK_MOVEMENT_NORTH_WEST(CollisionDataFlag.BLOCK_MOVEMENT_NORTH_WEST),
|
||||
BLOCK_MOVEMENT_NORTH(CollisionDataFlag.BLOCK_MOVEMENT_NORTH),
|
||||
BLOCK_MOVEMENT_NORTH_EAST(CollisionDataFlag.BLOCK_MOVEMENT_NORTH_EAST),
|
||||
BLOCK_MOVEMENT_EAST(CollisionDataFlag.BLOCK_MOVEMENT_EAST),
|
||||
BLOCK_MOVEMENT_SOUTH_EAST(CollisionDataFlag.BLOCK_MOVEMENT_SOUTH_EAST),
|
||||
BLOCK_MOVEMENT_SOUTH(CollisionDataFlag.BLOCK_MOVEMENT_SOUTH),
|
||||
BLOCK_MOVEMENT_SOUTH_WEST(CollisionDataFlag.BLOCK_MOVEMENT_SOUTH_WEST),
|
||||
BLOCK_MOVEMENT_WEST(CollisionDataFlag.BLOCK_MOVEMENT_WEST),
|
||||
|
||||
BLOCK_MOVEMENT_OBJECT(CollisionDataFlag.BLOCK_MOVEMENT_OBJECT),
|
||||
BLOCK_MOVEMENT_FLOOR_DECORATION(CollisionDataFlag.BLOCK_MOVEMENT_FLOOR_DECORATION),
|
||||
BLOCK_MOVEMENT_FLOOR(CollisionDataFlag.BLOCK_MOVEMENT_FLOOR),
|
||||
BLOCK_MOVEMENT_FULL(CollisionDataFlag.BLOCK_MOVEMENT_FULL);
|
||||
|
||||
@Getter
|
||||
private int flag;
|
||||
|
||||
/**
|
||||
* @param collisionData The tile collision flags.
|
||||
* @return The set of {@link MovementFlag}s that have been set.
|
||||
*/
|
||||
public static Set<MovementFlag> getSetFlags(int collisionData)
|
||||
{
|
||||
return Arrays.stream(values())
|
||||
.filter(movementFlag -> (movementFlag.flag & collisionData) != 0)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user