def on_render(self): if not self._visible: return Renderer.submit((self._image, self._rect.topleft), False) for element in self._elements: element.on_render()
def __init__(self): pygame.mixer.pre_init(44100, -16, 2, 512) pygame.init() pygame.key.set_repeat(500, 100) pygame.font.init() pygame.event.set_allowed([ pygame.QUIT, pygame.VIDEORESIZE, pygame.KEYDOWN, pygame.MOUSEBUTTONDOWN ]) self.playing = True self.clock = pygame.time.Clock() self.running = True # Start with the game paused (menus will keep running though) self.paused = True self.fullscreen = config["graphics"]["fullscreen"] self.vsync = config["graphics"]["vsync"] # Engine self.renderer = Renderer(self) self.spriteRenderer = SpriteRenderer(self) self.clickManager = ClickManager(self) self.textHandler = TextHandler() # Loaders self.imageLoader = ImageLoader(self) self.mapLoader = MapLoader() self.audioLoader = AudioLoader() # Map editor self.mapEditor = MapEditor(self) # Menu's self.mainMenu = MainMenu(self) self.optionMenu = OptionMenu(self) if self.fullscreen: self.renderer.setFullscreen() self.setCaption() self.setIcon() self.setCursor()
def __init__(self, rect, h_pad, v_pad, orientation, number, button_list, font=None, font_size=32): Renderer.__init__(self) ## menu items self.menu_items = [] # List of menu items self.font = font # Font to use self.font_size = font_size self.rect = rect # Top left corner (of surface) self.change_number = number # new row/col # self.orientation = orientation self.horizontal_padding = h_pad self.vertical_padding = v_pad self.selection = 0 # The currently selected button self.u_color = [230, 230, 230] # Color for unselected text self.s_color = [255, 50, 10] # Color for selected text self.centered = False # True if the menu is centered self.update_buttons = False # True if the positions of the # buttons need to be updated # This dictionary contains the alignment orientation of the buttons # related to each other. It shifts the button within the bounds of # 'max_width' and 'max_height' in the self.position_items() method. self.alignment = {'vertical': 'top', 'horizontal': 'left'} for b in button_list: if len(self.menu_items) == self.selection: button = self.create_button(b[0], b[1], color=self.s_color) else: button = self.create_button(b[0], b[1]) self.add_button(button) self.position_items()
def draw(self): Renderer.submit((self.image, vec_to_itup(self.get_draw_position())))
def on_render(self): if self._hovered: Renderer.submit((self._hoveredImage, self._rect.topleft), False) else: Renderer.submit((self._staticImage, self._rect.topleft), False)
# Screen dimensions. screenWidth = 1000 screenHeight = 1000 desiredDepth = 1000 # Place our light sources. light0 = Lighting((1000, 0, 0), (255, 0, 0), 1000) light1 = Lighting((0, 1000, 0), (0, 255, 0), 1000) light2 = Lighting((0, 0, 1000), (0, 0, 255), 1000) lights = [light0, light1, light2] # Define the camera. camera = Camera( ((-1, screenWidth + 1), (-1, screenHeight + 1), (-1, desiredDepth + 1)), lights) # Build renderer. renderer = Renderer(camera) def draw_starfield(renderer): """ Generate 250 random stars. """ for point in range(250): renderer.camera.objectsInWorld.append( Star((randrange( 0, renderer.screenWidth), randrange(0, renderer.screenHeight), randrange(0, renderer.desiredDepth)), renderer)) renderer.camera.drawScene() def draw_pointfield(renderer):
def on_render(self): Renderer.submit((self._image, self._rect.topleft), False)
location = (i * 100, i * 100) velocity = [0, 0] tag = "Snake" width = 100 height = 100 game_obj = GameObj(location, velocity, [0, 0], tag, width, height) game_obj_dict[location] = game_obj time.sleep(1) # create gameobj game_obj_dict = dict() # create window title = "Render Test" window_width = 800 window_height = 800 window_manager = WindowManager(title, window_width, window_height) # populate square print("start populate") populate_populator = populator(game_obj_dict) populate_thread = threading.Thread(target=populate_populator.populate) populate_thread.start() # start rendering renderer = Renderer(game_obj_dict, window_manager) render_process = multiprocessing.Process(target=renderer.start_rendering()) render_process.start() render_process.join()
class Game: def __init__(self): pygame.mixer.pre_init(44100, -16, 2, 512) pygame.init() pygame.key.set_repeat(500, 100) pygame.font.init() pygame.event.set_allowed([ pygame.QUIT, pygame.VIDEORESIZE, pygame.KEYDOWN, pygame.MOUSEBUTTONDOWN ]) self.playing = True self.clock = pygame.time.Clock() self.running = True # Start with the game paused (menus will keep running though) self.paused = True self.fullscreen = config["graphics"]["fullscreen"] self.vsync = config["graphics"]["vsync"] # Engine self.renderer = Renderer(self) self.spriteRenderer = SpriteRenderer(self) self.clickManager = ClickManager(self) self.textHandler = TextHandler() # Loaders self.imageLoader = ImageLoader(self) self.mapLoader = MapLoader() self.audioLoader = AudioLoader() # Map editor self.mapEditor = MapEditor(self) # Menu's self.mainMenu = MainMenu(self) self.optionMenu = OptionMenu(self) if self.fullscreen: self.renderer.setFullscreen() self.setCaption() self.setIcon() self.setCursor() # self.audioLoader.playSound("boot", 2) # self.audioLoader.fadeOutSound(10000, 2) # print(pygame.font.get_fonts()) # Set the games caption (name) def setCaption(self): pygame.display.set_caption(config["game"]["gameTitle"]) # Set the games icon def setIcon(self): icon = self.imageLoader.getImage(config["game"]["icon"]) pygame.display.set_icon(icon) # Set the games cursor (cursor class?) def setCursor(self): pygame.mouse.set_cursor(*pygame.cursors.tri_left) def getPaused(self): return self.paused def __quit(self): self.playing = False def __events(self): for e in pygame.event.get(): if e.type == pygame.QUIT: self.__quit() elif e.type == pygame.VIDEORESIZE: self.renderer.setScale(e.size, self.fullscreen) if e.type == pygame.KEYDOWN: self.textHandler.events(e) self.textHandler.setPressed(True) # Only open the option manu if the game isn't paused # and the main menu isn't open if (e.key == pygame.K_ESCAPE and not self.mainMenu.open and not self.spriteRenderer.getMenu().open): # Close the dropdowns first if not self.mapEditor.isDropdownsClosed(): if not self.optionMenu.open: self.optionMenu.main(True, True) elif self.optionMenu.open: self.optionMenu.closeTransition() elif e.key == pygame.K_RIGHT and self.mainMenu.open: self.mainMenu.levelForward(vec(1, 0)) elif e.key == pygame.K_LEFT and self.mainMenu.open: self.mainMenu.levelBackward(vec(-1, 0)) elif e.key == pygame.K_UP and self.mainMenu.open: self.mainMenu.levelUpward(vec(0, -1)) elif e.key == pygame.K_DOWN and self.mainMenu.open: self.mainMenu.levelDownward(vec(0, 1)) elif e.key == pygame.K_p: if self.spriteRenderer.getHud().open: self.spriteRenderer.getHud().togglePauseGame() # If the game is not paused and the main menu # isnt open and no text inputs are open if (not self.paused and not self.mainMenu.open and not self.textHandler.getActive()): # Show / Hide the different layers depending on key press if pygame.key.name(e.key) == config["controls"]["layer1"]: self.spriteRenderer.showLayer(1) self.mapEditor.showLayer(1) elif (pygame.key.name( e.key) == config["controls"]["layer2"]): self.spriteRenderer.showLayer(2) self.mapEditor.showLayer(2) elif (pygame.key.name( e.key) == config["controls"]["layer3"]): self.spriteRenderer.showLayer(3) self.mapEditor.showLayer(3) elif (pygame.key.name( e.key) == config["controls"]["layer4"]): self.spriteRenderer.showLayer(4) self.mapEditor.showLayer(4) if (e.key == pygame.K_z and pygame.key.get_mods() & pygame.KMOD_CTRL and not self.paused and not self.mainMenu.open): self.mapEditor.undoChange() level = self.mapEditor.getLevelData() layer = self.mapEditor.getLayer() # Reload the level self.mapEditor.createLevel(level, layer=layer) elif (e.key == pygame.K_y and pygame.key.get_mods() & pygame.KMOD_CTRL and not self.paused and not self.mainMenu.open): self.mapEditor.redoChange() level = self.mapEditor.getLevelData() layer = self.mapEditor.getLayer() # Reload the level self.mapEditor.createLevel(level, layer=layer) elif e.type == pygame.KEYUP: self.textHandler.setPressed(False) # Just for fun :) - And refactoring ( ͡° ͜ʖ ͡°) if e.type == pygame.MOUSEBUTTONDOWN: if e.button == 4: self.spriteRenderer.setFixedScale( self.spriteRenderer.getFixedScale() + 0.1) self.spriteRenderer.resize() elif e.button == 5: self.spriteRenderer.setFixedScale( self.spriteRenderer.getFixedScale() - 0.1) self.spriteRenderer.resize() # Make left click set the destination on the click manager instead if e.type == pygame.MOUSEBUTTONDOWN: if e.button == 1: self.clickManager.setClicked(True) elif e.button == 3: self.clickManager.setRightClicked(True) else: self.clickManager.setClicked(False) self.clickManager.setRightClicked(False) def run(self): # Main menu self.mainMenu.main() # Game loop while self.playing: self.__events() self.dt = self.clock.tick() / 1000 # Prevent game from updating if window is being moved? if self.dt >= 0.05: continue self.__update() self.__draw() self.running = False def __update(self): # print(self.paused) if not self.paused and not self.mainMenu.open: self.spriteRenderer.update() self.mapEditor.update() def __draw(self): # Add sprites if self.mainMenu.open: self.renderer.prepareSurface(self.mainMenu.getBackgroundColor()) self.spriteRenderer.render() self.mapEditor.render() # Add menus when not paused if self.paused: # To Do:Different option menus for sprite renderer and level editor self.optionMenu.display() if self.mainMenu.open: self.mainMenu.display() # render everything self.renderer.render()
def draw(self): Renderer.submit((self.backgroundImage, (0, 0))) Renderer.submit((self.terrain.terrainImage, (0, 0))) for obj in self.physicsObjects: obj.draw()