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")
+