Ejemplo n.º 1
0
class ExitMenu(Menu):
    "Exit Menu"

    def __init__(self):
        "Set up the Exit menu"

        Menu.__init__(self, "MoleFusion Exit Menu", "sprites/back1.jpg")

        self.parser = make_parser()
        self.curHandler = Localization()
        self.parser.setContentHandler(self.curHandler)
        self.parser.parse(
            open("languages/ExitMenu_" + Constants.LANGUAGE + ".xml"))

        self.title = GW_Label(self.curHandler.getText("title"), (0.5, 0.1),
                              (27, 22, 24))

        self.game_by = GW_Label(self.curHandler.getText("game"), (0.5, 0.3),
                                (240, 255, 220))
        self.music_by = GW_Label(self.curHandler.getText("music"), (0.5, 0.5),
                                 (240, 255, 220))
        self.web = GW_Label(self.curHandler.getText("web"), (0.5, 0.7),
                            (255, 255, 255))

        self.widget_man = GuiWidgetManager(
            [self.title, self.game_by, self.music_by, self.web])

        self.time_speed = pygame.time.Clock()
        self.exit = False
        self.on_enter()

    def on_enter(self):
        pygame.event.clear()
        self.screen.blit(self.background, (0, 0))
        pygame.display.flip()
        self.exit = False
        self.widget_man.set_draw(True)

    def on_exit(self):
        pygame.event.clear()
        f = FadeTransition(2000, Constants.FADECOLOR, "to")
        del f
        self.exit = True
        self.widget_man.set_draw(False)

    def run(self):
        while 1 and self.exit == False:
            self.time_speed.tick(Constants.FPS)
            for event in pygame.event.get():
                if event.type == QUIT:
                    self.on_exit()
                elif event.type == KEYDOWN or event.type == MOUSEBUTTONDOWN:
                    self.on_exit()
                else:
                    pygame.event.post(
                        event
                    )  #Reinject the event into the queue for maybe latter process

            self.widget_man.run()
Ejemplo n.º 2
0
class ExitMenu(Menu):
	"Exit Menu"
	
	def __init__(self):
		"Set up the Exit menu"
		
		Menu.__init__(self,"MoleFusion Exit Menu","sprites/back1.jpg")
		
		self.parser = make_parser()
		self.curHandler = Localization()
		self.parser.setContentHandler(self.curHandler)
		self.parser.parse(open("languages/ExitMenu_" + Constants.LANGUAGE + ".xml"))
	
		self.title = GW_Label(self.curHandler.getText("title"),(0.5,0.1),(27,22,24))
		
		self.game_by = GW_Label(self.curHandler.getText("game"),(0.5,0.3),(240,255,220))
		self.music_by = GW_Label(self.curHandler.getText("music"),(0.5,0.5),(240,255,220))
		self.web = GW_Label(self.curHandler.getText("web"),(0.5,0.7),(255,255,255))
						
		self.widget_man = GuiWidgetManager([self.title,self.game_by,self.music_by,self.web])
		
		self.time_speed=pygame.time.Clock()
		self.exit=False
		self.on_enter()

	def on_enter(self):
		pygame.event.clear()		
		self.screen.blit(self.background, (0, 0))
		pygame.display.flip()
		self.exit=False
		self.widget_man.set_draw(True)
	
	def on_exit(self):
		pygame.event.clear()
		f = FadeTransition(2000,Constants.FADECOLOR,"to")
		del f
		self.exit=True
		self.widget_man.set_draw(False)

				
	def run(self):
		while 1 and self.exit==False:
			self.time_speed.tick(Constants.FPS)
			for event in pygame.event.get():
				if event.type == QUIT:
					self.on_exit()
				elif event.type == KEYDOWN or event.type == MOUSEBUTTONDOWN:
					self.on_exit()
				else:
					pygame.event.post(event) #Reinject the event into the queue for maybe latter process	
						
			self.widget_man.run()
