def test_Applicator_process(self):
        world = World()

        class ErrornousApplicator(Applicator):
            def __init__(self):
                super(ErrornousApplicator, self).__init__()
                self.componenttypes = (Position, Movement)

        eapplicator = ErrornousApplicator()
        world.add_system(eapplicator)
        for x in range(10):
            MovingEntity(world)
        self.assertTrue(eapplicator in world.systems)
        self.assertRaises(NotImplementedError, world.process)

        world2 = World()
        mapplicator = MovementApplicator()
        world2.add_system(mapplicator)
        for x in range(10):
            MovingEntity(world2, vx=1, vy=1)
        self.assertTrue(mapplicator in world2.systems)
        world2.process()
        for c in world2.components[Position].values():
            self.assertEqual(c.x, 1)
            self.assertEqual(c.y, 1)
        world2.process()
        for c in world2.components[Position].values():
            self.assertEqual(c.x, 2)
            self.assertEqual(c.y, 2)
Пример #2
0
    def test_Applicator_process(self):
        world = World()

        class ErrornousApplicator(Applicator):
            def __init__(self):
                super(ErrornousApplicator, self).__init__()
                self.componenttypes = (Position, Movement)

        eapplicator = ErrornousApplicator()
        world.add_system(eapplicator)
        for x in range(10):
            MovingEntity(world)
        assert eapplicator in world.systems
        with pytest.raises(NotImplementedError):
            world.process()

        world2 = World()
        mapplicator = MovementApplicator()
        world2.add_system(mapplicator)
        for x in range(10):
            MovingEntity(world2, vx=1, vy=1)
        assert mapplicator in world2.systems
        world2.process()
        for c in world2.components[Position].values():
            assert c.x == 1
            assert c.y == 1
        world2.process()
        for c in world2.components[Position].values():
            assert c.x == 2
            assert c.y == 2
Пример #3
0
    def test_System_process(self):
        world = World()

        class ErrornousSystem(System):
            def __init__(self):
                super(ErrornousSystem, self).__init__()
                self.componenttypes = (Position, )

        esystem = ErrornousSystem()
        world.add_system(esystem)
        for x in range(10):
            PositionEntity(world)
        assert esystem in world.systems
        with pytest.raises(NotImplementedError):
            world.process()

        world2 = World()
        psystem = PositionSystem()
        world2.add_system(psystem)
        for x in range(10):
            PositionEntity(world2)
        assert psystem in world2.systems
        world2.process()
        for c in world2.components[Position].values():
            assert c.x == 1
            assert c.y == 1
        world2.process()
        for c in world2.components[Position].values():
            assert c.x == 2
            assert c.y == 2
    def test_System_process(self):
        world = World()

        class ErrornousSystem(System):
            def __init__(self):
                super(ErrornousSystem, self).__init__()
                self.componenttypes = (Position,)

        esystem = ErrornousSystem()
        world.add_system(esystem)
        for x in range(10):
            PositionEntity(world)
        self.assertTrue(esystem in world.systems)
        self.assertRaises(NotImplementedError, world.process)

        world2 = World()
        psystem = PositionSystem()
        world2.add_system(psystem)
        for x in range(10):
            PositionEntity(world2)
        self.assertTrue(psystem in world2.systems)
        world2.process()
        for c in world2.components[Position].values():
            self.assertEqual(c.x, 1)
            self.assertEqual(c.y, 1)
        world2.process()
        for c in world2.components[Position].values():
            self.assertEqual(c.x, 2)
            self.assertEqual(c.y, 2)
Пример #5
0
    def test_Entity(self):
        world = World()
        world.add_system(PositionSystem())

        e = Entity(world)
        e2 = Entity(world)
        assert isinstance(e, Entity)
        assert isinstance(e2, Entity)
        assert e != e2

        p = PositionEntity(world)
        assert isinstance(p, PositionEntity)
        assert isinstance(p, Entity)
    def test_Entity(self):
        world = World()
        world.add_system(PositionSystem())

        e = Entity(world)
        e2 = Entity(world)
        self.assertIsInstance(e, Entity)
        self.assertIsInstance(e2, Entity)
        self.assertNotEqual(e, e2)

        p = PositionEntity(world)
        self.assertIsInstance(p, PositionEntity)
        self.assertIsInstance(p, Entity)
    def test_Applicator(self):
        world = World()

        class ErrornousApplicator(Applicator):
            def __init__(self):
                super(ErrornousApplicator, self).__init__()

        eapplicator = ErrornousApplicator()
        # No component types defined.
        self.assertRaises(ValueError, world.add_system, eapplicator)
        self.assertEqual(len(world.systems), 0)

        mapplicator = MovementApplicator()
        world.add_system(mapplicator)
        self.assertTrue(mapplicator in world.systems)
