from Resource import *
from Concurrent import Concurrent

class Game(Concurrent):
	"""
	This high level state machine runs the update and draw routines of all game objects in order of priority.
	"""
	quit = False

	def __init__(self):
		Concurrent.__init__(self)
		self.currentscreen = None
		self.screens = {}
	
	def Launch(self):
		while not self.quit:
			self.Run()
	
	def Run(self):
		if self.currentscreen:
			if self.currentscreen.GetResult() in self.screens:
				self.SetCurrentScreen(self.screens[self.currentscreen.GetResult()])
			elif self.currentscreen.GetResult() == "quit":
				self.Quit()
		events.Pump()
		scheduler.Update()
		Concurrent.Run(self)
	
	def Quit(self):
		self.quit = True
	
	def SetCurrentScreen(self, which):
		if self.currentscreen:
			self.Remove(self.currentscreen)
		self.Add(which)
		if hasattr(which, "GotFocus"):
			which.GotFocus()
		self.currentscreen = which


