rl-api: expose ModelData & model transformation methods
This commit is contained in:
@@ -1074,7 +1074,26 @@ public interface Client extends GameEngine
|
||||
RuneLiteObject createRuneLiteObject();
|
||||
|
||||
/**
|
||||
* Loads a model from the cache
|
||||
* Loads an unlit model from the cache. The returned model shares
|
||||
* data such as faces, face colors, face transparencies, and vertex points with
|
||||
* other models. If you want to mutate these you MUST call the relevant {@code cloneX}
|
||||
* method.
|
||||
*
|
||||
* @see ModelData#cloneColors()
|
||||
*
|
||||
* @param id the ID of the model
|
||||
* @return the model or null if it is loading or nonexistent
|
||||
*/
|
||||
@Nullable
|
||||
ModelData loadModelData(int id);
|
||||
|
||||
ModelData mergeModels(ModelData[] models, int length);
|
||||
ModelData mergeModels(ModelData ...models);
|
||||
|
||||
/**
|
||||
* Loads and lights a model from the cache
|
||||
*
|
||||
* This is equivalent to {@code loadModelData(id).light()}
|
||||
*
|
||||
* @param id the ID of the model
|
||||
* @return the model or null if it is loading or nonexistent
|
||||
|
||||
73
runelite-api/src/main/java/net/runelite/api/Mesh.java
Normal file
73
runelite-api/src/main/java/net/runelite/api/Mesh.java
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2022 Abex
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* A {@link Model} or {@link ModelData}
|
||||
*/
|
||||
public interface Mesh<T extends Mesh<T>>
|
||||
{
|
||||
int getVerticesCount();
|
||||
int[] getVerticesX();
|
||||
int[] getVerticesY();
|
||||
int[] getVerticesZ();
|
||||
|
||||
int getFaceCount();
|
||||
int[] getFaceIndices1();
|
||||
int[] getFaceIndices2();
|
||||
int[] getFaceIndices3();
|
||||
byte[] getFaceTransparencies();
|
||||
short[] getFaceTextures();
|
||||
|
||||
/**
|
||||
* Rotates this model 90 degrees around the vertical axis.
|
||||
* {@link ModelData#cloneVertices()} should be called before calling this method
|
||||
*/
|
||||
T rotateY90Ccw();
|
||||
|
||||
/**
|
||||
* Rotates this model 180 degrees around the vertical axis.
|
||||
* {@link ModelData#cloneVertices()} should be called before calling this method
|
||||
*/
|
||||
T rotateY180Ccw();
|
||||
|
||||
/**
|
||||
* Rotates this model 270 degrees around the vertical axis.
|
||||
* {@link ModelData#cloneVertices()} should be called before calling this method
|
||||
*/
|
||||
T rotateY270Ccw();
|
||||
|
||||
/**
|
||||
* Offsets this model by the passed amount (1/128ths of a tile).
|
||||
* {@link ModelData#cloneVertices()} should be called before calling this method
|
||||
*/
|
||||
T translate(int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Resizes this model by the passed amount (1/128ths).
|
||||
* {@link ModelData#cloneVertices()} should be called before calling this method
|
||||
*/
|
||||
T scale(int x, int y, int z);
|
||||
}
|
||||
@@ -27,32 +27,14 @@ package net.runelite.api;
|
||||
/**
|
||||
* Represents the model of an object.
|
||||
*/
|
||||
public interface Model extends Renderable
|
||||
public interface Model extends Mesh, Renderable
|
||||
{
|
||||
int getVerticesCount();
|
||||
|
||||
int[] getVerticesX();
|
||||
|
||||
int[] getVerticesY();
|
||||
|
||||
int[] getVerticesZ();
|
||||
|
||||
int getFaceCount();
|
||||
|
||||
int[] getFaceIndices1();
|
||||
|
||||
int[] getFaceIndices2();
|
||||
|
||||
int[] getFaceIndices3();
|
||||
|
||||
int[] getFaceColors1();
|
||||
|
||||
int[] getFaceColors2();
|
||||
|
||||
int[] getFaceColors3();
|
||||
|
||||
byte[] getFaceTransparencies();
|
||||
|
||||
int getSceneId();
|
||||
void setSceneId(int sceneId);
|
||||
|
||||
@@ -70,8 +52,6 @@ public interface Model extends Renderable
|
||||
|
||||
int getRadius();
|
||||
|
||||
short[] getFaceTextures();
|
||||
|
||||
float[] getFaceTextureUVCoordinates();
|
||||
|
||||
void calculateExtreme(int orientation);
|
||||
|
||||
98
runelite-api/src/main/java/net/runelite/api/ModelData.java
Normal file
98
runelite-api/src/main/java/net/runelite/api/ModelData.java
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Copyright (c) 2022 Abex
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* An unlit model
|
||||
*/
|
||||
public interface ModelData extends Mesh<ModelData>, Renderable
|
||||
{
|
||||
int DEFAULT_AMBIENT = 64;
|
||||
int DEFAULT_CONTRAST = 768;
|
||||
int DEFAULT_X = -50;
|
||||
int DEFAULT_Y = -10;
|
||||
int DEFAULT_Z = -50;
|
||||
|
||||
/**
|
||||
* Gets colors as Jagex HSL
|
||||
*
|
||||
* @see JagexColor
|
||||
*/
|
||||
short[] getFaceColors();
|
||||
|
||||
/**
|
||||
* Lights a model.
|
||||
*
|
||||
* The produced model shares verticies, face transparencies, face indicies, and textures with
|
||||
* the underlying ModelData. If any of these may be mutated the corresponding {@code cloneX}
|
||||
* method should be called before {@code light}ing
|
||||
*/
|
||||
Model light(int ambient, int contrast, int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Lights a model with default values
|
||||
*
|
||||
* @see #light(int, int, int, int, int)
|
||||
*/
|
||||
Model light();
|
||||
|
||||
/**
|
||||
* Applies a recolor using Jagex's HSL format. You should call {@link #cloneColors()} ()} before calling
|
||||
* this method
|
||||
*/
|
||||
ModelData recolor(short colorToReplace, short colorToReplaceWith);
|
||||
|
||||
/**
|
||||
* Applies a retexture, changing texture ids. You should call {@link #cloneTextures()} before calling
|
||||
* this method
|
||||
*/
|
||||
ModelData retexture(short find, short replace);
|
||||
|
||||
/**
|
||||
* Shallow-copies a model. Does not copy any arrays, which are still shared with this object.
|
||||
*/
|
||||
ModelData shallowCopy();
|
||||
|
||||
/**
|
||||
* Clones {@link #getVerticesX()}, {@link #getVerticesY()}, and {@link #getVerticesZ()} so
|
||||
* they can be safely mutated
|
||||
*/
|
||||
ModelData cloneVertices();
|
||||
|
||||
/**
|
||||
* Clones {@link #getFaceColors()} so they can be safely mutated
|
||||
*/
|
||||
ModelData cloneColors();
|
||||
|
||||
/**
|
||||
* Clones {@link #getFaceTextures()} so they can be safely mutated
|
||||
*/
|
||||
ModelData cloneTextures();
|
||||
|
||||
/**
|
||||
* Clones {@link #getFaceTransparencies()} so they can be safely mutated
|
||||
*/
|
||||
ModelData cloneTransparencies();
|
||||
}
|
||||
Reference in New Issue
Block a user