from pygame import time

class Scheduler:
	def __init__(self):
		# the list of events that are scheduled
		self.events = []
		# remember if we've scheduled something before, by name
		self.slots = []
	
	def Schedule(self, when, event, args=(), slot=None):
		self.events.append([time.get_ticks() + when, event, args, slot])
	
	def Update(self):
		now = time.get_ticks()
		destroy = [self.Run(p) for p in self.events if now > p[0]]
		[self.events.remove(p) for p in destroy]
	
	def Run(self, which):
		apply(which[1], which[2])
		self.slots.remove(which[3])
		return which
	
	def ScheduleOnce(self, when, slot, event, args=()):
		if not slot in self.slots:
			self.slots.append(slot)
			self.Schedule(when, event, args, slot)

scheduler = Scheduler()