Ejemplo n.º 3
0
class MainMenu(Menu):
    "Main Menu"

    def __init__(self):
        "Sets up the menu"

        Menu.__init__(self, "MoleFusion Main Menu", "sprites/back1.jpg")

        self.parser = make_parser()
        self.curHandler = Localization()
        self.parser.setContentHandler(self.curHandler)
        self.parser.parse(
            open("languages/MainMenu_" + Constants.LANGUAGE + ".xml"))

        self.title = GW_Label(self.curHandler.getText("title"), (0.5, 0.1),
                              (27, 22, 24))

        self.start = GW_Button(self.curHandler.getText("start"), (0.5, 0.3),
                               (255, 255, 255))
        self.start.add_eventhandler("onmouseclick", self.start_onmouseclick)

        self.options = GW_Button(self.curHandler.getText("options"),
                                 (0.5, 0.45), (255, 255, 255))
        self.options.add_eventhandler("onmouseclick",
                                      self.options_onmouseclick)

        self.highscores = GW_Button(self.curHandler.getText("highscores"),
                                    (0.5, 0.6), (255, 255, 255))
        self.highscores.add_eventhandler("onmouseclick",
                                         self.highscores_onmouseclick)

        self.help = GW_Button(self.curHandler.getText("help"), (0.5, 0.75),
                              (255, 255, 255))
        self.help.add_eventhandler("onmouseclick", self.help_onmouseclick)

        self.quit = GW_Button(self.curHandler.getText("quit"), (0.5, 0.9),
                              (255, 255, 255))
        self.quit.add_eventhandler("onmouseclick", self.quit_onmouseclick)

        self.widget_man = GuiWidgetManager([
            self.title, self.start, self.options, self.highscores, self.help,
            self.quit
        ])

        self.time_speed = pygame.time.Clock()

        self.on_enter()

    def on_enter(self):
        pygame.event.clear()
        self.screen.blit(self.background, (0, 0))
        pygame.display.flip()

        self.widget_man.set_draw(True)

    def on_exit(self):
        pygame.event.clear()
        f = FadeTransition(500, Constants.FADECOLOR, "to")
        del f
        self.widget_man.set_draw(False)

    def start_onmouseclick(self, event):
        self.start.onmouseclick(event)
        self.on_exit()
        game = Game()
        game.run()
        self.start.onmouseclickup(event)
        self.on_enter()

    def options_onmouseclick(self, event):
        self.options.onmouseclick(event)
        self.on_exit()
        options = OptionsMenu()
        options.run()
        self.reload_titles()
        self.options.onmouseclickup(event)
        self.on_enter()

    def highscores_onmouseclick(self, event):
        self.highscores.onmouseclick(event)
        self.on_exit()
        highscores = HighScoresMenu("sprites/back1.jpg")
        highscores.run()
        self.reload_titles()
        self.highscores.onmouseclickup(event)
        self.on_enter()

    def help_onmouseclick(self, event):
        self.help.onmouseclick(event)
        self.on_exit()
        help = HelpMenu()
        help.run()
        self.help.onmouseclickup(event)
        self.reload_titles()
        self.on_enter()

    def quit_onmouseclick(self, event):
        self.quit.onmouseclick(event)
        self.on_exit()
        exit = ExitMenu()
        exit.run()
        pygame.event.post(pygame.event.Event(QUIT, {}))

    def reload_titles(self):
        self.parser.parse(
            open("languages/MainMenu_" + Constants.LANGUAGE + ".xml"))
        self.title.set_title(self.curHandler.getText("title"))
        self.start.set_title(self.curHandler.getText("start"))
        self.options.set_title(self.curHandler.getText("options"))
        self.highscores.set_title(self.curHandler.getText("highscores"))
        self.help.set_title(self.curHandler.getText("help"))
        self.quit.set_title(self.curHandler.getText("quit"))

    def run(self):
        while 1:

            self.time_speed.tick(Constants.FPS)

            for event in pygame.event.get():
                if event.type == QUIT:
                    os._exit(0)

                elif event.type == KEYDOWN and event.key == K_ESCAPE:
                    self.quit_onmouseclick(event)

                else:
                    pygame.event.post(
                        event
                    )  #Reinject the event into the queue for maybe latter process

            self.widget_man.run()
