Mercurial > wow > afterdark
view AfterDark.lua @ 1:f601b8507480
AfterDark - Initial Import
author | wobin |
---|---|
date | Sun, 20 Dec 2009 21:45:17 +1100 |
parents | |
children |
line wrap: on
line source
AddonName, AfterDark = ... LibStub("AceTimer-3.0"):Embed(AfterDark) LibStub("AceEvent-3.0"):Embed(AfterDark) AfterDark.L = LibStub("AceLocale-3.0"):GetLocale("AfterDark", true) local L = AfterDark.L local RIDE = "Interface\\AddOns\\AfterDark\\Images\\rotv.mp3" local ANTHEM = "Interface\\AddOns\\AfterDark\\Images\\fta.mp3" local SCREEN_HEIGHT = GetScreenHeight() local SCREEN_WIDTH = GetScreenWidth() local ScreenSaving = false burntoutToasters, shinyToasters, toasterRack, pendingFlight = {}, {}, {}, {} function OnFinished(self) if ScreenSaving then table.insert(pendingFlight, AfterDark:ScheduleTimer("SpawnMonkey", 0 )) if #shinyToasters < AfterDark.db.profile.Busy then table.insert(pendingFlight, AfterDark:ScheduleTimer("SpawnMonkey", math.random(0, AfterDark.db.profile.Speed))) end end AfterDark:CleanCrumbTray(self.parent) end function AfterDark:BringMeTheHeadOfAlfredoGarcia() local frame = table.remove(burntoutToasters) if not frame then frame = CreateFrame("Frame", nil, UIParent) frame:SetFrameStrata("BACKGROUND") frame:SetFrameLevel(math.random(1,60)) frame:SetHeight(64) frame:SetWidth(64) frame.mover = frame:CreateAnimationGroup() frame.mover.parent = frame frame.mover:SetLooping("NONE") frame.mover:SetScript("OnFinished", OnFinished) frame.transporter = frame.mover:CreateAnimation("Translation") frame.zoomer = frame.mover:CreateAnimation("Scale") if math.random(0,100) < 85 then AfterDark:ConstructToaster(frame) else AfterDark:SliceBread(frame) end end table.insert(shinyToasters, frame) if not toasterRack[frame] then toasterRack[frame] = true end return frame end function AfterDark:SpawnMonkey() local halfHeight = SCREEN_HEIGHT/2 local yOffset = math.random(-halfHeight, halfHeight) local scale = math.random(0.75, 1.5) if #shinyToasters >= AfterDark.db.profile.Busy then return end local head = self:BringMeTheHeadOfAlfredoGarcia() head:ClearAllPoints() head:SetPoint("RIGHT", UIParent, "RIGHT", 64, yOffset) local yLanding = math.random(-halfHeight, halfHeight) if head.IsToast then head.shade:SetAlpha(1 - AfterDark.db.profile.Darkness) end -- Retoast the bread head:Respeed() head.transporter:SetOffset(-SCREEN_WIDTH - 64 * scale, yLanding) head.transporter:SetDuration(AfterDark.db.profile.Speed) head.zoomer:SetScale(scale, scale) head.zoomer:SetDuration(AfterDark.db.profile.Speed) head:Start() end function AfterDark:PlayThatFunkyMusic() if AfterDark.db.profile.Music == "zRandom" then if math.random(1,2) == 1 then PlayMusic(RIDE) else PlayMusic(ANTHEM) end return else if AfterDark.db.profile.Music == "Ride" then PlayMusic(RIDE) else PlayMusic(ANTHEM) end end end function AfterDark:ScheduleFlight() StopMusic() table.insert(pendingFlight, self:ScheduleTimer("PlayThatFunkyMusic", 1)) table.insert(pendingFlight, self:ScheduleTimer("BeFreeMyPretties", 4)) end function AfterDark:BeFreeMyPretties() for i=1,AfterDark.db.profile.Busy do table.insert(pendingFlight, AfterDark:ScheduleTimer("SpawnMonkey", math.random(0, AfterDark.db.profile.Speed))) end end function AfterDark:QuickItsTheFuzz() for i,v in ipairs(pendingFlight) do AfterDark:CancelTimer(v, true) end for v,_ in pairs(toasterRack) do v:Finish() self:CleanCrumbTray(v) end pendingFlight = {} StopMusic() end function AfterDark:CleanCrumbTray(frame) for i = #shinyToasters, 1, -1 do if frame == shinyToasters[i] then table.insert(burntoutToasters, table.remove(shinyToasters, i)) return end end end function AfterDark:LightsAreOnButNobodysHome(eventName, target) if target ~= "player" then return end if UnitIsAFK("player") then ScreenSaving = true self:ScheduleFlight() else ScreenSaving = false self:QuickItsTheFuzz() end end function AfterDark:SetMeUp(event, addon) if addon ~= "AfterDark" then return end self:RegisterEvent("PLAYER_FLAGS_CHANGED", "LightsAreOnButNobodysHome") self.db = LibStub("AceDB-3.0"):New("AfterDarkDB", {profile = { Busy = 30, Music = "zRandom", Darkness = 0.5, Speed = 10 } }) AfterDark:SetupOptions() end AfterDark:RegisterEvent("ADDON_LOADED", "SetMeUp")