режим предателя + UI референсы и DragonUI
This commit is contained in:
@@ -0,0 +1,369 @@
|
||||
-- The default tooltip border color
|
||||
--TOOLTIP_DEFAULT_COLOR = { r = 0.5, g = 0.5, b = 0.5 };
|
||||
TOOLTIP_DEFAULT_COLOR = { r = 1, g = 1, b = 1 };
|
||||
TOOLTIP_DEFAULT_BACKGROUND_COLOR = { r = 0.09, g = 0.09, b = 0.19 };
|
||||
DEFAULT_TOOLTIP_POSITION = -13;
|
||||
|
||||
function GameTooltip_UnitColor(unit)
|
||||
local r, g, b;
|
||||
if ( UnitPlayerControlled(unit) ) then
|
||||
if ( UnitCanAttack(unit, "player") ) then
|
||||
-- Hostile players are red
|
||||
if ( not UnitCanAttack("player", unit) ) then
|
||||
--[[
|
||||
r = 1.0;
|
||||
g = 0.5;
|
||||
b = 0.5;
|
||||
]]
|
||||
--[[
|
||||
r = 0.0;
|
||||
g = 0.0;
|
||||
b = 1.0;
|
||||
]]
|
||||
r = 1.0;
|
||||
g = 1.0;
|
||||
b = 1.0;
|
||||
else
|
||||
r = FACTION_BAR_COLORS[2].r;
|
||||
g = FACTION_BAR_COLORS[2].g;
|
||||
b = FACTION_BAR_COLORS[2].b;
|
||||
end
|
||||
elseif ( UnitCanAttack("player", unit) ) then
|
||||
-- Players we can attack but which are not hostile are yellow
|
||||
r = FACTION_BAR_COLORS[4].r;
|
||||
g = FACTION_BAR_COLORS[4].g;
|
||||
b = FACTION_BAR_COLORS[4].b;
|
||||
elseif ( UnitIsPVP(unit) ) then
|
||||
-- Players we can assist but are PvP flagged are green
|
||||
r = FACTION_BAR_COLORS[6].r;
|
||||
g = FACTION_BAR_COLORS[6].g;
|
||||
b = FACTION_BAR_COLORS[6].b;
|
||||
else
|
||||
-- All other players are blue (the usual state on the "blue" server)
|
||||
--[[
|
||||
r = 0.0;
|
||||
g = 0.0;
|
||||
b = 1.0;
|
||||
]]
|
||||
r = 1.0;
|
||||
g = 1.0;
|
||||
b = 1.0;
|
||||
end
|
||||
else
|
||||
local reaction = UnitReaction(unit, "player");
|
||||
if ( reaction ) then
|
||||
r = FACTION_BAR_COLORS[reaction].r;
|
||||
g = FACTION_BAR_COLORS[reaction].g;
|
||||
b = FACTION_BAR_COLORS[reaction].b;
|
||||
else
|
||||
--[[
|
||||
r = 0.0;
|
||||
g = 0.0;
|
||||
b = 1.0;
|
||||
]]
|
||||
r = 1.0;
|
||||
g = 1.0;
|
||||
b = 1.0;
|
||||
end
|
||||
end
|
||||
return r, g, b;
|
||||
end
|
||||
|
||||
function GameTooltip_SetDefaultAnchor(tooltip, parent)
|
||||
tooltip:SetOwner(parent, "ANCHOR_NONE");
|
||||
tooltip:SetPoint("BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", -CONTAINER_OFFSET_X - 13, CONTAINER_OFFSET_Y);
|
||||
tooltip.default = 1;
|
||||
end
|
||||
|
||||
function GameTooltip_OnLoad(self)
|
||||
self.updateTooltip = TOOLTIP_UPDATE_TIME;
|
||||
self:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b);
|
||||
self:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b);
|
||||
self.statusBar2 = _G[self:GetName().."StatusBar2"];
|
||||
self.statusBar2Text = _G[self:GetName().."StatusBar2Text"];
|
||||
end
|
||||
|
||||
function GameTooltip_OnTooltipAddMoney(self, cost, maxcost)
|
||||
if( not maxcost ) then --We just have 1 price to display
|
||||
SetTooltipMoney(self, cost, nil, string.format("%s:", SELL_PRICE));
|
||||
else
|
||||
self:AddLine(string.format("%s:", SELL_PRICE), 1.0, 1.0, 1.0);
|
||||
local indent = string.rep(" ",4)
|
||||
SetTooltipMoney(self, cost, nil, string.format("%s%s:", indent, MINIMUM));
|
||||
SetTooltipMoney(self, maxcost, nil, string.format("%s%s:", indent, MAXIMUM));
|
||||
end
|
||||
end
|
||||
|
||||
function SetTooltipMoney(frame, money, type, prefixText, suffixText)
|
||||
frame:AddLine(" ", 1.0, 1.0, 1.0);
|
||||
local numLines = frame:NumLines();
|
||||
if ( not frame.numMoneyFrames ) then
|
||||
frame.numMoneyFrames = 0;
|
||||
end
|
||||
if ( not frame.shownMoneyFrames ) then
|
||||
frame.shownMoneyFrames = 0;
|
||||
end
|
||||
local name = frame:GetName().."MoneyFrame"..frame.shownMoneyFrames+1;
|
||||
local moneyFrame = _G[name];
|
||||
if ( not moneyFrame ) then
|
||||
frame.numMoneyFrames = frame.numMoneyFrames+1;
|
||||
moneyFrame = CreateFrame("Frame", name, frame, "TooltipMoneyFrameTemplate");
|
||||
name = moneyFrame:GetName();
|
||||
MoneyFrame_SetType(moneyFrame, "STATIC");
|
||||
end
|
||||
_G[name.."PrefixText"]:SetText(prefixText);
|
||||
_G[name.."SuffixText"]:SetText(suffixText);
|
||||
if ( type ) then
|
||||
MoneyFrame_SetType(moneyFrame, type);
|
||||
end
|
||||
--We still have this variable offset because many AddOns use this function. The money by itself will be unaligned if we do not use this.
|
||||
local xOffset;
|
||||
if ( prefixText ) then
|
||||
xOffset = 4;
|
||||
else
|
||||
xOffset = 0;
|
||||
end
|
||||
moneyFrame:SetPoint("LEFT", frame:GetName().."TextLeft"..numLines, "LEFT", xOffset, 0);
|
||||
moneyFrame:Show();
|
||||
if ( not frame.shownMoneyFrames ) then
|
||||
frame.shownMoneyFrames = 1;
|
||||
else
|
||||
frame.shownMoneyFrames = frame.shownMoneyFrames+1;
|
||||
end
|
||||
MoneyFrame_Update(moneyFrame:GetName(), money);
|
||||
local moneyFrameWidth = moneyFrame:GetWidth();
|
||||
if ( frame:GetMinimumWidth() < moneyFrameWidth ) then
|
||||
frame:SetMinimumWidth(moneyFrameWidth);
|
||||
end
|
||||
frame.hasMoney = 1;
|
||||
end
|
||||
|
||||
function GameTooltip_ClearMoney(self)
|
||||
if ( not self.shownMoneyFrames ) then
|
||||
return;
|
||||
end
|
||||
|
||||
local moneyFrame;
|
||||
for i=1, self.shownMoneyFrames do
|
||||
moneyFrame = _G[self:GetName().."MoneyFrame"..i];
|
||||
if(moneyFrame) then
|
||||
moneyFrame:Hide();
|
||||
MoneyFrame_SetType(moneyFrame, "STATIC");
|
||||
end
|
||||
end
|
||||
self.shownMoneyFrames = nil;
|
||||
end
|
||||
|
||||
function GameTooltip_ClearStatusBars(self)
|
||||
if ( not self.shownStatusBars ) then
|
||||
return;
|
||||
end
|
||||
local statusBar;
|
||||
for i=1, self.shownStatusBars do
|
||||
statusBar = _G[self:GetName().."StatusBar"..i];
|
||||
if ( statusBar ) then
|
||||
statusBar:Hide();
|
||||
end
|
||||
end
|
||||
self.shownStatusBars = 0;
|
||||
end
|
||||
|
||||
function GameTooltip_OnHide(self)
|
||||
self:SetBackdropBorderColor(TOOLTIP_DEFAULT_COLOR.r, TOOLTIP_DEFAULT_COLOR.g, TOOLTIP_DEFAULT_COLOR.b);
|
||||
self:SetBackdropColor(TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, TOOLTIP_DEFAULT_BACKGROUND_COLOR.b);
|
||||
self.default = nil;
|
||||
GameTooltip_ClearMoney(self);
|
||||
GameTooltip_ClearStatusBars(self);
|
||||
if ( self.shoppingTooltips ) then
|
||||
for _, frame in pairs(self.shoppingTooltips) do
|
||||
frame:Hide();
|
||||
end
|
||||
end
|
||||
self.comparing = false;
|
||||
end
|
||||
|
||||
function GameTooltip_OnUpdate(self, elapsed)
|
||||
-- Only update every TOOLTIP_UPDATE_TIME seconds
|
||||
self.updateTooltip = self.updateTooltip - elapsed;
|
||||
if ( self.updateTooltip > 0 ) then
|
||||
return;
|
||||
end
|
||||
self.updateTooltip = TOOLTIP_UPDATE_TIME;
|
||||
|
||||
local owner = self:GetOwner();
|
||||
if ( owner and owner.UpdateTooltip ) then
|
||||
owner:UpdateTooltip();
|
||||
end
|
||||
end
|
||||
|
||||
function GameTooltip_AddNewbieTip(frame, normalText, r, g, b, newbieText, noNormalText)
|
||||
if ( SHOW_NEWBIE_TIPS == "1" ) then
|
||||
GameTooltip_SetDefaultAnchor(GameTooltip, frame);
|
||||
if ( normalText ) then
|
||||
GameTooltip:SetText(normalText, r, g, b);
|
||||
GameTooltip:AddLine(newbieText, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
|
||||
else
|
||||
GameTooltip:SetText(newbieText, r, g, b, 1, 1);
|
||||
end
|
||||
GameTooltip:Show();
|
||||
else
|
||||
if ( not noNormalText ) then
|
||||
GameTooltip:SetOwner(frame, "ANCHOR_RIGHT");
|
||||
GameTooltip:SetText(normalText, r, g, b);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function GameTooltip_ShowCompareItem(self, shift)
|
||||
if ( not self ) then
|
||||
self = GameTooltip;
|
||||
end
|
||||
local item, link = self:GetItem();
|
||||
if ( not link ) then
|
||||
return;
|
||||
end
|
||||
|
||||
local shoppingTooltip1, shoppingTooltip2, shoppingTooltip3 = unpack(self.shoppingTooltips);
|
||||
|
||||
local item1 = nil;
|
||||
local item2 = nil;
|
||||
local item3 = nil;
|
||||
local side = "left";
|
||||
if ( shoppingTooltip1:SetHyperlinkCompareItem(link, 1, shift, self) ) then
|
||||
item1 = true;
|
||||
end
|
||||
if ( shoppingTooltip2:SetHyperlinkCompareItem(link, 2, shift, self) ) then
|
||||
item2 = true;
|
||||
end
|
||||
if ( shoppingTooltip3:SetHyperlinkCompareItem(link, 3, shift, self) ) then
|
||||
item3 = true;
|
||||
end
|
||||
|
||||
-- find correct side
|
||||
local rightDist = 0;
|
||||
local leftPos = self:GetLeft();
|
||||
local rightPos = self:GetRight();
|
||||
if ( not rightPos ) then
|
||||
rightPos = 0;
|
||||
end
|
||||
if ( not leftPos ) then
|
||||
leftPos = 0;
|
||||
end
|
||||
|
||||
rightDist = GetScreenWidth() - rightPos;
|
||||
|
||||
if (leftPos and (rightDist < leftPos)) then
|
||||
side = "left";
|
||||
else
|
||||
side = "right";
|
||||
end
|
||||
|
||||
-- see if we should slide the tooltip
|
||||
if ( self:GetAnchorType() and self:GetAnchorType() ~= "ANCHOR_PRESERVE" ) then
|
||||
local totalWidth = 0;
|
||||
if ( item1 ) then
|
||||
totalWidth = totalWidth + shoppingTooltip1:GetWidth();
|
||||
end
|
||||
if ( item2 ) then
|
||||
totalWidth = totalWidth + shoppingTooltip2:GetWidth();
|
||||
end
|
||||
if ( item3 ) then
|
||||
totalWidth = totalWidth + shoppingTooltip3:GetWidth();
|
||||
end
|
||||
|
||||
if ( (side == "left") and (totalWidth > leftPos) ) then
|
||||
self:SetAnchorType(self:GetAnchorType(), (totalWidth - leftPos), 0);
|
||||
elseif ( (side == "right") and (rightPos + totalWidth) > GetScreenWidth() ) then
|
||||
self:SetAnchorType(self:GetAnchorType(), -((rightPos + totalWidth) - GetScreenWidth()), 0);
|
||||
end
|
||||
end
|
||||
|
||||
-- anchor the compare tooltips
|
||||
if ( item3 ) then
|
||||
shoppingTooltip3:SetOwner(self, "ANCHOR_NONE");
|
||||
shoppingTooltip3:ClearAllPoints();
|
||||
if ( side and side == "left" ) then
|
||||
shoppingTooltip3:SetPoint("TOPRIGHT", self, "TOPLEFT", 0, -10);
|
||||
else
|
||||
shoppingTooltip3:SetPoint("TOPLEFT", self, "TOPRIGHT", 0, -10);
|
||||
end
|
||||
shoppingTooltip3:SetHyperlinkCompareItem(link, 3, shift, self);
|
||||
shoppingTooltip3:Show();
|
||||
end
|
||||
|
||||
if ( item1 ) then
|
||||
if( item3 ) then
|
||||
shoppingTooltip1:SetOwner(shoppingTooltip3, "ANCHOR_NONE");
|
||||
else
|
||||
shoppingTooltip1:SetOwner(self, "ANCHOR_NONE");
|
||||
end
|
||||
shoppingTooltip1:ClearAllPoints();
|
||||
if ( side and side == "left" ) then
|
||||
if( item3 ) then
|
||||
shoppingTooltip1:SetPoint("TOPRIGHT", shoppingTooltip3, "TOPLEFT", 0, 0);
|
||||
else
|
||||
shoppingTooltip1:SetPoint("TOPRIGHT", self, "TOPLEFT", 0, -10);
|
||||
end
|
||||
else
|
||||
if( item3 ) then
|
||||
shoppingTooltip1:SetPoint("TOPLEFT", shoppingTooltip3, "TOPRIGHT", 0, 0);
|
||||
else
|
||||
shoppingTooltip1:SetPoint("TOPLEFT", self, "TOPRIGHT", 0, -10);
|
||||
end
|
||||
end
|
||||
shoppingTooltip1:SetHyperlinkCompareItem(link, 1, shift, self);
|
||||
shoppingTooltip1:Show();
|
||||
|
||||
if ( item2 ) then
|
||||
shoppingTooltip2:SetOwner(shoppingTooltip1, "ANCHOR_NONE");
|
||||
shoppingTooltip2:ClearAllPoints();
|
||||
if ( side and side == "left" ) then
|
||||
shoppingTooltip2:SetPoint("TOPRIGHT", shoppingTooltip1, "TOPLEFT", 0, 0);
|
||||
else
|
||||
shoppingTooltip2:SetPoint("TOPLEFT", shoppingTooltip1, "TOPRIGHT", 0, 0);
|
||||
end
|
||||
shoppingTooltip2:SetHyperlinkCompareItem(link, 2, shift, self);
|
||||
shoppingTooltip2:Show();
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function GameTooltip_ShowStatusBar(self, min, max, value, text)
|
||||
self:AddLine(" ", 1.0, 1.0, 1.0);
|
||||
local numLines = self:NumLines();
|
||||
if ( not self.numStatusBars ) then
|
||||
self.numStatusBars = 0;
|
||||
end
|
||||
if ( not self.shownStatusBars ) then
|
||||
self.shownStatusBars = 0;
|
||||
end
|
||||
local index = self.shownStatusBars+1;
|
||||
local name = self:GetName().."StatusBar"..index;
|
||||
local statusBar = _G[name];
|
||||
if ( not statusBar ) then
|
||||
self.numStatusBars = self.numStatusBars+1;
|
||||
statusBar = CreateFrame("StatusBar", name, self, "TooltipStatusBarTemplate");
|
||||
end
|
||||
if ( not text ) then
|
||||
text = "";
|
||||
end
|
||||
_G[name.."Text"]:SetText(text);
|
||||
statusBar:SetMinMaxValues(min, max);
|
||||
statusBar:SetValue(value);
|
||||
statusBar:Show();
|
||||
statusBar:SetPoint("LEFT", self:GetName().."TextLeft"..numLines, "LEFT", 0, -2);
|
||||
statusBar:SetPoint("RIGHT", self, "RIGHT", -9, 0);
|
||||
statusBar:Show();
|
||||
self.shownStatusBars = index;
|
||||
self:SetMinimumWidth(140);
|
||||
end
|
||||
|
||||
function GameTooltip_Hide()
|
||||
-- Used for XML OnLeave handlers
|
||||
GameTooltip:Hide();
|
||||
end
|
||||
|
||||
function GameTooltip_HideResetCursor()
|
||||
GameTooltip:Hide();
|
||||
ResetCursor();
|
||||
end
|
||||
Reference in New Issue
Block a user