Ejemplo n.º 4
0
class HelpMenu(Menu):
	"Help Menu"
	
	def __init__(self):
		"Sets up the Help menu"
		
		Menu.__init__(self,"MoleFusion Help Menu","sprites/back1.jpg")
		
		self.parser = make_parser()
		self.curHandler = Localization()
		self.parser.setContentHandler(self.curHandler)
		self.parser.parse(open("languages/HelpMenu_" + Constants.LANGUAGE + ".xml"))
	
		self.title = GW_Label(self.curHandler.getText("title"),(0.5,0.1),(27,22,24))
		
		self.help = GW_Image(self.curHandler.getText("help"),(0.5,0.3))
						
		self.returnMain = GW_Button(self.curHandler.getText("returnMain"),(0.5,0.5),(255,255,255))
		self.returnMain.add_eventhandler("onmouseclick",self.returnMain_onmouseclick)
		
		self.widget_man = GuiWidgetManager([self.title,self.help,self.returnMain])
		
		self.time_speed=pygame.time.Clock()
		self.exit=False
		self.on_enter()

	def on_enter(self):
		pygame.event.clear()		
		self.screen.blit(self.background, (0, 0))
		pygame.display.flip()
		self.exit=False
		self.widget_man.set_draw(True)
	
	def on_exit(self):
		f = FadeTransition(500,Constants.FADECOLOR,"to")
		del f
		self.exit=True
		self.widget_man.set_draw(False)
		pygame.event.clear()
		

	def returnMain_onmouseclick(self,event):
		self.returnMain.onmouseclick(event)
		self.on_exit()
	
	def reload_titles(self):
		self.parser.parse(open("languages/OptionsMenu_" + Constants.LANGUAGE + ".xml"))
		self.title.set_title(self.curHandler.getText("title"))
		self.help.set_title(self.curHandler.getText("help"))
		self.returnMain.set_title(self.curHandler.getText("returnMain"))	
				
	def run(self):
		while 1 and self.exit==False:
			self.time_speed.tick(Constants.FPS)
			for event in pygame.event.get():
				if event.type == QUIT:
					os._exit(0)

				elif event.type == KEYDOWN:
					if (not self.widget_man.has_input_focus()):
						if(event.key == K_ESCAPE):
							return
					#else:
					#	pygame.event.post(event) #Reinject the event into the queue for maybe latter process	
				else:
					pygame.event.post(event) #Reinject the event into the queue for maybe latter process	
						
			self.widget_man.run()
