use of org.powerbot.bot.rt6.client.Floor in project powerbot by powerbot.
the class Game method tileHeight.
/**
* Determines the tile height at the provided point in the game region.
*
* @param rX the relative x
* @param rY the relative y
* @param plane the plane
* @return the height at the given point
*/
public int tileHeight(final int rX, final int rY, int plane) {
final Client c = ctx.client();
if (c == null) {
return 0;
}
if (plane == -1) {
plane = c.getFloor();
}
final int x = rX >> 9, y = rY >> 9;
final byte[][][] configs = c.getWorld().getFloorSettings().getBytes();
if (x < 0 || x > 103 || y < 0 || y > 103) {
return 0;
}
if (plane < 3 && (configs[1][x][y] & 2) != 0) {
++plane;
}
final Floor[] landscape = c.getWorld().getLandscape().getFloors();
if (plane < 0 || plane >= landscape.length) {
return 0;
}
try {
final int[][] heights = landscape[plane].getHeights();
final int aX = rX & 0x1ff;
final int aY = rY & 0x1ff;
final int start_h = heights[x][y] * (512 - aX) + heights[x + 1][y] * aX >> 9;
final int end_h = heights[x][1 + y] * (512 - aX) + heights[x + 1][y + 1] * aX >> 9;
return start_h * (512 - aY) + end_h * aY >> 9;
} catch (final Exception ignored) {
}
return 0;
}
use of org.powerbot.bot.rt6.client.Floor in project powerbot by powerbot.
the class Objects method get.
protected List<GameObject> get(final Locatable l, int radius) {
radius = Math.min(radius, 110);
final List<GameObject> items = new ArrayList<GameObject>();
final Client client = ctx.client();
if (client == null) {
return items;
}
final Tile[][][] grounds = client.getWorld().getLandscape().getTiles();
final int floor = ctx.game.floor();
if (floor < 0 || floor >= grounds.length) {
return items;
}
final Set<GameObject> set = new HashSet<GameObject>();
final Tile[][] rows = grounds[floor];
int start_x = 0, end_x = Integer.MAX_VALUE, start_y = 0, end_y = Integer.MAX_VALUE;
if (radius >= 0) {
final org.powerbot.script.Tile mo = ctx.game.mapOffset(), lp = l.tile();
if (mo != org.powerbot.script.Tile.NIL && lp != org.powerbot.script.Tile.NIL) {
final org.powerbot.script.Tile t = lp.derive(-mo.x(), -mo.y());
start_x = t.x() - radius;
end_x = t.x() + radius;
start_y = t.y() - radius;
end_y = t.y() + radius;
}
}
for (int x = Math.max(0, start_x); x <= Math.min(end_x, rows.length - 1); x++) {
final Tile[] col = rows[x];
for (int y = Math.max(0, start_y); y <= Math.min(end_y, col.length - 1); y++) {
final Tile tile = col[y];
if (tile.isNull()) {
continue;
}
for (RenderableNode node = tile.getInteractives(); !node.isNull(); node = node.getNext()) {
final RenderableEntity r = node.getEntity();
if (r.isNull()) {
continue;
}
if (r.isTypeOf(org.powerbot.bot.rt6.client.GameObject.class)) {
final org.powerbot.bot.rt6.client.GameObject o = new org.powerbot.bot.rt6.client.GameObject(r.reflector, r);
if (o.getId() != -1) {
set.add(new GameObject(ctx, new BasicObject(o, floor), GameObject.Type.INTERACTIVE));
}
} else if (r.isTypeOf(DynamicGameObject.class)) {
final DynamicGameObject o = new DynamicGameObject(r.reflector, r);
if (o.getBridge().getId() != -1) {
set.add(new GameObject(ctx, new BasicObject(o, floor), GameObject.Type.INTERACTIVE));
}
}
}
final Object[] objs = { tile.getBoundary1(), tile.getBoundary2(), tile.getFloorDecoration(), tile.getWallDecoration1(), tile.getWallDecoration2() };
for (int i = 0; i < objs.length; i++) {
if (objs[i] == null) {
continue;
}
Class<?> type = null;
for (final Class<?> e : o_types[i]) {
@SuppressWarnings("unchecked") final Class<? extends ReflectProxy> c = (Class<? extends ReflectProxy>) e;
if (c != null && tile.reflector.isTypeOf(objs[i], c)) {
type = c;
break;
}
}
if (type == null) {
continue;
}
try {
items.add(new GameObject(ctx, new BasicObject((RenderableEntity) type.getConstructor(Reflector.class, Object.class).newInstance(tile.reflector, objs[i]), floor), types[i]));
} catch (final InstantiationException ignored) {
} catch (final IllegalAccessException ignored) {
} catch (final InvocationTargetException ignored) {
} catch (final NoSuchMethodException ignored) {
}
}
}
}
items.addAll(set);
set.clear();
return items;
}
use of org.powerbot.bot.rt6.client.Floor in project powerbot by powerbot.
the class HintArrow method tile.
@Override
public Tile tile() {
final Client client = ctx.client();
if (client == null || arrow.obj.get() == null) {
return Tile.NIL;
}
final int type = type();
final int target = targetId();
if (type == -1 || type == 0) {
return Tile.NIL;
}
if (type == 1) {
org.powerbot.script.rt6.Npc npc = null;
final Node node = HashTable.lookup(client.getNpcTable(), target, Node.class);
if (!node.isNull()) {
final Reflector r = client.reflector;
if (node.isTypeOf(NpcNode.class)) {
npc = new org.powerbot.script.rt6.Npc(ctx, new NpcNode(r, node).getNpc());
} else if (node.isTypeOf(Npc.class)) {
npc = new org.powerbot.script.rt6.Npc(ctx, new Npc(r, node));
}
}
return npc != null ? npc.tile() : Tile.NIL;
} else if (type == 2) {
return ctx.game.mapOffset().derive(arrow.getX() >> 9, arrow.getY() >> 9, floor());
}
final Player[] players = client.getPlayers();
if (type != 10 || target < 0 || target >= players.length) {
return Tile.NIL;
}
final Player localPlayer = players[target];
if (localPlayer != null) {
return new org.powerbot.script.rt6.Player(ctx, localPlayer).tile();
}
return Tile.NIL;
}
Aggregations