mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-22 10:54:19 -04:00
Color: Better methods of brightening and darkening colors (#13611)
* better brighten and darken * fix not returning new color * update method descriptions
This commit is contained in:
parent
29108d0adc
commit
bee216aa3d
@ -42,6 +42,7 @@ import com.unciv.ui.components.input.onChange
|
||||
import com.unciv.ui.images.IconCircleGroup
|
||||
import com.unciv.ui.images.ImageGetter
|
||||
import com.unciv.ui.screens.basescreen.BaseScreen
|
||||
import kotlin.math.max
|
||||
|
||||
/**
|
||||
* Collection of extension functions mostly for libGdx widgets
|
||||
@ -93,12 +94,16 @@ fun colorFromHex(hexColor: Int): Color {
|
||||
fun colorFromRGB(r: Int, g: Int, b: Int) = Color(r / 255f, g / 255f, b / 255f, 1f)
|
||||
/** Create a new [Color] instance from r/g/b given as Integers in the range 0..255 in the form of a 3-element List [rgb] */
|
||||
fun colorFromRGB(rgb: List<Int>) = colorFromRGB(rgb[0], rgb[1], rgb[2])
|
||||
/** Linearly interpolates between this [Color] and [BLACK][ImageGetter.CHARCOAL] by [t] which is in the range [[0,1]].
|
||||
* The result is returned as a new instance. */
|
||||
fun Color.darken(t: Float): Color = Color(this).lerp(Color.BLACK, t)
|
||||
/** Linearly interpolates between this [Color] and [WHITE][Color.WHITE] by [t] which is in the range [[0,1]].
|
||||
* The result is returned as a new instance. */
|
||||
fun Color.brighten(t: Float): Color = Color(this).lerp(Color.WHITE, t)
|
||||
/** Linearly interpolates between this [Color] and [BLACK][ImageGetter.CHARCOAL] by [t] which is in the range [[0,1]],
|
||||
* preserving color ratio in RGB. The result is returned as a new instance. */
|
||||
fun Color.darken(t: Float): Color = Color(this).mul(t)
|
||||
/** Linearly interpolates between this [Color] and [WHITE][Color.WHITE] by [t] which is in the range [[0,1]],
|
||||
* preserving color ratio in RGB. The result is returned as a new instance. */
|
||||
fun Color.brighten(t: Float): Color = Color(this).let {
|
||||
val lightness = max(r, max(g, b))
|
||||
val targetRatio = (lightness + t * (1 - lightness)) / lightness
|
||||
return it.mul(targetRatio)
|
||||
}
|
||||
|
||||
|
||||
fun Actor.centerX(parent: Actor) { x = parent.width / 2 - width / 2 }
|
||||
|
Loading…
x
Reference in New Issue
Block a user