--[[ ############################################################################## _____/\\\\\\\\\\\____/\\\________/\\\__/\\\________/\\\__/\\\\\\\\\\\_ # ___/\\\/////////\\\_\/\\\_______\/\\\_\/\\\_______\/\\\_\/////\\\///__ # __\//\\\______\///__\//\\\______/\\\__\/\\\_______\/\\\_____\/\\\_____ # ___\////\\\__________\//\\\____/\\\___\/\\\_______\/\\\_____\/\\\_____ # ______\////\\\________\//\\\__/\\\____\/\\\_______\/\\\_____\/\\\_____ # _________\////\\\______\//\\\/\\\_____\/\\\_______\/\\\_____\/\\\_____ # __/\\\______\//\\\______\//\\\\\______\//\\\______/\\\______\/\\\_____ # _\///\\\\\\\\\\\/________\//\\\________\///\\\\\\\\\/____/\\\\\\\\\\\_# ___\///////////___________\///___________\/////////_____\///////////_# ############################################################################## S U P E R - V I L L A I N - U I By: Munglunch # ############################################################################## ########################################################## LOCALIZED LUA FUNCTIONS ########################################################## ]]-- --[[ GLOBALS ]]-- local _G = _G; local unpack = _G.unpack; local select = _G.select; local type = _G.type; local pairs = _G.pairs; local string = _G.string; local math = _G.math; --[[ STRING METHODS ]]-- local format, split = string.format, string.split; --[[ MATH METHODS ]]-- local min, floor = math.min, math.floor; local parsefloat = math.parsefloat; --[[ ########################################################## GET ADDON DATA ########################################################## ]]-- local SV = select(2, ...) local L = SV.L; local Movable = CreateFrame("Frame", nil) local MovableFrames = {} MovableFrames["GameMenuFrame"] = {} --[[ ########################################################## LOCAL VARS ########################################################## ]]-- local DraggableFrames = { "AchievementFrame", "AuctionFrame", "ArchaeologyFrame", "BattlefieldMinimap", "BarberShopFrame", "BlackMarketFrame", "CalendarFrame", "CharacterFrame", "ClassTrainerFrame", "DressUpFrame", "EncounterJournal", "FriendsFrame", "GameMenuFrame", "GMSurveyFrame", "GossipFrame", "GuildFrame", "GuildBankFrame", "GuildRegistrarFrame", "HelpFrame", "InterfaceOptionsFrame", "ItemUpgradeFrame", "KeyBindingFrame", "LFGDungeonReadyPopup", "MacOptionsFrame", "MacroFrame", "MailFrame", "MerchantFrame", "PlayerTalentFrame", "PetJournalParent", "PVEFrame", "PVPFrame", "QuestFrame", "QuestLogFrame", "RaidBrowserFrame", "ReadyCheckFrame", "ReforgingFrame", "ReportCheatingDialog", "ReportPlayerNameDialog", "RolePollPopup", "ScrollOfResurrectionSelectionFrame", "SpellBookFrame", "TabardFrame", "TaxiFrame", "TimeManagerFrame", "TradeSkillFrame", "TradeFrame", "TransmorgifyFrame", "TutorialFrame", "VideoOptionsFrame", "VoidStorageFrame", --"WorldStateAlwaysUpFrame" }; --[[ ########################################################## LOCAL FUNCTIONS ########################################################## ]]-- local BlizzardFrame_OnUpdate = function(self) if InCombatLockdown() or self:GetName() == "GameMenuFrame" then return end if self.IsMoving then return end self:ClearAllPoints() if self:GetName() == "QuestFrame" then if MovableFrames["GossipFrame"].Points ~= nil then self:SetPoint(unpack(MovableFrames["GossipFrame"].Points)) end elseif MovableFrames[self:GetName()].Points ~= nil then self:SetPoint(unpack(MovableFrames[self:GetName()].Points)) end end local BlizzardFrame_OnDragStart = function(self) if not self:IsMovable() then return end self:StartMoving() self.IsMoving = true end local BlizzardFrame_OnDragStop = function(self) if not self:IsMovable() then return end self.IsMoving = false; self:StopMovingOrSizing() if self:GetName() == "GameMenuFrame" then return end local anchor1, parent, anchor2, x, y = self:GetPoint() parent = self:GetParent():GetName() self:ClearAllPoints() self:SetPoint(anchor1, parent, anchor2, x, y) if self:GetName() == "QuestFrame" then MovableFrames["GossipFrame"].Points = {anchor1, parent, anchor2, x, y} else MovableFrames[self:GetName()].Points = {anchor1, parent, anchor2, x, y} end end local Movable_OnEvent = function(self) for _, frameName in pairs(DraggableFrames) do local frame = _G[frameName] if(frame) then if(frameName ~= "LossOfControlFrame" and (not MovableFrames[frameName])) then frame:EnableMouse(true) if(frameName == "LFGDungeonReadyPopup") then LFGDungeonReadyDialog:EnableMouse(false) end frame:SetMovable(true) frame:RegisterForDrag("LeftButton") frame:SetClampedToScreen(true) frame:HookScript("OnUpdate", BlizzardFrame_OnUpdate) frame:SetScript("OnDragStart", BlizzardFrame_OnDragStart) frame:SetScript("OnDragStop", BlizzardFrame_OnDragStop) MovableFrames[frameName] = {} end end end end Movable:RegisterEvent("PLAYER_LOGIN") Movable:RegisterEvent("ADDON_LOADED") Movable:RegisterEvent("LFG_UPDATE") Movable:RegisterEvent("ROLE_POLL_BEGIN") Movable:RegisterEvent("READY_CHECK") Movable:RegisterEvent("UPDATE_WORLD_STATES") Movable:RegisterEvent("WORLD_STATE_TIMER_START") Movable:RegisterEvent("WORLD_STATE_UI_TIMER_UPDATE") Movable:SetScript("OnEvent", Movable_OnEvent)