Ejemplo n.º 5
0
class HighScoresMenu(Menu):
    "HighScores Menu"

    def __init__(self, background):
        "Set up the HighScores menu"

        Menu.__init__(self, "MoleFusion HighScore Menu", background)

        self.parser = make_parser()
        self.curHandler = Localization()
        self.parser.setContentHandler(self.curHandler)
        self.parser.parse(
            open("languages/HighScoresMenu_" + Constants.LANGUAGE + ".xml"))

        self.title = GW_Label(self.curHandler.getText("title"), (0.5, 0.1),
                              (27, 22, 24))

        self.name_column = GW_Label(self.curHandler.getText("name"),
                                    (0.25, 0.25), (212, 224, 130))
        self.points_column = GW_Label(self.curHandler.getText("points"),
                                      (0.75, 0.25), (212, 224, 130))

        self.returnMain = GW_Button(self.curHandler.getText("returnMain"),
                                    (0.5, 0.9), (255, 255, 255))
        self.returnMain.add_eventhandler("onmouseclick",
                                         self.returnMain_onmouseclick)

        h = HighScores()
        highscorelist = h.get_HighScores()

        self.widgetlist = [
            self.title, self.name_column, self.points_column, self.returnMain
        ]

        for val, i in enumerate(highscorelist[0:5]):
            self.widgetlist.append(
                GW_Label(i.get_name(), (0.25, 0.35 + val / 10.0),
                         (250, 254, 210)))
            self.widgetlist.append(
                GW_Label(str(i.get_points()), (0.75, 0.35 + val / 10.0),
                         (250, 254, 210)))

        self.widget_man = GuiWidgetManager(self.widgetlist)

        self.time_speed = pygame.time.Clock()
        self.exit = False
        self.on_enter()

    def on_enter(self):
        pygame.event.clear()
        self.screen.blit(self.background, (0, 0))
        pygame.display.flip()
        self.exit = False
        self.widget_man.set_draw(True)

    def on_exit(self):
        pygame.event.clear()
        f = FadeTransition(500, Constants.FADECOLOR, "to")
        del f
        self.exit = True
        self.widget_man.set_draw(False)

    def returnMain_onmouseclick(self, event):
        self.returnMain.onmouseclick(event)
        self.on_exit()

    def run(self):
        while 1 and self.exit == False:
            self.time_speed.tick(Constants.FPS)
            for event in pygame.event.get():
                if event.type == QUIT:
                    os._exit(0)

                elif event.type == KEYDOWN:
                    if (not self.widget_man.has_input_focus()):
                        if (event.key == K_ESCAPE):
                            return
                    #else:
                    #	pygame.event.post(event) #Reinject the event into the queue for maybe latter process
                else:
                    pygame.event.post(
                        event
                    )  #Reinject the event into the queue for maybe latter process

            self.widget_man.run()
Ejemplo n.º 6
0
class OptionsMenu(Menu):
    "Options Menu"

    def __init__(self):
        "Sets up the options menu"

        Menu.__init__(self, "MoleFusion Options Menu", "sprites/back1.jpg")

        self.parser = make_parser()
        self.curHandler = Localization()
        self.parser.setContentHandler(self.curHandler)
        self.parser.parse(open("languages/OptionsMenu_" + Constants.LANGUAGE + ".xml"))

        self.title = GW_Label(self.curHandler.getText("title"), (0.5, 0.1), (27, 22, 24))

        self.name = GW_Label(self.curHandler.getText("name"), (0.5, 0.2), (255, 255, 255))
        self.inputname = GW_TextInput((0.5, 0.3), 24, 0.4, Constants.PLAYERNAME)

        self.language = GW_Button(self.curHandler.getText("language"), (0.5, 0.5), (255, 255, 255))
        self.language.add_eventhandler("onmouseclick", self.language_onmouseclick)

        self.returnMain = GW_Button(self.curHandler.getText("returnMain"), (0.5, 0.8), (255, 255, 255))
        self.returnMain.add_eventhandler("onmouseclick", self.returnMain_onmouseclick)

        self.widget_man = GuiWidgetManager([self.title, self.name, self.inputname, self.language, self.returnMain])

        self.time_speed = pygame.time.Clock()
        self.exit = False
        self.on_enter()

    def on_enter(self):
        pygame.event.clear()
        self.screen.blit(self.background, (0, 0))
        pygame.display.flip()
        self.exit = False
        self.widget_man.set_draw(True)

    def on_exit(self):
        f = FadeTransition(500, Constants.FADECOLOR, "to")
        del f
        Constants.PLAYTIME = pygame.mixer.music.get_pos()
        self.exit = True
        self.widget_man.set_draw(False)
        Constants.PLAYERNAME = self.inputname.get_Text()
        pygame.event.clear()

    def language_onmouseclick(self, event):
        self.language.onmouseclick(event)
        self.on_exit()
        l = LanguageMenu()
        l.run()
        self.language.onmouseclickup(event)
        self.reload_titles()
        self.on_enter()
        pygame.mixer.music.play()

    def returnMain_onmouseclick(self, event):
        self.returnMain.onmouseclick(event)
        self.on_exit()

    def reload_titles(self):
        self.parser.parse(open("languages/OptionsMenu_" + Constants.LANGUAGE + ".xml"))
        self.name.set_title(self.curHandler.getText("name"))
        self.title.set_title(self.curHandler.getText("title"))
        self.language.set_title(self.curHandler.getText("language"))
        self.returnMain.set_title(self.curHandler.getText("returnMain"))

    def run(self):
        while 1 and self.exit == False:
            self.time_speed.tick(Constants.FPS)
            for event in pygame.event.get():
                if event.type == QUIT:
                    os._exit(0)

                elif event.type == KEYDOWN:
                    if not self.widget_man.has_input_focus():
                        if event.key == K_ESCAPE:
                            return
                    else:
                        pygame.event.post(event)  # Reinject the event into the queue for maybe latter process
                else:
                    pygame.event.post(event)  # Reinject the event into the queue for maybe latter process

            self.widget_man.run()
