package net.torvald.colourutil

import com.badlogic.gdx.graphics.Color
import com.jme3.math.FastMath

/**
 * Created by minjaesong on 2016-07-26.
 */
object ColourUtil {
    fun toColor(r: Int, g: Int, b: Int) = Color(r.shl(24) or g.shl(16) or b.shl(8) or 0xff)

    /**
     * Use CIELabUtil.getGradient for natural-looking colour
     */
    fun getGradient(scale: Float, fromCol: Color, toCol: Color): Color {
        val r = FastMath.interpolateLinear(scale, fromCol.r, toCol.r)
        val g = FastMath.interpolateLinear(scale, fromCol.g, toCol.g)
        val b = FastMath.interpolateLinear(scale, fromCol.b, toCol.b)
        val a = FastMath.interpolateLinear(scale, fromCol.a, toCol.a)

        return Color(r, g, b, a)
    }

    /** Get luminosity level using CIEXYZ colour space. Slow but accurate. */
    fun RGB.getLuminosity(): Float {
        val new = this.linearise()
        return 0.2126729f * new.r + 0.7151522f * new.g + 0.0721750f * new.b // from RGB.toXYZ
    }
    /** Get luminosity level using CIEXYZ colour space. Slow but accurate. */
    fun Color.getLuminosity() = RGB(this).getLuminosity()

    /** Get luminosity level using NTSC standard. Fast, less accurate but should be good enough. */
    fun RGB.getLuminosityQuick() = 0.3f * this.r + 0.59f * this.g + 0.11f * this.b // NTSC standard
    /** Get luminosity level using NTSC standard. Fast, less accurate but should be good enough. */
    fun Color.getLuminosityQuick() = 0.3f * this.r + 0.59f * this.g + 0.11f * this.b // NTSC standard
}