mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-30 15:40:51 +00:00
62e0d4eb stopped the camera only while the start delay was shown, but the
delay hides itself once the camera starts. AFK cleared during the spin
left the overlay up, and the next key press sent /afk and set AFK again.
Stop when the camera spins instead, which also keeps stop() and its
SetView(4) from running when AFK clears before the camera started.
185 lines
5.3 KiB
Lua
185 lines
5.3 KiB
Lua
pfUI:RegisterModule("afkcam", function ()
|
|
local social_chats = {
|
|
"CHAT_MSG_SAY",
|
|
"CHAT_MSG_WHISPER",
|
|
"CHAT_MSG_PARTY",
|
|
"CHAT_MSG_RAID",
|
|
"CHAT_MSG_RAID_LEADER",
|
|
"CHAT_MSG_RAID_WARNING",
|
|
"CHAT_MSG_GUILD",
|
|
"CHAT_MSG_OFFICER"
|
|
}
|
|
|
|
local afkcam = CreateFrame("Frame", "pfAFKCam", WorldFrame)
|
|
local overlay = CreateFrame("Button", "pfAFKCamOverlay", afkcam)
|
|
overlay.top = overlay:CreateTexture("pfAFKGradientTop", "BACKGROUND")
|
|
overlay.top:SetPoint("TOPLEFT", overlay, "TOPLEFT")
|
|
overlay.top:SetPoint("TOPRIGHT", overlay, "TOPRIGHT")
|
|
overlay.top:SetHeight(100)
|
|
overlay.top:SetTexture(1,1,1,1)
|
|
overlay.top:SetGradientAlpha("VERTICAL", 0,0,0,0, 0,0,0,1)
|
|
|
|
overlay.bottom = overlay:CreateTexture("pfAFKGradientTop", "BACKGROUND")
|
|
overlay.bottom:SetPoint("BOTTOMLEFT", overlay, "BOTTOMLEFT")
|
|
overlay.bottom:SetPoint("BOTTOMRIGHT", overlay, "BOTTOMRIGHT")
|
|
overlay.bottom:SetHeight(100)
|
|
overlay.bottom:SetTexture(1,1,1,1)
|
|
overlay.bottom:SetGradientAlpha("VERTICAL", 0,0,0,1, 0,0,0,0)
|
|
|
|
overlay:SetFrameStrata("DIALOG")
|
|
overlay:SetAllPoints(WorldFrame)
|
|
|
|
overlay:SetScript("OnMouseUp",function()
|
|
SendChatMessage("","AFK")
|
|
this._parent:stop()
|
|
end)
|
|
overlay:SetScript("OnShow", function()
|
|
this:EnableKeyboard(true)
|
|
end)
|
|
overlay:SetScript("OnHide", function()
|
|
this:EnableKeyboard(false)
|
|
end)
|
|
overlay:SetScript("OnKeyUp",function()
|
|
SendChatMessage("","AFK")
|
|
this._parent:stop()
|
|
end)
|
|
overlay:Hide()
|
|
|
|
local chat = CreateFrame("ScrollingMessageFrame", "pfAFKCamChat", overlay)
|
|
chat:EnableMouse(false)
|
|
chat:EnableMouseWheel(true)
|
|
chat:SetSize(500, 150)
|
|
chat:SetPoint("BOTTOMLEFT",overlay,"BOTTOMLEFT", 10, 10)
|
|
chat:SetTimeVisible(1800.0)
|
|
chat:SetMaxLines(500)
|
|
chat:SetFading(false)
|
|
chat:SetJustifyH("LEFT")
|
|
chat:SetFont(pfUI.font_default, C.global.font_size + 1, "OUTLINE")
|
|
chat:SetScript("OnEvent", function()
|
|
if not this:IsVisible() then return end
|
|
local info = _G.ChatTypeInfo[string.gsub(event,"CHAT_MSG_","")]
|
|
if not info then return end
|
|
local class = GetUnitInfo(arg2 or "")
|
|
local author, msg
|
|
if class and class ~= UNKNOWN then
|
|
local class_color = PFUI_CLASS_COLORS[class]:GenerateHexColorMarkup()
|
|
author = string.format("%s%s|r",class_color,arg2)
|
|
else
|
|
author = arg2
|
|
end
|
|
msg = string.format("%s|cffffffff:|r %s",author,arg1)
|
|
this:AddMessage(msg, info.r, info.g, info.b, 1.0)
|
|
end)
|
|
for _,ctype in ipairs(social_chats) do
|
|
chat:RegisterEvent(ctype)
|
|
end
|
|
chat:SetScript("OnMouseWheel",function()
|
|
if arg1 > 0 then
|
|
this:ScrollUp()
|
|
else
|
|
this:ScrollDown()
|
|
end
|
|
end)
|
|
overlay.chat = chat
|
|
|
|
overlay._parent = afkcam
|
|
afkcam.overlay = overlay
|
|
|
|
local clock = CreateFrame("Frame", "pfAFKClock", overlay)
|
|
clock:SetAllPoints(overlay)
|
|
clock.time = clock:CreateFontString("Status", "OVERLAY")
|
|
clock.time:SetFont(pfUI.media["font:Hooge.ttf"], 32, "THICKOUTLINE")
|
|
clock.time:SetJustifyH("CENTER")
|
|
clock.time:SetPoint("TOP", 0, -10)
|
|
clock:SetScript("OnUpdate", function()
|
|
local fmt
|
|
if C.global.twentyfour == "0" then
|
|
fmt = "%I|cff33ffcc:|r%M %p"
|
|
else
|
|
fmt = "%H|cff33ffcc:|r%M"
|
|
end
|
|
local time = C.global.servertime == "1" and date(fmt, GetServerEpoch()) or date(fmt)
|
|
clock.time:SetText(time)
|
|
end)
|
|
|
|
function afkcam:start()
|
|
if afkcam._spinning then return end
|
|
afkcam._speed = GetCVar("cameraYawMoveSpeed")
|
|
afkcam._ownname = GetCVar("UnitNameOwn")
|
|
afkcam._ui_visible = UIParent:IsVisible()
|
|
SaveView(4)
|
|
if afkcam._ui_visible then
|
|
CloseAllWindows()
|
|
UIParent:Hide()
|
|
end
|
|
if afkcam._ownname == "0" then
|
|
SetCVar("UnitNameOwn", "1")
|
|
end
|
|
SetCVar("cameraYawMoveSpeed","8")
|
|
MoveViewRightStart()
|
|
afkcam.overlay:Show()
|
|
afkcam.overlay.chat:Clear()
|
|
afkcam._spinning = true
|
|
end
|
|
|
|
function afkcam:stop()
|
|
MoveViewRightStop()
|
|
SetCVar("cameraYawMoveSpeed",afkcam._speed)
|
|
SetCVar("UnitNameOwn", afkcam._ownname)
|
|
SetView(4)
|
|
|
|
SetCVar("cameraCustomViewSmoothing", "1")
|
|
|
|
if not UIParent:IsVisible() and afkcam._ui_visible then
|
|
UIParent:Show()
|
|
end
|
|
if pfUI.uf.player then pfUI.uf:RefreshUnit(pfUI.uf.player, "all") end
|
|
afkcam.overlay:Hide()
|
|
afkcam._spinning = false
|
|
end
|
|
|
|
local delay = CreateFrame("Frame")
|
|
delay:Hide()
|
|
|
|
delay:RegisterEvent("AUCTION_ITEM_LIST_UPDATE")
|
|
delay:SetScript("OnEvent", function()
|
|
this.delay = GetTime() + 10
|
|
end)
|
|
|
|
delay:SetScript("OnUpdate", function()
|
|
if ( this.tick or 0) > GetTime() then return else this.tick = GetTime() + 1 end
|
|
|
|
local cast = C_Spell.UnitCastingInfo("player") or C_Spell.UnitChannelInfo("player")
|
|
if not this.delay then this.delay = 0 end
|
|
|
|
if cast then
|
|
this.delay = GetTime() + 10
|
|
end
|
|
|
|
if this.delay < GetTime() then
|
|
afkcam:start()
|
|
this:Hide()
|
|
end
|
|
end)
|
|
|
|
afkcam:SetScript("OnEvent", function()
|
|
if event == "PLAYER_FLAGS_CHANGED" then
|
|
if UnitIsAFK('player') then
|
|
delay:Show()
|
|
else
|
|
delay:Hide()
|
|
if this._spinning then this:stop() end
|
|
end
|
|
else
|
|
if this._spinning then
|
|
delay:Hide()
|
|
this:stop()
|
|
end
|
|
end
|
|
end)
|
|
|
|
afkcam:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
|
afkcam:RegisterEvent("PLAYER_REGEN_DISABLED")
|
|
afkcam:RegisterEvent("PLAYER_LEAVING_WORLD") -- reseting cvars on PLAYER_LOGOUT crashes the client ¯\_(ツ)_/¯
|
|
end)
|