Skip to content

Commit

Permalink
improve ext
Browse files Browse the repository at this point in the history
Scene -> kotlin

You can now call Scene.objects to collect all objects visible, as well as no longer requiring calling client.scene. You can just call the interface directly.
  • Loading branch information
zeruth committed Jan 29, 2024
1 parent 02eae79 commit 0b144ec
Show file tree
Hide file tree
Showing 10 changed files with 201 additions and 206 deletions.
154 changes: 0 additions & 154 deletions runelite-api/src/main/java/net/runelite/api/Scene.java

This file was deleted.

152 changes: 152 additions & 0 deletions runelite-api/src/main/java/net/runelite/api/Scene.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
/*
* Copyright (c) 2016-2017, Adam <[email protected]>
* 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

/**
* Represents the entire 3D scene
*/
interface Scene {
/**
* Gets the tiles in the scene
*
* @return a 4x104x104 array of tiles in [plane][x][y]
*/
val tiles: Array<Array<Array<Tile?>?>?>

/**
* Get the extended scene. This is larger than 104x104, and its size is [Constants.EXTENDED_SCENE_SIZE].
*/
val extendedTiles: Array<Array<Array<Tile?>?>?>?

/**
* Get the extended tile settings. This is larger than 104x104, and its size is [Constants.EXTENDED_SCENE_SIZE].
*/
val extendedTileSettings: Array<Array<ByteArray?>?>?
var drawDistance: Int
/**
* Get the minimum scene level which will be rendered
*
* @return the plane of the minimum level
*/
/**
* Set the minimum scene level which will be rendered
*
* @param minLevel the plane of the minimum level
*/
var minLevel: Int

/**
* Remove a tile from the scene
* @param tile
*/
fun removeTile(tile: Tile?)

/**
* Remove a game object from the scene
* @param gameObject
*/
fun removeGameObject(gameObject: GameObject?)
fun generateHouses()
fun setRoofRemovalMode(flags: Int)

/**
* Get the underlay ids for the scene. The value stored is id + 1, with 0 for no underlay.
* @return
*/
val underlayIds: Array<Array<ShortArray?>?>?

/**
* Get the overlay ids for the scene. The value stored is id + 1, with 0 for no overlay.
* @return
*/
val overlayIds: Array<Array<ShortArray?>?>?

/**
* Get the shapes of the tiles for the scene.
* @return
*/
val tileShapes: Array<Array<ByteArray?>?>?

/**
* Get the heights of the tiles on the scene.
* @return
*/
val tileHeights: Array<Array<IntArray?>?>?

/**
* Returns the x-axis base coordinate.
*
*
* This value is the x-axis world coordinate of tile (0, 0) in
* this scene (ie. the bottom-left most coordinates in the scene).
*
* @return the base x-axis coordinate
*/
val baseX: Int

/**
* Returns the y-axis base coordinate.
*
*
* This value is the y-axis world coordinate of tile (0, 0) in
* this scene (ie. the bottom-left most coordinates in the scene).
*
* @return the base y-axis coordinate
*/
val baseY: Int

/**
* Check if this scene is an instance
* @see .getInstanceTemplateChunks
* @return
*/
val isInstance: Boolean

/**
* Contains a 3D array of template chunks for instanced areas.
*
*
* The array returned is of format [z][x][y], where z is the
* plane, x and y the x-axis and y-axis coordinates of a tile
* divided by the size of a chunk.
*
*
* The bits of the int value held by the coordinates are -1 if there is no data,
* structured in the following format:
* <pre>`0 1 2 3
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | |rot| y chunk coord | x chunk coord |pln| |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
`</pre> *
* @return the array of instance template chunks
* @see Constants.CHUNK_SIZE
*
* @see InstanceTemplates
*/
val instanceTemplateChunks: Array<Array<IntArray?>?>?

companion object
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package ext.runelite

import ext.kotlin.KClassExt.getInstance
import ext.runelite.SceneExt.getObjects
import ext.runelite.SceneExt.objects
import net.runelite.api.Client
import net.runelite.api.DecorativeObject
import net.runelite.api.Scene

object DecorativeObjectExt {

Expand All @@ -25,13 +26,11 @@ object DecorativeObjectExt {
return filter { it.isOf(*names) }
}

@JvmStatic
fun DecorativeObject.Companion.withIDs(vararg ids: Int) : List<DecorativeObject> {
return client.scene.getObjects().filterIsInstance<DecorativeObject>().filter { it.isOf(*ids)}
return Scene.objects.filterIsInstance<DecorativeObject>().filter { it.isOf(*ids)}
}

@JvmStatic
fun DecorativeObject.Companion.withNames(vararg names: String) : List<DecorativeObject> {
return client.scene.getObjects().filterIsInstance<DecorativeObject>().filter { it.isOf(*names)}
return Scene.objects.filterIsInstance<DecorativeObject>().filter { it.isOf(*names)}
}
}
9 changes: 4 additions & 5 deletions runelite-client/src/main/java/ext/runelite/GameObjectExt.kt
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package ext.runelite

import ext.kotlin.KClassExt.getInstance
import ext.runelite.SceneExt.getObjects
import ext.runelite.SceneExt.objects
import net.runelite.api.Client
import net.runelite.api.DynamicObject
import net.runelite.api.GameObject
import net.runelite.api.Scene
import java.awt.Rectangle

object GameObjectExt {
Expand Down Expand Up @@ -41,13 +42,11 @@ object GameObjectExt {
return filter { it.isOf(*names) }
}

@JvmStatic
fun GameObject.Companion.withIDs(vararg ids: Int) : List<GameObject> {
return client.scene.getObjects().filterIsInstance<GameObject>().filter { it.isOf(*ids)}
return Scene.objects.filterIsInstance<GameObject>().filter { it.isOf(*ids)}
}

@JvmStatic
fun GameObject.Companion.withNames(vararg names: String) : List<GameObject> {
return client.scene.getObjects().filterIsInstance<GameObject>().filter { it.isOf(*names)}
return Scene.objects.filterIsInstance<GameObject>().filter { it.isOf(*names)}
}
}
9 changes: 4 additions & 5 deletions runelite-client/src/main/java/ext/runelite/GroundObjectExt.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package ext.runelite

import ext.kotlin.KClassExt.getInstance
import ext.runelite.SceneExt.getObjects
import ext.runelite.SceneExt.objects
import net.runelite.api.Client
import net.runelite.api.GroundObject
import net.runelite.api.Scene

object GroundObjectExt {

Expand All @@ -26,13 +27,11 @@ object GroundObjectExt {
return filter { it.isOf(*names) }
}

@JvmStatic
fun GroundObject.Companion.withIDs(vararg ids: Int) : List<GroundObject> {
return client.scene.getObjects().filterIsInstance<GroundObject>().filter { it.isOf(*ids)}
return Scene.objects.filterIsInstance<GroundObject>().filter { it.isOf(*ids)}
}

@JvmStatic
fun GroundObject.Companion.withNames(vararg names: String) : List<GroundObject> {
return client.scene.getObjects().filterIsInstance<GroundObject>().filter { it.isOf(*names)}
return Scene.objects.filterIsInstance<GroundObject>().filter { it.isOf(*names)}
}
}
Loading

0 comments on commit 0b144ec

Please sign in to comment.