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