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 |