class LabArm(): def __init__(self): pygame.init() self.imgs = Images() self.canvas = Canvas() self.netw = Network() self.fonts = Fonts() self.events = PCEvents() self.buttons = Buttons() self.screen = pygame.display.set_mode(SCREEN_SIZE) def run(self): while True: self.events.handle(self.screen, self.netw) self.canvas.draw(self.screen) self.buttons.draw(self.screen) self.fonts.draw(self.screen) self.netw.draw(self.screen) pygame.display.flip()
def run(self): g = self.g tick = 30 clock = pygame.time.Clock() running = True level_key = sorted(self._levels.keys())[0] disp_w, disp_h = self.g.surface.get_size() board_surface = self.g.surface.subsurface( pygame.Rect((0,0), (disp_w/2, disp_h*7/8))) buttons_surface = self.g.surface.subsurface( pygame.Rect((0, disp_h*7/8), (disp_w, disp_h/8))) tao_surface = self.g.surface.subsurface( pygame.Rect((disp_w/2, 0), (disp_w/2, disp_h*7/8))) buttons = Buttons(self.g, buttons_surface) bg_colors = mk_color_set() frame_cnt = 0 while running: if True: # debug # Pulse the background to see what's being redrawn. self.g.surface.fill( bg_colors[frame_cnt%len(bg_colors)]) if g.android: if g.android.check_pause(): g.android.wait_for_resume() for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_q: running = False if event.type in (pygame.MOUSEBUTTONDOWN, pygame.MOUSEBUTTONUP): if buttons.collidepoint(event.pos): action = buttons.mouse_event(event, buttons_surface) if action is not None: if action.lower() == "abort": running = False elif action == "+": level.change_size(1) elif action == "-": level.change_size(-1) if level.collidepoint(event.pos, board_surface): action = level.mouse_event(event, board_surface) level = self._levels[level_key] level.draw(board_surface) buttons.draw() pygame.display.flip() frame_cnt += 1 clock.tick(tick)
class PygameView: def __init__(self, event_manager, display_manager, tile_manager, level_manager): self.em = event_manager self.connections = [ self.em.register(DisplayResizeEvent, self.on_display_resize), self.em.register(LevelKeyChangeEvent, self.on_display_resize), self.em.register(LevelSizeChangeEvent, self.on_display_resize), self.em.register(TickEvent, self.on_tick), ] self.dm = display_manager self.tm = tile_manager self.lm = level_manager self.board_surface = None self.board_view = None self.buttons_surface = None self.tao_surface = None self.buttons = None self.tao = None def on_display_resize(self, event): """ * also used when switching Levels * also used when changing a Level's grid size """ disp_surf = self.dm.screen disp_w, disp_h = disp_surf.get_size() # The board is where the current level is shown # in the top left. self.board_surface = disp_surf.subsurface( pygame.Rect((0,0), (disp_w/2, disp_h*7/8))) self.board_view = BoardView(self.board_surface, self.lm, self.tm, self.em) # "buttons" is the collection of buttons across the bottom. self.buttons_surface = disp_surf.subsurface( pygame.Rect((0, disp_h*7/8), (disp_w, disp_h/8))) self.buttons = Buttons(self.buttons_surface, self.em) self.buttons.calc_rects() # "tao" means "tiles and objects" # It's the selection control for tiles and objects # in the top right. self.tao_surface = disp_surf.subsurface( pygame.Rect((disp_w/2, 0), (disp_w/2, disp_h*7/8))) self.tao = TAO(self.tao_surface, self.tm, self.em) def on_tick(self, event): #LOGGER.info("[[render]]") screen = self.dm.screen screen.fill((0, 0, 0)) tm = self.tm self.board_view.draw_edit_grid() self.board_view.draw() self.buttons.draw() self.tao.draw() pygame.display.update()