Exemple #1
0
 def test_scale(self):
     poly1 = Polygon([Point(1, 2), Point(1, 7), Point(3.5, 2)])
     poly2 = Polygon([Point(1, 2), Point(1, 4), Point(2, 2)])
     poly2.scale(2.5)
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertAlmostEqual(p1.x, p2.x)
         self.assertAlmostEqual(p1.y, p2.y)
Exemple #2
0
 def test_scale(self):
     poly1 = Polygon([Point(1, 2), Point(1, 7), Point(3.5, 2)])
     poly2 = Polygon([Point(1, 2), Point(1, 4), Point(2, 2)])
     poly2.scale(2.5)
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertAlmostEqual(p1.x, p2.x)
         self.assertAlmostEqual(p1.y, p2.y)
Exemple #3
0
 def test_rotate(self):
     poly1 = Polygon([Point(1, 1), Point(0, 1), Point(1, 2)])
     poly2 = Polygon([Point(0, 0), Point(0, 1), Point(1, 0)])
     poly2.rotate(pi / 2.0, Point(0, 1))
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertAlmostEqual(p1.x, p2.x)
         self.assertAlmostEqual(p1.y, p2.y)
Exemple #4
0
 def test_rotate(self):
     poly1 = Polygon([Point(1, 1), Point(0, 1), Point(1, 2)])
     poly2 = Polygon([Point(0, 0), Point(0, 1), Point(1, 0)])
     poly2.rotate(pi/2.0, Point(0, 1))
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertAlmostEqual(p1.x, p2.x)
         self.assertAlmostEqual(p1.y, p2.y)
Exemple #5
0
    def test_packing_across(self):
        level = Level()
        level.version = VERSION_ACROSS
        # Specify level id to make testing easier
        level.level_id = 2535781587
        level.polygons = [Polygon([Point(0, 0), Point(0, 1), Point(1, 0)])]
        level.objects = [
            Obj(Point(0, 0), Obj.FLOWER),
            Obj(Point(0, 0), Obj.START),
            Obj(Point(0, 0), Obj.KILLER),
            Obj(Point(0, 0), Obj.FOOD)
        ]
        packed = level.pack()
        level = level.unpack(packed)
        self.assertEqual(VERSION_ACROSS, level.version)
        self.assertEqual(2535781587, level.level_id)
        self.assertEqual('Unnamed', level.name)

        # polygons
        self.assertEqual(1, len(level.polygons))
        self.assertEqual(Point(0, 0), level.polygons[0].points[0])
        self.assertEqual(Point(0, 1), level.polygons[0].points[1])
        self.assertEqual(Point(1, 0), level.polygons[0].points[2])

        # objects
        self.assertEqual(4, len(level.objects))
        for expected_obj, obj in zip([
                Obj(Point(0, 0), Obj.FLOWER),
                Obj(Point(0, 0), Obj.START),
                Obj(Point(0, 0), Obj.KILLER),
                Obj(Point(0, 0), Obj.FOOD)
        ], level.objects):
            self.assertEqual(expected_obj, obj)
Exemple #6
0
    def test_packing(self):
        level = Level()
        # Specify level id to make testing easier
        level.level_id = 2535781587
        level.polygons = [Polygon([Point(0, 0), Point(0, 1), Point(1, 0)])]
        level.pictures = [Picture(Point(0, 0))]
        level.objects = [
            Obj(Point(0, 0), Obj.FLOWER),
            Obj(Point(0, 0), Obj.START),
            Obj(Point(0, 0), Obj.KILLER),
            Obj(Point(0, 0), Obj.FOOD),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_UP),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_DOWN),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_LEFT),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_RIGHT),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_NORMAL)
        ]
        packed = pack_level(level)
        original_level = level
        level = unpack_level(packed)
        self.assertEqual(2535781587, level.level_id)
        self.assertEqual('Unnamed', level.name)
        self.assertEqual('DEFAULT', level.lgr)
        self.assertEqual('ground', level.ground_texture)
        self.assertEqual('sky', level.sky_texture)

        # polygons
        self.assertEqual(1, len(level.polygons))
        self.assertEqual(Point(0, 0), level.polygons[0].points[0])
        self.assertEqual(Point(0, 1), level.polygons[0].points[1])
        self.assertEqual(Point(1, 0), level.polygons[0].points[2])

        # pictures
        self.assertEqual(1, len(level.pictures))
        picture = level.pictures[0]
        original_picture = original_level.pictures[0]
        self.assertEqual(original_picture.picture_name, picture.picture_name)
        self.assertEqual(original_picture.texture_name, picture.texture_name)
        self.assertEqual(original_picture.mask_name, picture.mask_name)
        self.assertEqual(original_picture.distance, picture.distance)
        self.assertEqual(original_picture.clipping, picture.clipping)

        # objects
        self.assertEqual(9, len(level.objects))
        for expected_obj, obj in zip([
                Obj(Point(0, 0), Obj.FLOWER),
                Obj(Point(0, 0), Obj.START),
                Obj(Point(0, 0), Obj.KILLER),
                Obj(Point(0, 0), Obj.FOOD),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_UP),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_DOWN),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_LEFT),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_RIGHT),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_NORMAL)
        ], level.objects):
            self.assertEqual(expected_obj, obj)
