Ejemplo n.º 1
0
    def test_add_chunk_default_angle(self):
        world = World()
        chunk = Chunk(Disc(Material.gold, 1))

        world.add_chunk(chunk, (10, 20))

        body = [b for b in world.space.bodies][0]
        self.assertEquals(body.angle, 0.0, "bad default angle")
Ejemplo n.º 2
0
    def test_tick(self):
        world = World()
        world.space.step = Listener()
        class Mock(object):
            pass
        world.player = Mock()
        world.player.move = lambda *_: None

        world.tick(1/42)

        self.assertEquals(world.space.step.args, (1/42,), "didn't step")
Ejemplo n.º 3
0
    def test_add_chunk(self):
        world = World()
        chunk = Chunk(Disc(Material.gold, 1))
        chunk.add_to_space = Listener()

        world.add_chunk(chunk, (1, 2), 0.5)

        self.assertEquals(world.chunks, set([chunk]), "chunk not added")
        self.assertEquals(
            chunk.add_to_space.args,
            (world.space, (1, 2), 0.5),
            "chunk not added to space")
Ejemplo n.º 4
0
    def test_add_to_pymunk(self):
        color = (50, 100, 200)
        v1, v2, v3 = (0, 0), (0, 100), (100, 0)
        verts = [v1, v2, v3]
        room1 = Room(verts)
        room1.id = 999
        room1.add_to_body = Listener()
        room2 = Room(verts)
        room2.id = 1000
        room2.add_to_body = Listener()
        world = World()
        world.rooms = {999: room1, 1000: room2}

        world.add_to_pymunk()

        expected = (world.space, world.static_body)
        self.assertEquals(room1.add_to_body.args, expected,
            "room1 walls not added to space")
        self.assertEquals(room2.add_to_body.args, expected,
            "room2 walls not added to space")
Ejemplo n.º 5
0
    def test_draw_calls_subroutines_in_right_order(self):
        camera = Camera((0, 1), 2)
        renderer = Renderer(camera)

        roomColor = (255,0,0)
        verts = [(-1, 0), (2,3), (4, 0)]
        room1 = Room(verts)
        room2 = Room(verts)

        chunk1 = Chunk()
        chunk2 = Chunk()

        world = World()
        world.backColor = (111, 22, 3)
        world.rooms = {1: room1, 2: room2}
        world.chunks = set([chunk1, chunk2])

        listener = Listener()
        renderer.clear = \
            lambda *args: listener("clear", *args)
        camera.world_projection = \
            lambda *args: listener("world_proj", *args)
        renderer.draw_rooms = \
            lambda *args: listener("draw_rooms", *args)
        renderer.draw_chunk = \
            lambda *args: listener("draw_chunk", *args)

        aspect = 1.5
        renderer.draw(world, aspect)

        expected = [
            ("clear", world.material.color),
            ("world_proj", aspect),
            ("draw_rooms", {1: room1, 2: room2}),
            ("draw_chunk", chunk2),
            ("draw_chunk", chunk1),
        ]
        self.assertEquals(listener.args_list, expected,
            "draw didnt call subfns")
Ejemplo n.º 6
0
    def init(self, name, version):
        clock.set_fps_limit(FPS_LIMIT)
        self.fps_display = clock.ClockDisplay()

        self.camera = Camera((0, 0), 800)
        self.renderer = Renderer(self.camera)
        caption = '%s v%s' % (name, version)
        self.window = Window(
            caption=caption, fullscreen=True, visible=False)
        self.window.on_key_press = on_key_press
        self.window.push_handlers(Keyboard.keystate)

        graphics = load_graphics()

        self.world = World()
        builder = LevelBuilder()
        seed(1)
        builder.build(self.world, 75, graphics)

        self.world.player = Player()
        self.world.player.add_to_space(self.world.space, (0, 200), 0)
        self.world.chunks.update(self.world.player.chunks)
Ejemplo n.º 7
0
class Gameloop(object):

    instance = None

    def __init__(self):
        Gameloop.instance = self
        self.window = None
        self.camera = None
        self.world = None
        self.renderer = None
        self.paused = False
        self.fps_display = None
        Keyboard.handlers.update({
            key.PAGEUP: lambda: self.camera.zoom(2.0),
            key.PAGEDOWN: lambda: self.camera.zoom(0.5),
            key.ESCAPE: self.quit_game,
            key.PAUSE: self.toggle_pause,
            key.F12: lambda: save_screenshot(self.window),
        })


    def init(self, name, version):
        clock.set_fps_limit(FPS_LIMIT)
        self.fps_display = clock.ClockDisplay()

        self.camera = Camera((0, 0), 800)
        self.renderer = Renderer(self.camera)
        caption = '%s v%s' % (name, version)
        self.window = Window(
            caption=caption, fullscreen=True, visible=False)
        self.window.on_key_press = on_key_press
        self.window.push_handlers(Keyboard.keystate)

        graphics = load_graphics()

        self.world = World()
        builder = LevelBuilder()
        seed(1)
        builder.build(self.world, 75, graphics)

        self.world.player = Player()
        self.world.player.add_to_space(self.world.space, (0, 200), 0)
        self.world.chunks.update(self.world.player.chunks)


    def dispose(self):
        if self.window:
            self.window.close()


    def run(self):
        try:
            self.window.set_visible()
            while not self.window.has_exit:
                self.window.dispatch_events()
                clock.tick()
                if self.world and not self.paused:
                    self.world.tick(1/FPS_LIMIT)
                if self.world and hasattr(self.world, 'player'):
                    player_position = self.world.player.chunks[0].body.position
                    self.camera.x, self.camera.y = player_position
                    self.camera.angle = atan2(
                        player_position.x,
                        player_position.y)

                self.camera.update()
                if self.renderer:
                    aspect = (
                        self.window.width / self.window.height)
                    self.renderer.draw(self.world, aspect)
                self.camera.hud_projection(
                    (self.window.width, self.window.height))
                self.fps_display.draw()
                self.window.flip()
        finally:
            self.dispose()


    def toggle_pause(self):
        self.paused = not self.paused


    def quit_game(self):
        self.window.has_exit = True