49
edits
No edit summary |
No edit summary |
||
| (5 intermediate revisions by 4 users not shown) | |||
| Line 4: | Line 4: | ||
Converts a percent value into a gradient from 2 or more RGB percent values (0.0-1.0). If more than 2 colors are passed, the gradient will be between the two colors which perc lies in an evenly divided range. | Converts a percent value into a gradient from 2 or more RGB percent values (0.0-1.0). If more than 2 colors are passed, the gradient will be between the two colors which perc lies in an evenly divided range. | ||
(Note that if you will always be generating a gradient between the same number of colors, you will see *significantly* greater performance if you customize this function to take a fixed number of arguments.) | |||
<pre> | |||
local function ColorGradient(perc, ...) | local function ColorGradient(perc, ...) | ||
local | if perc >= 1 then | ||
local r, g, b = select(select('#', ...) - 2, ...) | |||
return r, g, b | |||
elseif perc <= 0 then | |||
local r, g, b = ... | |||
return r, g, b | |||
end | |||
local num = select('#', ...) / 3 | |||
local segment, relperc = math.modf(perc*(num-1)) | local segment, relperc = math.modf(perc*(num-1)) | ||
local r1, g1, b1 | local r1, g1, b1, r2, g2, b2 = select((segment*3)+1, ...) | ||
return r1 + (r2-r1)*relperc, g1 + (g2-g1)*relperc, b1 + (b2-b1)*relperc | return r1 + (r2-r1)*relperc, g1 + (g2-g1)*relperc, b1 + (b2-b1)*relperc | ||
end | end | ||
</pre> | |||
== Example == | == Example == | ||
For this example we'll use 3 colors: red, yellow and green. For a percent value of 0.75 we'd expect to get back a color that's halfway between yellow and green. 0.5 would yield pure yellow, 0.25 would yield an orange. | For this example we'll use 3 colors: red, yellow and green. For a percent value of 0.75 we'd expect to get back a color that's halfway between yellow and green. 0.5 would yield pure yellow, 0.25 would yield an orange. | ||
<pre> | |||
local r,g,b = ColorGradient(0.75, 1,0,0, 1,1,0, 0,1,0) | local r,g,b = ColorGradient(0.75, 1,0,0, 1,1,0, 0,1,0) | ||
-- r = 0.5, g = 1.0, b = 0.0 | -- r = 0.5, g = 1.0, b = 0.0 | ||
</pre> | |||