Mercurial > wow > afterdark
diff AfterDark.lua @ 1:f601b8507480
AfterDark - Initial Import
author | wobin |
---|---|
date | Sun, 20 Dec 2009 21:45:17 +1100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AfterDark.lua Sun Dec 20 21:45:17 2009 +1100 @@ -0,0 +1,154 @@ +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") +