From a957380e4263b6e36f46aa14580202909725b522 Mon Sep 17 00:00:00 2001 From: urnati Date: Sat, 20 Jan 2024 05:36:00 -0500 Subject: [PATCH] - Regen : Refactor and add icon - XP : Remove print on event --- TitanRegen/TitanRegen.blp | Bin 0 -> 3916 bytes TitanRegen/TitanRegen.lua | 343 +++++++++++++++++++++++++++++++++++++ TitanRegen/TitanRegen_Vanilla.toc | 2 +- TitanRegen/TitanRegen_Wrath.toc | 2 +- TitanXP/TitanXP.lua | 2 +- 5 files changed, 346 insertions(+), 3 deletions(-) create mode 100644 TitanRegen/TitanRegen.blp create mode 100644 TitanRegen/TitanRegen.lua diff --git a/TitanRegen/TitanRegen.blp b/TitanRegen/TitanRegen.blp new file mode 100644 index 0000000000000000000000000000000000000000..69e12f7fa1260192d446909fe208a19e4b96a22a GIT binary patch literal 3916 zcmeHJ@oy8?9sk2e^new%If<=65>jAsp(Mxc`y9@U ztd;r)@T8~jz4yNF`}ux9@B6;**1qCgWdHypfPqIz`~C&ki?RO*;3ta#p2hwv>@Q;f zL5)EzG$^8AvD2a6@$+$e%)ny?9y9R03^htsEqw9B0ut0dx^yiC+M~IvB+JGy3>#dK!25{p9t&b@35=wJpW!X4N zr9)u*QTjdk_5ag{)=C;r;An22@zg+03c4P^j$WQ(^s?X;cJ3^1u)%t4`noPBXX!qL zE1U&>^}yYC(%*vF_s)*jhR^2gaeSOgEd^GTo4l@qoPQ-Fqt}5ixv6QxN7&FYqG_9F zc#%^GIj;gs+#BE4?Ni)(Z1eFEmqA=hvC4+l*SLsu46Mz+l;z=m*8Z=evJLoj3`7gD z;M)NjQ4yHH1>U*8E1ZDfm#U_T5jH4~csa3?ZS<2KR*Zw75I=uJWg8vq9SI%3s)5bn z7tf3Ti5alA4c__>1f@t^mSyo6%gSkqTl8AND>=FvoDB8 z00K2Wx9)f1*qol>xX@nh^X(QRLi_B9G2EY`xJ|YA5*{g}0N80B4a^{)O4Jg$(LH*K zudD=S>ns=zhN`V|_!vJ!&mUmxERRhPK`id*UXHltvgC$lG*gOf=j|C10IN+M`x25A z*`{hUm=DO$hCt%(cjxafRIsn+N(w77i>~r~zqIN;<`Fji{3mPY@LA^N9R6@8gjDsL zY096|>+|Vxtb#aFB@Ea8v zpUdSgesKOP8ypYfXL@*EgaOP~kK5%EB>>dR<0A!_alqRWvCfTtzbhtz8AP7PIWxu7 zakr^p#d9p#eqV}|9E!_}Greh}!6-g+f9zzLJl+J5Zl(TIZT;^2=Y`MJq6N#$0^Tp5 z&s(G06@mZ?`cLs)F4ylQ3DYa+be^BPFC~L`PYGv~mP|c$C2>zx&!<;hec{s;j;VCx z5R^aHGB^!pUU25)c?Hj%-aq93k^5hS_Dri4Ql&zOgp9qv&Dlq1N+T*}7+G~+>?DeD z{HDrA6yr7R)f=tH#aT7GZ>TGojsCi)=xSTC!WiF8rSxUCg>^0*CF|RCYyd6wMHgw7oQHa&ixjx7666E4&T;TDP3WG=#5zU&r=3fHh}i8Q{YM zU`9T(z?3)Ovybhy+a@uZ=m&?c!mxD_?ri_pF9mvgYCU9kl$$A^<`f{<=ehH z8rCI--0%^@ag=? z1rY7)>J=iaUBoFN0*vVOkn@vZ)!-d|0S=^gkljiOE=C z1Tg{-#QF$u<|GEgPo;r16abw2n*pY$r@x{2OTMV7;gZ1ae)rvG){fCBip6#vc^GeM z8lOP_Nwn~fX~adsrY1$y=x;iQFU?pclhNbv#&>2IANuwQUF_Xd(`FS?)0e5@7Y$CXELNfKhgkcq^th zrcde<^gG8N<$rs}9qI?c1fl1RQj7f~Y(1SNWbdEW!V`-2&p&(+FnfuX%LBUp9_4?q zxvqFS%NX33KALDo|2Dbn#=}_WiK;Ey%Ub#9zlQ{IfsHej3`)r3fu)=&b{1f~)_v*I zs{j{n-M;zKXAWlb*mEB4Brsi>BIC=mg56Rm@2bM}&o5uRMDrW#bx%UHfr+zdPkvy7 zi>WQzn@(oL~C>4u}24 R>cfX+`Bddz2mW8k{{_$rmwNyJ literal 0 HcmV?d00001 diff --git a/TitanRegen/TitanRegen.lua b/TitanRegen/TitanRegen.lua new file mode 100644 index 0000000..a460f0e --- /dev/null +++ b/TitanRegen/TitanRegen.lua @@ -0,0 +1,343 @@ +-- ************************************************************************** +-- * TitanClassicRegen.lua +-- * +-- * By: TitanMod, Dark Imakuni, Adsertor and the Titan Panel Development Team +-- ************************************************************************** + +-- ******************************** Constants ******************************* +local TITAN_REGEN_ID = "Regen" +local TITAN_BUTTON = "TitanPanel"..TITAN_REGEN_ID.."Button" + +local TITAN_REGEN_HP_FORMAT = "%d"; +local TITAN_REGEN_HP_FORMAT_PERCENT = "%.2f"; +local TITAN_REGEN_MP_FORMAT = "%d"; +local TITAN_REGEN_MP_FORMAT_PERCENT = "%.2f"; +local updateTable = {TITAN_REGEN_ID, TITAN_PANEL_UPDATE_ALL}; +-- ******************************** Variables ******************************* +local TITAN_RegenCurrHealth = 0; +local TITAN_RegenCurrMana = 0; +local TITAN_RegenMP = 0; +local TITAN_RegenHP = 0; +local TITAN_RegenCheckedManaState = 0; +local TITAN_RegenMaxHPRate = 0; +local TITAN_RegenMinHPRate = 9999; +local TITAN_RegenMaxMPRate = 0; +local TITAN_RegenMinMPRate = 9999; +local TITAN_RegenMPDuringCombat = 0; +local TITAN_RegenMPCombatTrack = 0; +local L = LibStub("AceLocale-3.0"):GetLocale(TITAN_ID, true) +-- ******************************** Functions ******************************* + +--[[ +-- ************************************************************************** +-- NAME : TitanRegenTemp_GetColoredTextRGB(text, r, g, b) +-- DESC : Define colors for colored text and display +-- VARS : text = text to display, r = red value, g = green value, b = blue value +-- ************************************************************************** +--]] +local function TitanRegenTemp_GetColoredTextRGB(text, r, g, b) + if (text and r and g and b) then + local redColorCode = format("%02x", r * 255); + local greenColorCode = format("%02x", g * 255); + local blueColorCode = format("%02x", b * 255); + local colorCode = "|cff"..redColorCode..greenColorCode..blueColorCode; + return colorCode..text..FONT_COLOR_CODE_CLOSE; + end +end + +--[[ +-- ************************************************************************** +-- NAME : TitanPanelRegenButton_OnLoad() +-- DESC : Registers the plugin upon it loading +-- ************************************************************************** +--]] +function TitanPanelRegenButton_OnLoad(self) + local notes = "" + .."Adds a regen monitor to Titan Panel to show HP/MANA regen - Classic versions only.\n" + self.registry = { + id = TITAN_REGEN_ID, + category = "Built-ins", + version = TITAN_VERSION, + menuText = L["TITAN_REGEN_MENU_TEXT"], + buttonTextFunction = "TitanPanelRegenButton_GetButtonText", + tooltipTitle = L["TITAN_REGEN_MENU_TOOLTIP_TITLE"], + tooltipTextFunction = "TitanPanelRegenButton_GetTooltipText", + icon = "Interface\\AddOns\\TitanRegen\\TitanRegen", + iconWidth = 16, + notes = notes, + controlVariables = { + ShowIcon = true, + ShowLabelText = true, + ShowRegularText = false, + ShowColoredText = true, + DisplayOnRightSide = true, + }, + savedVariables = { + ShowIcon = true, + ShowLabelText = 1, + ShowHPRegen = 1, + ShowPercentage = false, + ShowColoredText = false, + DisplayOnRightSide = false, + } + } +end + +--[[ +-- ************************************************************************** +-- NAME : TitanPanelXPButton_OnEvent +-- DESC : Parse events registered to addon and act on them +-- ************************************************************************** +--]] +function TitanPanelRegenButton_OnEvent(self, event, a1, a2, ...) + if ( event == "PLAYER_ENTERING_WORLD") then + end + + if ( event == "PLAYER_REGEN_DISABLED") then + TITAN_RegenMPDuringCombat = 0; + TITAN_RegenMPCombatTrack = 1; + end + + if ( event == "PLAYER_REGEN_ENABLED") then + TITAN_RegenMPCombatTrack = 0; + end + + local currHealth = 0; + local currMana = 0; + local runUpdate = 0; + + if (TitanGetVar(TITAN_REGEN_ID,"ShowHPRegen") == 1) then + if ( event == "UNIT_HEALTH" and a1 == "player") then + currHealth = UnitHealth("player"); + runUpdate = 1; + if ( currHealth > TITAN_RegenCurrHealth and TITAN_RegenCurrHealth ~= 0 ) then + TITAN_RegenHP = currHealth-TITAN_RegenCurrHealth; + + if (TITAN_RegenHP > TITAN_RegenMaxHPRate) then + TITAN_RegenMaxHPRate = TITAN_RegenHP; + end + if (TITAN_RegenHP < TITAN_RegenMinHPRate or TITAN_RegenMinHPRate == 9999) then + TITAN_RegenMinHPRate = TITAN_RegenHP; + end + end + TITAN_RegenCurrHealth = currHealth; + end + end + + local pval, ptype = UnitPowerType("player") + if (pval == 0) then -- Mana + if ( event == "UNIT_POWER_UPDATE" and a1 == "player" and a2 == "MANA") then + currMana = UnitPower("player"); + runUpdate = 1; + if ( currMana > TITAN_RegenCurrMana and TITAN_RegenCurrMana ~= 0 ) then + TITAN_RegenMP = currMana-TITAN_RegenCurrMana; + + if (TITAN_RegenMPCombatTrack == 1) then + TITAN_RegenMPDuringCombat = TITAN_RegenMPDuringCombat + TITAN_RegenMP; + end + + if (TITAN_RegenMP > TITAN_RegenMaxMPRate) then + TITAN_RegenMaxMPRate = TITAN_RegenMP; + end + if (TITAN_RegenMP < TITAN_RegenMinMPRate or TITAN_RegenMinMPRate == 9999) then + TITAN_RegenMinMPRate = TITAN_RegenMP; + end + end + TITAN_RegenCurrMana = currMana; + end + end + + if (runUpdate == 1) then + TitanPanelPluginHandle_OnUpdate(updateTable) + end +end + +--[[ +-- ************************************************************************** +-- NAME : TitanPanelRegenButton_GetButtonText(id) +-- DESC : Calculate regeneration logic for button text +-- VARS : id = button ID +-- ************************************************************************** +--]] +function TitanPanelRegenButton_GetButtonText(id) + local labelTextHP = ""; + local valueTextHP = ""; + local labelTextMP = ""; + local valueTextMP = ""; + local OutputStr = ""; + + if UnitHealth("player") == UnitHealthMax("player") then + TITAN_RegenHP = 0; + end + if UnitPower("player") == UnitPowerMax("player", 0) then + TITAN_RegenMP = 0; + end + + -- safety in case both are off, then cant ever turn em on + if (TitanGetVar(TITAN_REGEN_ID,"ShowHPRegen") == nil) then + TitanSetVar(TITAN_REGEN_ID,"ShowHPRegen",1); + end + + if (TitanGetVar(TITAN_REGEN_ID,"ShowHPRegen") == 1) then + labelTextHP = L["TITAN_REGEN_BUTTON_TEXT_HP"]; + if (TitanGetVar(TITAN_REGEN_ID,"ShowPercentage") == 1) then + valueTextHP = format(TITAN_REGEN_HP_FORMAT_PERCENT, (TITAN_RegenHP/UnitHealthMax("player"))*100); + else + valueTextHP = format(TITAN_REGEN_HP_FORMAT, TITAN_RegenHP); + end + if (TitanGetVar(TITAN_REGEN_ID, "ShowColoredText")) then + valueTextHP = TitanUtils_GetGreenText(valueTextHP); + else + valueTextHP = TitanUtils_GetHighlightText(valueTextHP); + end + end + + local pval, ptype = UnitPowerType("player") + if (pval == 0) then -- Mana only + labelTextMP = L["TITAN_REGEN_BUTTON_TEXT_MP"]; + if (TitanGetVar(TITAN_REGEN_ID,"ShowPercentage") == 1) then + valueTextMP = format(TITAN_REGEN_MP_FORMAT_PERCENT, (TITAN_RegenMP/UnitPowerMax("player", 0))*100); + else + valueTextMP = format(TITAN_REGEN_MP_FORMAT, TITAN_RegenMP); + end + if (TitanGetVar(TITAN_REGEN_ID, "ShowColoredText")) then + valueTextMP = TitanRegenTemp_GetColoredTextRGB(valueTextMP, 0.0, 0.0, 1.0); + else + valueTextMP = TitanUtils_GetHighlightText(valueTextMP); + end + else + -- Not mana so do not show + end + + -- supports turning off labels +--[[ +print("Regen text" +.." hp'"..tostring(labelTextHP).."" +.." "..tostring(valueTextHP).."'" +.." mp'"..tostring(labelTextMP).."" +.." "..tostring(valueTextMP).."'" +) +--]] + return labelTextHP, valueTextHP, labelTextMP, valueTextMP; +end + +--[[ +-- ************************************************************************** +-- NAME : TitanPanelRegenButton_GetTooltipText() +-- DESC : Display tooltip text +-- ************************************************************************** +--]] +function TitanPanelRegenButton_GetTooltipText() + local minHP = TITAN_RegenMinHPRate; + local minMP = TITAN_RegenMinMPRate; + + if minHP == 9999 then minHP = 0 end; + if minMP == 9999 then minMP = 0 end; + + local txt = "" + + txt = txt.. + format(L["TITAN_REGEN_TOOLTIP1"], UnitHealth("player"),UnitHealthMax("player"),UnitHealthMax("player")-UnitHealth("player")).."\n".. + format(L["TITAN_REGEN_TOOLTIP3"], TITAN_RegenMaxHPRate).."\n".. + format(L["TITAN_REGEN_TOOLTIP4"], minHP).."\n" + + local pval, ptype = UnitPowerType("player") + if (pval == 0) then + local regenPercent = 0 + regenPercent = (TITAN_RegenMPDuringCombat/UnitPowerMax("player", 0))*100; + + txt = txt.."\n".. + format(L["TITAN_REGEN_TOOLTIP2"], UnitPower("player"),UnitPowerMax("player", 0),UnitPowerMax("player", 0)-UnitPower("player")).."\n".. + format(L["TITAN_REGEN_TOOLTIP5"], TITAN_RegenMaxMPRate).."\n".. + format(L["TITAN_REGEN_TOOLTIP6"], minMP).."\n".. + format(L["TITAN_REGEN_TOOLTIP7"], TITAN_RegenMPDuringCombat, regenPercent).."\n" + else + -- L["TITAN_REGEN_TOOLTIP2"] = "Mana: \t"..GREEN_FONT_COLOR_CODE.."%d"..FONT_COLOR_CODE_CLOSE.." / " ..HIGHLIGHT_FONT_COLOR_CODE.."%d"..FONT_COLOR_CODE_CLOSE.." ("..RED_FONT_COLOR_CODE.."%d"..FONT_COLOR_CODE_CLOSE..")"; + POWER = GREEN_FONT_COLOR_CODE.."%d"..FONT_COLOR_CODE_CLOSE.." / " ..HIGHLIGHT_FONT_COLOR_CODE.."%d"..FONT_COLOR_CODE_CLOSE + txt = txt.."\n".. + ptype.." \t".. + format(POWER, UnitPower("player"),UnitPowerMax("player", pval)).."\n" + -- Energy : The formula is (energyRegen)*(1+hastePercent) + end + + return txt +end + +--[[ +-- ************************************************************************** +-- NAME : TitanPanelRightClickMenu_PrepareTitanRegenMenu() +-- DESC : Display rightclick menu options +-- ************************************************************************** +--]] +function TitanPanelRightClickMenu_PrepareRegenMenu() + local id = TITAN_REGEN_ID; + local info; + + TitanPanelRightClickMenu_AddTitle(TitanPlugins[id].menuText); + + info = {}; + info.text = L["TITAN_REGEN_MENU_SHOW2"]; + info.func = function() + TitanToggleVar(TITAN_REGEN_ID, "ShowHPRegen"); + TitanPanelButton_UpdateButton(TITAN_REGEN_ID); + end + info.checked = TitanGetVar(TITAN_REGEN_ID,"ShowHPRegen"); + L_UIDropDownMenu_AddButton(info); + + info = {}; + info.text = L["TITAN_REGEN_MENU_SHOW4"]; + info.func = function() + TitanToggleVar(TITAN_REGEN_ID, "ShowPercentage"); + TitanPanelButton_UpdateButton(TITAN_REGEN_ID); + end + info.checked = TitanGetVar(TITAN_REGEN_ID,"ShowPercentage"); + L_UIDropDownMenu_AddButton(info); + + TitanPanelRightClickMenu_AddControlVars(TITAN_REGEN_ID) +end + +local function OnShow(self) + self:RegisterEvent("UNIT_HEALTH"); + self:RegisterEvent("UNIT_POWER_UPDATE"); + self:RegisterEvent("PLAYER_REGEN_DISABLED"); + self:RegisterEvent("PLAYER_REGEN_ENABLED"); +end + +local function OnHide(self) + self:UnregisterEvent("UNIT_HEALTH"); + self:UnregisterEvent("UNIT_POWER_UPDATE"); + self:UnregisterEvent("PLAYER_REGEN_DISABLED"); + self:UnregisterEvent("PLAYER_REGEN_ENABLED"); +end + +-- ====== Create needed frames +local function Create_Frames() + if _G[TITAN_BUTTON] then + return -- if already created + end + + -- general container frame + local f = CreateFrame("Frame", nil, UIParent) +-- f:Hide() + + -- Titan plugin button + local window = CreateFrame("Button", TITAN_BUTTON, f, "TitanPanelComboTemplate") + window:SetFrameStrata("FULLSCREEN") + -- Using SetScript("OnLoad", does not work + TitanPanelRegenButton_OnLoad(window); +-- TitanPanelButton_OnLoad(window); -- Titan XML template calls this... + + window:SetScript("OnShow", function(self) + OnShow(self); + TitanPanelButton_OnShow(self); + end) + window:SetScript("OnHide", function(self) + OnHide(self) + end) + window:SetScript("OnEvent", function(self, event, ...) + TitanPanelRegenButton_OnEvent(self, event, ...) + end) +end + + +Create_Frames() -- do the work diff --git a/TitanRegen/TitanRegen_Vanilla.toc b/TitanRegen/TitanRegen_Vanilla.toc index 3f756ef..6e7f802 100644 --- a/TitanRegen/TitanRegen_Vanilla.toc +++ b/TitanRegen/TitanRegen_Vanilla.toc @@ -6,4 +6,4 @@ ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -TitanClassicRegen.xml \ No newline at end of file +TitanRegen.lua \ No newline at end of file diff --git a/TitanRegen/TitanRegen_Wrath.toc b/TitanRegen/TitanRegen_Wrath.toc index 03f3e85..891885d 100644 --- a/TitanRegen/TitanRegen_Wrath.toc +++ b/TitanRegen/TitanRegen_Wrath.toc @@ -6,4 +6,4 @@ ## SavedVariables: ## OptionalDeps: ## Dependencies: TitanClassic -TitanClassicRegen.xml \ No newline at end of file +TitanRegen.lua \ No newline at end of file diff --git a/TitanXP/TitanXP.lua b/TitanXP/TitanXP.lua index 647e39a..d2540d8 100644 --- a/TitanXP/TitanXP.lua +++ b/TitanXP/TitanXP.lua @@ -139,7 +139,7 @@ end -- ************************************************************************** --]] function TitanPanelXPButton_OnEvent(self, event, a1, a2, ...) ----[[ +--[[ print("XP _OnEvent" .." "..tostring(event).."" ) -- 1.7.9.5