Track projectile target and spawn cycle. Add to api with rest of mapings.
This commit is contained in:
@@ -154,6 +154,8 @@ public interface Client
|
||||
|
||||
IndexedSprite[] getMapScene();
|
||||
|
||||
int getGameCycle();
|
||||
|
||||
SpritePixels[] getMapIcons();
|
||||
|
||||
IndexedSprite[] getModIcons();
|
||||
@@ -169,4 +171,7 @@ public interface Client
|
||||
boolean isClanMember(String name);
|
||||
|
||||
Point getSceneDestinationLocation();
|
||||
|
||||
List<Projectile> getProjectiles();
|
||||
|
||||
}
|
||||
|
||||
@@ -24,9 +24,55 @@
|
||||
*/
|
||||
package net.runelite.api;
|
||||
|
||||
public interface Projectile
|
||||
import java.time.Duration;
|
||||
|
||||
public interface Projectile extends Renderable
|
||||
{
|
||||
int getId();
|
||||
|
||||
Actor getInteracting();
|
||||
|
||||
Point getTarget();
|
||||
|
||||
int getTargetZ();
|
||||
|
||||
int getX1();
|
||||
|
||||
int getY1();
|
||||
|
||||
int getFloor();
|
||||
|
||||
int getHeight();
|
||||
|
||||
int getEndHeight();
|
||||
|
||||
int getStartMovementCycle();
|
||||
|
||||
int getSpawnCycle();
|
||||
|
||||
int getCycleLength();
|
||||
|
||||
Duration getLength();
|
||||
|
||||
int getEndCycle();
|
||||
|
||||
int getRemainingCycles();
|
||||
|
||||
int getSlope();
|
||||
|
||||
int getStartHeight();
|
||||
|
||||
double getX();
|
||||
|
||||
double getY();
|
||||
|
||||
double getZ();
|
||||
|
||||
double getScalar();
|
||||
|
||||
double getVelocityX();
|
||||
|
||||
double getVelocityY();
|
||||
|
||||
double getVelocityZ();
|
||||
}
|
||||
|
||||
@@ -32,17 +32,13 @@ import net.runelite.api.IndexedSprite;
|
||||
import net.runelite.api.MenuAction;
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.Node;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.api.Prayer;
|
||||
import net.runelite.api.Projectile;
|
||||
import net.runelite.api.Skill;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.mixins.FieldHook;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import net.runelite.api.events.ClanMembersChanged;
|
||||
import net.runelite.api.events.ExperienceChanged;
|
||||
import net.runelite.api.events.GameStateChanged;
|
||||
@@ -50,8 +46,15 @@ import net.runelite.api.events.MapRegionChanged;
|
||||
import net.runelite.api.events.PlayerMenuOptionsChanged;
|
||||
import net.runelite.api.events.ResizeableChanged;
|
||||
import net.runelite.api.events.VarbitChanged;
|
||||
import net.runelite.api.mixins.FieldHook;
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
import static net.runelite.client.callback.Hooks.eventBus;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSDeque;
|
||||
import net.runelite.rs.api.RSIndexedSprite;
|
||||
import net.runelite.rs.api.RSWidget;
|
||||
|
||||
@@ -331,6 +334,33 @@ public abstract class RSClientMixin implements RSClient
|
||||
setMenuOptionCount(count);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public List<Projectile> getProjectiles()
|
||||
{
|
||||
List<Projectile> projectiles = new ArrayList<Projectile>();
|
||||
RSDeque projectileDeque = this.getProjectilesDeque();
|
||||
Node head = projectileDeque.getHead();
|
||||
Node current = head;
|
||||
|
||||
while (current != null)
|
||||
{
|
||||
if (current instanceof Projectile)
|
||||
{
|
||||
projectiles.add((Projectile) current);
|
||||
}
|
||||
|
||||
current = current.getNext();
|
||||
|
||||
if (current == head)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return projectiles;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public void setModIcons(IndexedSprite[] modIcons)
|
||||
|
||||
@@ -24,9 +24,13 @@
|
||||
*/
|
||||
package net.runelite.mixins;
|
||||
|
||||
import java.time.Duration;
|
||||
import net.runelite.api.Actor;
|
||||
import net.runelite.api.Point;
|
||||
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.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSNPC;
|
||||
@@ -39,6 +43,74 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
@Shadow("clientInstance")
|
||||
private static RSClient client;
|
||||
|
||||
@Inject
|
||||
private int targetX;
|
||||
|
||||
@Inject
|
||||
private int targetY;
|
||||
|
||||
@Inject
|
||||
private int targetZ;
|
||||
|
||||
@Inject
|
||||
Integer spawnCycle;
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Point getTarget()
|
||||
{
|
||||
if (targetX == -1 || targetY == -1)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return new Point(targetX, targetY);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int getTargetZ()
|
||||
{
|
||||
return targetZ;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int getSpawnCycle()
|
||||
{
|
||||
return spawnCycle == null ? -1 : spawnCycle;
|
||||
}
|
||||
|
||||
/**
|
||||
* the cycles returned are for the amount of time moving this works
|
||||
* better with the projectile movement event as it only gets called
|
||||
* after the projectile starts moving
|
||||
*
|
||||
* @return total time projectile will move for in gamecycles
|
||||
*/
|
||||
@Inject
|
||||
@Override
|
||||
public int getCycleLength()
|
||||
{
|
||||
return getEndCycle() - getSpawnCycle();
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Duration getLength()
|
||||
{
|
||||
return Duration.ofMillis(getCycleLength() * 20);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int getRemainingCycles()
|
||||
{
|
||||
int currentGameCycle = client.getGameCycle();
|
||||
|
||||
return getEndCycle() - currentGameCycle;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public Actor getInteracting()
|
||||
@@ -68,4 +140,22 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
return players[idx];
|
||||
}
|
||||
}
|
||||
|
||||
@Copy("moveProjectile")
|
||||
abstract void moveProjectile(int targetX, int targetY, int targetZ, int gameCycle);
|
||||
|
||||
@Replace("moveProjectile")
|
||||
public void rl$moveProjectile(int targetX, int targetY, int targetZ, int gameCycle)
|
||||
{
|
||||
this.targetX = targetX;
|
||||
this.targetY = targetY;
|
||||
this.targetZ = targetZ;
|
||||
|
||||
if (spawnCycle == null)
|
||||
{
|
||||
spawnCycle = client.getGameCycle();
|
||||
}
|
||||
|
||||
moveProjectile(targetX, targetY, targetZ, gameCycle);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,6 +146,9 @@ public interface RSClient extends RSGameEngine, Client
|
||||
@Import("groundItemDeque")
|
||||
RSDeque[][][] getGroundItemDeque();
|
||||
|
||||
@Import("projectiles")
|
||||
RSDeque getProjectilesDeque();
|
||||
|
||||
@Import("username")
|
||||
@Override
|
||||
String getUsername();
|
||||
@@ -266,6 +269,7 @@ public interface RSClient extends RSGameEngine, Client
|
||||
boolean isMenuOpen();
|
||||
|
||||
@Import("gameCycle")
|
||||
@Override
|
||||
int getGameCycle();
|
||||
|
||||
@Import("packetHandler")
|
||||
|
||||
@@ -27,7 +27,7 @@ package net.runelite.rs.api;
|
||||
import net.runelite.api.Projectile;
|
||||
import net.runelite.mapping.Import;
|
||||
|
||||
public interface RSProjectile extends Projectile
|
||||
public interface RSProjectile extends RSRenderable, Projectile
|
||||
{
|
||||
@Import("id")
|
||||
@Override
|
||||
@@ -35,4 +35,68 @@ public interface RSProjectile extends Projectile
|
||||
|
||||
@Import("interacting")
|
||||
int getRsInteracting();
|
||||
|
||||
@Import("height")
|
||||
@Override
|
||||
int getHeight();
|
||||
|
||||
@Import("endHeight")
|
||||
@Override
|
||||
int getEndHeight();
|
||||
|
||||
@Import("x1")
|
||||
@Override
|
||||
int getX1();
|
||||
|
||||
@Import("y1")
|
||||
@Override
|
||||
int getY1();
|
||||
|
||||
@Import("floor")
|
||||
@Override
|
||||
int getFloor();
|
||||
|
||||
@Import("startMovementCycle")
|
||||
@Override
|
||||
int getStartMovementCycle();
|
||||
|
||||
@Import("endCycle")
|
||||
@Override
|
||||
int getEndCycle();
|
||||
|
||||
@Import("slope")
|
||||
@Override
|
||||
int getSlope();
|
||||
|
||||
@Import("startHeight")
|
||||
@Override
|
||||
int getStartHeight();
|
||||
|
||||
@Import("x")
|
||||
@Override
|
||||
double getX();
|
||||
|
||||
@Import("y")
|
||||
@Override
|
||||
double getY();
|
||||
|
||||
@Import("z")
|
||||
@Override
|
||||
double getZ();
|
||||
|
||||
@Import("scalar")
|
||||
@Override
|
||||
double getScalar();
|
||||
|
||||
@Import("velocityX")
|
||||
@Override
|
||||
double getVelocityX();
|
||||
|
||||
@Import("velocityY")
|
||||
@Override
|
||||
double getVelocityY();
|
||||
|
||||
@Import("velocityZ")
|
||||
@Override
|
||||
double getVelocityZ();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user