Exemple #7
0
 def test_move_by(self):
     poly1 = Polygon([Point(1, 2), Point(1, 3), Point(2, 2)])
     poly2 = Polygon([Point(0, 0), Point(0, 1), Point(1, 0)])
     poly2.move_by(1, 2)
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertEqual(p1, p2)
Exemple #8
0
 def test_center(self):
     poly = Polygon([Point(0, 0), Point(0, 2), Point(2, 2), Point(2, 0)])
     center = poly.center_point()
     self.assertAlmostEqual(center.x, 1.0)
     self.assertAlmostEqual(center.y, 1.0)
Exemple #9
0
 def test_flip(self):
     poly1 = Polygon([Point(1, 2), Point(1, 3), Point(2, 2)])
     poly2 = Polygon([Point(1, 3), Point(1, 2), Point(2, 3)])
     poly2.flip()
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertEqual(p1, p2)
Exemple #10
0
 def test_move_by(self):
     poly1 = Polygon([Point(1, 2), Point(1, 3), Point(2, 2)])
     poly2 = Polygon([Point(0, 0), Point(0, 1), Point(1, 0)])
     poly2.move_by(1, 2)
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertEqual(p1, p2)
Exemple #11
0
 def test_center(self):
     poly = Polygon([Point(0, 0), Point(0, 2), Point(2, 2), Point(2, 0)])
     center = poly.center_point()
     self.assertAlmostEqual(center.x, 1.0)
     self.assertAlmostEqual(center.y, 1.0)
Exemple #12
0
 def test_flip(self):
     poly1 = Polygon([Point(1, 2), Point(1, 3), Point(2, 2)])
     poly2 = Polygon([Point(1, 3), Point(1, 2), Point(2, 3)])
     poly2.flip()
     for p1, p2 in zip(poly1.points, poly2.points):
         self.assertEqual(p1, p2)
Exemple #13
0
def unpack_level(data):
    """
    Unpack a level-related item from its binary representation readable by
    Elastomania.
    """

    data = iter(data)

    def munch(n):
        return b''.join([bytes(chr(next(data)), 'latin1') for _ in range(n)])

    level = Level()
    assert munch(5) == b'POT14'
    munch(2)
    level.level_id = struct.unpack('I', munch(4))[0]
    munch(8 * 4)
    level.name = munch(51).rstrip(b'\0').decode('latin1')
    level.lgr = munch(16).rstrip(b'\0').decode('latin1')
    level.ground_texture = munch(10).rstrip(b'\0').decode('latin1')
    level.sky_texture = munch(10).rstrip(b'\0').decode('latin1')

    number_of_polygons = int(struct.unpack('d', munch(8))[0])
    for _ in range(number_of_polygons):
        grass = struct.unpack('I', munch(4))[0]
        number_of_vertices = struct.unpack('I', munch(4))[0]
        points = []
        for __ in range(number_of_vertices):
            x = struct.unpack('d', munch(8))[0]
            y = struct.unpack('d', munch(8))[0]
            points.append(Point(x, y))
        level.polygons.append(Polygon(points, grass=grass))

    number_of_objects = int(struct.unpack('d', munch(8))[0])
    for _ in range(number_of_objects):
        x = struct.unpack('d', munch(8))[0]
        y = struct.unpack('d', munch(8))[0]
        object_type = struct.unpack('I', munch(4))[0]
        gravity = struct.unpack('I', munch(4))[0]
        animation_number = struct.unpack('I', munch(4))[0]
        level.objects.append(
            Obj(Point(x, y),
                object_type,
                gravity=gravity,
                animation_number=animation_number))

    number_of_pictures = int(struct.unpack('d', munch(8))[0])
    for _ in range(number_of_pictures):
        picture_name = munch(10).rstrip(b'\0').decode('latin1')
        texture_name = munch(10).rstrip(b'\0').decode('latin1')
        mask_name = munch(10).rstrip(b'\0').decode('latin1')
        x = struct.unpack('d', munch(8))[0]
        y = struct.unpack('d', munch(8))[0]
        distance = struct.unpack('I', munch(4))[0]
        clipping = struct.unpack('I', munch(4))[0]
        level.pictures.append(
            Picture(Point(x, y),
                    picture_name=picture_name,
                    texture_name=texture_name,
                    mask_name=mask_name,
                    distance=distance,
                    clipping=clipping))
    return level
