runescape-client: Added Animation runelite api file. Also renamed "skin" to "skeleton". (#2867)

* rename getSkin rsapi to getSkeleton

* Added animation runelite api. Also re-named method "getSkin" to "getSkeleton", because it is a more suitable description.

* re-named "skin" variable to "skeleton"

* added frames.java to runelite api

* added DualNode.java to runelite api

* made RSSkeleton extend Skeleton

* .

* removed unused imports

* checkstyle corrections

* put copyright notice back which i accidentally deleted.

* Added some descriptions

* removed type in description

* .

* added licence headers
This commit is contained in:
Noodleeater
2020-12-03 22:16:45 +00:00
committed by GitHub
parent e2d5b49657
commit 528d427bc5
9 changed files with 189 additions and 8 deletions

View File

@@ -0,0 +1,59 @@
/*
* Copyright (c) 2020, Noodleeater <noodleeater4@gmail.com>
* 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 a frame of animation data. Each animation frame will have its own animation animation data.
*/
public interface Animation
{
Skeleton getSkeleton();
/**
* the number of transformations the animation frame has.
*/
int getTransformCount();
/**
* this variable name is incorrect. it is an array of bone ids. not transform types.
* this array has a one to one relationship with the arrays of translator values in the animation frame(TranslatorX getTranslatorY TranslatorZ).
* it is the array of bone ids which point each translator value to the bone it should be transforming.
*/
int[] getTransformTypes();
/**
* these are x, y, and z values, which tell the transform function how much to transform the each bone.
*/
int[] getTranslatorX();
int[] getTranslatorY();
int[] getTranslatorZ();
/**
* whether this Animation frame has any alpha/transparency animation.
*/
boolean isShowing();
}

View File

@@ -0,0 +1,30 @@
/*
* Copyright (c) 2020, Noodleeater <noodleeater4@gmail.com>
* 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;
public interface DualNode extends Node
{
void unlinkDual();
}

View File

@@ -0,0 +1,33 @@
/*
* Copyright (c) 2020, Noodleeater <noodleeater4@gmail.com>
* 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;
public interface Frames extends DualNode
{
/**
* Use this for getting a specific animation frame from the cache
*/
Animation[] getFrames();
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright (c) 2020, Noodleeater <noodleeater4@gmail.com>
* 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 a Skeleton.
* When calculating a model's pose in a animation frame, the skeleton is used to link vertices to animation values.
*/
public interface Skeleton extends Node
{
/**
* the number of bones in the Skeleton
*/
int getCount();
/**
* the transform type of each bone
* The possible transform types are as follows:
* 0 (set pivot point)
* 1 (translate/move)
* 2 (rotate)
* 3 (scale)
* 5 (alpha/transparency)
*/
int[] getTypes();
/**
* Each bone is linked to a list of vertex skins. [bone id][list of vertex skins]
* if a vertex's skin is linked to a bone, the vertex can be transformed by that bone.
*/
int[][] getList();
}

View File

@@ -204,12 +204,12 @@ public abstract class RSModelMixin implements RSModel
if (frameId != -1) if (frameId != -1)
{ {
RSAnimation frame = frames.getFrames()[frameId]; RSAnimation frame = frames.getFrames()[frameId];
RSSkeleton skin = frame.getSkin(); RSSkeleton skeleton = frame.getSkeleton();
RSAnimation nextFrame = null; RSAnimation nextFrame = null;
if (nextFrames != null) if (nextFrames != null)
{ {
nextFrame = nextFrames.getFrames()[nextFrameId]; nextFrame = nextFrames.getFrames()[nextFrameId];
if (nextFrame.getSkin() != skin) if (nextFrame.getSkeleton() != skeleton)
{ {
nextFrame = null; nextFrame = null;
} }
@@ -219,7 +219,7 @@ public abstract class RSModelMixin implements RSModel
client.setAnimOffsetY(0); client.setAnimOffsetY(0);
client.setAnimOffsetZ(0); client.setAnimOffsetZ(0);
interpolateFrames(skin, frame, nextFrame, interval, intervalCount); interpolateFrames(skeleton, frame, nextFrame, interval, intervalCount);
resetBounds(); resetBounds();
} }
} }

View File

@@ -24,12 +24,14 @@
*/ */
package net.runelite.rs.api; package net.runelite.rs.api;
import net.runelite.api.Animation;
import net.runelite.api.Frames;
import net.runelite.mapping.Import; import net.runelite.mapping.Import;
public interface RSAnimation public interface RSAnimation extends Frames, Animation
{ {
@Import("skeleton") @Import("skeleton")
RSSkeleton getSkin(); RSSkeleton getSkeleton();
@Import("transformCount") @Import("transformCount")
int getTransformCount(); int getTransformCount();

View File

@@ -24,9 +24,10 @@
*/ */
package net.runelite.rs.api; package net.runelite.rs.api;
import net.runelite.api.DualNode;
import net.runelite.mapping.Import; import net.runelite.mapping.Import;
public interface RSDualNode extends RSNode public interface RSDualNode extends RSNode, DualNode
{ {
@Import("removeDual") @Import("removeDual")
void unlinkDual(); void unlinkDual();

View File

@@ -24,9 +24,10 @@
*/ */
package net.runelite.rs.api; package net.runelite.rs.api;
import net.runelite.api.Frames;
import net.runelite.mapping.Import; import net.runelite.mapping.Import;
public interface RSFrames extends RSDualNode public interface RSFrames extends RSDualNode, Frames
{ {
@Import("frames") @Import("frames")
RSAnimation[] getFrames(); RSAnimation[] getFrames();

View File

@@ -24,9 +24,10 @@
*/ */
package net.runelite.rs.api; package net.runelite.rs.api;
import net.runelite.api.Skeleton;
import net.runelite.mapping.Import; import net.runelite.mapping.Import;
public interface RSSkeleton extends RSNode public interface RSSkeleton extends RSNode, Skeleton
{ {
@Import("count") @Import("count")
int getCount(); int getCount();