/mainmenu.py
import pygame
import thread
from fx import *
import event

class MainMenu:
	fx = None
	fxlock = None
	period = 428
	circuitlist = [[(590,0), (550,40), (200,40), (170,70), (170,310)],
		       [(570,0), (540,30), (190,30), (160,60), (20,60), (20,220), (50,250), (50,420), (90,460), (610,460)],
		       [(0,220), (40,260), (40,480)],
		       [(180,0), (180,20), (150,50), (20,50), (20,0)]]
	# (label, message)
	menuitems = [("play","fileselect"), ("quit","quit")]
	subtitle = "holy shit parallax!!!11!1"
	version = 1e-99

	def __init__(self):
		self.fxlock = thread.allocate_lock()
		self.fx = []
		self.menufx = []
		self.position = 0
		self.bar = PulseLine([(0,0),(130,0)],(200,200,255),self.period,5)
		thread.start_new_thread(self.fxloader,())

	def fxloader(self):
		self.fxlock.acquire()
		self.fx.append(Blank())
		for l in self.circuitlist:
			o = PulseLine(l,(255,30,30),self.period)
			self.fx.append(o)
		self.fxlock.release()

		o = Image('gfx/title.png',(200,40))
		self.fxlock.acquire()
		self.fx.append(o)
		self.fxlock.release()

		n = 0
		for l in self.menuitems:
			o = Text(l[0],'font/Nano.ttf',18,(30,70 + 20*n), (255,30,30))
			self.fxlock.acquire()
			self.fx.append(o)
			self.menufx.append(o)
			self.fxlock.release()
			n += 1

		o = Text(self.subtitle,'font/Nano.ttf',15,(600,100),(255,30,30))
		o.align = ALIGN_RIGHT
		self.fxlock.acquire()
		self.fx.append(o)
		self.fxlock.release()

		o = Text("version " + str(self.version),'font/Nano.ttf',14,(610,440),(255,30,30))
		o.align = ALIGN_RIGHT
		self.fxlock.acquire()
		self.fx.append(o)
		self.fxlock.release()

		o = PlaneScroll('gfx/chips_layer1.jpg',(-0.12,0.06),2.0,0.75)
		self.fxlock.acquire()
		self.fx.insert(1,o)
		self.fxlock.release()

		o = PlaneScroll('gfx/chips_layer2.jpg',(-0.06,0.03))
		self.fxlock.acquire()
		self.fx.remove(self.fx[0])
		self.fx.insert(0,o)
		self.fxlock.release()
			
	def draw(self,t):
		self.fxlock.acquire()
		for f in self.fx:
			f.draw(t)
		self.fxlock.release()
		self.bar.location = (30, 68 + 20*self.position)
		self.bar.draw(t)
		self.bar.location = (30, 68 + 20*self.position + 20)
		self.bar.draw(t)

	def run(self):
		screen = pygame.display.get_surface()
		decided = 0
		pygame.mixer.music.load('snd/0x00.ogg')
		pygame.mixer.music.set_volume(0.75)
		pygame.mixer.music.play(-1)
		stab = pygame.mixer.Sound('snd/stab.ogg')
		stab.set_volume(0.25)
		start_t = pygame.time.get_ticks()

		while decided == 0:
			t = pygame.time.get_ticks() - start_t
			for e in pygame.event.get():
				act = event.parseevent(e)
				if act == event.CANCEL:
					decided = 'quit'
				elif act == event.DOWN:
					self.position += 1
				elif act == event.UP:
					self.position -= 1
				elif act == event.OK:
					decided = self.menuitems[self.position][1]

			self.position = self.position % len(self.menuitems)
			self.draw(t)
			pygame.display.flip()

		pygame.mixer.music.fadeout(1500)
		stab.play()

		start_t2 = pygame.time.get_ticks()
		dt = 0
		blanksurf = pygame.surface.Surface((640,480)).convert()
		blanksurf.fill( (0,0,0) )
		while dt < 1500:
			dt = pygame.time.get_ticks() - start_t2
			if dt < 1000:
				self.draw(pygame.time.get_ticks() - start_t)
				blanksurf.set_alpha(int(dt / 1000.0 * 255.0))
				screen.blit(blanksurf,(0,0))
			else:
				screen.fill( (0,0,0) )
			self.menufx[self.position].draw(0)
			if dt >= 1000:
				blanksurf.set_alpha(int((dt-1000) / 500.0 * 255.0))
				screen.blit(blanksurf,(0,0))
			pygame.display.flip()

		return [decided]