Ejemplo n.º 7
0
class HighScoresMenu(Menu):
	"HighScores Menu"
	
	def __init__(self,background):
		"Set up the HighScores menu"
		
		Menu.__init__(self,"MoleFusion HighScore Menu",background)
		
		self.parser = make_parser()
		self.curHandler = Localization()
		self.parser.setContentHandler(self.curHandler)
		self.parser.parse(open("languages/HighScoresMenu_" + Constants.LANGUAGE + ".xml"))
	
		self.title = GW_Label(self.curHandler.getText("title"),(0.5,0.1),(27,22,24))
		
		self.name_column = GW_Label(self.curHandler.getText("name"),(0.25,0.25),(212,224,130))
		self.points_column = GW_Label(self.curHandler.getText("points"),(0.75,0.25),(212,224,130))
		
		self.returnMain = GW_Button(self.curHandler.getText("returnMain"),(0.5,0.9),(255,255,255))
		self.returnMain.add_eventhandler("onmouseclick",self.returnMain_onmouseclick)
		
		h = HighScores()
		highscorelist = h.get_HighScores()

		self.widgetlist = [self.title,self.name_column,self.points_column,self.returnMain]
		
		for val,i in enumerate(highscorelist[0:5]):
			self.widgetlist.append(GW_Label(i.get_name(),(0.25,0.35+val/10.0),(250,254,210)))
			self.widgetlist.append(GW_Label(str(i.get_points()),(0.75,0.35+val/10.0),(250,254,210)))
				
		self.widget_man = GuiWidgetManager(self.widgetlist)
		
		self.time_speed=pygame.time.Clock()
		self.exit=False
		self.on_enter()

	def on_enter(self):
		pygame.event.clear()		
		self.screen.blit(self.background, (0, 0))
		pygame.display.flip()
		self.exit=False
		self.widget_man.set_draw(True)
	
	def on_exit(self):
		pygame.event.clear()
		f = FadeTransition(500,Constants.FADECOLOR,"to")
		del f
		self.exit=True
		self.widget_man.set_draw(False)
		
	def returnMain_onmouseclick(self,event):
		self.returnMain.onmouseclick(event)
		self.on_exit()
				
	def run(self):
		while 1 and self.exit==False:
			self.time_speed.tick(Constants.FPS)
			for event in pygame.event.get():
				if event.type == QUIT:
					os._exit(0)

				elif event.type == KEYDOWN:
					if (not self.widget_man.has_input_focus()):
						if(event.key == K_ESCAPE):
							return
					#else:
					#	pygame.event.post(event) #Reinject the event into the queue for maybe latter process	
				else:
					pygame.event.post(event) #Reinject the event into the queue for maybe latter process	
						
			self.widget_man.run()
