vanilla-wow-addons – Rev 1
?pathlinks?
--[[
--
-- Sea.math
--
-- Useful math constants and values
--
-- $LastChangedBy: legorol $
-- $Rev: 2845 $
-- $Date: 2005-12-07 21:32:15 -0600 (Wed, 07 Dec 2005) $
--]]
Sea.math = {
-- Traditional pi
pi = math.pi;
--
-- rgbaFromHex(string hex)
--
-- Convert a hex string "AARRGGBB" into floats
--
-- Args:
-- (string hex)
-- hex - the string in hexidecimal
--
-- Returns:
-- (Number red, number blue, number green, number alpha)
--
rgbaFromHex = function (hexColor)
local alpha, red, green, blue = 1;
local intFromHex = Sea.math.intFromHex;
local ssub = string.sub;
-- Handle short strings
if ( string.len(hexColor) > 6 ) then
alpha = intFromHex(ssub(hexColor, 1, 2)) / 255;
red = intFromHex(ssub(hexColor, 3, 4)) / 255;
green = intFromHex(ssub(hexColor, 5, 6)) / 255;
blue = intFromHex(ssub(hexColor, 7, 8)) / 255;
else
red = intFromHex(ssub(hexColor, 1, 2)) / 255;
green = intFromHex(ssub(hexColor, 3, 4)) / 255;
blue = intFromHex(ssub(hexColor, 5, 6)) / 255;
end
return red, green, blue, alpha;
end;
--
-- intFromHex(string hex)
--
-- Convert a hex string into an integer.
--
-- Args:
-- (string hex)
-- hex - the string in hexidecimal
--
-- Returns:
-- (number value)
-- value - the number as an integer
--
-- Recoded by Iriel (iriel@vigilance-committee.org) for performance
intFromHex = function ( hexCode )
local intFromHexTable = Sea.math.intFromHexTable;
local amount = 0;
local len = string.len(hexCode)
local ssub = string.sub;
local c;
for i=1,len do
c = ssub(hexCode, i, i);
amount = amount * 16 + (intFromHexTable[c] or 0);
end
return amount;
end;
intFromHexTable = {
["0"] = 0, ["1"] = 1, ["2"] = 2, ["3"] = 3, ["4"] = 4,
["5"] = 5, ["6"] = 6, ["7"] = 7, ["8"] = 8, ["9"] = 9,
["A"] = 10, ["B"] = 11, ["C"] = 12,
["D"] = 13, ["E"] = 14, ["F"] = 15,
["a"] = 10, ["b"] = 11, ["c"] = 12,
["d"] = 13, ["e"] = 14, ["f"] = 15,
};
--
-- hexFromInt(Num int [, minlength])
--
-- Converts a decimal to hex string
--
-- Args:
-- (Number int)
-- int - the value in decimal
-- minlength - the zero padding
--
-- Returns:
-- (String hex)
-- hex - the value in hex
--
hexFromInt = function (intval, minlength)
local fmt = "%.2x"
if ( minlength ) then
fmt = "%."..minlength.."x";
end
return string.format(fmt, intval );
end;
--
-- convertBase(string input, int original, int outputBase)
-----------------------------------------------------------
-- Function made by KaTTaNa ! --
-- -------------------------- --
-- http://www.wc3sear.ch/index.php?p=JASS&ID=37&sid= --
-- -------------------------- --
-- Converted in LUA by vjeux --
-- --
-- Usage : BaseConversion(255, 10, 16) --
-- => Return "ff" --
-- --
-- Usage : BaseConversion("ff", 16, 10) --
-- => Return "255" --
-----------------------------------------------------------
--
convertBase = function (input, inputBase, outputBase)
local charMap = "0123456789abcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+-=[]";
local s;
local result = "";
local val = 0;
local i;
local p = 0;
local pow = 1;
local sign = "";
if ( inputBase < 2 or inputBase > string.len(charMap) or outputBase < 2 or outputBase > string.len(charMap) ) then
-- Bases are invalid or out of bounds
return "Invalid bases given";
end
if ( string.sub(input, 1, 1) == "-" ) then
sign = "-";
input = string.sub(input, 1, string.len(input));
end
i = string.len(input);
-- Get the integer value of input
while (i > 0) do
s = string.sub(input, i, i);
p = 0;
local bool = false;
while (bool == false) do
if ( p >= inputBase ) then
-- Input cannot match base
return "Input does not match base!\n P = "..p;
end
if ( s == string.sub(charMap, p+1, p+1) ) then
val = val + pow * p;
pow = pow * inputBase;
bool = true;
end
p = p + 1;
end
i = i - 1;
end
while (val > 0) do
p = math.mod(val, outputBase);
result = string.sub(charMap, p+1, p+1)..result;
val = val / outputBase;
end
for i = 1, string.len(result), 1 do
if (string.sub(result, 1, 1) == "0") then
result = string.sub(result, 2, string.len(result));
else
return sign..result
end
end
if (string.len(sign..result) == 0) then
return "0";
else
return sign..result.."-"..string.len(sign..result);
end
end;
-- round(float x)
--
-- Rounds a float value to the "closest" integer (following IEEE standard).
--
-- Args:
-- (float x)
-- x - the value to round
--
-- Returns:
-- (number value)
-- value - the number as an integer (the closest integer to x)
round = function (x)
if (x < 0) then
return math.ceil(x-0.5)
else
return math.floor(x+0.5)
end
end
};