Exemple #14
0
    def test_packing(self):
        level = Level()
        # Specify level id to make testing easier
        level.level_id = 2535781587
        level.polygons = [Polygon([Point(0, 0), Point(0, 1), Point(1, 0)])]
        level.pictures = [Picture(Point(0, 0))]
        level.objects = [
            Obj(Point(0, 0), Obj.FLOWER),
            Obj(Point(0, 0), Obj.START),
            Obj(Point(0, 0), Obj.KILLER),
            Obj(Point(0, 0), Obj.FOOD),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_UP),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_DOWN),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_LEFT),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_RIGHT),
            Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_NORMAL)
        ]
        level.top10.single.append(Top10Time(1386, 'player1'))
        level.top10.single.append(Top10Time(1379, 'player2'))
        level.top10.multi.append(Top10Time(709, 'player3', 'player2', True))
        level.top10.multi.append(Top10Time(714, 'player4', 'player1', True))
        original_level = level
        packed = level.pack()
        level = Level.unpack(packed)
        self.assertEqual(2535781587, level.level_id)
        self.assertEqual('Unnamed', level.name)
        self.assertEqual('DEFAULT', level.lgr)
        self.assertEqual('ground', level.ground_texture)
        self.assertEqual('sky', level.sky_texture)

        # polygons
        self.assertEqual(1, len(level.polygons))
        self.assertEqual(Point(0, 0), level.polygons[0].points[0])
        self.assertEqual(Point(0, 1), level.polygons[0].points[1])
        self.assertEqual(Point(1, 0), level.polygons[0].points[2])

        # pictures
        self.assertEqual(1, len(level.pictures))
        picture = level.pictures[0]
        original_picture = original_level.pictures[0]
        self.assertEqual(original_picture.picture_name, picture.picture_name)
        self.assertEqual(original_picture.texture_name, picture.texture_name)
        self.assertEqual(original_picture.mask_name, picture.mask_name)
        self.assertEqual(original_picture.distance, picture.distance)
        self.assertEqual(original_picture.clipping, picture.clipping)

        # objects
        self.assertEqual(9, len(level.objects))
        for expected_obj, obj in zip([
                Obj(Point(0, 0), Obj.FLOWER),
                Obj(Point(0, 0), Obj.START),
                Obj(Point(0, 0), Obj.KILLER),
                Obj(Point(0, 0), Obj.FOOD),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_UP),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_DOWN),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_LEFT),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_RIGHT),
                Obj(Point(0, 0), Obj.FOOD, gravity=Obj.GRAVITY_NORMAL)
        ], level.objects):
            self.assertEqual(expected_obj, obj)

        # top10
        self.assertEqual(2, len(level.top10.single))
        self.assertEqual(2, len(level.top10.multi))
        self.assertEqual(Top10Time(1379, 'player2'), level.top10.single[0])
        self.assertEqual(Top10Time(1386, 'player1'), level.top10.single[1])
        self.assertEqual(Top10Time(709, 'player3', 'player2', True),
                         level.top10.multi[0])
        self.assertEqual(Top10Time(714, 'player4', 'player1', True),
                         level.top10.multi[1])

        # merge top10s
        level2 = deepcopy(level)
        level2.top10.single.append(Top10Time(1383, 'player2'))
        level2.top10.multi.append(Top10Time(714, 'player1', 'player5'))
        level.top10.merge(level2.top10)
        self.assertEqual(3, len(level.top10.single))
        self.assertEqual(3, len(level.top10.multi))
        self.assertEqual(Top10Time(1379, 'player2'), level.top10.single[0])
        self.assertEqual(Top10Time(1383, 'player2'), level.top10.single[1])
        self.assertEqual(Top10Time(1386, 'player1'), level.top10.single[2])
        self.assertEqual(Top10Time(709, 'player3', 'player2', True),
                         level.top10.multi[0])
        self.assertEqual(Top10Time(714, 'player4', 'player1', True),
                         level.top10.multi[1])
        self.assertEqual(Top10Time(714, 'player1', 'player5', True),
                         level.top10.multi[2])