Files

537 lines
15 KiB
Lua

MINIMAPPING_TIMER = 5.5;
MINIMAPPING_FADE_TIMER = 0.5;
MINIMAP_RECORDING_INDICATOR_ON = false;
MINIMAP_EXPANDER_MAXSIZE = 28;
function MinimapPing_OnLoad(self)
-- self:SetFrameLevel(self:GetFrameLevel() + 1);
self.fadeOut = nil;
Minimap:SetPlayerTextureHeight(40);
Minimap:SetPlayerTextureWidth(40);
self:RegisterEvent("MINIMAP_PING");
self:RegisterEvent("MINIMAP_UPDATE_ZOOM");
end
function ToggleMinimap()
if(Minimap:IsShown()) then
PlaySound("igMiniMapClose");
Minimap:Hide();
else
PlaySound("igMiniMapOpen");
Minimap:Show();
end
UpdateUIPanelPositions();
end
function Minimap_Update()
MinimapZoneText:SetText(GetMinimapZoneText());
local pvpType, isSubZonePvP, factionName = GetZonePVPInfo();
if ( pvpType == "sanctuary" ) then
MinimapZoneText:SetTextColor(0.41, 0.8, 0.94);
elseif ( pvpType == "arena" ) then
MinimapZoneText:SetTextColor(1.0, 0.1, 0.1);
elseif ( pvpType == "friendly" ) then
MinimapZoneText:SetTextColor(0.1, 1.0, 0.1);
elseif ( pvpType == "hostile" ) then
MinimapZoneText:SetTextColor(1.0, 0.1, 0.1);
elseif ( pvpType == "contested" ) then
MinimapZoneText:SetTextColor(1.0, 0.7, 0.0);
else
MinimapZoneText:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
end
Minimap_SetTooltip( pvpType, factionName );
end
function Minimap_SetTooltip( pvpType, factionName )
if ( GameTooltip:IsOwned(MinimapZoneTextButton) ) then
GameTooltip:SetOwner(MinimapZoneTextButton, "ANCHOR_LEFT");
local zoneName = GetZoneText();
local subzoneName = GetSubZoneText();
if ( subzoneName == zoneName ) then
subzoneName = "";
end
GameTooltip:AddLine( zoneName, 1.0, 1.0, 1.0 );
if ( pvpType == "sanctuary" ) then
GameTooltip:AddLine( subzoneName, 0.41, 0.8, 0.94 );
GameTooltip:AddLine(SANCTUARY_TERRITORY, 0.41, 0.8, 0.94);
elseif ( pvpType == "arena" ) then
GameTooltip:AddLine( subzoneName, 1.0, 0.1, 0.1 );
GameTooltip:AddLine(FREE_FOR_ALL_TERRITORY, 1.0, 0.1, 0.1);
elseif ( pvpType == "friendly" ) then
GameTooltip:AddLine( subzoneName, 0.1, 1.0, 0.1 );
GameTooltip:AddLine(format(FACTION_CONTROLLED_TERRITORY, factionName), 0.1, 1.0, 0.1);
elseif ( pvpType == "hostile" ) then
GameTooltip:AddLine( subzoneName, 1.0, 0.1, 0.1 );
GameTooltip:AddLine(format(FACTION_CONTROLLED_TERRITORY, factionName), 1.0, 0.1, 0.1);
elseif ( pvpType == "contested" ) then
GameTooltip:AddLine( subzoneName, 1.0, 0.7, 0.0 );
GameTooltip:AddLine(CONTESTED_TERRITORY, 1.0, 0.7, 0.0);
elseif ( pvpType == "combat" ) then
GameTooltip:AddLine( subzoneName, 1.0, 0.1, 0.1 );
GameTooltip:AddLine(COMBAT_ZONE, 1.0, 0.1, 0.1);
else
GameTooltip:AddLine( subzoneName, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b );
end
GameTooltip:Show();
end
end
function MinimapPing_OnEvent(self, event, ...)
if ( event == "MINIMAP_PING" ) then
local arg1, arg2, arg3 = ...;
Minimap_SetPing(arg2, arg3, 1);
self.timer = MINIMAPPING_TIMER;
elseif ( event == "MINIMAP_UPDATE_ZOOM" ) then
MinimapZoomIn:Enable();
MinimapZoomOut:Enable();
local zoom = Minimap:GetZoom();
if ( zoom == (Minimap:GetZoomLevels() - 1) ) then
MinimapZoomIn:Disable();
elseif ( zoom == 0 ) then
MinimapZoomOut:Disable();
end
end
end
function MinimapPing_OnUpdate(self, elapsed)
local timer = self.timer or 0;
if ( timer > 0 ) then
timer = timer - elapsed;
if ( not self.fadeOut and timer <= MINIMAPPING_FADE_TIMER ) then
MinimapPing_FadeOut();
end
local percentage = timer - floor(timer)
MinimapPingSpinner:SetRotation(percentage * math.pi/2);
-- We want about 7 expansions per ping to match the old animation.
percentage = mod(timer, MINIMAPPING_TIMER/7);
MinimapPingExpander:SetHeight(MINIMAP_EXPANDER_MAXSIZE * (1 - percentage));
MinimapPingExpander:SetWidth(MINIMAP_EXPANDER_MAXSIZE * (1 - percentage));
self.timer = timer;
end
if ( self.fadeOut ) then
local fadeOutTimer = self.fadeOutTimer - elapsed;
if ( fadeOutTimer > 0 ) then
MinimapPing:SetAlpha(fadeOutTimer/MINIMAPPING_FADE_TIMER);
else
MinimapPing.fadeOut = nil;
MinimapPing:Hide();
end
self.fadeOutTimer = fadeOutTimer;
end
end
function Minimap_SetPing(x, y, playSound)
x = x * Minimap:GetWidth();
y = y * Minimap:GetHeight();
if ( sqrt(x * x + y * y) < (Minimap:GetWidth() / 2) ) then
MinimapPing:SetPoint("CENTER", "Minimap", "CENTER", x, y);
MinimapPing:SetAlpha(1);
MinimapPing:Show();
if ( playSound ) then
PlaySound("MapPing");
end
else
MinimapPing:Hide();
end
end
function MiniMapBattlefieldFrame_OnUpdate (self, elapsed)
if ( GameTooltip:IsOwned(self) ) then
BattlefieldFrame_UpdateStatus(1);
if ( self.tooltip ) then
GameTooltip:SetText(self.tooltip);
end
end
end
function MinimapPing_FadeOut()
MinimapPing.fadeOut = 1;
MinimapPing.fadeOutTimer = MINIMAPPING_FADE_TIMER;
end
function Minimap_ZoomInClick()
MinimapZoomOut:Enable();
PlaySound("igMiniMapZoomIn");
Minimap:SetZoom(Minimap:GetZoom() + 1);
if(Minimap:GetZoom() == (Minimap:GetZoomLevels() - 1)) then
MinimapZoomIn:Disable();
end
end
function Minimap_ZoomOutClick()
MinimapZoomIn:Enable();
PlaySound("igMiniMapZoomOut");
Minimap:SetZoom(Minimap:GetZoom() - 1);
if(Minimap:GetZoom() == 0) then
MinimapZoomOut:Disable();
end
end
function Minimap_OnClick(self)
local x, y = GetCursorPosition();
x = x / self:GetEffectiveScale();
y = y / self:GetEffectiveScale();
local cx, cy = self:GetCenter();
x = x - cx;
y = y - cy;
if ( sqrt(x * x + y * y) < (self:GetWidth() / 2) ) then
Minimap:PingLocation(x, y);
end
end
function Minimap_ZoomIn()
MinimapZoomIn:Click();
end
function Minimap_ZoomOut()
MinimapZoomOut:Click();
end
function EyeTemplate_OnUpdate(self, elapsed)
AnimateTexCoords(self.texture, 512, 256, 64, 64, 29, elapsed)
end
function EyeTemplate_StartAnimating(eye)
eye:SetScript("OnUpdate", EyeTemplate_OnUpdate);
end
function EyeTemplate_StopAnimating(eye)
eye:SetScript("OnUpdate", nil);
if ( eye.texture.frame ) then
eye.texture.frame = 1; --To start the animation over.
end
eye.texture:SetTexCoord(0, 0.125, 0, .25);
end
function MiniMapLFG_UpdateIsShown()
local mode, submode = GetLFGMode();
if ( mode ) then
MiniMapLFGFrame:Show();
if ( mode == "queued" or mode == "listed" or mode == "rolecheck" ) then
EyeTemplate_StartAnimating(MiniMapLFGFrame.eye);
else
EyeTemplate_StopAnimating(MiniMapLFGFrame.eye);
end
else
MiniMapLFGFrame:Hide();
end
end
function MiniMapLFGFrame_TeleportIn()
LFGTeleport(false);
end
function MiniMapLFGFrame_TeleportOut()
LFGTeleport(true);
end
function MiniMapLFGFrameDropDown_Update()
local info = UIDropDownMenu_CreateInfo();
local mode, submode = GetLFGMode();
--This one can appear in addition to others, so we won't just check the mode.
if ( IsPartyLFG() ) then
local addButton = false;
if ( IsInLFGDungeon() ) then
info.text = TELEPORT_OUT_OF_DUNGEON;
info.func = MiniMapLFGFrame_TeleportOut;
addButton = true;
elseif ((GetNumPartyMembers() > 0) or (GetNumRaidMembers() > 0)) then
info.text = TELEPORT_TO_DUNGEON;
info.func = MiniMapLFGFrame_TeleportIn;
addButton = true;
end
if ( addButton ) then
UIDropDownMenu_AddButton(info);
end
end
if ( mode == "proposal" and submode == "unaccepted" ) then
info.text = ENTER_DUNGEON;
info.func = AcceptProposal;
UIDropDownMenu_AddButton(info);
info.text = LEAVE_QUEUE;
info.func = RejectProposal;
UIDropDownMenu_AddButton(info);
elseif ( mode == "queued" ) then
info.text = LEAVE_QUEUE;
info.func = LeaveLFG;
info.disabled = (submode == "unempowered");
UIDropDownMenu_AddButton(info);
elseif ( mode == "listed" ) then
if ((GetNumPartyMembers() > 0) or (GetNumRaidMembers() > 0)) then
info.text = UNLIST_MY_GROUP;
else
info.text = UNLIST_ME;
end
info.func = LeaveLFG;
info.disabled = (submode == "unempowered");
UIDropDownMenu_AddButton(info);
end
end
function MiniMapLFGFrame_OnClick(self, button)
local mode, submode = GetLFGMode();
if ( button == "RightButton" or mode == "lfgparty" or mode == "abandonedInDungeon") then
--Display dropdown
PlaySound("igMainMenuOpen");
--Weird hack so that the popup isn't under the queued status window (bug 184001)
local yOffset;
if ( mode == "queued" ) then
MiniMapLFGFrameDropDown.point = "BOTTOMRIGHT";
MiniMapLFGFrameDropDown.relativePoint = "TOPLEFT";
yOffset = 0;
else
MiniMapLFGFrameDropDown.point = nil;
MiniMapLFGFrameDropDown.relativePoint = nil;
yOffset = -5;
end
ToggleDropDownMenu(1, nil, MiniMapLFGFrameDropDown, "MiniMapLFGFrame", 0, yOffset);
elseif ( mode == "proposal" ) then
if ( not LFDDungeonReadyPopup:IsShown() ) then
PlaySound("igCharacterInfoTab");
StaticPopupSpecial_Show(LFDDungeonReadyPopup);
end
elseif ( mode == "queued" or mode == "rolecheck" ) then
ToggleLFDParentFrame();
elseif ( mode == "listed" ) then
ToggleLFRParentFrame();
end
end
function MiniMapLFGFrame_OnEnter(self)
local mode, submode = GetLFGMode();
if ( mode == "queued" ) then
LFDSearchStatus:Show();
elseif ( mode == "proposal" ) then
GameTooltip:SetOwner(self, "ANCHOR_LEFT");
GameTooltip:SetText(LOOKING_FOR_DUNGEON);
GameTooltip:AddLine(DUNGEON_GROUP_FOUND_TOOLTIP, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:AddLine(" ");
GameTooltip:AddLine(CLICK_HERE_FOR_MORE_INFO, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
elseif ( mode == "rolecheck" ) then
GameTooltip:SetOwner(self, "ANCHOR_LEFT");
GameTooltip:SetText(LOOKING_FOR_DUNGEON);
GameTooltip:AddLine(ROLE_CHECK_IN_PROGRESS_TOOLTIP, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
elseif ( mode == "listed" ) then
GameTooltip:SetOwner(self, "ANCHOR_LEFT");
GameTooltip:SetText(LOOKING_FOR_RAID);
GameTooltip:AddLine(YOU_ARE_LISTED_IN_LFR, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
elseif ( mode == "lfgparty" ) then
GameTooltip:SetOwner(self, "ANCHOR_LEFT");
GameTooltip:SetText(LOOKING_FOR_DUNGEON);
GameTooltip:AddLine(YOU_ARE_IN_DUNGEON_GROUP, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1);
GameTooltip:Show();
end
end
function MiniMapLFGFrame_OnLeave(self)
GameTooltip:Hide();
LFDSearchStatus:Hide();
end
function MinimapButton_OnMouseDown(self, button)
if ( self.isDown ) then
return;
end
local button = _G[self:GetName().."Icon"];
local point, relativeTo, relativePoint, offsetX, offsetY = button:GetPoint();
button:SetPoint(point, relativeTo, relativePoint, offsetX+1, offsetY-1);
self.isDown = 1;
end
function MinimapButton_OnMouseUp(self)
if ( not self.isDown ) then
return;
end
local button = _G[self:GetName().."Icon"];
local point, relativeTo, relativePoint, offsetX, offsetY = button:GetPoint();
button:SetPoint(point, relativeTo, relativePoint, offsetX-1, offsetY+1);
self.isDown = nil;
end
function Minimap_UpdateRotationSetting()
if ( GetCVar("rotateMinimap") == "1" ) then
MinimapCompassTexture:Show();
MinimapNorthTag:Hide();
else
MinimapCompassTexture:Hide();
MinimapNorthTag:Show();
end
end
function ToggleMiniMapRotation()
local rotate = GetCVar("rotateMinimap");
if ( rotate == "1" ) then
rotate = "0";
else
rotate = "1";
end
SetCVar("rotateMinimap", rotate);
Minimap_UpdateRotationSetting();
end
function MinimapMailFrameUpdate()
local sender1,sender2,sender3 = GetLatestThreeSenders();
local toolText;
if( sender1 or sender2 or sender3 ) then
toolText = HAVE_MAIL_FROM;
else
toolText = HAVE_MAIL;
end
if( sender1 ) then
toolText = toolText.."\n"..sender1;
end
if( sender2 ) then
toolText = toolText.."\n"..sender2;
end
if( sender3 ) then
toolText = toolText.."\n"..sender3;
end
GameTooltip:SetText(toolText);
end
function MiniMapTracking_Update()
local texture = GetTrackingTexture();
if ( MiniMapTrackingIcon:GetTexture() ~= texture ) then
MiniMapTrackingIcon:SetTexture(texture);
MiniMapTrackingShineFadeIn();
end
end
function MiniMapTrackingDropDown_OnLoad(self)
UIDropDownMenu_Initialize(self, MiniMapTrackingDropDown_Initialize, "MENU");
end
function MiniMapTracking_SetTracking (self, id)
SetTracking(id);
end
function MiniMapTrackingDropDown_Initialize()
local name, texture, active, category;
local anyActive, checked;
local count = GetNumTrackingTypes();
local info;
for id=1, count do
name, texture, active, category = GetTrackingInfo(id);
info = UIDropDownMenu_CreateInfo();
info.text = name;
info.checked = active;
info.func = MiniMapTracking_SetTracking;
info.icon = texture;
info.arg1 = id;
if ( category == "spell" ) then
info.tCoordLeft = 0.0625;
info.tCoordRight = 0.9;
info.tCoordTop = 0.0625;
info.tCoordBottom = 0.9;
else
info.tCoordLeft = 0;
info.tCoordRight = 1;
info.tCoordTop = 0;
info.tCoordBottom = 1;
end
UIDropDownMenu_AddButton(info);
if ( active ) then
anyActive = active;
end
end
if ( anyActive ) then
checked = nil;
else
checked = 1;
end
info = UIDropDownMenu_CreateInfo();
info.text = NONE;
info.checked = checked;
info.func = MiniMapTracking_SetTracking;
info.arg1 = nil;
UIDropDownMenu_AddButton(info);
end
function MiniMapTrackingShineFadeIn()
-- Fade in the shine and then fade it out with the ComboPointShineFadeOut function
local fadeInfo = {};
fadeInfo.mode = "IN";
fadeInfo.timeToFade = 0.5;
fadeInfo.finishedFunc = MiniMapTrackingShineFadeOut;
UIFrameFade(MiniMapTrackingButtonShine, fadeInfo);
end
function MiniMapTrackingShineFadeOut()
UIFrameFadeOut(MiniMapTrackingButtonShine, 0.5);
end
local selectedRaidDifficulty;
local allowedRaidDifficulty;
function MiniMapInstanceDifficulty_OnEvent(self)
local _, instanceType, difficulty, _, maxPlayers, playerDifficulty, isDynamicInstance = GetInstanceInfo();
if ( ( instanceType == "party" or instanceType == "raid" ) and not ( difficulty == 1 and maxPlayers == 5 ) ) then
local isHeroic = false;
if ( instanceType == "party" and difficulty == 2 ) then
isHeroic = true;
elseif ( instanceType == "raid" ) then
if ( isDynamicInstance ) then
selectedRaidDifficulty = difficulty;
if ( playerDifficulty == 1 ) then
if ( selectedRaidDifficulty <= 2 ) then
selectedRaidDifficulty = selectedRaidDifficulty + 2;
end
isHeroic = true;
end
-- if modified difficulty is normal then you are allowed to select heroic, and vice-versa
if ( selectedRaidDifficulty == 1 ) then
allowedRaidDifficulty = 3;
elseif ( selectedRaidDifficulty == 2 ) then
allowedRaidDifficulty = 4;
elseif ( selectedRaidDifficulty == 3 ) then
allowedRaidDifficulty = 1;
elseif ( selectedRaidDifficulty == 4 ) then
allowedRaidDifficulty = 2;
end
allowedRaidDifficulty = "RAID_DIFFICULTY"..allowedRaidDifficulty;
elseif ( difficulty > 2 ) then
isHeroic = true;
end
end
MiniMapInstanceDifficultyText:SetText(maxPlayers);
-- the 1 looks a little off when text is centered
local xOffset = 0;
if ( maxPlayers >= 10 and maxPlayers <= 19 ) then
xOffset = -1;
end
if ( isHeroic ) then
MiniMapInstanceDifficultyTexture:SetTexCoord(0, 0.25, 0.0703125, 0.4140625);
MiniMapInstanceDifficultyText:SetPoint("CENTER", xOffset, -9);
else
MiniMapInstanceDifficultyTexture:SetTexCoord(0, 0.25, 0.5703125, 0.9140625);
MiniMapInstanceDifficultyText:SetPoint("CENTER", xOffset, 5);
end
self:Show();
else
self:Hide();
end
end
function _GetPlayerDifficultyMenuOptions()
return selectedRaidDifficulty, allowedRaidDifficulty;
end