Ejemplo n.º 8
0
class MessageBox(pygame.sprite.Sprite):
	"MessageBox class"

	def __init__(self,gamecontainer,time):
		"Initialises resources "
		
		pygame.sprite.Sprite.__init__(self)
	
		self.parser = make_parser()
		self.curHandler = Localization()
		self.parser.setContentHandler(self.curHandler)
		self.parser.parse(open("languages/MessageBox_" + Constants.LANGUAGE + ".xml"))
		
		self.gamecontainer=gamecontainer
		self.time_start=self.gamecontainer.time
		self.time=0.0
		self.endtime = time
		self.dirty = 1
	
		self.screen_size=Constants.SCREEN.get_size() 
		self.image=pygame.image.load("sprites/back_letters.png")
		self.image.convert_alpha()
		self.rect  = self.image.get_rect()
		self.rect.centerx = 0.5*self.screen_size[0]
		self.rect.centery = 0.5*self.screen_size[1]
		self.state = "grow"
		self.scale = 0.0
		
		self.font = pygame.font.Font(os.path.join("fonts","verdana.ttf"), 24)
		
		if self.gamecontainer.start == True:
			self.fontimg = self.font.render( self.curHandler.getText("level") + " " + str(self.gamecontainer.level), True , (230,240,255,255) )
			rect = self.fontimg.get_rect()			
			self.image.blit(self.fontimg,(self.rect.width/2 - rect.width/2,100))
			
		elif self.gamecontainer.completed == True:
			self.fontimg = self.font.render( self.curHandler.getText("finish"), True , (230,240,255,255) )
			rect = self.fontimg.get_rect()			
			self.image.blit(self.fontimg,(self.rect.width/2 - rect.width/2,80))
			self.fontimg = self.font.render( self.curHandler.getText("points"), True , (230,240,255,255) )
			rect = self.fontimg.get_rect()			
			self.image.blit(self.fontimg,(self.rect.width/2 - rect.width/2,110))
			self.fontimg = self.font.render( str(self.gamecontainer.timeclock.get_time()*15), True , (255,255,235,255) )
			rect = self.fontimg.get_rect()			
			self.image.blit(self.fontimg,(self.rect.width/2 - rect.width/2,140))
			self.gamecontainer.score.change(self.gamecontainer.timeclock.get_time()*15)
		
		elif self.gamecontainer.gameover == True:
			self.fontimg = self.font.render( self.curHandler.getText("over"), True , (230,240,255,255) )
			rect = self.fontimg.get_rect()	
			self.image.blit(self.fontimg,(self.rect.width/2 - rect.width/2,100))
			
		self.original=self.image.copy()
		
		
	def update(self):

		self.time= self.gamecontainer.time - self.time_start
		
		if self.time > self.endtime:
			if self.gamecontainer.start == True:
				self.gamecontainer.pause = False
			else:
				self.gamecontainer.quit = True

		elif self.time > self.endtime*0.1 and self.time < self.endtime*0.9:
			self.state = "stop"
			self.dirty = 0
		
		elif self.time > self.endtime*0.9:
			self.state = "shrink"
			self.dirty = 1
			self.scale = cosine_Interpolate((1.0,0.0),(self.time-(self.endtime*0.9))/(self.endtime*0.1))
					
		else:
			self.scale = cosine_Interpolate((0.0,1.0),self.time/(self.endtime*0.1))

			
		if not self.dirty:
			return
		
		self.image = pygame.transform.rotozoom(self.original,0.0,self.scale)
		self.rect = self.image.get_rect(center=(self.rect.centerx,self.rect.centery))
		self.dirty=1
