diff --git a/Modules/Power.lua b/Modules/Power.lua new file mode 100644 index 0000000..0e7d67b --- /dev/null +++ b/Modules/Power.lua @@ -0,0 +1,195 @@ +local MAJOR_VERSION = "LibDogTag-Unit-3.0" +local MINOR_VERSION = tonumber(("$Revision$"):match("%d+")) or 0 + +if MINOR_VERSION > _G.DogTag_Unit_MINOR_VERSION then + _G.DogTag_Unit_MINOR_VERSION = MINOR_VERSION +end + +DogTag_Unit_funcs[#DogTag_Unit_funcs+1] = function(DogTag_Unit, DogTag) + +local L = DogTag_Unit.L + +DogTag:AddTag("Unit", "MP", { + code = [[return UnitMana(${unit})]], + arg { + 'unit', 'string', '@req', + }, + ret = "number", + events = "UNIT_MANA#$unit;UNIT_RAGE#$unit;UNIT_FOCUS#$unit;UNIT_ENERGY#$unit;UNIT_MAXMANA#$unit;UNIT_MAXRAGE#$unit;UNIT_MAXFOCUS#$unit;UNIT_MAXENERGY#$unit;UNIT_DISPLAYPOWER#$unit", + globals = "UnitMana", + doc = L["Return the current mana/rage/energy of unit"], + example = ('[MP] => "%d"'):format(UnitManaMax("player")*.632), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "MaxMP", { + code = [[return UnitManaMax(${unit})]], + arg { + 'unit', 'string', '@req', + }, + ret = "number", + events = "UNIT_MANA#$unit;UNIT_RAGE#$unit;UNIT_FOCUS#$unit;UNIT_ENERGY#$unit;UNIT_MAXMANA#$unit;UNIT_MAXRAGE#$unit;UNIT_MAXFOCUS#$unit;UNIT_MAXENERGY#$unit;UNIT_DISPLAYPOWER#$unit", + globals = "UnitManaMax", + doc = L["Return the maximum mana/rage/energy of unit"], + example = ('[MaxMP] => "%d"'):format(UnitManaMax("player")), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "PercentMP", { + alias = "[MP(unit=unit) / MaxMP(unit=unit) * 100]:Round(1)", + arg { + 'unit', 'string', '@req', + }, + doc = L["Return the percentage mana/rage/energy of unit"], + example = '[PercentMP] => "63.2"; [PercentMP:Percent] => "63.2%"', + category = L["Power"] +}) + +DogTag:AddTag("Unit", "MissingMP", { + alias = "MaxMP(unit=unit) - CurMP(unit=unit)", + arg { + 'unit', 'string', '@req', + }, + doc = L["Return the missing mana/rage/energy of unit"], + example = ('[MissingMP] => "%d"'):format(UnitManaMax("player")*.368), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "FractionalMP", { + alias = "MP(unit=unit) '/':Append(MaxMP(unit=unit))", + arg { + 'unit', 'string', '@req', + }, + doc = L["Return the current and maximum mana/rage/energy of unit"], + example = ('[FractionalMP] => "%d/%d"'):format(UnitManaMax("player")*.632, UnitManaMax("player")), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "TypePower", { + ([[local p = UnitPowerType(${unit}) + if p == 1 then + return %q + elseif p == 2 then + return %q + elseif p == 3 then + return %q + else + return %q + end]]):format(L["Rage"], L["Focus"], L["Energy"], L["Mana"]), + arg { + 'unit', 'string', '@req', + }, + ret = "string", + events = "UNIT_DISPLAYPOWER#$unit", + globals = "UnitPowerType", + doc = L["Return whether unit currently uses Rage, Focus, Energy, or Mana"], + example = ('[TypePower] => %q; [TypePower] => %q'):format(L["Rage"], L["Mana"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "IsPowerType", { + alias = [=[Boolean(TypePower(unit=unit) = type)]=], + arg = { + 'type', 'string', '@req', + 'unit', 'string', '@req', + }, + ret = "boolean", + events = "UNIT_DISPLAYPOWER#$unit", + globals = "UnitPowerType", + doc = L["Return True if unit currently uses the power of argument"], + example = ('[HasPower(%q)] => %q; [HasPower(%q)] => ""'):format(L["Rage"], L["True"], L["Mana"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "IsRage", { + alias = ("IsPowerType(type=%q, unit=unit)"):format(L["Rage"]), + arg = { + 'unit', 'string', '@req', + }, + doc = L["Return True if unit currently uses rage"], + example = ('[IsRage] => %q; [IsRage] => ""'):format(L["True"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "IsFocus", { + alias = ("IsPowerType(type=%q, unit=unit)"):format(L["Focus"]), + arg = { + 'unit', 'string', '@req', + }, + doc = L["Return True if unit currently uses focus"], + example = ('[IsFocus] => %q; [IsFocus] => ""'):format(L["True"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "IsEnergy", { + alias = ("IsPowerType(type=%q, unit=unit)"):format(L["Energy"]), + arg = { + 'unit', 'string', '@req', + }, + doc = L["Return True if unit currently uses energy"], + example = ('[IsEnergy] => %q; [IsEnergy] => ""'):format(L["True"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "IsMana", { + alias = ("IsPowerType(type=%q, unit=unit)"):format(L["Mana"]), + arg = { + 'unit', 'string', '@req', + }, + doc = L["Return True if unit currently uses mana"], + example = ('[IsMana] => %q; [IsMana] => ""'):format(L["True"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "IsMaxMP", { + alias = "Boolean(MP(unit=unit) = MaxMP(unit=unit))", + arg = { + 'unit', 'string', '@req', + }, + doc = L["Return True if unit is at full rage/mana/energy"], + example = ('[IsMaxMP] => %q; [IsMaxMP] => ""'):format(L["True"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "HasMP", { + alias = "Boolean(MaxMP(unit=unit) > 0)" + arg = { + 'unit', 'string', '@req', + }, + doc = L["Return True if unit has no power type at all"], + example = ('[HasNoMP] => %q; [HasNoMP] => ""'):format(L["True"]), + category = L["Power"] +}) + +DogTag:AddTag("Unit", "PowerColor", { + code = [[local powerType = UnitPowerType(${unit}) + local r,g,b + if powerType == 0 then + r,g,b = unpack(colors.mana) + elseif powerType == 1 then + r,g,b = unpack(colors.rage) + elseif powerType == 2 then + r,g,b = unpack(colors.focus) + elseif powerType == 3 then + r,g,b = unpack(colors.energy) + else + r,g,b = unpack(colors.unknown) + end + if ${value} then + return ("|cff%02x%02x%02x%s|r"):format(r * 255, g * 255, b * 255, ${value}) + else + return ("|cff%02x%02x%02x"):format(r * 255, g * 255, b * 255) + end]], + arg = { + 'value', 'string;undef', '@undef', + 'unit', 'string', '@req', + } + ret = "string", + events = "UNIT_DISPLAYPOWER#$unit", + globals = "UnitPowerType", + doc = L["Return the color or wrap value with current power color of unit, whether rage, mana, or energy"], + example = '["Hello":PowerColor] => "|cff3071bfHello|r"; [PowerColor "Hello"] => "|cff3071bfHello"', + category = L["Power"] +}) + +end \ No newline at end of file diff --git a/lib.xml b/lib.xml index 8f8bdfa..b142890 100644 --- a/lib.xml +++ b/lib.xml @@ -5,5 +5,6 @@