mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-16 18:55:03 -04:00
Looking palette of t3 gpu/screen when setting simple color for better matches. Closes #292.
This commit is contained in:
parent
8f969e5a64
commit
67b4ebf39d
@ -44,6 +44,8 @@ object PackedColor {
|
||||
|
||||
def deflate(value: Color): Byte
|
||||
|
||||
def isFromPalette(value: Int): Boolean = false
|
||||
|
||||
override def load(nbt: NBTTagCompound) {}
|
||||
|
||||
override def save(nbt: NBTTagCompound) {}
|
||||
@ -72,7 +74,7 @@ object PackedColor {
|
||||
if (value.isPalette) (math.max(0, value.value) % palette.length).toByte
|
||||
else palette.map(delta(value.value, _)).zipWithIndex.minBy(_._1)._2.toByte
|
||||
|
||||
def isFromPalette(value: Int): Boolean
|
||||
override def isFromPalette(value: Int) = true
|
||||
|
||||
protected def palette: Array[Int]
|
||||
|
||||
@ -93,8 +95,6 @@ object PackedColor {
|
||||
|
||||
def update(index: Int, value: Int) = palette(index) = value
|
||||
|
||||
override def isFromPalette(value: Int) = true
|
||||
|
||||
protected val palette = Array(
|
||||
0xFFFFFF, 0xFFCC33, 0xCC66CC, 0x6699FF,
|
||||
0xFFFF33, 0x33CC33, 0xFF6699, 0x333333,
|
||||
@ -138,17 +138,25 @@ object PackedColor {
|
||||
(r << rShift32) | (g << gShift32) | (b << bShift32)
|
||||
}
|
||||
|
||||
override def deflate(value: Color) =
|
||||
if (value.isPalette) super.deflate(value)
|
||||
override def deflate(value: Color) = {
|
||||
val paletteIndex = super.deflate(value)
|
||||
if (value.isPalette) paletteIndex
|
||||
else {
|
||||
val (r, g, b) = extract(value.value)
|
||||
val idxR = (r * (reds - 1.0) / 0xFF + 0.5).toInt
|
||||
val idxG = (g * (greens - 1.0) / 0xFF + 0.5).toInt
|
||||
val idxB = (b * (blues - 1.0) / 0xFF + 0.5).toInt
|
||||
(palette.length + idxR * greens * blues + idxG * blues + idxB).toByte
|
||||
val deflated = (palette.length + idxR * greens * blues + idxG * blues + idxB).toByte
|
||||
if (delta(inflate(deflated & 0xFF), value.value) < delta(inflate(paletteIndex & 0xFF), value.value)) {
|
||||
deflated
|
||||
}
|
||||
else {
|
||||
paletteIndex
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override def isFromPalette(value: Int) = value < palette.length
|
||||
override def isFromPalette(value: Int) = value >= 0 && value < palette.length
|
||||
}
|
||||
|
||||
case class Color(value: Int, isPalette: Boolean = false)
|
||||
|
Loading…
x
Reference in New Issue
Block a user