Пример #1
0
    def enter_frame(self):  
        mouse_position = pygame.mouse.get_pos()
        
        if type(self.mode) is self.GrabMode:
            node,grab_point = self.mode
            node.position = Vec(mouse_position) + Vec(grab_point)
            node.adjust_position()
            
        elif type(self.mode) in (self.ConnectionMode, self.WaitingPlacement):
            
            for s in self.terrain.salles:
                if s.general_collide(mouse_position):
                    s.change_display("rollover")
                else:
                    s.change_display("normal")
                    
            if type(self.mode) is self.ConnectionMode:
                self.mode.node.change_display("rollover")
        
        elif type(self.mode) is self.PlayMode:
            for s in self.terrain.salles:
                s.change_display('normal')
                for p in s.persos:
                    if p.general_collide(mouse_position):
                        p.change_display("rollover")
                    else:
                        p.change_display("normal")

        elif type(self.mode) is self.MovePersoMode:
            perso = self.mode.perso
            for s in self.terrain.salles:
                if s in perso.salle.destinations:
                    s.change_display('rollover')
                elif s.general_collide(mouse_position):
                    s.change_display('rollover')
                else:
                    s.change_display('normal')
                    
                for p in s.persos:
                    if p is perso:
                        p.change_display("rollover")
                    else:
                        p.change_display("normal")
        
        if type(self.mode) in (self.PlayMode, self.FinRound):
            for p in self.round.persos_morts:
                p.change_display("normal")
Пример #2
0
 def _update_perso_positions(self):
     positions = [
         self.position + Vec(p) * (self.rect.width / 4)
         for p in [(0,0),(-1,-1),(+1,+1),(+1,-1),(-1,+1),
                   (0,-1),(+1,0),(0,+1),(-1,0)]
     ]
     for i,p in enumerate(self.persos):
         p.position = positions[i]
Пример #3
0
 def get_alias(self, point):
     try:
         color = self.pixsource.get_at( Vec(point) - (0,1) )
     except IndexError:
         return None
     try:
         return self.colormap[ tuple(color) ]
     except KeyError:
         return None
Пример #4
0
 def draw(self):
     self.screen.fill(colors.BLACK)
     pygame.draw.rect(self.screen, colors.BROWN, (
         (0, WINDOW_SIZE[1] - 80),
         (WINDOW_SIZE[0], 80)
     ))
     pygame.draw.rect(self.screen, colors.BROWN, (
         (WINDOW_SIZE[0] - 130, 0),
         (130, WINDOW_SIZE[1])
     ))
     
     mouse_position = pygame.mouse.get_pos()
     
     for s in self.terrain.salles:
         for d in s.destinations:
             if id(d) < id(s):
                 self.draw_connection_line(d.position, s.position)
                 
     if type(self.mode) is self.ConnectionMode:
         self.draw_connection_line(self.mode.node.position, mouse_position)
     
     if True:
         for s in self.terrain.salles:
             self.draw_salle(s)
         
     if self.mode.defaultmode is self.PlayMode:
         name = self.round.joueur_actuel().name
         rend = Node.font.render(name, True, colors.BLACK)
         position = Vec(mouse_position) + (0,30)
         fontrect = rend.get_rect(center=position)
         
         for c,w in zip([colors.WHITE, colors.BROWN],[18,15]):
             pygame.draw.circle(self.screen, c, position, w)
         self.screen.blit(rend,fontrect)
     
     if self.mode.defaultmode in (self.PlayMode,self.FinRound):
         self.update_morts_persos_position()
         for p in self.round.persos_morts:
             self.draw_perso(p)
     
     if self.mode.defaultmode in (self.PlayMode,self.FinRound,self.FinPartie):
         for i,joueur in enumerate(self.partie.joueurs):
             text = "({}) {} : {} Point{}".format(
                 ' '.join(map(str,joueur.persos)),
                 joueur.name,
                 joueur.points,
                 "s" if joueur.points != 1 else ""
             )
             rend = Node.font.render(text, True, colors.WHITE)
             fontrect = rend.get_rect(topright=(
                 WINDOW_SIZE[0] - 10,
                 10 + i*60
             ))
             
             self.screen.blit(rend,fontrect)
Пример #5
0
 def draw_perso(self, perso):
     rend = Node.font.render(perso.name, True, colors.WHITE)
     fontrect = rend.get_rect(center=perso.position)
     
     image = perso.image
     rect = image.get_rect(center=perso.position)
     self.screen.blit(image, rect)
     self.screen.blit(rend,fontrect)
     
     if perso.points is not None:
         texte = str(perso.points)
         rend = Node.font.render(texte, True, colors.WHITE)
         fontrect = rend.get_rect(center=Vec(perso.position) - (0,30))
         self.screen.blit(rend,fontrect)
Пример #6
0
 def treat_event(self, event):
     mouse_position = pygame.mouse.get_pos()
     
     if event.type == pygame.QUIT: 
         self.finished = True
         
     elif event.type == pygame.MOUSEBUTTONDOWN:
         
         if type(self.mode) is self.WaitingPlacement:
             collider = self.find_salle_collider(mouse_position)
             if collider:
                 
                 if collider.grab_collide(mouse_position):
                     self.mode = self.GrabMode(
                         collider,
                         Vec(collider.position) - mouse_position
                     )
                 elif collider.connection_collide(mouse_position):
                     self.mode = self.ConnectionMode(collider)
                 else:
                     self.mode = self.WaitingPlacement()
                 
             else:
                 if len(self.terrain.salles) < self.terrain.maximum_salles:
                     new_node = Node(mouse_position)
                     if len(self.terrain.salles):
                         self.terrain.salles[-1].make_liaison(new_node)
                         
                     self.terrain.add_salle(new_node)
                     self.mode = self.GrabMode(new_node, (0,0))
                 else:
                     self.mode = self.WaitingPlacement()
                     
         elif type(self.mode) is self.PlayMode:
             perso = self.find_pion_collider(mouse_position)
             if perso:
                 salle = perso.salle
                 if len(salle.persos) > 1:
                     self.kill(perso)
                 else:
                     destinations = salle.destinations
                     if len(destinations) == 1:
                         self.move_perso(perso, next(iter(destinations)))
                     else:
                         self.mode = self.MovePersoMode(perso)
         
         elif type(self.mode) is self.MovePersoMode:
             perso = self.mode.perso
             collider = self.find_salle_collider(mouse_position)
             if collider and collider != perso.salle:
                 try:
                     self.move_perso(perso,collider)
                 except ValueError:
                     pass
                 
     elif event.type == pygame.MOUSEBUTTONUP:
         
         if type(self.mode) is self.ConnectionMode:
             node = self.mode.node
             collider = self.find_salle_collider(mouse_position)
             if collider:
                 try:
                     node.remove_liaison(collider)
                 except KeyError:
                     node.make_liaison(collider)
                     
         if self.mode.defaultmode is self.WaitingPlacement:
             self.mode = self.WaitingPlacement()
         
     elif event.type == pygame.KEYDOWN:
         if type(self.mode) in (self.WaitingPlacement, self.FinRound):
             if event.key == pygame.K_p:
                 self.try_begin_game()
Пример #7
0
 def _get_collision_alias(self,point):
     relpoint = Vec(point) - self.rect.topleft
     return self.collision.get_alias(relpoint)