From 2f1445859bb283aa1a24653e9418bd68c9d08508 Mon Sep 17 00:00:00 2001 From: WooxSolo Date: Fri, 4 May 2018 10:49:07 -0400 Subject: [PATCH] Add graphics object API --- .../main/java/net/runelite/api/Client.java | 2 + .../java/net/runelite/api/GraphicsObject.java | 40 ++++++++++++++ .../runelite/mixins/GraphicsObjectMixin.java | 41 ++++++++++++++ .../net/runelite/mixins/RSClientMixin.java | 17 ++++++ .../java/net/runelite/rs/api/RSClient.java | 3 ++ .../net/runelite/rs/api/RSGraphicsObject.java | 53 +++++++++++++++++++ 6 files changed, 156 insertions(+) create mode 100644 runelite-api/src/main/java/net/runelite/api/GraphicsObject.java create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java create mode 100644 runescape-api/src/main/java/net/runelite/rs/api/RSGraphicsObject.java diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 224412bd53..8c1dde452b 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -234,6 +234,8 @@ public interface Client extends GameEngine List getProjectiles(); + List getGraphicsObjects(); + /** * Play a sound effect at the player's current location. This is how UI, * and player-generated (e.g. mining, woodcutting) sound effects are diff --git a/runelite-api/src/main/java/net/runelite/api/GraphicsObject.java b/runelite-api/src/main/java/net/runelite/api/GraphicsObject.java new file mode 100644 index 0000000000..4d26807811 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/GraphicsObject.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2018, Woox + * 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.api; + +import net.runelite.api.coords.LocalPoint; + +public interface GraphicsObject extends Renderable +{ + int getId(); + + LocalPoint getLocation(); + + int getStartCycle(); + + int getLevel(); + + int getHeight(); +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java new file mode 100644 index 0000000000..0819c6301e --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018, Woox + * 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.mixins; + +import net.runelite.api.coords.LocalPoint; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSGraphicsObject; + +@Mixin(RSGraphicsObject.class) +public abstract class GraphicsObjectMixin implements RSGraphicsObject +{ + @Override + @Inject + public LocalPoint getLocation() + { + return new LocalPoint(this.getX(), this.getY()); + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 9f224efc95..b2bf89a1e6 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -32,6 +32,7 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.ClanMember; import net.runelite.api.GameState; import net.runelite.api.GrandExchangeOffer; +import net.runelite.api.GraphicsObject; import net.runelite.api.HintArrowType; import net.runelite.api.IndexedSprite; import net.runelite.api.InventoryID; @@ -480,6 +481,22 @@ public abstract class RSClientMixin implements RSClient return projectiles; } + @Inject + @Override + public List getGraphicsObjects() + { + List graphicsObjects = new ArrayList(); + RSDeque graphicsObjectDeque = this.getGraphicsObjectDeque(); + Node head = graphicsObjectDeque.getHead(); + + for (Node node = head.getNext(); node != head; node = node.getNext()) + { + graphicsObjects.add((GraphicsObject)node); + } + + return graphicsObjects; + } + @Inject @Override public void setModIcons(IndexedSprite[] modIcons) diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index e442995b9f..a9254053bf 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -195,6 +195,9 @@ public interface RSClient extends RSGameEngine, Client @Import("projectiles") RSDeque getProjectilesDeque(); + @Import("graphicsObjectDeque") + RSDeque getGraphicsObjectDeque(); + @Import("username") @Override String getUsername(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSGraphicsObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGraphicsObject.java new file mode 100644 index 0000000000..2edde942f1 --- /dev/null +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGraphicsObject.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2018, Woox + * 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.rs.api; + +import net.runelite.api.GraphicsObject; +import net.runelite.mapping.Import; + +public interface RSGraphicsObject extends GraphicsObject, RSRenderable +{ + @Import("id") + @Override + int getId(); + + @Import("x") + int getX(); + + @Import("y") + int getY(); + + @Import("startCycle") + @Override + int getStartCycle(); + + @Import("level") + @Override + int getLevel(); + + @Import("height") + @Override + int getHeight(); +}