Skip to content

Commit

Permalink
fix(667): catch NPEs
Browse files Browse the repository at this point in the history
  • Loading branch information
fglass committed Mar 27, 2021
1 parent 5ceccd4 commit 40f2dcb
Show file tree
Hide file tree
Showing 9 changed files with 123 additions and 108 deletions.
3 changes: 2 additions & 1 deletion api/src/main/kotlin/api/animation/TransformationType.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ package api.animation

import org.joml.Vector3i

enum class TransformationType(val id: Int) { // Alpha transformations (5) currently unsupported
enum class TransformationType(val id: Int) {

REFERENCE(0),
TRANSLATION(1),
ROTATION(2),
SCALE(3);
// Alpha transformations (5) currently unsupported

companion object {
private val map = values().associateBy { it.id }
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/animation/Keyframe.kt
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class Keyframe(
}

val maxId = references.maxOfOrNull(ReferenceNode::id) ?: return
val sectionChildren = IntArray(maxId + 1) { 0 }
val sectionChildren = IntArray(maxId + 1)
val sectionRoots = mutableListOf<ReferenceNode>()

for (reference in references) {
Expand Down
195 changes: 102 additions & 93 deletions app/src/main/kotlin/animation/Transformation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@ import api.definition.ModelDefinition
import net.runelite.cache.models.CircularAngle
import org.joml.Vector3i

open class Transformation(override var id: Int, override val type: TransformationType,
var frameMap: IntArray, override var delta: Vector3i) : ITransformation {
open class Transformation(
override var id: Int,
override val type: TransformationType,
var frameMap: IntArray,
override var delta: Vector3i
) : ITransformation {

constructor(transformation: Transformation): this(
transformation.id, transformation.type,
Expand All @@ -29,134 +33,139 @@ open class Transformation(override var id: Int, override val type: Transformatio
val verticesY = this.vertexPositionsY
val verticesZ = this.vertexPositionsZ

val var6 = frameMap.size
var var7: Int
var var8: Int
var var11: Int
val frameMapSize = frameMap.size
var count: Int
var vGroupIndex: Int
var vIndex: Int
var var12: Int
if (type == 0) {
var7 = 0

if (type == TransformationType.REFERENCE.id) {
ModelDefinition.animOffsetX = 0
ModelDefinition.animOffsetY = 0
ModelDefinition.animOffsetZ = 0
var8 = 0
while (var8 < var6) {
val var9 = frameMap[var8]
vGroupIndex = 0
count = 0

while (vGroupIndex < frameMapSize) {
val var9 = frameMap[vGroupIndex]
if (var9 < this.vertexGroups.size) {
val var10: IntArray = this.vertexGroups[var9]
var11 = 0
while (var11 < var10.size) {
var12 = var10[var11]
val vertexGroup = this.vertexGroups[var9]
vIndex = 0
while (vIndex < vertexGroup.size) {
var12 = vertexGroup[vIndex]
ModelDefinition.animOffsetX += verticesX[var12]
ModelDefinition.animOffsetY += verticesY[var12]
ModelDefinition.animOffsetZ += verticesZ[var12]
++var7
++var11
++count
++vIndex
}
}
++var8
++vGroupIndex
}
if (var7 > 0) {
ModelDefinition.animOffsetX = dx + ModelDefinition.animOffsetX / var7
ModelDefinition.animOffsetY = dy + ModelDefinition.animOffsetY / var7
ModelDefinition.animOffsetZ = dz + ModelDefinition.animOffsetZ / var7
if (count > 0) {
ModelDefinition.animOffsetX = dx + ModelDefinition.animOffsetX / count
ModelDefinition.animOffsetY = dy + ModelDefinition.animOffsetY / count
ModelDefinition.animOffsetZ = dz + ModelDefinition.animOffsetZ / count
} else {
ModelDefinition.animOffsetX = dx
ModelDefinition.animOffsetY = dy
ModelDefinition.animOffsetZ = dz
}
} else {
var var18: IntArray
var vertexGroup: IntArray
var var19: Int
if (type == 1) {
var7 = 0
while (var7 < var6) {
var8 = frameMap[var7]
if (var8 < this.vertexGroups.size) {
var18 = this.vertexGroups[var8]
if (type == TransformationType.TRANSLATION.id) {
count = 0
while (count < frameMapSize) {
vGroupIndex = frameMap[count]
if (vGroupIndex < this.vertexGroups.size) {
vertexGroup = this.vertexGroups[vGroupIndex]
var19 = 0
while (var19 < var18.size) {
var11 = var18[var19]
verticesX[var11] += dx
verticesY[var11] += dy
verticesZ[var11] += dz
while (var19 < vertexGroup.size) {
vIndex = vertexGroup[var19]
verticesX[vIndex] += dx
verticesY[vIndex] += dy
verticesZ[vIndex] += dz
++var19
}
}
++var7
++count
}
} else if (type == 2) {
var7 = 0
while (var7 < var6) {
var8 = frameMap[var7]
if (var8 < this.vertexGroups.size) {
var18 = this.vertexGroups[var8]
} else if (type == TransformationType.ROTATION.id) {
count = 0
while (count < frameMapSize) {
vGroupIndex = frameMap[count]
if (vGroupIndex < this.vertexGroups.size) {
vertexGroup = this.vertexGroups[vGroupIndex]
var19 = 0
while (var19 < var18.size) {
var11 = var18[var19]
verticesX[var11] -= ModelDefinition.animOffsetX
verticesY[var11] -= ModelDefinition.animOffsetY
verticesZ[var11] -= ModelDefinition.animOffsetZ
while (var19 < vertexGroup.size) {
vIndex = vertexGroup[var19]
verticesX[vIndex] -= ModelDefinition.animOffsetX
verticesY[vIndex] -= ModelDefinition.animOffsetY
verticesZ[vIndex] -= ModelDefinition.animOffsetZ

var12 = (dx and 255) * 8
val var13 = (dy and 255) * 8
val var14 = (dz and 255) * 8
var var15: Int
var var16: Int
var var17: Int
if (var14 != 0) {
var15 = CircularAngle.SINE[var14]
var16 = CircularAngle.COSINE[var14]
var17 = var15 * verticesY[var11] + var16 * verticesX[var11] shr 16
verticesY[var11] =
var16 * verticesY[var11] - var15 * verticesX[var11] shr 16
verticesX[var11] = var17
val yAngle = (dy and 255) * 8
val zAngle = (dz and 255) * 8

var sin: Int
var cos: Int
var temp: Int

if (zAngle != 0) {
sin = CircularAngle.SINE[zAngle]
cos = CircularAngle.COSINE[zAngle]
temp = sin * verticesY[vIndex] + cos * verticesX[vIndex] shr 16
verticesY[vIndex] = cos * verticesY[vIndex] - sin * verticesX[vIndex] shr 16
verticesX[vIndex] = temp
}
if (var12 != 0) {
var15 = CircularAngle.SINE[var12]
var16 = CircularAngle.COSINE[var12]
var17 = var16 * verticesY[var11] - var15 * verticesZ[var11] shr 16
verticesZ[var11] =
var15 * verticesY[var11] + var16 * verticesZ[var11] shr 16
verticesY[var11] = var17
sin = CircularAngle.SINE[var12]
cos = CircularAngle.COSINE[var12]
temp = cos * verticesY[vIndex] - sin * verticesZ[vIndex] shr 16
verticesZ[vIndex] = sin * verticesY[vIndex] + cos * verticesZ[vIndex] shr 16
verticesY[vIndex] = temp
}
if (var13 != 0) {
var15 = CircularAngle.SINE[var13]
var16 = CircularAngle.COSINE[var13]
var17 = var15 * verticesZ[var11] + var16 * verticesX[var11] shr 16
verticesZ[var11] =
var16 * verticesZ[var11] - var15 * verticesX[var11] shr 16
verticesX[var11] = var17
if (yAngle != 0) {
sin = CircularAngle.SINE[yAngle]
cos = CircularAngle.COSINE[yAngle]
temp = sin * verticesZ[vIndex] + cos * verticesX[vIndex] shr 16
verticesZ[vIndex] = cos * verticesZ[vIndex] - sin * verticesX[vIndex] shr 16
verticesX[vIndex] = temp
}
verticesX[var11] += ModelDefinition.animOffsetX
verticesY[var11] += ModelDefinition.animOffsetY
verticesZ[var11] += ModelDefinition.animOffsetZ

verticesX[vIndex] += ModelDefinition.animOffsetX
verticesY[vIndex] += ModelDefinition.animOffsetY
verticesZ[vIndex] += ModelDefinition.animOffsetZ
++var19
}
}
++var7
++count
}
} else if (type == 3) {
var7 = 0
while (var7 < var6) {
var8 = frameMap[var7]
if (var8 < this.vertexGroups.size) {
var18 = this.vertexGroups[var8]
} else if (type == TransformationType.SCALE.id) {
count = 0
while (count < frameMapSize) {
vGroupIndex = frameMap[count]
if (vGroupIndex < this.vertexGroups.size) {
vertexGroup = this.vertexGroups[vGroupIndex]
var19 = 0
while (var19 < var18.size) {
var11 = var18[var19]
verticesX[var11] -= ModelDefinition.animOffsetX
verticesY[var11] -= ModelDefinition.animOffsetY
verticesZ[var11] -= ModelDefinition.animOffsetZ
verticesX[var11] = dx * verticesX[var11] / 128
verticesY[var11] = dy * verticesY[var11] / 128
verticesZ[var11] = dz * verticesZ[var11] / 128
verticesX[var11] += ModelDefinition.animOffsetX
verticesY[var11] += ModelDefinition.animOffsetY
verticesZ[var11] += ModelDefinition.animOffsetZ
while (var19 < vertexGroup.size) {
vIndex = vertexGroup[var19]
verticesX[vIndex] -= ModelDefinition.animOffsetX
verticesY[vIndex] -= ModelDefinition.animOffsetY
verticesZ[vIndex] -= ModelDefinition.animOffsetZ

verticesX[vIndex] = dx * verticesX[vIndex] / 128
verticesY[vIndex] = dy * verticesY[vIndex] / 128
verticesZ[vIndex] = dz * verticesZ[vIndex] / 128

verticesX[vIndex] += ModelDefinition.animOffsetX
verticesY[vIndex] += ModelDefinition.animOffsetY
verticesZ[vIndex] += ModelDefinition.animOffsetZ
++var19
}
}
++var7
++count
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/kotlin/cache/PluginLoader.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ object PluginLoader {
val urls = jars.map { it.toURI().toURL() }
val classLoader = URLClassLoader.newInstance(urls.toTypedArray(), Thread.currentThread().contextClassLoader)

val loaders = ServiceLoader.load(ICacheLoader::class.java, classLoader).asSequence().toList()
val packers = ServiceLoader.load(ICachePacker::class.java, classLoader).asSequence().toList()
val loaders = ServiceLoader.load(ICacheLoader::class.java, classLoader).toList()
val packers = ServiceLoader.load(ICachePacker::class.java, classLoader).toList()
classLoader.close()
return loaders.sortedBy { it.toString() } to packers
}
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/kotlin/gui/component/SettingsDialog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class SettingsDialog(private val context: RenderContext): Dialog("Settings", "",
addZoomSensitivitySlider()
addCameraSensitivitySlider()
addGridToggle()
addJointsToggle()
addBonesToggle()
addAdvancedToggle()
}

Expand Down Expand Up @@ -101,11 +101,11 @@ class SettingsDialog(private val context: RenderContext): Dialog("Settings", "",
addToggle("Grid", context.settingsManager.gridActive, listener)
}

private fun addJointsToggle() {
private fun addBonesToggle() {
val listener = EventListener<CheckBoxChangeValueEvent<CheckBox>> {
context.settingsManager.jointsActive = it.targetComponent.isChecked
context.settingsManager.bonesActive = it.targetComponent.isChecked
}
addToggle("Joints", context.settingsManager.jointsActive, listener)
addToggle("Bones", context.settingsManager.bonesActive, listener)
}

private fun addAdvancedToggle() {
Expand Down
7 changes: 5 additions & 2 deletions app/src/main/kotlin/render/Framebuffer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,11 @@ import org.lwjgl.opengl.GL32.*
import shader.ShadingType
import util.MatrixCreator

class Framebuffer(private val context: RenderContext, private val scaleFactor: Int,
private val buttons: Array<MouseButtonHandler>): ImageView() {
class Framebuffer(
private val context: RenderContext,
private val scaleFactor: Int,
private val buttons: Array<MouseButtonHandler>
): ImageView() {

private var id: Int = 0
private var textureId: Int = 0
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/kotlin/render/LineRenderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ class LineRenderer(private val context: RenderContext) {
fun renderSkeleton(nodes: Set<ReferenceNode>, root: ReferenceNode?, viewMatrix: Matrix4f) {
skeletonLoader.cleanUp()

if (!context.settingsManager.jointsActive) {
if (!context.settingsManager.bonesActive) {
return
}

Expand Down
2 changes: 2 additions & 0 deletions app/src/main/kotlin/render/RenderContext.kt
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ class RenderContext {

fun run() {
var running = true
LOGGER.info { "Running v$VERSION" }

System.setProperty("joml.nounsafe", TRUE.toString())
System.setProperty("java.awt.headless", TRUE.toString())

Expand Down
8 changes: 4 additions & 4 deletions app/src/main/kotlin/util/SettingsManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class SettingsManager(private val context: RenderContext) {
var cameraSensitivityMultiplier = 1f
var zoomSensitivityMultiplier = 1f
var gridActive = true
var jointsActive = true
var bonesActive = true
var advancedMode = false

fun save() {
Expand All @@ -29,7 +29,7 @@ class SettingsManager(private val context: RenderContext) {
properties["cameraSensitivity"] = cameraSensitivityMultiplier.toString()
properties["zoomSensitivity"] = zoomSensitivityMultiplier.toString()
properties["grid"] = gridActive.toString()
properties["joints"] = jointsActive.toString()
properties["bones"] = bonesActive.toString()
properties["advanced"] = advancedMode.toString()

val fileWriter = FileWriter(SETTINGS_FILE)
Expand Down Expand Up @@ -57,8 +57,8 @@ class SettingsManager(private val context: RenderContext) {
properties.getProperty("grid")?.let {
gridActive = it.toBoolean()
}
properties.getProperty("joints")?.let {
jointsActive = it.toBoolean()
properties.getProperty("bones")?.let {
bonesActive = it.toBoolean()
}
properties.getProperty("advanced")?.let {
advancedMode = it.toBoolean()
Expand Down

0 comments on commit 40f2dcb

Please sign in to comment.