a5089ab - add mage action bar setup
[wowui.git] / kehys / target.lua
1 -- target.lua
2 local _, addon = ...;
3 local unpack = unpack;
4 local format = string.format;
5 local CFrame = CreateFrame("Frame", "kehysTargetInit", UIParent);
6 local CTimerAfter = C_Timer.After;
7
8 local barTexture = "Interface\\AddOns\\kehys\\images\\minimalist";
9
10 local function showTooltip(frame)
11     GameTooltip_SetDefaultAnchor(GameTooltip, frame);
12     GameTooltip:SetUnit(frame:GetAttribute("unit"));
13 end
14
15 local function hideTooltip()
16     GameTooltip:FadeOut();
17 end
18
19 local targetUpdate = nil;
20 local function initTarget(parent, width, height, update, event)
21     assert(type(parent) == "table", "Target frame creation missing parent!");
22     assert(type(width) == "number", "Target frame creation missing width!");
23     assert(type(height) == "number", "Target frame creation missing height!");
24     assert(type(update) == "function",
25            "Target frame creation missing update function!");
26     assert(type(event) == "function",
27            "Target frame creation missing event function!");
28
29     local f = CreateFrame("Button", "kehysTarget", parent,
30                           "SecureUnitButtonTemplate,SecureHandlerStateTemplate");
31     f:Hide();
32     f:SetPoint("CENTER", parent, "CENTER", 290, -178);
33     f:SetWidth(width);
34     f:SetHeight(height);
35     f.barwidth = width - 2; -- 1px padding
36     f:SetAttribute("unit", "target");
37     f:SetAttribute("displayed", "target");
38     f.unit = "target";
39     f.displayed = "target";
40     f.constant = true;
41     f.prev = {};
42
43     targetUpdate = function()
44         if f.updating then
45             CTimerAfter(0.1, targetUpdate);
46             return update(f);
47         end
48     end
49     f:SetScript("OnEvent", event);
50     f:SetScript("OnHide", function()
51         f:UnregisterAllEvents();
52         f.updating = false;
53         f.prev = {};
54     end);
55     f:SetScript("OnShow", function()
56         addon.RegisterEvents(f);
57         addon.RegisterUnitEvents(f);
58         event(f, "UPDATE_ALL_BARS");
59         f.updating = true;
60         targetUpdate();
61     end);
62     f:SetScript("OnEnter", showTooltip);
63     f:SetScript("OnLeave", hideTooltip);
64     f:RegisterForClicks("AnyDown");
65     f:SetAttribute("*type1", "target");
66     f:SetAttribute("*type2", "togglemenu");
67     f:SetAttribute("toggleForVehicle", false);
68
69     -- create visuals
70     f.base = f:CreateTexture(nil, "BACKGROUND");
71     f.base:SetAllPoints();
72     f.base:SetColorTexture(0, 0, 0, 0.5);
73     f.background = f:CreateTexture(nil, "BACKGROUND", nil, 1);
74     f.background:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1);
75     f.background:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1);
76     f.health = f:CreateTexture(nil, "BORDER");
77     f.health:SetPoint("TOPLEFT", f.background, "TOPLEFT");
78     f.health:SetPoint("BOTTOMLEFT", f.background, "LEFT", 0, -height/8);
79     f.health:SetTexture(barTexture);
80     f.health:SetVertexColor(0.7, 0.7, 0.7);
81     f.health:Hide();
82     f.mana = f:CreateTexture(nil, "BORDER");
83     f.mana:SetPoint("TOPLEFT", f.background, "LEFT", 0, -height/8);
84     f.mana:SetPoint("BOTTOMLEFT", f.background, "BOTTOMLEFT");
85     f.mana:SetTexture(barTexture);
86     f.mana:SetVertexColor(0.1, 0.5, 0.9);
87     f.mana:Hide();
88     f.manatext = f:CreateFontString(nil, "ARTWORK", "GameFontHighlight");
89     f.manatext:SetPoint("BOTTOMRIGHT", f.background, "BOTTOMRIGHT", -2, 4);
90     f.manatext:Hide();
91     f.shield = f:CreateTexture(nil, "BORDER");
92     f.shield:SetPoint("TOPLEFT", f.health, "TOPRIGHT");
93     f.shield:SetPoint("BOTTOMLEFT", f.health, "BOTTOMRIGHT");
94     f.shield:SetTexture(barTexture);
95     f.shield:SetVertexColor(0, 0.7, 1);
96     f.shield:Hide();
97     f.shieldhl = f:CreateTexture(nil, "ARTWORK");
98     f.shieldhl:SetPoint("TOPLEFT", f, "TOPRIGHT", -2, 0);
99     f.shieldhl:SetPoint("BOTTOMRIGHT", f, "RIGHT", 0, -height/8);
100     f.shieldhl:SetColorTexture(0.5, 0.8, 1);
101     f.shieldhl:Hide();
102     f.healpred = f:CreateTexture(nil, "ARTWORK");
103     f.healpred:SetPoint("TOPLEFT", f.health, "TOPRIGHT");
104     f.healpred:SetPoint("BOTTOMLEFT", f.health, "BOTTOMRIGHT");
105     f.healpred:SetColorTexture(0.5, 0.6, 0.5);
106     f.healpred:Hide();
107     f.healabsorb = f:CreateTexture(nil, "ARTWORK");
108     f.healabsorb:SetPoint("TOPRIGHT", f.health, "TOPRIGHT");
109     f.healabsorb:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT");
110     f.healabsorb:SetColorTexture(0.1, 0.1, 0.1);
111     f.healabsorb:Hide();
112     f.name = f:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
113     f.name:SetPoint("LEFT", f, "LEFT", 2, 8);
114     f.text = f:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
115     f.text:SetPoint("RIGHT", f, "RIGHT", -2, 8);
116     f.text:SetFont(STANDARD_TEXT_FONT, 15);
117     f.text:Hide();
118     f.targeticon = f:CreateTexture(nil, "OVERLAY");
119     f.targeticon:SetPoint("CENTER", f, "TOP", 0, -1);
120     f.targeticon:SetWidth(12);
121     f.targeticon:SetHeight(12);
122     f.targeticon:SetTexture("Interface\\TARGETINGFRAME\\UI-RaidTargetingIcons");
123     f.targeticon:Hide();
124
125     RegisterUnitWatch(f);
126     return f;
127 end
128
129 CFrame:SetScript("OnEvent", function(self)
130     self:UnregisterAllEvents();
131     CFrame:SetFrameStrata("LOW");
132     CFrame:SetPoint("CENTER", nil, "CENTER");
133     CFrame:SetWidth(2);
134     CFrame:SetHeight(2);
135     initTarget(self, 160, 48, addon.FrameUpdate, addon.UnitEvent);
136 end);
137 CFrame:RegisterEvent("PLAYER_LOGIN");