Mercurial > wow > afterdark
comparison AfterDark.lua @ 1:f601b8507480
AfterDark - Initial Import
| author | wobin |
|---|---|
| date | Sun, 20 Dec 2009 21:45:17 +1100 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:1bfd89cb7f44 | 1:f601b8507480 |
|---|---|
| 1 AddonName, AfterDark = ... | |
| 2 LibStub("AceTimer-3.0"):Embed(AfterDark) | |
| 3 LibStub("AceEvent-3.0"):Embed(AfterDark) | |
| 4 | |
| 5 AfterDark.L = LibStub("AceLocale-3.0"):GetLocale("AfterDark", true) | |
| 6 local L = AfterDark.L | |
| 7 | |
| 8 local RIDE = "Interface\\AddOns\\AfterDark\\Images\\rotv.mp3" | |
| 9 local ANTHEM = "Interface\\AddOns\\AfterDark\\Images\\fta.mp3" | |
| 10 | |
| 11 local SCREEN_HEIGHT = GetScreenHeight() | |
| 12 local SCREEN_WIDTH = GetScreenWidth() | |
| 13 | |
| 14 local ScreenSaving = false | |
| 15 | |
| 16 burntoutToasters, shinyToasters, toasterRack, pendingFlight = {}, {}, {}, {} | |
| 17 | |
| 18 function OnFinished(self) | |
| 19 if ScreenSaving then | |
| 20 table.insert(pendingFlight, AfterDark:ScheduleTimer("SpawnMonkey", 0 )) | |
| 21 if #shinyToasters < AfterDark.db.profile.Busy then | |
| 22 table.insert(pendingFlight, AfterDark:ScheduleTimer("SpawnMonkey", math.random(0, AfterDark.db.profile.Speed))) | |
| 23 end | |
| 24 end | |
| 25 AfterDark:CleanCrumbTray(self.parent) | |
| 26 end | |
| 27 | |
| 28 function AfterDark:BringMeTheHeadOfAlfredoGarcia() | |
| 29 local frame = table.remove(burntoutToasters) | |
| 30 if not frame then | |
| 31 frame = CreateFrame("Frame", nil, UIParent) | |
| 32 frame:SetFrameStrata("BACKGROUND") | |
| 33 frame:SetFrameLevel(math.random(1,60)) | |
| 34 frame:SetHeight(64) | |
| 35 frame:SetWidth(64) | |
| 36 | |
| 37 frame.mover = frame:CreateAnimationGroup() | |
| 38 frame.mover.parent = frame | |
| 39 frame.mover:SetLooping("NONE") | |
| 40 frame.mover:SetScript("OnFinished", OnFinished) | |
| 41 | |
| 42 frame.transporter = frame.mover:CreateAnimation("Translation") | |
| 43 frame.zoomer = frame.mover:CreateAnimation("Scale") | |
| 44 | |
| 45 if math.random(0,100) < 85 then | |
| 46 AfterDark:ConstructToaster(frame) | |
| 47 else | |
| 48 AfterDark:SliceBread(frame) | |
| 49 end | |
| 50 end | |
| 51 | |
| 52 | |
| 53 table.insert(shinyToasters, frame) | |
| 54 if not toasterRack[frame] then | |
| 55 toasterRack[frame] = true | |
| 56 end | |
| 57 return frame | |
| 58 end | |
| 59 | |
| 60 function AfterDark:SpawnMonkey() | |
| 61 local halfHeight = SCREEN_HEIGHT/2 | |
| 62 local yOffset = math.random(-halfHeight, halfHeight) | |
| 63 | |
| 64 local scale = math.random(0.75, 1.5) | |
| 65 | |
| 66 if #shinyToasters >= AfterDark.db.profile.Busy then return end | |
| 67 local head = self:BringMeTheHeadOfAlfredoGarcia() | |
| 68 | |
| 69 head:ClearAllPoints() | |
| 70 head:SetPoint("RIGHT", UIParent, "RIGHT", 64, yOffset) | |
| 71 | |
| 72 local yLanding = math.random(-halfHeight, halfHeight) | |
| 73 | |
| 74 if head.IsToast then head.shade:SetAlpha(1 - AfterDark.db.profile.Darkness) end -- Retoast the bread | |
| 75 head:Respeed() | |
| 76 | |
| 77 head.transporter:SetOffset(-SCREEN_WIDTH - 64 * scale, yLanding) | |
| 78 head.transporter:SetDuration(AfterDark.db.profile.Speed) | |
| 79 head.zoomer:SetScale(scale, scale) | |
| 80 head.zoomer:SetDuration(AfterDark.db.profile.Speed) | |
| 81 head:Start() | |
| 82 end | |
| 83 | |
| 84 function AfterDark:PlayThatFunkyMusic() | |
| 85 if AfterDark.db.profile.Music == "zRandom" then | |
| 86 if math.random(1,2) == 1 then | |
| 87 PlayMusic(RIDE) | |
| 88 else | |
| 89 PlayMusic(ANTHEM) | |
| 90 end | |
| 91 return | |
| 92 else | |
| 93 if AfterDark.db.profile.Music == "Ride" then | |
| 94 PlayMusic(RIDE) | |
| 95 else | |
| 96 PlayMusic(ANTHEM) | |
| 97 end | |
| 98 end | |
| 99 end | |
| 100 | |
| 101 function AfterDark:ScheduleFlight() | |
| 102 StopMusic() | |
| 103 table.insert(pendingFlight, self:ScheduleTimer("PlayThatFunkyMusic", 1)) | |
| 104 table.insert(pendingFlight, self:ScheduleTimer("BeFreeMyPretties", 4)) | |
| 105 end | |
| 106 | |
| 107 function AfterDark:BeFreeMyPretties() | |
| 108 for i=1,AfterDark.db.profile.Busy do | |
| 109 table.insert(pendingFlight, AfterDark:ScheduleTimer("SpawnMonkey", math.random(0, AfterDark.db.profile.Speed))) | |
| 110 end | |
| 111 | |
| 112 end | |
| 113 | |
| 114 function AfterDark:QuickItsTheFuzz() | |
| 115 for i,v in ipairs(pendingFlight) do | |
| 116 AfterDark:CancelTimer(v, true) | |
| 117 end | |
| 118 for v,_ in pairs(toasterRack) do | |
| 119 v:Finish() | |
| 120 self:CleanCrumbTray(v) | |
| 121 end | |
| 122 pendingFlight = {} | |
| 123 StopMusic() | |
| 124 end | |
| 125 | |
| 126 function AfterDark:CleanCrumbTray(frame) | |
| 127 for i = #shinyToasters, 1, -1 do | |
| 128 if frame == shinyToasters[i] then | |
| 129 table.insert(burntoutToasters, table.remove(shinyToasters, i)) | |
| 130 return | |
| 131 end | |
| 132 end | |
| 133 end | |
| 134 | |
| 135 function AfterDark:LightsAreOnButNobodysHome(eventName, target) | |
| 136 if target ~= "player" then return end | |
| 137 if UnitIsAFK("player") then | |
| 138 ScreenSaving = true | |
| 139 self:ScheduleFlight() | |
| 140 else | |
| 141 ScreenSaving = false | |
| 142 self:QuickItsTheFuzz() | |
| 143 end | |
| 144 end | |
| 145 | |
| 146 function AfterDark:SetMeUp(event, addon) | |
| 147 if addon ~= "AfterDark" then return end | |
| 148 self:RegisterEvent("PLAYER_FLAGS_CHANGED", "LightsAreOnButNobodysHome") | |
| 149 self.db = LibStub("AceDB-3.0"):New("AfterDarkDB", {profile = { Busy = 30, Music = "zRandom", Darkness = 0.5, Speed = 10 } }) | |
| 150 AfterDark:SetupOptions() | |
| 151 end | |
| 152 | |
| 153 AfterDark:RegisterEvent("ADDON_LOADED", "SetMeUp") | |
| 154 |
