WoW:USERAPI ColorGradient: Difference between revisions

From AddOn Studio
Jump to navigation Jump to search
(Add performance note for the common case.)
No edit summary
 
(One intermediate revision by one other user not shown)
Line 5: Line 5:


(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.)
(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, ...)
  if perc >= 1 then
  if perc >= 1 then
Line 22: Line 22:
  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>

Latest revision as of 21:13, 2 August 2025

This page documents a <i>user-defined function</i> that you can copy and paste into your addon. Replace PREFIX with your addon or lib prefix to avoid conflicts between different versions of these functions.

User defined functions


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.)

 local function ColorGradient(perc, ...)
 	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 r1, g1, b1, r2, g2, b2 = select((segment*3)+1, ...)
 
 	return r1 + (r2-r1)*relperc, g1 + (g2-g1)*relperc, b1 + (b2-b1)*relperc
 end

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.

 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