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();
|
IndexedSprite[] getMapScene();
|
||||||
|
|
||||||
|
int getGameCycle();
|
||||||
|
|
||||||
SpritePixels[] getMapIcons();
|
SpritePixels[] getMapIcons();
|
||||||
|
|
||||||
IndexedSprite[] getModIcons();
|
IndexedSprite[] getModIcons();
|
||||||
@@ -169,4 +171,7 @@ public interface Client
|
|||||||
boolean isClanMember(String name);
|
boolean isClanMember(String name);
|
||||||
|
|
||||||
Point getSceneDestinationLocation();
|
Point getSceneDestinationLocation();
|
||||||
|
|
||||||
|
List<Projectile> getProjectiles();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,55 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.api;
|
package net.runelite.api;
|
||||||
|
|
||||||
public interface Projectile
|
import java.time.Duration;
|
||||||
|
|
||||||
|
public interface Projectile extends Renderable
|
||||||
{
|
{
|
||||||
int getId();
|
int getId();
|
||||||
|
|
||||||
Actor getInteracting();
|
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.MenuAction;
|
||||||
import net.runelite.api.MenuEntry;
|
import net.runelite.api.MenuEntry;
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
|
import net.runelite.api.Node;
|
||||||
import net.runelite.api.Player;
|
import net.runelite.api.Player;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.Prayer;
|
import net.runelite.api.Prayer;
|
||||||
|
import net.runelite.api.Projectile;
|
||||||
import net.runelite.api.Skill;
|
import net.runelite.api.Skill;
|
||||||
import net.runelite.api.Varbits;
|
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.ClanMembersChanged;
|
||||||
import net.runelite.api.events.ExperienceChanged;
|
import net.runelite.api.events.ExperienceChanged;
|
||||||
import net.runelite.api.events.GameStateChanged;
|
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.PlayerMenuOptionsChanged;
|
||||||
import net.runelite.api.events.ResizeableChanged;
|
import net.runelite.api.events.ResizeableChanged;
|
||||||
import net.runelite.api.events.VarbitChanged;
|
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 static net.runelite.client.callback.Hooks.eventBus;
|
||||||
import net.runelite.rs.api.RSClient;
|
import net.runelite.rs.api.RSClient;
|
||||||
|
import net.runelite.rs.api.RSDeque;
|
||||||
import net.runelite.rs.api.RSIndexedSprite;
|
import net.runelite.rs.api.RSIndexedSprite;
|
||||||
import net.runelite.rs.api.RSWidget;
|
import net.runelite.rs.api.RSWidget;
|
||||||
|
|
||||||
@@ -331,6 +334,33 @@ public abstract class RSClientMixin implements RSClient
|
|||||||
setMenuOptionCount(count);
|
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
|
@Inject
|
||||||
@Override
|
@Override
|
||||||
public void setModIcons(IndexedSprite[] modIcons)
|
public void setModIcons(IndexedSprite[] modIcons)
|
||||||
|
|||||||
@@ -24,9 +24,13 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.mixins;
|
package net.runelite.mixins;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
import net.runelite.api.Actor;
|
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.Inject;
|
||||||
import net.runelite.api.mixins.Mixin;
|
import net.runelite.api.mixins.Mixin;
|
||||||
|
import net.runelite.api.mixins.Replace;
|
||||||
import net.runelite.api.mixins.Shadow;
|
import net.runelite.api.mixins.Shadow;
|
||||||
import net.runelite.rs.api.RSClient;
|
import net.runelite.rs.api.RSClient;
|
||||||
import net.runelite.rs.api.RSNPC;
|
import net.runelite.rs.api.RSNPC;
|
||||||
@@ -39,6 +43,74 @@ public abstract class RSProjectileMixin implements RSProjectile
|
|||||||
@Shadow("clientInstance")
|
@Shadow("clientInstance")
|
||||||
private static RSClient client;
|
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
|
@Inject
|
||||||
@Override
|
@Override
|
||||||
public Actor getInteracting()
|
public Actor getInteracting()
|
||||||
@@ -68,4 +140,22 @@ public abstract class RSProjectileMixin implements RSProjectile
|
|||||||
return players[idx];
|
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")
|
@Import("groundItemDeque")
|
||||||
RSDeque[][][] getGroundItemDeque();
|
RSDeque[][][] getGroundItemDeque();
|
||||||
|
|
||||||
|
@Import("projectiles")
|
||||||
|
RSDeque getProjectilesDeque();
|
||||||
|
|
||||||
@Import("username")
|
@Import("username")
|
||||||
@Override
|
@Override
|
||||||
String getUsername();
|
String getUsername();
|
||||||
@@ -266,6 +269,7 @@ public interface RSClient extends RSGameEngine, Client
|
|||||||
boolean isMenuOpen();
|
boolean isMenuOpen();
|
||||||
|
|
||||||
@Import("gameCycle")
|
@Import("gameCycle")
|
||||||
|
@Override
|
||||||
int getGameCycle();
|
int getGameCycle();
|
||||||
|
|
||||||
@Import("packetHandler")
|
@Import("packetHandler")
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ package net.runelite.rs.api;
|
|||||||
import net.runelite.api.Projectile;
|
import net.runelite.api.Projectile;
|
||||||
import net.runelite.mapping.Import;
|
import net.runelite.mapping.Import;
|
||||||
|
|
||||||
public interface RSProjectile extends Projectile
|
public interface RSProjectile extends RSRenderable, Projectile
|
||||||
{
|
{
|
||||||
@Import("id")
|
@Import("id")
|
||||||
@Override
|
@Override
|
||||||
@@ -35,4 +35,68 @@ public interface RSProjectile extends Projectile
|
|||||||
|
|
||||||
@Import("interacting")
|
@Import("interacting")
|
||||||
int getRsInteracting();
|
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