Ejemplo n.º 9
0
class MessageBox(pygame.sprite.Sprite):
    "MessageBox class"

    def __init__(self, gamecontainer, time):
        "Initialises resources "

        pygame.sprite.Sprite.__init__(self)

        self.parser = make_parser()
        self.curHandler = Localization()
        self.parser.setContentHandler(self.curHandler)
        self.parser.parse(
            open("languages/MessageBox_" + Constants.LANGUAGE + ".xml"))

        self.gamecontainer = gamecontainer
        self.time_start = self.gamecontainer.time
        self.time = 0.0
        self.endtime = time
        self.dirty = 1

        self.screen_size = Constants.SCREEN.get_size()
        self.image = pygame.image.load("sprites/back_letters.png")
        self.image.convert_alpha()
        self.rect = self.image.get_rect()
        self.rect.centerx = 0.5 * self.screen_size[0]
        self.rect.centery = 0.5 * self.screen_size[1]
        self.state = "grow"
        self.scale = 0.0

        self.font = pygame.font.Font(os.path.join("fonts", "verdana.ttf"), 24)

        if self.gamecontainer.start == True:
            self.fontimg = self.font.render(
                self.curHandler.getText("level") + " " +
                str(self.gamecontainer.level), True, (230, 240, 255, 255))
            rect = self.fontimg.get_rect()
            self.image.blit(self.fontimg,
                            (self.rect.width / 2 - rect.width / 2, 100))

        elif self.gamecontainer.completed == True:
            self.fontimg = self.font.render(self.curHandler.getText("finish"),
                                            True, (230, 240, 255, 255))
            rect = self.fontimg.get_rect()
            self.image.blit(self.fontimg,
                            (self.rect.width / 2 - rect.width / 2, 80))
            self.fontimg = self.font.render(self.curHandler.getText("points"),
                                            True, (230, 240, 255, 255))
            rect = self.fontimg.get_rect()
            self.image.blit(self.fontimg,
                            (self.rect.width / 2 - rect.width / 2, 110))
            self.fontimg = self.font.render(
                str(self.gamecontainer.timeclock.get_time() * 15), True,
                (255, 255, 235, 255))
            rect = self.fontimg.get_rect()
            self.image.blit(self.fontimg,
                            (self.rect.width / 2 - rect.width / 2, 140))
            self.gamecontainer.score.change(
                self.gamecontainer.timeclock.get_time() * 15)

        elif self.gamecontainer.gameover == True:
            self.fontimg = self.font.render(self.curHandler.getText("over"),
                                            True, (230, 240, 255, 255))
            rect = self.fontimg.get_rect()
            self.image.blit(self.fontimg,
                            (self.rect.width / 2 - rect.width / 2, 100))

        self.original = self.image.copy()

    def update(self):

        self.time = self.gamecontainer.time - self.time_start

        if self.time > self.endtime:
            if self.gamecontainer.start == True:
                self.gamecontainer.pause = False
            else:
                self.gamecontainer.quit = True

        elif self.time > self.endtime * 0.1 and self.time < self.endtime * 0.9:
            self.state = "stop"
            self.dirty = 0

        elif self.time > self.endtime * 0.9:
            self.state = "shrink"
            self.dirty = 1
            self.scale = cosine_Interpolate(
                (1.0, 0.0),
                (self.time - (self.endtime * 0.9)) / (self.endtime * 0.1))

        else:
            self.scale = cosine_Interpolate((0.0, 1.0),
                                            self.time / (self.endtime * 0.1))

        if not self.dirty:
            return

        self.image = pygame.transform.rotozoom(self.original, 0.0, self.scale)
        self.rect = self.image.get_rect(center=(self.rect.centerx,
                                                self.rect.centery))
        self.dirty = 1
