WoW:USERAPI ColorGradient: Difference between revisions

no edit summary
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 num = select("#", ...) / 3
  if perc >= 1 then
local r, g, b = select(select('#', ...) - 2, ...)
if perc == 1 then return select(num-2, ...), select(num-1, ...), select(num, ...) end
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 = select((segment*3)+1, ...), select((segment*3)+2, ...), select((segment*3)+3, ...)
  local r1, g1, b1, r2, g2, b2 = select((segment*3)+1, ...)
local r2, g2, b2 = select((segment*3)+4, ...), select((segment*3)+5, ...), select((segment*3)+6, ...)
   
   
  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>