Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up ColorPalette code by merging RuneLite code into it #67

Merged
merged 3 commits into from
Aug 7, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/kotlin/cache/definitions/TextureDefinition.kt
Expand Up @@ -44,7 +44,7 @@ class TextureDefinition {
}
var11 = 0
while (var11 < var9.size) {
var9[var11] = ColorPalette.adjustRGB(var9[var11], var1)
var9[var11] = ColorPalette.adjustForBrightness(var9[var11], var1)
++var11
}
var11 = if (var6 == 0) {
Expand Down
175 changes: 78 additions & 97 deletions src/main/kotlin/cache/utils/ColorPalette.kt
@@ -1,112 +1,93 @@
package cache.utils

import java.awt.Color
import kotlin.math.abs
import kotlin.math.pow

class ColorPalette(
brightness: Double,
var2: Int,
var3: Int
) {
class ColorPalette(brightness: Double) {
val colorPalette = IntArray(65536) { i ->
HSLtoRGB(i.toShort(), brightness)
}

companion object {
const val BRIGHTNESS_MAX = .6
const val BRIGHTNESS_HIGH = .7
const val BRIGHTNESS_LOW = .8
const val BRIGHTNESS_MIN = .9

var colorPalette: IntArray
private const val HUE_OFFSET = .5 / 64.0
private const val SATURATION_OFFSET = .5 / 8.0

fun adjustForBrightness(rgb: Int, brightness: Double): Int {
var r = (rgb shr 16).toDouble() / 256.0
var g = (rgb shr 8 and 255).toDouble() / 256.0
var b = (rgb and 255).toDouble() / 256.0
r = r.pow(brightness)
g = g.pow(brightness)
b = b.pow(brightness)
return (
(r * 256.0).toInt() shl 16
or ((g * 256.0).toInt() shl 8)
or (b * 256.0).toInt()
)
}

private fun buildColorPalette(brightness: Double, var2: Int, var3: Int): IntArray {
val colorPalette = IntArray(65536)
var var4 = var2 * 128
for (var5 in var2 until var3) {
val var6 = (var5 shr 3).toDouble() / 64.0 + 0.0078125
val var8 = (var5 and 7).toDouble() / 8.0 + 0.0625
for (var10 in 0..127) {
val var11 = var10.toDouble() / 128.0
var var13 = var11
var var15 = var11
var var17 = var11
if (var8 != 0.0) {
var var19: Double
var19 = if (var11 < 0.5) {
var11 * (1.0 + var8)
} else {
var11 + var8 - var11 * var8
}
val var21 = 2.0 * var11 - var19
var var23 = var6 + 0.3333333333333333
if (var23 > 1.0) {
--var23
}
var var27 = var6 - 0.3333333333333333
if (var27 < 0.0) {
++var27
}
var13 = if (6.0 * var23 < 1.0) {
var21 + (var19 - var21) * 6.0 * var23
} else if (2.0 * var23 < 1.0) {
var19
} else if (3.0 * var23 < 2.0) {
var21 + (var19 - var21) * (0.6666666666666666 - var23) * 6.0
} else {
var21
}
var15 = if (6.0 * var6 < 1.0) {
var21 + (var19 - var21) * 6.0 * var6
} else if (2.0 * var6 < 1.0) {
var19
} else if (3.0 * var6 < 2.0) {
var21 + (var19 - var21) * (0.6666666666666666 - var6) * 6.0
} else {
var21
}
var17 = if (6.0 * var27 < 1.0) {
var21 + (var19 - var21) * 6.0 * var27
} else if (2.0 * var27 < 1.0) {
var19
} else if (3.0 * var27 < 2.0) {
var21 + (var19 - var21) * (0.6666666666666666 - var27) * 6.0
} else {
var21
}
fun HSLtoRGB(hsl: Short, brightness: Double): Int {
val hue: Double = unpackHue(hsl).toDouble() / 64.0 + HUE_OFFSET
val saturation: Double =
unpackSaturation(hsl).toDouble() / 8.0 + SATURATION_OFFSET
val luminance = unpackLuminance(hsl).toDouble() / 128.0

// This is just a standard hsl to rgb transform
// the only difference is the offsets above and the brightness transform below
val chroma = (1.0 - abs(2.0 * luminance - 1.0)) * saturation
val x = chroma * (1 - abs(hue * 6.0 % 2.0 - 1.0))
val lightness = luminance - chroma / 2
var r = lightness
var g = lightness
var b = lightness
when ((hue * 6.0).toInt()) {
0 -> {
r += chroma
g += x
}
1 -> {
g += chroma
r += x
}
2 -> {
g += chroma
b += x
}
3 -> {
b += chroma
g += x
}
val var29 = (var13 * 256.0).toInt()
val var20 = (var15 * 256.0).toInt()
val var30 = (var17 * 256.0).toInt()
var var22 = var30 + (var20 shl 8) + (var29 shl 16)
var22 = adjustRGB(var22, brightness)
if (var22 == 0) {
var22 = 1
4 -> {
b += chroma
r += x
}
else -> {
r += chroma
b += x
}
colorPalette[var4++] = var22
}
}
return colorPalette
}

init {
colorPalette = buildColorPalette(brightness, var2, var3)
}
var rgb = (
(r * 256.0).toInt() shl 16
or ((g * 256.0).toInt() shl 8)
or (b * 256.0).toInt()
)

companion object {
fun adjustRGB(var0: Int, var1: Double): Int {
var var3 = (var0 shr 16).toDouble() / 256.0
var var5 = (var0 shr 8 and 255).toDouble() / 256.0
var var7 = (var0 and 255).toDouble() / 256.0
var3 = var3.pow(var1)
var5 = var5.pow(var1)
var7 = var7.pow(var1)
val var9 = (var3 * 256.0).toInt()
val var10 = (var5 * 256.0).toInt()
val var11 = (var7 * 256.0).toInt()
return var11 + (var10 shl 8) + (var9 shl 16)
}
rgb = adjustForBrightness(rgb, brightness)

fun rs2hsbToColor(hsb: Int): Color {
val decode_hue = hsb shr 10 and 0x3f
val decode_saturation = hsb shr 7 and 0x07
val decode_brightness = hsb and 0x7f
return Color.getHSBColor(
decode_hue.toFloat() / 63,
decode_saturation.toFloat() / 7,
decode_brightness.toFloat() / 127
)
if (rgb == 0) {
rgb = 1
}
return rgb
}

fun unpackHue(hsl: Short): Int = hsl.toInt() shr 10 and 63
fun unpackSaturation(hsl: Short): Int = hsl.toInt() shr 7 and 7
fun unpackLuminance(hsl: Short): Int = hsl.toInt() and 127
}
}
2 changes: 1 addition & 1 deletion src/main/kotlin/models/glTF/MaterialBuffers.kt
Expand Up @@ -45,6 +45,6 @@ class MaterialBuffers(isTextured: Boolean) {
}

companion object {
val pal = ColorPalette(1.0, 0, 512).colorPalette
val pal = ColorPalette(1.0).colorPalette
}
}
2 changes: 1 addition & 1 deletion src/main/kotlin/models/scene/SceneRegionBuilder.kt
Expand Up @@ -35,7 +35,7 @@ class SceneRegionBuilder constructor(
) {
private val logger = LoggerFactory.getLogger(SceneRegionBuilder::class.java)

private val colorPalette = ColorPalette(0.7, 0, 512).colorPalette
private val colorPalette = ColorPalette(0.7).colorPalette

fun calcTileColor(sceneRegion: SceneRegion, z: Int, x: Int, y: Int, baseX: Int, baseY: Int) {
val var9 = sqrt(5100.0).toInt()
Expand Down