예제 #1
0
    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()
예제 #2
0
    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()
예제 #4
0
    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()
예제 #5
0
 def draw(self):
     Renderer.submit((self.image, vec_to_itup(self.get_draw_position())))
예제 #6
0
 def on_render(self):
     if self._hovered:
         Renderer.submit((self._hoveredImage, self._rect.topleft), False)
     else:
         Renderer.submit((self._staticImage, self._rect.topleft), False)
예제 #7
0
# 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):
예제 #8
0
파일: label.py 프로젝트: Holodome/worms.py
 def on_render(self):
     Renderer.submit((self._image, self._rect.topleft), False)
예제 #9
0
            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()
예제 #10
0
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()
예제 #11
0
파일: world.py 프로젝트: Holodome/worms.py
 def draw(self):
     Renderer.submit((self.backgroundImage, (0, 0)))
     Renderer.submit((self.terrain.terrainImage, (0, 0)))
     for obj in self.physicsObjects:
         obj.draw()