Ejemplo n.º 10
0
class MainMenu(Menu):
    "Main Menu"

    def __init__(self):
        "Sets up the menu"

        Menu.__init__(self, "MoleFusion Main Menu", "sprites/back1.jpg")

        self.parser = make_parser()
        self.curHandler = Localization()
        self.parser.setContentHandler(self.curHandler)
        self.parser.parse(open("languages/MainMenu_" + Constants.LANGUAGE + ".xml"))

        self.title = GW_Label(self.curHandler.getText("title"), (0.5, 0.1), (27, 22, 24))

        self.start = GW_Button(self.curHandler.getText("start"), (0.5, 0.3), (255, 255, 255))
        self.start.add_eventhandler("onmouseclick", self.start_onmouseclick)

        self.options = GW_Button(self.curHandler.getText("options"), (0.5, 0.45), (255, 255, 255))
        self.options.add_eventhandler("onmouseclick", self.options_onmouseclick)

        self.highscores = GW_Button(self.curHandler.getText("highscores"), (0.5, 0.6), (255, 255, 255))
        self.highscores.add_eventhandler("onmouseclick", self.highscores_onmouseclick)

        self.help = GW_Button(self.curHandler.getText("help"), (0.5, 0.75), (255, 255, 255))
        self.help.add_eventhandler("onmouseclick", self.help_onmouseclick)

        self.quit = GW_Button(self.curHandler.getText("quit"), (0.5, 0.9), (255, 255, 255))
        self.quit.add_eventhandler("onmouseclick", self.quit_onmouseclick)

        self.widget_man = GuiWidgetManager(
            [self.title, self.start, self.options, self.highscores, self.help, self.quit]
        )

        self.time_speed = pygame.time.Clock()

        self.on_enter()

    def on_enter(self):
        pygame.event.clear()
        self.screen.blit(self.background, (0, 0))
        pygame.display.flip()

        self.widget_man.set_draw(True)

    def on_exit(self):
        pygame.event.clear()
        f = FadeTransition(500, Constants.FADECOLOR, "to")
        del f
        self.widget_man.set_draw(False)

    def start_onmouseclick(self, event):
        self.start.onmouseclick(event)
        self.on_exit()
        game = Game()
        game.run()
        self.start.onmouseclickup(event)
        self.on_enter()

    def options_onmouseclick(self, event):
        self.options.onmouseclick(event)
        self.on_exit()
        options = OptionsMenu()
        options.run()
        self.reload_titles()
        self.options.onmouseclickup(event)
        self.on_enter()

    def highscores_onmouseclick(self, event):
        self.highscores.onmouseclick(event)
        self.on_exit()
        highscores = HighScoresMenu("sprites/back1.jpg")
        highscores.run()
        self.reload_titles()
        self.highscores.onmouseclickup(event)
        self.on_enter()

    def help_onmouseclick(self, event):
        self.help.onmouseclick(event)
        self.on_exit()
        help = HelpMenu()
        help.run()
        self.help.onmouseclickup(event)
        self.reload_titles()
        self.on_enter()

    def quit_onmouseclick(self, event):
        self.quit.onmouseclick(event)
        self.on_exit()
        exit = ExitMenu()
        exit.run()
        pygame.event.post(pygame.event.Event(QUIT, {}))

    def reload_titles(self):
        self.parser.parse(open("languages/MainMenu_" + Constants.LANGUAGE + ".xml"))
        self.title.set_title(self.curHandler.getText("title"))
        self.start.set_title(self.curHandler.getText("start"))
        self.options.set_title(self.curHandler.getText("options"))
        self.highscores.set_title(self.curHandler.getText("highscores"))
        self.help.set_title(self.curHandler.getText("help"))
        self.quit.set_title(self.curHandler.getText("quit"))

    def run(self):
        while 1:

            self.time_speed.tick(Constants.FPS)

            for event in pygame.event.get():
                if event.type == QUIT:
                    os._exit(0)

                elif event.type == KEYDOWN and event.key == K_ESCAPE:
                    self.quit_onmouseclick(event)

                else:
                    pygame.event.post(event)  # Reinject the event into the queue for maybe latter process

            self.widget_man.run()