quraji
zap
- Reaction score
- 144
After no interest was shown in my submission of other string functions (as I expected ), I've decided to post this one separately instead of adding it to my previous post (I think people will actually find this one neat).
What is it?
It's a function that will transform and normal, boring string into a beautiful gradient string. The other functions are just utility functions for the main one, but feel free to use them too.
How do I use it?
Just use:
Where s is the string; (r1,g1,b1) are the RGB values of the first color (from 0-255); and (r2,g2,b2) are the RGB values of the second color.
Picture?
Here:
Code?
Note:
When displaying gradient strings (like with BJDebugMsg or others), remember that the color code counts towards the limit of characters to be shown. So if your string is cut short or has a visible color code at the end, you need to shorten it. I was too lazy to add any safety for this
What is it?
It's a function that will transform and normal, boring string into a beautiful gradient string. The other functions are just utility functions for the main one, but feel free to use them too.
How do I use it?
Just use:
JASS:
call StringGradient(s, r1, g1, b1, r2, g2, b2)
Where s is the string; (r1,g1,b1) are the RGB values of the first color (from 0-255); and (r2,g2,b2) are the RGB values of the second color.
Picture?
Here:
Code?
JASS:
library StringGradient initializer hexinit
globals
private string array Hex_Values [16]
endglobals
// changes an RGB int to a hex color code
function Int2ColorCode takes integer i returns string
local string hex = ""
local integer r = 0
local boolean returnearly = false
if (i<=0) then
set hex = "00"
set returnearly = true
elseif (i<=15) then
set hex = "0"+Hex_Values<i>
set returnearly = true
elseif (i>=255) then
set hex = "FF"
set returnearly = true
endif
if (returnearly==true) then
return hex
endif
loop
set r = ModuloInteger(i,16)
set i = i/16
set hex = Hex_Values[r] + hex
exitwhen (i==0)
endloop
return hex
endfunction
// returns a full color code from RGB values (not including the tags or alpha)
function RGB2ColorCode takes integer red, integer green, integer blue returns string
return Int2ColorCode(red)+Int2ColorCode(green)+Int2ColorCode(blue)
endfunction
// returns the color code of the color percent of the way from RGB1 to RGB2
function GetGradientColor takes integer red1, integer green1, integer blue1, integer red2, integer green2, integer blue2, real percent returns string
return RGB2ColorCode(red1 + R2I(percent*(red2-red1)),green1 + R2I(percent*(green2-green1)),blue1 + R2I(percent*(blue2-blue1)))
endfunction
// returns the string with a color gradient
function StringGradient takes string s, integer red1, integer green1, integer blue1, integer red2, integer green2, integer blue2 returns string
local integer len = StringLength(s)
local real increment = 1./len
local real percent = 0.
local string grad = ""
local string s2 = ""
local integer i = 0
loop
set grad = GetGradientColor(red1, green1, blue1, red2, green2, blue2, percent)
set s2 = s2+"|cff"+grad+SubString(s, i, i+1)+"|r"
set percent = percent+increment
set i = i+1
exitwhen (i==len)
endloop
return s2
endfunction
private function hexinit takes nothing returns nothing
set Hex_Values[0] = "0"
set Hex_Values[1] = "1"
set Hex_Values[2] = "2"
set Hex_Values[3] = "3"
set Hex_Values[4] = "4"
set Hex_Values[5] = "5"
set Hex_Values[6] = "6"
set Hex_Values[7] = "7"
set Hex_Values[8] = "8"
set Hex_Values[9] = "9"
set Hex_Values[10] = "A"
set Hex_Values[11] = "B"
set Hex_Values[12] = "C"
set Hex_Values[13] = "D"
set Hex_Values[14] = "E"
set Hex_Values[15] = "F"
endfunction
endlibrary
</i>
Note:
When displaying gradient strings (like with BJDebugMsg or others), remember that the color code counts towards the limit of characters to be shown. So if your string is cut short or has a visible color code at the end, you need to shorten it. I was too lazy to add any safety for this