Пример #8
0
def run():
    sdl2ext.init()
    window = sdl2ext.Window("The Pong Game", size=(800, 600))
    window.show()

    if "-hardware" in sys.argv:
        print("Using hardware acceleration")
        renderer = sdl2ext.RenderContext(window)
        factory = sdl2ext.SpriteFactory(sdl2ext.TEXTURE, renderer=renderer)
    else:
        print("Using software rendering")
        factory = sdl2ext.SpriteFactory(sdl2ext.SOFTWARE)

    # Create the paddles - we want white ones. To keep it easy enough for us,
    # we create a set of surfaces that can be used for Texture- and
    # Software-based sprites.
    sp_paddle1 = factory.from_color(WHITE, size=(20, 100))
    sp_paddle2 = factory.from_color(WHITE, size=(20, 100))
    sp_ball = factory.from_color(WHITE, size=(20, 20))

    world = World()

    movement = MovementSystem(0, 0, 800, 600)
    collision = CollisionSystem(0, 0, 800, 600)
    aicontroller = TrackingAIController(0, 600)
    if factory.sprite_type == sdl2ext.SOFTWARE:
        spriterenderer = SoftwareRenderer(window)
    else:
        spriterenderer = TextureRenderer(renderer)

    world.add_system(aicontroller)
    world.add_system(movement)
    world.add_system(collision)
    world.add_system(spriterenderer)

    player1 = Player(world, sp_paddle1, 0, 250)
    player2 = Player(world, sp_paddle2, 780, 250, True)
    ball = Ball(world, sp_ball, 390, 290)
    ball.velocity.vx = -BALL_SPEED
    collision.ball = ball
    aicontroller.ball = ball

    running = True
    while running:
        for event in sdl2ext.get_events():
            if event.type == sdlevents.SDL_QUIT:
                running = False
                break
            if event.type == sdlevents.SDL_KEYDOWN:
                if event.key.keysym.sym == sdlkc.SDLK_UP:
                    player1.velocity.vy = -PADDLE_SPEED
                elif event.key.keysym.sym == sdlkc.SDLK_DOWN:
                    player1.velocity.vy = PADDLE_SPEED
            elif event.type == sdlevents.SDL_KEYUP:
                if event.key.keysym.sym in (sdlkc.SDLK_UP, sdlkc.SDLK_DOWN):
                    player1.velocity.vy = 0
        sdltimer.SDL_Delay(10)
        world.process()
Пример #9
0
    def test_Applicator(self):
        world = World()

        class ErrornousApplicator(Applicator):
            def __init__(self):
                super(ErrornousApplicator, self).__init__()

        eapplicator = ErrornousApplicator()
        # No component types defined.
        with pytest.raises(ValueError):
            world.add_system(eapplicator)
        assert len(world.systems) == 0

        mapplicator = MovementApplicator()
        world.add_system(mapplicator)
        assert mapplicator in world.systems
    def test_System(self):
        world = World()
        self.assertRaises(ValueError, world.add_system, None)
        self.assertRaises(ValueError, world.add_system, 1234)
        self.assertRaises(ValueError, world.add_system, "Test")

        class ErrornousSystem(System):
            def __init__(self):
                super(ErrornousSystem, self).__init__()

        esystem = ErrornousSystem()
        # No component types defined.
        self.assertRaises(ValueError, world.add_system, esystem)
        self.assertEqual(len(world.systems), 0)

        psystem = PositionSystem()
        world.add_system(psystem)
        self.assertTrue(psystem in world.systems)
Пример #11
0
    def test_System(self):
        world = World()
        with pytest.raises(ValueError):
            world.add_system(None)
        with pytest.raises(ValueError):
            world.add_system(1234)
        with pytest.raises(ValueError):
            world.add_system("Test")

        class ErrornousSystem(System):
            def __init__(self):
                super(ErrornousSystem, self).__init__()

        esystem = ErrornousSystem()
        # No component types defined.
        with pytest.raises(ValueError):
            world.add_system(esystem)
        assert len(world.systems) == 0

        psystem = PositionSystem()
        world.add_system(psystem)
        assert psystem in world.systems
Пример #12
0
    def test_World_add_remove_system(self):
        world = World()
        assert isinstance(world, World)

        class SimpleSystem(object):
            def __init__(self):
                self.componenttypes = (Position, )

            def process(self, world, components):
                pass

        for method in (world.add_system, world.remove_system):
            for val in (None, "Test", Position, Entity(world)):
                with pytest.raises(ValueError):
                    method(val)

        psystem = SimpleSystem()
        world.add_system(psystem)
        assert len(world.systems) != 0
        assert psystem in world.systems
        world.remove_system(psystem)
        assert len(world.systems) == 0
        assert psystem not in world.systems

        psystem = PositionSystem()
        world.add_system(psystem)
        assert len(world.systems) != 0
        assert psystem in world.systems

        entity = PositionEntity(world)
        assert isinstance(entity.position, Position)

        world.remove_system(psystem)
        assert len(world.systems) == 0
        assert psystem not in world.systems

        # The data must stay intact in the world, even if the processing
        # system has been removed.
        assert isinstance(entity.position, Position)