You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
900 lines
32 KiB
900 lines
32 KiB
--- ============================ HEADER ============================
|
|
--- ======= LOCALIZE =======
|
|
-- Addon
|
|
local addonName, HR = ...;
|
|
-- HeroLib
|
|
local HL = HeroLib;
|
|
local Cache = HeroCache;
|
|
local Unit = HL.Unit;
|
|
local Player = Unit.Player;
|
|
local Target = Unit.Target;
|
|
local Spell = HL.Spell;
|
|
local Item = HL.Item;
|
|
-- Lua
|
|
local pairs = pairs;
|
|
local stringlower = string.lower;
|
|
local tostring = tostring;
|
|
-- File Locals
|
|
|
|
|
|
|
|
--- ============================ CONTENT ============================
|
|
--- ======= MAIN FRAME =======
|
|
HR.MainIconFrame = CreateFrame("Frame", "HeroRotation_MainIconFrame", UIParent);
|
|
HR.MainIconPartOverlayFrame = CreateFrame("Frame", "HeroRotation_MainIconPartOverlayFrame", UIParent);
|
|
HR.MainIconFrame.Part = {};
|
|
HR.MainIconFrame.CooldownFrame = CreateFrame("Cooldown", "HeroRotation_MainIconCooldownFrame", HR.MainIconFrame, "AR_CooldownFrameTemplate");
|
|
HR.SmallIconFrame = CreateFrame("Frame", "HeroRotation_SmallIconFrame", UIParent);
|
|
HR.LeftIconFrame = CreateFrame("Frame", "HeroRotation_LeftIconFrame", UIParent);
|
|
HR.NameplateIconFrame = CreateFrame("Frame", "HeroRotation_NameplateIconFrame", UIParent);
|
|
HR.NameplateSuggestedIconFrame = CreateFrame("Frame", "HeroRotation_NameplateSuggestedIconFrame", UIParent);
|
|
HR.SuggestedIconFrame = CreateFrame("Frame", "HeroRotation_SuggestedIconFrame", UIParent);
|
|
HR.RightSuggestedIconFrame = CreateFrame("Frame", "HeroRotation_RightSuggestedIconFrame", UIParent);
|
|
HR.ToggleIconFrame = CreateFrame("Frame", "HeroRotation_ToggleIconFrame", UIParent);
|
|
|
|
--- ======= MISC =======
|
|
-- Reset Textures
|
|
local IdleSpellTexture = HR.GetTexture(Spell(999900));
|
|
function HR.ResetIcons ()
|
|
-- Main Icon
|
|
HR.MainIconFrame:Hide();
|
|
if HR.GUISettings.General.BlackBorderIcon then HR.MainIconFrame.Backdrop:Hide(); end
|
|
HR.MainIconPartOverlayFrame:Hide();
|
|
HR.MainIconFrame:HideParts();
|
|
|
|
-- Small Icons
|
|
HR.SmallIconFrame:HideIcons();
|
|
HR.CastOffGCDOffset = 1;
|
|
|
|
-- Left/Nameplate Icons
|
|
HR.Nameplate.HideIcons();
|
|
HR.CastLeftOffset = 1;
|
|
|
|
-- Suggested Icon
|
|
HR.SuggestedIconFrame:HideIcon();
|
|
if HR.GUISettings.General.BlackBorderIcon then HR.SuggestedIconFrame.Backdrop:Hide(); end
|
|
HR.CastSuggestedOffset = 1;
|
|
|
|
-- Right Suggested Icon
|
|
HR.RightSuggestedIconFrame:HideIcon();
|
|
if HR.GUISettings.General.BlackBorderIcon then HR.RightSuggestedIconFrame.Backdrop:Hide(); end
|
|
HR.CastRightSuggestedOffset = 1;
|
|
|
|
-- Toggle icons
|
|
if HR.GUISettings.General.HideToggleIcons then HR.ToggleIconFrame:Hide(); end
|
|
if not HR.GUISettings.General.HideToggleIcons then HR.ToggleIconFrame:SetAlpha(HR.GUISettings.General.SetAlpha); end
|
|
end
|
|
|
|
-- Create a Backdrop
|
|
function HR:CreateBackdrop (Frame, Strata)
|
|
if Frame.Backdrop or not HR.GUISettings.General.BlackBorderIcon then return; end
|
|
|
|
local Backdrop = CreateFrame("Frame", nil, Frame, BackdropTemplateMixin and "BackdropTemplate");
|
|
Frame.Backdrop = Backdrop;
|
|
Backdrop:ClearAllPoints();
|
|
Backdrop:SetPoint("TOPLEFT", Frame, "TOPLEFT", -1, 1);
|
|
Backdrop:SetPoint("BOTTOMRIGHT", Frame, "BOTTOMRIGHT", 1, -1);
|
|
|
|
Backdrop:SetBackdrop({
|
|
bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
|
|
edgeFile = "Interface\\ChatFrame\\ChatFrameBackground",
|
|
tile = false,
|
|
tileSize = 0,
|
|
edgeSize = 1,
|
|
insets = { left = 0, right = 0, top = 0, bottom = 0 },
|
|
});
|
|
|
|
Backdrop:SetBackdropBorderColor(0, 0, 0);
|
|
Backdrop:SetBackdropColor(0, 0, 0, 1);
|
|
|
|
if not Strata then Strata = HR.MainFrame:GetFrameStrata() end
|
|
Backdrop:SetFrameStrata(Strata);
|
|
if Frame:GetFrameLevel() - 2 >= 0 then
|
|
Backdrop:SetFrameLevel(Frame:GetFrameLevel() - 2);
|
|
else
|
|
Backdrop:SetFrameLevel(0);
|
|
end
|
|
end
|
|
|
|
--- ======= MAIN ICON =======
|
|
-- Init
|
|
function HR.MainIconFrame:Init ()
|
|
-- Frame Init
|
|
self:SetFrameStrata(HR.MainFrame:GetFrameStrata());
|
|
self:SetFrameLevel(HR.MainFrame:GetFrameLevel() - 1);
|
|
self:SetWidth(64);
|
|
self:SetHeight(64);
|
|
self:SetPoint("BOTTOMRIGHT", HR.MainFrame, "BOTTOMRIGHT", 0, 0);
|
|
-- Texture
|
|
self.Texture = self:CreateTexture(nil, "ARTWORK");
|
|
self.Texture:SetAllPoints(self);
|
|
-- Cooldown
|
|
self.CooldownFrame:SetAllPoints(self);
|
|
-- Multi-Cast Parts Overlay
|
|
HR.MainIconPartOverlayFrame:SetFrameStrata(self:GetFrameStrata());
|
|
HR.MainIconPartOverlayFrame:SetFrameLevel(self:GetFrameLevel() + 1);
|
|
HR.MainIconPartOverlayFrame:SetWidth(64);
|
|
HR.MainIconPartOverlayFrame:SetHeight(64);
|
|
HR.MainIconPartOverlayFrame:SetPoint("Left", self, "Left", 0, 0);
|
|
HR.MainIconPartOverlayFrame.Texture = HR.MainIconPartOverlayFrame:CreateTexture(nil, "ARTWORK");
|
|
HR.MainIconPartOverlayFrame.Texture:SetAllPoints(HR.MainIconPartOverlayFrame);
|
|
-- Keybind
|
|
local KeybindFrame = self:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
|
|
self.Keybind = KeybindFrame;
|
|
KeybindFrame:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE");
|
|
KeybindFrame:SetAllPoints(true);
|
|
KeybindFrame:SetJustifyH("RIGHT");
|
|
KeybindFrame:SetJustifyV("TOP");
|
|
KeybindFrame:SetPoint("TOPRIGHT");
|
|
KeybindFrame:SetTextColor(0.8,0.8,0.8,1);
|
|
KeybindFrame:SetText("");
|
|
-- Overlay Text
|
|
local TextFrame = self:CreateFontString(nil, "OVERLAY", "GameFontNormal");
|
|
self.Text = TextFrame;
|
|
TextFrame:SetAllPoints(true);
|
|
TextFrame:SetJustifyH("CENTER");
|
|
TextFrame:SetJustifyV("CENTER");
|
|
TextFrame:SetPoint("CENTER");
|
|
TextFrame:SetTextColor(1,1,1,1);
|
|
TextFrame:SetText("");
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
self.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(self);
|
|
end
|
|
-- Parts
|
|
self:InitParts();
|
|
-- Display
|
|
self:Show();
|
|
end
|
|
|
|
-- Change Icon
|
|
function HR.MainIconFrame:ChangeIcon (Texture, Keybind, Usable, OutofRange, ID)
|
|
self.ID = ID
|
|
-- Texture
|
|
self.Texture:SetTexture(Texture);
|
|
if HR.GUISettings.General.NotEnoughManaEnabled and not Usable then
|
|
self.Texture:SetVertexColor(0.5, 0.5, 1.0)
|
|
elseif OutofRange then
|
|
self.Texture:SetVertexColor(1.0, 0.5, 0.5)
|
|
else
|
|
self.Texture:SetVertexColor(1.0, 1.0, 1.0)
|
|
end
|
|
self.Texture:SetAllPoints(self);
|
|
-- Keybind
|
|
if Keybind then
|
|
self.Keybind:SetText(Keybind);
|
|
self.Keybind:SetScale(HR.GUISettings.Scaling.ScaleHotkey);
|
|
else
|
|
self.Keybind:SetText("");
|
|
end
|
|
-- Overlay Text
|
|
self.Text:SetText("");
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon and not self.Backdrop:IsVisible() then
|
|
self.Backdrop:Show();
|
|
end
|
|
-- Alpha
|
|
self:SetAlpha(HR.GUISettings.General.SetAlpha);
|
|
-- Display
|
|
if not self:IsVisible() then
|
|
self:Show();
|
|
end
|
|
end
|
|
-- Set text on frame
|
|
function HR.MainIconFrame:OverlayText(Text, FontSize)
|
|
local Font = self.Text:GetFont()
|
|
if FontSize then
|
|
self.Text:SetFont(Font, FontSize)
|
|
else
|
|
self.Text:SetFont(Font, 12)
|
|
end
|
|
self.Text:SetText(Text);
|
|
end
|
|
-- Set a Cooldown Frame
|
|
function HR.MainIconFrame:SetCooldown (Start, Duration)
|
|
if Start == 0 or Duration == 0 then
|
|
self.CooldownFrame:SetCooldown(0, 0);
|
|
self.CooldownFrame:Hide();
|
|
return;
|
|
end
|
|
|
|
self.CooldownFrame:SetCooldown(Start, Duration);
|
|
end
|
|
function HR.MainIconFrame:InitParts ()
|
|
HR.MainIconPartOverlayFrame:Show();
|
|
for i = 1, HR.MaxQueuedCasts do
|
|
-- Frame Init
|
|
local PartFrame = CreateFrame("Frame", "HeroRotation_MainIconPartFrame"..tostring(i), UIParent);
|
|
self.Part[i] = PartFrame;
|
|
PartFrame:SetFrameStrata(self:GetFrameStrata());
|
|
PartFrame:SetFrameLevel(self:GetFrameLevel() + 1);
|
|
PartFrame:SetWidth(64);
|
|
PartFrame:SetHeight(64);
|
|
PartFrame:SetPoint("Left", self, "Left", 0, 0);
|
|
-- Texture
|
|
PartFrame.Texture = PartFrame:CreateTexture(nil, "BACKGROUND");
|
|
-- Keybind
|
|
PartFrame.Keybind = self:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
|
|
PartFrame.Keybind:SetFont("Fonts\\FRIZQT__.TTF", 13, "OUTLINE");
|
|
PartFrame.Keybind:SetAllPoints(true);
|
|
PartFrame.Keybind:SetJustifyH("RIGHT");
|
|
PartFrame.Keybind:SetJustifyV("TOP");
|
|
PartFrame.Keybind:SetPoint("TOPRIGHT");
|
|
PartFrame.Keybind:SetTextColor(0.8,0.8,0.8,1);
|
|
PartFrame.Keybind:SetText("");
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
PartFrame.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(PartFrame);
|
|
end
|
|
-- Display
|
|
PartFrame:Show();
|
|
end
|
|
end
|
|
local QueuedCasts, FrameWidth;
|
|
function HR.MainIconFrame:SetupParts (Textures, Keybinds)
|
|
QueuedCasts = #Textures;
|
|
FrameWidth = HR.MainIconPartOverlayFrame.Texture:GetWidth() / QueuedCasts
|
|
local ULx, ULy, LLx, LLy, URx, URy, LRx, LRy = HR.MainIconPartOverlayFrame.Texture:GetTexCoord();
|
|
for i = 1, QueuedCasts do
|
|
local PartFrame = self.Part[i];
|
|
-- Size and Position
|
|
PartFrame:SetWidth(FrameWidth);
|
|
PartFrame:SetHeight(FrameWidth*QueuedCasts);
|
|
PartFrame:ClearAllPoints();
|
|
local _, AnchorPoint = HR.MainIconPartOverlayFrame.Texture:GetPoint();
|
|
if HR.MainIconPartOverlayFrame.__MSQ_NormalColor then
|
|
if i == HR.MaxQueuedCasts or i == QueuedCasts then
|
|
PartFrame:SetPoint("Center", AnchorPoint, "Center", FrameWidth/(4-QueuedCasts), 0);
|
|
else
|
|
PartFrame:SetPoint("Center", AnchorPoint, "Center", (FrameWidth/(4-QueuedCasts))*(i-2), 0);
|
|
end
|
|
else
|
|
PartFrame:SetPoint("Left", AnchorPoint, "Left", FrameWidth*(i-1), 0);
|
|
end
|
|
-- Texture and Backdrop
|
|
PartFrame.Texture:SetTexture(Textures[i]);
|
|
PartFrame.Texture:SetAllPoints(PartFrame);
|
|
if PartFrame.Backdrop then
|
|
if HR.MainIconPartOverlayFrame.__MSQ_NormalColor then
|
|
PartFrame.Backdrop:Hide();
|
|
else
|
|
PartFrame.Backdrop:Show();
|
|
end
|
|
end
|
|
local Blackborder = HR.GUISettings.General.BlackBorderIcon and not HR.MainIconPartOverlayFrame.__MSQ_NormalColor;
|
|
local leftxslice = ((i-1)/QueuedCasts);
|
|
local rightxslice = (i/QueuedCasts);
|
|
PartFrame.Texture:SetTexCoord(
|
|
i == 1 and (Blackborder and ULx + 0.08 or ULx) or (URx * leftxslice),
|
|
i == 1 and (Blackborder and ULy + 0.08 or ULy) or (Blackborder and URy + 0.08 or URy),
|
|
i == 1 and (Blackborder and LLx + 0.08 or LLx) or (LRx * leftxslice),
|
|
i == 1 and (Blackborder and LLy - 0.08 or LLy) or (Blackborder and LRy - 0.08 or LRy),
|
|
(i == QueuedCasts and Blackborder) and (URx * rightxslice) - 0.08 or URx * rightxslice,
|
|
Blackborder and URy + 0.08 or URy,
|
|
(i == QueuedCasts and Blackborder) and (LRx * rightxslice) - 0.08 or LRx * rightxslice,
|
|
Blackborder and LRy - 0.08 or LRy
|
|
);
|
|
|
|
-- Keybind
|
|
if Keybinds[i] then
|
|
PartFrame.Keybind:SetText(Keybinds[i]);
|
|
PartFrame.Keybind:SetScale(HR.GUISettings.Scaling.ScaleHotkey);
|
|
else
|
|
PartFrame.Keybind:SetText("");
|
|
end
|
|
-- Display
|
|
if not PartFrame:IsVisible() then
|
|
HR.MainIconPartOverlayFrame:Show();
|
|
PartFrame:Show();
|
|
end
|
|
end
|
|
end
|
|
function HR.MainIconFrame:HideParts ()
|
|
self.ID = nil
|
|
HR.MainIconPartOverlayFrame:Hide();
|
|
for i = 1, #self.Part do
|
|
self.Part[i].Keybind:SetText("");
|
|
self.Part[i]:Hide();
|
|
end
|
|
end
|
|
-- Get Icon spell ID
|
|
function HR.MainIconFrame:getIconID ()
|
|
if self.ID then
|
|
return self.ID
|
|
end
|
|
return nil
|
|
end
|
|
|
|
--- ======= SMALL ICONS =======
|
|
-- Init
|
|
function HR.SmallIconFrame:Init ()
|
|
-- Frame Container
|
|
self:SetFrameStrata(HR.MainFrame:GetFrameStrata());
|
|
self:SetFrameLevel(HR.MainFrame:GetFrameLevel() - 1);
|
|
self:SetWidth(64);
|
|
self:SetHeight(32);
|
|
self:SetPoint("BOTTOMLEFT", HR.MainIconFrame, "TOPLEFT", 0, HR.GUISettings.General.BlackBorderIcon and 1 or 0);
|
|
|
|
-- Frames
|
|
self.Icon = {};
|
|
self:CreateIcons(1, "LEFT");
|
|
self:CreateIcons(2, "RIGHT");
|
|
|
|
-- Display
|
|
self:Show();
|
|
end
|
|
-- Create Small Icons Frames
|
|
function HR.SmallIconFrame:CreateIcons (Index, Align)
|
|
-- Frame Init
|
|
local IconFrame = CreateFrame("Frame", "HeroRotation_SmallIconFrame"..tostring(Index), UIParent);
|
|
self.Icon[Index] = IconFrame;
|
|
IconFrame:SetFrameStrata(self:GetFrameStrata());
|
|
IconFrame:SetFrameLevel(self:GetFrameLevel() - 1);
|
|
IconFrame:SetWidth(HR.GUISettings.General.BlackBorderIcon and 30 or 32);
|
|
IconFrame:SetHeight(HR.GUISettings.General.BlackBorderIcon and 30 or 32);
|
|
IconFrame:SetPoint(Align, self, Align, 0, 0);
|
|
-- Texture
|
|
IconFrame.Texture = IconFrame:CreateTexture(nil, "ARTWORK");
|
|
-- Keybind
|
|
local Keybind = IconFrame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
|
|
IconFrame.Keybind = Keybind;
|
|
Keybind:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE");
|
|
Keybind:SetAllPoints(true);
|
|
Keybind:SetJustifyH("RIGHT");
|
|
Keybind:SetJustifyV("TOP");
|
|
Keybind:SetPoint("TOPRIGHT");
|
|
Keybind:SetTextColor(0.8,0.8,0.8,1);
|
|
Keybind:SetText("");
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
IconFrame.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(IconFrame);
|
|
end
|
|
-- Display
|
|
IconFrame:Show();
|
|
end
|
|
-- Change Icon
|
|
function HR.SmallIconFrame:ChangeIcon (FrameID, Texture, Keybind, OutofRange)
|
|
local IconFrame = self.Icon[FrameID];
|
|
-- Texture
|
|
IconFrame.Texture:SetTexture(Texture);
|
|
IconFrame.Texture:SetAllPoints(IconFrame);
|
|
-- Out of Range
|
|
if OutofRange then
|
|
IconFrame.Texture:SetVertexColor(1.0, 0.5, 0.5)
|
|
else
|
|
IconFrame.Texture:SetVertexColor(1.0, 1.0, 1.0)
|
|
end
|
|
-- Keybind
|
|
if Keybind then
|
|
IconFrame.Keybind:SetText(Keybind);
|
|
IconFrame.Keybind:SetScale(HR.GUISettings.Scaling.ScaleHotkey * 0.85);
|
|
else
|
|
IconFrame.Keybind:SetText("");
|
|
end
|
|
-- Alpha
|
|
IconFrame:SetAlpha(HR.GUISettings.General.SetAlpha);
|
|
-- Display
|
|
if not IconFrame:IsVisible() then
|
|
IconFrame:Show();
|
|
end
|
|
end
|
|
-- Get Icon
|
|
function HR.SmallIconFrame:GetIcon (FrameID)
|
|
local IconFrame = self.Icon[FrameID];
|
|
if IconFrame and IconFrame:IsVisible() then
|
|
return IconFrame.Texture:GetTexture();
|
|
end
|
|
return nil;
|
|
end
|
|
-- Get Keybind
|
|
function HR.SmallIconFrame:GetKeybind (FrameID)
|
|
local IconFrame = self.Icon[FrameID];
|
|
if IconFrame and IconFrame:IsVisible() then
|
|
return IconFrame.Keybind:GetText();
|
|
end
|
|
return "";
|
|
end
|
|
-- Hide Small Icons
|
|
function HR.SmallIconFrame:HideIcons ()
|
|
for i = 1, #self.Icon do
|
|
self.Icon[i]:Hide();
|
|
end
|
|
end
|
|
|
|
--- ======= LEFT ICON =======
|
|
-- Init LeftIcon
|
|
function HR.LeftIconFrame:Init ()
|
|
-- Frame Init
|
|
self:SetFrameStrata(HR.MainFrame:GetFrameStrata());
|
|
self:SetFrameLevel(HR.MainFrame:GetFrameLevel() - 1);
|
|
self:SetWidth(48);
|
|
self:SetHeight(48);
|
|
self:SetPoint("RIGHT", HR.MainIconFrame, "LEFT", HR.GUISettings.General.BlackBorderIcon and -1 or 0, 0);
|
|
-- Texture
|
|
self.Texture = self:CreateTexture(nil, "BACKGROUND");
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
self.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(self);
|
|
end
|
|
-- Keybind
|
|
local KeybindFrame = self:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
|
|
self.Keybind = KeybindFrame;
|
|
KeybindFrame:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE");
|
|
KeybindFrame:SetAllPoints(true);
|
|
KeybindFrame:SetJustifyH("RIGHT");
|
|
KeybindFrame:SetJustifyV("TOP");
|
|
KeybindFrame:SetPoint("TOPRIGHT");
|
|
KeybindFrame:SetTextColor(0.8,0.8,0.8,1);
|
|
KeybindFrame:SetText("");
|
|
-- Display
|
|
self:Show();
|
|
end
|
|
-- Change Icon
|
|
function HR.LeftIconFrame:ChangeIcon (Texture, Keybind)
|
|
-- Texture
|
|
self.Texture:SetTexture(Texture);
|
|
self.Texture:SetAllPoints(self);
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon and not self.Backdrop:IsVisible() then
|
|
self.Backdrop:Show();
|
|
end
|
|
-- Keybind
|
|
if Keybind then
|
|
self.Keybind:SetText(Keybind);
|
|
self.Keybind:SetScale(HR.GUISettings.Scaling.ScaleHotkey);
|
|
else
|
|
self.Keybind:SetText("");
|
|
end
|
|
-- Alpha
|
|
self:SetAlpha(HR.GUISettings.General.SetAlpha);
|
|
-- Display
|
|
if not self:IsVisible() then
|
|
self:Show();
|
|
end
|
|
end
|
|
|
|
--- ======= NAMEPLATES =======
|
|
HR.Nameplate = {
|
|
MainInitialized = false,
|
|
SuggestedInitialized = false
|
|
};
|
|
-- Add the Icon on Nameplates
|
|
function HR.Nameplate.AddIcon (ThisUnit, Object)
|
|
if HR.GUISettings.General.NamePlateIconAnchor == "Disable" then return true end
|
|
local Token = stringlower(ThisUnit.UnitID);
|
|
local Nameplate = C_NamePlate.GetNamePlateForUnit(Token);
|
|
if Nameplate then
|
|
-- Locals
|
|
local ScreenHeight = GetScreenHeight();
|
|
local NameplateScaler = (ScreenHeight > 768) and (768 / ScreenHeight) or 1;
|
|
local NameplateIconSize = Nameplate:GetHeight() / NameplateScaler;
|
|
local HealthBar;
|
|
if HR.GUISettings.General.NamePlateIconAnchor == "Life Bar" then
|
|
if _G.ElvUI and _G.ElvUI[1].charSettings.profile.nameplates.enable then
|
|
HealthBar = Nameplate.unitFrame.Health;
|
|
NameplateIconSize = HealthBar:GetWidth() / 3.5;
|
|
elseif _G.ShestakUI and _G.ShestakUI[2].nameplate.enable then
|
|
HealthBar = Nameplate.unitFrame.Health;
|
|
NameplateIconSize = (HealthBar:GetWidth() / NameplateScaler) / 3.5;
|
|
else
|
|
HealthBar = Nameplate.UnitFrame.healthBar;
|
|
NameplateIconSize = (HealthBar:GetWidth() / NameplateScaler) / 3.5;
|
|
end
|
|
end
|
|
local IconFrame = HR.NameplateIconFrame;
|
|
|
|
-- Init Frame if not already
|
|
if not HR.Nameplate.MainInitialized then
|
|
-- Frame
|
|
IconFrame:SetFrameStrata(Nameplate:GetFrameStrata());
|
|
IconFrame:SetFrameLevel(Nameplate:GetFrameLevel() + 50);
|
|
IconFrame:SetWidth(NameplateIconSize);
|
|
IconFrame:SetHeight(NameplateIconSize);
|
|
-- Texture
|
|
IconFrame.Texture = IconFrame:CreateTexture(nil, "BACKGROUND");
|
|
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
IconFrame.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(IconFrame, Nameplate:GetFrameStrata());
|
|
end
|
|
|
|
HR.Nameplate.MainInitialized = true;
|
|
end
|
|
|
|
-- Set the Texture
|
|
IconFrame.Texture:SetTexture(HR.GetTexture(Object));
|
|
IconFrame.Texture:SetAllPoints(IconFrame);
|
|
local SpellAlpha = 1;
|
|
IconFrame.Texture:SetAlpha(SpellAlpha);
|
|
IconFrame:ClearAllPoints();
|
|
IconFrame:SetAlpha(HR.GUISettings.General.SetAlpha);
|
|
if not IconFrame:IsVisible() then
|
|
if HR.GUISettings.General.NamePlateIconAnchor == "Life Bar" then
|
|
IconFrame:SetPoint("CENTER", HealthBar);
|
|
else
|
|
IconFrame:SetPoint("CENTER", Nameplate);
|
|
end
|
|
IconFrame:Show();
|
|
end
|
|
|
|
-- Register the Unit for Error Checks (see Not Facing Unit Blacklist in Events.lua)
|
|
HR.LastUnitCycled = ThisUnit;
|
|
HR.LastUnitCycledTime = GetTime();
|
|
|
|
return true;
|
|
end
|
|
return false;
|
|
end
|
|
|
|
function HR.Nameplate.AddSuggestedIcon (ThisUnit, Object)
|
|
if HR.GUISettings.General.NamePlateIconAnchor == "Disable" then return true end
|
|
local Token = stringlower(ThisUnit.UnitID);
|
|
local Nameplate = C_NamePlate.GetNamePlateForUnit(Token);
|
|
if Nameplate then
|
|
-- Locals
|
|
local ScreenHeight = GetScreenHeight();
|
|
local NameplateScaler = (ScreenHeight > 768) and (768 / ScreenHeight) or 1;
|
|
local NameplateIconSize = Nameplate:GetHeight() / NameplateScaler;
|
|
local HealthBar;
|
|
if HR.GUISettings.General.NamePlateIconAnchor == "Life Bar" then
|
|
if _G.ElvUI and _G.ElvUI[1].charSettings.profile.nameplates.enable then
|
|
HealthBar = Nameplate.unitFrame.Health;
|
|
NameplateIconSize = HealthBar:GetWidth() / 3.5;
|
|
elseif _G.ShestakUI and _G.ShestakUI[2].nameplate.enable then
|
|
HealthBar = Nameplate.unitFrame.Health;
|
|
NameplateIconSize = (HealthBar:GetWidth() / NameplateScaler) / 3.5;
|
|
else
|
|
HealthBar = Nameplate.UnitFrame.healthBar;
|
|
NameplateIconSize = (HealthBar:GetWidth() / NameplateScaler) / 3.5;
|
|
end
|
|
end
|
|
local SuggestedIconFrame = HR.NameplateSuggestedIconFrame;
|
|
|
|
-- Init Frame if not already
|
|
if not HR.Nameplate.SuggestedInitialized then
|
|
-- Frame
|
|
SuggestedIconFrame:SetFrameStrata(Nameplate:GetFrameStrata());
|
|
SuggestedIconFrame:SetFrameLevel(Nameplate:GetFrameLevel() + 50);
|
|
SuggestedIconFrame:SetWidth(NameplateIconSize);
|
|
SuggestedIconFrame:SetHeight(NameplateIconSize);
|
|
-- Texture
|
|
SuggestedIconFrame.Texture = SuggestedIconFrame:CreateTexture(nil, "BACKGROUND");
|
|
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
SuggestedIconFrame.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(SuggestedIconFrame, Nameplate:GetFrameStrata());
|
|
end
|
|
|
|
HR.Nameplate.SuggestedInitialized = true;
|
|
end
|
|
|
|
|
|
|
|
-- Set the Texture
|
|
SuggestedIconFrame.Texture:SetTexture(HR.GetTexture(Object));
|
|
SuggestedIconFrame.Texture:SetAllPoints(SuggestedIconFrame);
|
|
local SpellAlpha = 1;
|
|
SuggestedIconFrame.Texture:SetAlpha(SpellAlpha);
|
|
SuggestedIconFrame:ClearAllPoints();
|
|
SuggestedIconFrame:SetAlpha(HR.GUISettings.General.SetAlpha);
|
|
if not SuggestedIconFrame:IsVisible() then
|
|
if HR.GUISettings.General.NamePlateIconAnchor == "Life Bar" then
|
|
SuggestedIconFrame:SetPoint("RIGHT", HealthBar);
|
|
else
|
|
SuggestedIconFrame:SetPoint("RIGHT", Nameplate);
|
|
end
|
|
SuggestedIconFrame:Show();
|
|
end
|
|
|
|
-- Register the Unit for Error Checks (see Not Facing Unit Blacklist in Events.lua)
|
|
HR.LastUnitCycled = ThisUnit;
|
|
HR.LastUnitCycledTime = GetTime();
|
|
|
|
return true;
|
|
end
|
|
return false;
|
|
end
|
|
-- Remove Icons
|
|
function HR.Nameplate.HideIcons ()
|
|
-- Nameplate Icon
|
|
HR.NameplateIconFrame:Hide();
|
|
-- Left Icon
|
|
HR.LeftIconFrame:Hide();
|
|
-- Suggested
|
|
HR.NameplateSuggestedIconFrame:Hide();
|
|
end
|
|
|
|
--- ======= SUGGESTED ICON =======
|
|
-- Init
|
|
function HR.SuggestedIconFrame:Init ()
|
|
-- Frame Init
|
|
self:SetFrameStrata(HR.MainFrame:GetFrameStrata());
|
|
self:SetFrameLevel(HR.MainFrame:GetFrameLevel() - 1);
|
|
self:SetWidth(32);
|
|
self:SetHeight(32);
|
|
self:SetPoint("BOTTOM", HR.MainIconFrame, "LEFT", -HR.LeftIconFrame:GetWidth()/2, HR.LeftIconFrame:GetHeight()/2+(HR.GUISettings.General.BlackBorderIcon and 3 or 4));
|
|
-- Texture
|
|
self.Texture = self:CreateTexture(nil, "BACKGROUND");
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
self.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(self);
|
|
end
|
|
-- Keybind
|
|
local KeybindFrame = self:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
|
|
self.Keybind = KeybindFrame;
|
|
KeybindFrame:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE");
|
|
KeybindFrame:SetAllPoints(true);
|
|
KeybindFrame:SetJustifyH("RIGHT");
|
|
KeybindFrame:SetJustifyV("TOP");
|
|
KeybindFrame:SetPoint("TOPRIGHT");
|
|
KeybindFrame:SetTextColor(0.8,0.8,0.8,1);
|
|
KeybindFrame:SetText("");
|
|
-- Display
|
|
self:Show();
|
|
end
|
|
-- Change Icon
|
|
function HR.SuggestedIconFrame:ChangeIcon (Texture, Keybind, OutofRange, ID)
|
|
self.ID = ID
|
|
-- Texture
|
|
self.Texture:SetTexture(Texture);
|
|
self.Texture:SetAllPoints(self);
|
|
-- Out of Range
|
|
if OutofRange then
|
|
self.Texture:SetVertexColor(1.0, 0.5, 0.5)
|
|
else
|
|
self.Texture:SetVertexColor(1.0, 1.0, 1.0)
|
|
end
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon and not self.Backdrop:IsVisible() then
|
|
self.Backdrop:Show();
|
|
end
|
|
-- Keybind
|
|
if Keybind then
|
|
self.Keybind:SetText(Keybind);
|
|
self.Keybind:SetScale(HR.GUISettings.Scaling.ScaleHotkey * 0.85);
|
|
else
|
|
self.Keybind:SetText("");
|
|
end
|
|
-- Alpha
|
|
self:SetAlpha(HR.GUISettings.General.SetAlpha);
|
|
-- Display
|
|
if not self:IsVisible() then
|
|
self:Show();
|
|
end
|
|
end
|
|
-- Hide Icon
|
|
function HR.SuggestedIconFrame:HideIcon ()
|
|
self.ID = nil
|
|
HR.SuggestedIconFrame:Hide();
|
|
end
|
|
-- Get Icon spell ID
|
|
function HR.SuggestedIconFrame:getIconID ()
|
|
if self.ID then
|
|
return self.ID
|
|
end
|
|
return nil
|
|
end
|
|
|
|
--- ======= RIGHT SUGGESTED ICON =======
|
|
-- Init
|
|
function HR.RightSuggestedIconFrame:Init ()
|
|
-- Frame Init
|
|
self:SetFrameStrata(HR.MainFrame:GetFrameStrata());
|
|
self:SetFrameLevel(HR.MainFrame:GetFrameLevel() - 1);
|
|
self:SetWidth(32);
|
|
self:SetHeight(32);
|
|
self:SetPoint("BOTTOM", HR.MainIconFrame, "LEFT", HR.LeftIconFrame:GetWidth()/2, HR.LeftIconFrame:GetHeight()/2+(HR.GUISettings.General.BlackBorderIcon and 3 or 4));
|
|
-- Texture
|
|
self.Texture = self:CreateTexture(nil, "BACKGROUND");
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon then
|
|
self.Texture:SetTexCoord(.08, .92, .08, .92);
|
|
HR:CreateBackdrop(self);
|
|
end
|
|
-- Keybind
|
|
local KeybindFrame = self:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
|
|
self.Keybind = KeybindFrame;
|
|
KeybindFrame:SetFont("Fonts\\FRIZQT__.TTF", 14, "OUTLINE");
|
|
KeybindFrame:SetAllPoints(true);
|
|
KeybindFrame:SetJustifyH("RIGHT");
|
|
KeybindFrame:SetJustifyV("TOP");
|
|
KeybindFrame:SetPoint("TOPRIGHT");
|
|
KeybindFrame:SetTextColor(0.8,0.8,0.8,1);
|
|
KeybindFrame:SetText("");
|
|
-- Display
|
|
self:Show();
|
|
end
|
|
-- Change Icon
|
|
function HR.RightSuggestedIconFrame:ChangeIcon (Texture, Keybind, OutofRange, ID)
|
|
self.ID = ID
|
|
-- Texture
|
|
self.Texture:SetTexture(Texture);
|
|
self.Texture:SetAllPoints(self);
|
|
-- Out of Range
|
|
if OutofRange then
|
|
self.Texture:SetVertexColor(1.0, 0.5, 0.5)
|
|
else
|
|
self.Texture:SetVertexColor(1.0, 1.0, 1.0)
|
|
end
|
|
-- Black Border Icon
|
|
if HR.GUISettings.General.BlackBorderIcon and not self.Backdrop:IsVisible() then
|
|
self.Backdrop:Show();
|
|
end
|
|
-- Keybind
|
|
if Keybind then
|
|
self.Keybind:SetText(Keybind);
|
|
self.Keybind:SetScale(HR.GUISettings.Scaling.ScaleHotkey * 0.85);
|
|
else
|
|
self.Keybind:SetText("");
|
|
end
|
|
-- Alpha
|
|
self:SetAlpha(HR.GUISettings.General.SetAlpha);
|
|
-- Display
|
|
if not self:IsVisible() then
|
|
self:Show();
|
|
end
|
|
end
|
|
-- Hide Icon
|
|
function HR.RightSuggestedIconFrame:HideIcon ()
|
|
self.ID = nil
|
|
HR.RightSuggestedIconFrame:Hide();
|
|
end
|
|
-- Get Icon spell ID
|
|
function HR.RightSuggestedIconFrame:getIconID ()
|
|
if self.ID then
|
|
return self.ID
|
|
end
|
|
return nil
|
|
end
|
|
|
|
--- ======= TOGGLES =======
|
|
-- Init
|
|
function HR.ToggleIconFrame:Init ()
|
|
-- Frame Init
|
|
self:SetFrameStrata(HR.MainFrame:GetFrameStrata());
|
|
self:SetFrameLevel(HR.MainFrame:GetFrameLevel() - 1);
|
|
self:SetWidth(64);
|
|
self:SetHeight(20);
|
|
|
|
-- Reset the Anchor if saved data are not valid (i.e. data saved before 7.1.5843)
|
|
-- TODO: Remove this part later.
|
|
if HeroRotationDB and HeroRotationDB.ButtonsFramePos and type(HeroRotationDB.ButtonsFramePos[2]) ~= "string" then
|
|
self:ResetAnchor();
|
|
end
|
|
|
|
-- Anchor based on Settings
|
|
if HeroRotationDB and HeroRotationDB.ButtonsFramePos then
|
|
self:SetPoint(HeroRotationDB.ButtonsFramePos[1], _G[HeroRotationDB.ButtonsFramePos[2]], HeroRotationDB.ButtonsFramePos[3], HeroRotationDB.ButtonsFramePos[4], HeroRotationDB.ButtonsFramePos[5]);
|
|
else
|
|
self:SetPoint("TOPLEFT", HR.MainIconFrame, "BOTTOMLEFT", 0, HR.GUISettings.General.BlackBorderIcon and -3 or 0);
|
|
end
|
|
|
|
-- Start Move
|
|
local function StartMove (self)
|
|
self:StartMoving();
|
|
end
|
|
self:SetScript("OnMouseDown", StartMove);
|
|
-- Stop Move
|
|
local function StopMove (self)
|
|
self:StopMovingOrSizing();
|
|
if not HeroRotationDB then HeroRotationDB = {}; end
|
|
local point, relativeTo, relativePoint, xOffset, yOffset, relativeToName;
|
|
point, relativeTo, relativePoint, xOffset, yOffset = self:GetPoint();
|
|
if not relativeTo then
|
|
relativeToName = "UIParent";
|
|
else
|
|
relativeToName = relativeTo:GetName();
|
|
end
|
|
HeroRotationDB.ButtonsFramePos = {
|
|
point,
|
|
relativeToName,
|
|
relativePoint,
|
|
xOffset,
|
|
yOffset
|
|
};
|
|
end
|
|
self:SetScript("OnMouseUp", StopMove);
|
|
self:SetScript("OnHide", StopMove);
|
|
self:Show();
|
|
|
|
-- Button Creation
|
|
self.Button = {};
|
|
self:AddButton("C", 1, "CDs", "cds");
|
|
self:AddButton("A", 2, "AoE", "aoe");
|
|
self:AddButton("O", 3, "On/Off", "toggle");
|
|
end
|
|
-- Reset Anchor
|
|
function HR.ToggleIconFrame:ResetAnchor ()
|
|
self:SetPoint("TOPLEFT", HR.MainIconFrame, "BOTTOMLEFT", 0, HR.GUISettings.General.BlackBorderIcon and -3 or 0);
|
|
HeroRotationDB.ButtonsFramePos = false;
|
|
end
|
|
-- Add a button
|
|
function HR.ToggleIconFrame:AddButton (Text, i, Tooltip, CmdArg)
|
|
local ButtonFrame = CreateFrame("Button", "$parentButton"..tostring(i), self);
|
|
ButtonFrame:SetFrameStrata(self:GetFrameStrata());
|
|
ButtonFrame:SetFrameLevel(self:GetFrameLevel() - 1);
|
|
ButtonFrame:SetWidth(20);
|
|
ButtonFrame:SetHeight(20);
|
|
ButtonFrame:SetPoint("LEFT", self, "LEFT", 20*(i-1)+i, 0);
|
|
|
|
-- Button Tooltip (Optional)
|
|
if Tooltip then
|
|
ButtonFrame:SetScript("OnEnter",
|
|
function ()
|
|
Mixin(GameTooltip, BackdropTemplateMixin);
|
|
GameTooltip:SetOwner(HR.ToggleIconFrame, "ANCHOR_BOTTOM", 0, 0);
|
|
GameTooltip:ClearLines();
|
|
GameTooltip:SetBackdropColor(0, 0, 0, 1);
|
|
GameTooltip:SetText(Tooltip, nil, nil, nil, 1, true);
|
|
GameTooltip:Show();
|
|
end
|
|
);
|
|
ButtonFrame:SetScript("OnLeave",
|
|
function ()
|
|
GameTooltip:Hide();
|
|
end
|
|
);
|
|
end
|
|
|
|
-- Button Text
|
|
ButtonFrame:SetNormalFontObject("GameFontNormalSmall");
|
|
ButtonFrame.text = Text;
|
|
|
|
-- Button Texture
|
|
local NormalTexture = ButtonFrame:CreateTexture();
|
|
NormalTexture:SetTexture("Interface/Buttons/UI-Silver-Button-Up");
|
|
NormalTexture:SetTexCoord(0, 0.625, 0, 0.7875);
|
|
NormalTexture:SetAllPoints();
|
|
ButtonFrame:SetNormalTexture(NormalTexture);
|
|
local HighlightTexture = ButtonFrame:CreateTexture();
|
|
HighlightTexture:SetTexture("Interface/Buttons/UI-Silver-Button-Highlight");
|
|
HighlightTexture:SetTexCoord(0, 0.625, 0, 0.7875);
|
|
HighlightTexture:SetAllPoints();
|
|
ButtonFrame:SetHighlightTexture(HighlightTexture);
|
|
local PushedTexture = ButtonFrame:CreateTexture();
|
|
PushedTexture:SetTexture("Interface/Buttons/UI-Silver-Button-Down");
|
|
PushedTexture:SetTexCoord(0, 0.625, 0, 0.7875);
|
|
PushedTexture:SetAllPoints();
|
|
ButtonFrame:SetPushedTexture(PushedTexture);
|
|
|
|
-- Button Setting
|
|
if type(HeroRotationCharDB) ~= "table" then
|
|
HeroRotationCharDB = {};
|
|
end
|
|
if type(HeroRotationCharDB.Toggles) ~= "table" then
|
|
HeroRotationCharDB.Toggles = {};
|
|
end
|
|
if type(HeroRotationCharDB.Toggles[i]) ~= "boolean" then
|
|
HeroRotationCharDB.Toggles[i] = true;
|
|
end
|
|
|
|
-- OnClick Callback
|
|
ButtonFrame:SetScript("OnMouseDown",
|
|
function (self, Button)
|
|
if Button == "LeftButton" then
|
|
HR.CmdHandler(CmdArg);
|
|
end
|
|
end
|
|
);
|
|
|
|
self.Button[i] = ButtonFrame;
|
|
|
|
HR.ToggleIconFrame:UpdateButtonText(i);
|
|
|
|
ButtonFrame:Show();
|
|
end
|
|
-- Update a button text
|
|
function HR.ToggleIconFrame:UpdateButtonText (i)
|
|
if HeroRotationCharDB.Toggles[i] then
|
|
self.Button[i]:SetFormattedText("|cff00ff00%s|r", self.Button[i].text);
|
|
else
|
|
self.Button[i]:SetFormattedText("|cffff0000%s|r", self.Button[i].text);
|
|
end
|
|
end
|
|
|
|
|
|
|