diff --git a/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt b/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt index 4c154729bb..8e6d559563 100644 --- a/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt +++ b/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt @@ -91,14 +91,21 @@ fun colorFromHex(hexColor: Int): Color { /** Create a new [Color] instance from [r]/[g]/[b] given as Integers in the range 0..255 */ 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) = 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 [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 = maxOf(r, g, b) + val targetRatio = (lightness + t * (1 - lightness)) / lightness + return it.mul(targetRatio) +} fun Actor.centerX(parent: Actor) { x = parent.width / 2 - width / 2 } @@ -242,7 +249,7 @@ fun Table.addCell(actor: T): Table { return this } -/** Shortcut for [Cell].[pad][com.badlogic.gdx.scenes.scene2d.ui.Cell.pad] with top=bottom and left=right */ +/** Shortcut for [Cell].[pad][Cell.pad] with top=bottom and left=right */ fun Cell.pad(vertical: Float, horizontal: Float): Cell { return pad(vertical, horizontal, vertical, horizontal) }