Ejemplo n.º 1
0
class MasterController:
    def __init__(self):
        self.map = Map(MAP_SIZE_W, MAP_SIZE_H, BLOCKSIZE)
        pygame.init()
        window = pygame.display.set_mode((WIDTH,HEIGHT))
        pygame.display.set_caption('def')
        self.screen = pygame.display.get_surface()
        self.model = Model( self.map)
        self.camera = Camera(self.screen.get_width(),self.screen.get_height())
        
        
        self.entity_controller = EntityController(self.map)
        self.entity_view = EntityView(self.entity_controller)
        
        
        self.view = View(self.screen, self.camera, self.entity_view)
        
        self.camera_lock = True
        self.camera_follow_player = False
        #music here atm
          
     #   pygame.mixer.music.load("src/music/04.ogg")
     #   pygame.mixer.music.play()
        
        
    def menu_mode(self):
        self.menu = Menu()
        while 1:
            self.screen.fill((0,0,0))
            self.menu.draw(self.screen)
            
            
    def run(self):
        self.map.load_map("map1.map")
        #self.map.load_map("test.out")
      #  self.map.init_adjacent()
        self.entity_controller.update_enemy_path()
        self.entity_controller.add_entity()
  
        while 1:
            self.screen.fill((0,0,50))
            self.update()
            self.handle_events(pygame.event.get())
            self.view.draw_level(self.screen, self.map)
            
            self.entity_controller.update()
            pygame.display.update()
            pygame.display.flip() 
           
    def update(self):
        # CAMERA MOUSE
        self.update_camera()
        if not self.camera_lock and not self.camera_follow_player:
            self.camera.update()
        elif self.camera_follow_player:
            self.camera.set_pos(
                                ((WIDTH/2)-(self.entity_controller.get_player_pos().get_pos()[0]*BLOCKSIZE*self.camera.get_zoom()),
                                 (HEIGHT/2)-(self.entity_controller.get_player_pos().get_pos()[1]*BLOCKSIZE*self.camera.get_zoom())
                                 )
                                )
    def update_camera(self):
       #PREVENT ouside window mouse scrolling
      #  if not pygame.mouse.get_focused():
       #     self.camera.set_speed((0,0))
        #    return
        if self.view.freeze_camera_movement_areas(pygame.mouse.get_pos()):
            self.camera.set_speed((0,0))
            return 
        
        if pygame.mouse.get_pos()[0] < self.screen.get_width()/10:
            self.camera.set_speed((CAMERA_SPEED,self.camera.get_speed()[1]))
        if pygame.mouse.get_pos()[0] > self.screen.get_width()-(self.screen.get_width()/10):
            self.camera.set_speed((-1*CAMERA_SPEED,self.camera.get_speed()[1]))
        
        if self.camera.get_speed()[0] != 0 and pygame.mouse.get_pos()[0] > self.screen.get_width()/10 and pygame.mouse.get_pos()[0] < self.screen.get_width() -(self.screen.get_width()/10):
            self.camera.set_speed((0,self.camera.get_speed()[1]))
        # UP N DOWN
        if pygame.mouse.get_pos()[1] < self.screen.get_height()/10:
            self.camera.set_speed((self.camera.get_speed()[0],CAMERA_SPEED))
        # dont scroll on hud
        
        if pygame.mouse.get_pos()[1] > self.screen.get_height()-200:
            self.camera.set_speed((self.camera.get_speed()[0],-1*CAMERA_SPEED))
        
        if self.camera.get_speed()[1] != 0 and pygame.mouse.get_pos()[1] > self.screen.get_height()/10 and pygame.mouse.get_pos()[1] <  self.screen.get_height()-300:#self.screen.get_height() -(self.screen.get_height()/10):
            self.camera.set_speed((self.camera.get_speed()[0],0))
        

    def handle_events(self, events):
        for event in events:
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                      # HANDLE SAVEINPUT N STUFF
                if event.key == K_UP:
                    self.map.save_map("test.out")
                if event.key == K_DOWN:
                    self.map.load_map()
                    self.entity_controller.set_map(self.map)
                if event.key == K_SPACE: # add entity(enemy)..
                    self.entity_controller.add_entity()
                if event.key == K_c:
                    self.camera.center_map()
                if event.key == K_F1:
                    self.view.toggle_lines()
                if event.key == K_F2:
                    if self.camera_lock:
                        self.camera_lock = False
                    else:
                        self.camera_lock = True
                                    
                if event.key == K_F3:
                    if self.camera_follow_player:
                        self.camera_follow_player = False
                    else:
                        self.camera_follow_player = True
                              
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            
            self.view.handle_event(event,self.map)

            if event.type == pygame.MOUSEBUTTONDOWN:
                if pygame.mouse.get_pressed()[0] == 1:
                    self.map.change_color_at((pygame.mouse.get_pos()[0]-self.camera.get_x()
                                              ,pygame.mouse.get_pos()[1]-self.camera.get_y())
                                             , self.view.get_selected_color(), self.camera.get_zoom())
           
                if event.button == 5:
                    self.camera.set_zoom(self.camera.get_zoom()/2.0)
            
                if event.button == 4:
                    self.camera.set_zoom(self.camera.get_zoom()*2.0)
            
            if pygame.mouse.get_pressed()[2] == 1:
                self.entity_controller.add_tower(self.map.tile_at(pygame.mouse.get_pos()))