示例#1
0
 def test_create_animation(self):
     self.item = pgl_board_items.NPC(model="-o-", name="Dancer")
     self.animation = gfx_core.Animation(parent=self.item,
                                         refresh_screen=self.redraw,
                                         display_time=0.5)
     self.assertEqual(self.item.name, self.animation.parent.name)
     a = gfx_core.Animation(
         animated_object=self.item,
         refresh_screen=self.redraw,
         display_time=0.5,
         initial_index=2,
     )
     self.assertEqual(a._initial_index, 2)
     a.reset()
     self.assertEqual(a._initial_index, a._frame_index)
     col = gfx_core.SpriteCollection()
     col.add(gfx_core.Sprite(name="s1"))
     col.add(gfx_core.Sprite(name="s2"))
     i = pgl_board_items.ComplexNPC(sprite=col["s1"])
     a = gfx_core.Animation(frames=col, parent=i)
     i.animation = a
     self.assertIsInstance(a, gfx_core.Animation)
     self.assertEqual(len(a.frames), 2)
     # I shouldn't test that here but I'm tired of writting test!
     self.assertIsInstance(a.next_frame(), gfx_core.Sprite)
 def test_screen_flip_vert(self):
     spr = gfx_core.Sprite(
         sprixels=[
             [
                 gfx_core.Sprixel.cyan_rect(),
                 gfx_core.Sprixel.red_rect(),
                 gfx_core.Sprixel.green_rect(),
             ],
             [
                 gfx_core.Sprixel.yellow_rect(),
                 gfx_core.Sprixel.blue_rect(),
                 gfx_core.Sprixel.white_rect(),
             ],
         ]
     )
     spr_flipped = spr.flip_vertically()
     self.assertEqual(spr.sprixel(1, 0), gfx_core.Sprixel.yellow_rect())
     self.assertEqual(spr_flipped.sprixel(1, 0), gfx_core.Sprixel.cyan_rect())
     spr = gfx_core.Sprite(
         sprixels=[
             [gfx_core.Sprixel("▄"), gfx_core.Sprixel("▄")],
             [gfx_core.Sprixel("▀"), gfx_core.Sprixel("▀")],
         ]
     )
     spr_flipped = spr.flip_vertically()
     self.assertEqual(spr.sprixel(0, 0).model, "▀")
     self.assertIsNone(spr.set_transparency(True))
示例#3
0
    def test_move_complex(self):
        def _act(p):
            p[0].assertEqual(p[1], 1)

        self.board = pgl_engine.Board(
            name="test_board",
            size=[10, 10],
            player_starting_position=[5, 5],
        )
        i = pgl_board_items.ComplexNPC(sprite=gfx_core.Sprite(
            default_sprixel=gfx_core.Sprixel("*")))
        g = pgl_engine.Game(mode=constants.MODE_RT)
        self.board.place_item(i, 1, 1)
        self.assertIsInstance(self.board.item(1, 1),
                              pgl_board_items.ComplexNPC)
        self.assertIsNone(self.board.move(i, constants.RIGHT, 1))
        i = pgl_board_items.ComplexPlayer(sprite=gfx_core.Sprite(
            default_sprixel=gfx_core.Sprixel("*"),
            sprixels=[[gfx_core.Sprixel("@"),
                       gfx_core.Sprixel("@")]],
        ))
        self.board.place_item(i, 3, 1)
        self.assertIsInstance(self.board.item(3, 1),
                              pgl_board_items.ComplexPlayer)
        self.board.place_item(
            pgl_board_items.GenericActionableStructure(
                action=_act, action_parameters=[self, 1]),
            i.row,
            i.column + i.width,
        )
        self.assertIsNone(self.board.move(i, constants.RIGHT, 1))
        self.board.place_item(pgl_board_items.Treasure(value=50),
                              i.row + i.height, i.column)
        self.assertIsNone(self.board.move(i, constants.DOWN, 1))
        self.assertEqual(i.inventory.value(), 50)
        i.parent = g
        i.dtmove = 0.0
        self.assertIsNone(self.board.move(i, pgl_base.Vector2D(1, 0)))
        i.dtmove = 5.0
        self.assertIsNone(self.board.move(i, pgl_base.Vector2D(1, 0)))
        with self.assertRaises(pgl_base.PglObjectIsNotMovableException):
            self.board.move(pgl_board_items.Immovable(), constants.DOWN, 1)
        g.mode = constants.MODE_TBT
        self.board.place_item(pgl_board_items.Door(), i.row,
                              i.column + i.width)
        self.assertIsNone(self.board.move(i, constants.RIGHT, 1))
        self.assertIsNone(self.board.move(i, constants.RIGHT, 2))
        self.assertIsNone(self.board.move(i, constants.DOWN, 2))
        with self.assertRaises(pgl_base.PglInvalidTypeException):
            self.board.move(i, constants.DOWN, "1")
        with self.assertRaises(pgl_base.PglInvalidTypeException):
            self.board.move(i, "constants.DOWN", 1)
 def test_sprite_create_empty(self):
     spr = gfx_core.Sprite()
     self.assertEqual(spr.size[0], 2)
     self.assertEqual(spr.size[1], 2)
     self.assertEqual(spr.width, 2)
     self.assertEqual(spr.height, 2)
     self.assertEqual(spr.sprixel(1, 1), gfx_core.Sprixel())
     self.assertEqual(spr.__repr__(), "\x1b[0m\x1b[0m\n\x1b[0m\x1b[0m")
     with self.assertRaises(gfx_core.base.PglInvalidTypeException):
         spr.sprixel("crash", 1)
     with self.assertRaises(gfx_core.base.PglInvalidTypeException):
         spr.sprixel(1, "crash")
     with self.assertRaises(gfx_core.base.PglException) as e:
         spr.sprixel(1, 10)
     self.assertEqual(e.exception.error, "out_of_sprite_boundaries")
     self.assertTrue(type(spr.sprixel(1)) is list)
     with self.assertRaises(gfx_core.base.PglException) as e:
         spr.sprixel(10, 1)
     self.assertEqual(e.exception.error, "out_of_sprite_boundaries")
     with self.assertRaises(gfx_core.base.PglInvalidTypeException):
         spr.set_sprixel(1, "crash", "bork")
     with self.assertRaises(gfx_core.base.PglException) as e:
         spr.set_sprixel(1, 10, "bork")
     self.assertEqual(e.exception.error, "out_of_sprite_boundaries")
     with self.assertRaises(gfx_core.base.PglInvalidTypeException):
         spr.set_sprixel(1, 1, "bork")
 def test_scale(self):
     spr = gfx_core.Sprite(
         sprixels=[
             [
                 gfx_core.Sprixel.cyan_rect(),
                 gfx_core.Sprixel.red_rect(),
                 gfx_core.Sprixel.green_rect(),
             ],
             [
                 gfx_core.Sprixel.yellow_rect(),
                 gfx_core.Sprixel.blue_rect(),
                 gfx_core.Sprixel.white_rect(),
             ],
         ]
     )
     self.assertEqual(spr.width, 3)
     self.assertEqual(spr.height, 2)
     spr2 = spr.scale(2)
     self.assertEqual(spr2.width, 6)
     self.assertEqual(spr2.height, 4)
     spr3 = spr2.scale(0.5)
     self.assertEqual(spr3.width, 3)
     self.assertEqual(spr3.height, 2)
     self.assertEqual(spr3.width, spr.width)
     self.assertEqual(spr3.height, spr.height)
     self.assertEqual(spr, spr.scale(1))
     self.assertIsNone(spr.scale(0))
示例#6
0
    def test_item(self):
        self.board = pgl_engine.Board(name="test_board",
                                      size=[10, 10],
                                      player_starting_position=[5, 5])
        self.placed_item = pgl_board_items.BoardItem()

        self.board.place_item(self.placed_item, 1, 1)
        self.returned_item = self.board.item(1, 1)
        self.assertEqual(self.placed_item, self.returned_item)

        with self.assertRaises(
                pgl_base.PglOutOfBoardBoundException) as excinfo:
            self.board.item(15, 15)
        self.assertTrue(
            "out of the board boundaries" in str(excinfo.exception))
        sprix = gfx_core.Sprixel(bg_color=gfx_core.Color(45, 45, 45))
        sprix.is_bg_transparent = True
        self.board.place_item(
            pgl_board_items.Door(sprixel=gfx_core.Sprixel(
                bg_color=gfx_core.Color(15, 15, 15))),
            5,
            5,
        )

        i = pgl_board_items.NPC(sprixel=sprix)
        self.assertIsNone(self.board.place_item(i, 5, 5))
        self.assertIsNone(
            self.board.place_item(
                pgl_board_items.ComplexNPC(
                    base_item_type=pgl_board_items.Movable),
                8,
                8,
                8,
            ))
        self.assertIsNone(self.board.place_item(pgl_board_items.Tile(), 8, 2))
        with self.assertRaises(pgl_base.PglInvalidTypeException):
            self.board.place_item(1, 1, 1)
        with self.assertRaises(pgl_base.PglOutOfBoardBoundException):
            self.board.place_item(i, 100, 100)
        with self.assertRaises(pgl_base.PglInvalidTypeException):
            self.board.remove_item(1)
        # Let's try to break things
        j = pgl_board_items.NPC()
        j.store_position(2, 2)
        with self.assertRaises(pgl_base.PglException) as e:
            self.board.remove_item(j)
        self.assertEqual(e.exception.error, "invalid_item")
        self.assertTrue(self.board.remove_item(i))
        b = pgl_engine.Board()
        i = pgl_board_items.ComplexNPC(sprite=gfx_core.Sprite(
            sprixels=[[gfx_core.Sprixel("#"),
                       gfx_core.Sprixel("#")]]))
        self.assertIsNone(b.place_item(i, 5, 5, 0))
        self.assertTrue(b.remove_item(i))
示例#7
0
 def test_screen_create3(self):
     spr = gfx_core.Sprite(sprixels=[
         [
             gfx_core.Sprixel.cyan_rect(),
             gfx_core.Sprixel.red_rect(),
             gfx_core.Sprixel.green_rect(),
         ],
         [
             gfx_core.Sprixel.yellow_rect(),
             gfx_core.Sprixel.blue_rect(),
             gfx_core.Sprixel.white_rect(),
         ],
     ])
     self.assertEqual(spr.size[0], 3)
     self.assertEqual(spr.size[1], 2)
     self.assertEqual(spr.sprixel(1, 1), gfx_core.Sprixel.blue_rect())
示例#8
0
 def test_screen_empty(self):
     spr = gfx_core.Sprite(sprixels=[
         [
             gfx_core.Sprixel.cyan_rect(),
             gfx_core.Sprixel.red_rect(),
             gfx_core.Sprixel.green_rect(),
         ],
         [
             gfx_core.Sprixel.yellow_rect(),
             gfx_core.Sprixel.blue_rect(),
             gfx_core.Sprixel.white_rect(),
         ],
     ])
     self.assertEqual(spr.sprixel(1, 0), gfx_core.Sprixel.yellow_rect())
     spr.empty()
     self.assertEqual(spr.sprixel(1, 0), spr.default_sprixel)
示例#9
0
 def test_complexnpc(self):
     sprite = gfx_core.Sprite(
         name="test_sprite",
         sprixels=[
             [
                 gfx_core.Sprixel(" ", gfx_core.Color(255, 0, 0)),
                 gfx_core.Sprixel(" ", gfx_core.Color(255, 0, 0)),
             ]
         ],
     )
     n = board_items.ComplexNPC(name="Test NPC", sprite=sprite)
     n.actuator = actuators.RandomActuator()
     data = n.serialize()
     self.assertEqual(n.name, data["name"])
     self.assertEqual(n.sprite.name, data["sprite"]["name"])
     n2 = board_items.ComplexNPC.load(data)
     self.assertEqual(n.name, n2.name)
示例#10
0
 def test_screen_flip_horiz(self):
     spr = gfx_core.Sprite(sprixels=[
         [
             gfx_core.Sprixel.cyan_rect(),
             gfx_core.Sprixel.red_rect(),
             gfx_core.Sprixel.green_rect(),
         ],
         [
             gfx_core.Sprixel.yellow_rect(),
             gfx_core.Sprixel.blue_rect(),
             gfx_core.Sprixel.white_rect(),
         ],
     ])
     spr_flipped = spr.flip_horizontally()
     self.assertEqual(spr.sprixel(1, 0), gfx_core.Sprixel.yellow_rect())
     self.assertEqual(spr_flipped.sprixel(1, 0),
                      gfx_core.Sprixel.white_rect())
示例#11
0
 def test_player(self):
     p = board_items.Player(inventory=board_items.engine.Inventory())
     self.assertFalse(p.pickable())
     self.assertTrue(p.has_inventory())
     sprite = gfx_core.Sprite(
         name="test_sprite",
         sprixels=[
             [
                 gfx_core.Sprixel(" ", gfx_core.Color(255, 0, 0)),
                 gfx_core.Sprixel(" ", gfx_core.Color(255, 0, 0)),
             ]
         ],
     )
     n = board_items.ComplexPlayer(name="Test Player", sprite=sprite)
     n.actuator = actuators.RandomActuator()
     data = n.serialize()
     self.assertEqual(n.name, data["name"])
     self.assertEqual(n.sprite.name, data["sprite"]["name"])
     n2 = board_items.ComplexPlayer.load(data)
     self.assertEqual(n.name, n2.name)
 def test_collection(self):
     spr = gfx_core.Sprite(
         sprixels=[
             [
                 gfx_core.Sprixel.cyan_rect(),
                 gfx_core.Sprixel.red_rect(),
                 gfx_core.Sprixel.green_rect(),
             ],
             [
                 gfx_core.Sprixel.yellow_rect(),
                 gfx_core.Sprixel.blue_rect(),
                 gfx_core.Sprixel.white_rect(),
             ],
         ]
     )
     spr2 = spr.flip_horizontally()
     spr3 = spr.flip_vertically()
     sc = gfx_core.SpriteCollection()
     sc.add(spr)
     sc.add(spr2)
     sc.add(spr3)
     with self.assertRaises(gfx_core.base.PglInvalidTypeException):
         sc.add(1)
     self.assertEqual(spr.name, sc[spr.name].name)
     self.assertEqual(spr.name, sc.get(spr.name).name)
     self.assertEqual(spr2.name, sc[spr2.name].name)
     self.assertEqual(spr2.name, sc.get(spr2.name).name)
     self.assertEqual(spr3.name, sc[spr3.name].name)
     self.assertEqual(spr3.name, sc.get(spr3.name).name)
     self.assertIsNone(sc.rename(spr.name, "test_rename"))
     self.assertEqual(sc["test_rename"].sprixel(0, 0), spr.sprixel(0, 0))
     self.assertIsNone(sc.to_json_file("test.pgs"))
     sc2 = gfx_core.SpriteCollection.load_json_file("test.pgs")
     self.assertIsInstance(sc2, gfx_core.SpriteCollection)
     self.assertEqual(spr3.sprixel(1, 1), sc2.get(spr3.name).sprixel(1, 1))
     with self.assertRaises(gfx_core.base.PglException) as e:
         gfx_core.SpriteCollection.load({})
     self.assertEqual(e.exception.error, "invalid_sprite_data")
     with self.assertRaises(gfx_core.base.PglException) as e:
         gfx_core.SpriteCollection.load({"sprites_count": 2, "sprites": {}})
     self.assertEqual(e.exception.error, "corrupted_sprite_data")
 def test_screen_create2(self):
     spr = gfx_core.Sprite(default_sprixel=gfx_core.Sprixel.cyan_rect())
     self.assertEqual(spr.size[0], 2)
     self.assertEqual(spr.size[1], 2)
     self.assertEqual(spr.sprixel(1, 1), gfx_core.Sprixel.cyan_rect())
 def test_screen_create1(self):
     spr = gfx_core.Sprite(size=[4, 4])
     self.assertEqual(spr.size[0], 4)
     self.assertEqual(spr.size[1], 4)
     self.assertEqual(spr.sprixel(1, 1), gfx_core.Sprixel())
    def test_tinting(self):
        sp = gfx_core.Sprite(
            sprixels=[
                [
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                ],
                [
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                    gfx_core.Sprixel(
                        " ",
                        gfx_core.Color(255, 255, 255),
                        gfx_core.Color(255, 255, 255),
                    ),
                ],
            ]
        )
        spr = sp.tint(gfx_core.Color(0, 255, 0), 0.2)
        self.assertEqual(spr.sprixel(0, 0).bg_color.r, 204)
        self.assertEqual(spr.sprixel(0, 0).bg_color.g, 255)
        self.assertEqual(spr.sprixel(0, 0).bg_color.b, 204)
        # Original sprite should not be modified by tint
        self.assertEqual(sp.sprixel(0, 0).bg_color.r, 255)
        self.assertEqual(sp.sprixel(0, 0).bg_color.g, 255)
        self.assertEqual(sp.sprixel(0, 0).bg_color.b, 255)
        with self.assertRaises(gfx_core.base.PglInvalidTypeException):
            sp.tint(gfx_core.Color(0, 255, 0), 1.2)
        with self.assertRaises(gfx_core.base.PglInvalidTypeException):
            sp.tint(gfx_core.Color(0, 255, 0), -1.2)
        with self.assertRaises(gfx_core.base.PglInvalidTypeException):
            sp.modulate(gfx_core.Color(0, 255, 0), 1.2)
        with self.assertRaises(gfx_core.base.PglInvalidTypeException):
            sp.modulate(gfx_core.Color(0, 255, 0), -1.2)

        sp.modulate(gfx_core.Color(0, 255, 0), 0.2)
        # Original sprite should be modified by modulate
        self.assertEqual(sp.sprixel(0, 0).bg_color.r, 204)
        self.assertEqual(sp.sprixel(0, 0).bg_color.g, 255)
        self.assertEqual(sp.sprixel(0, 0).bg_color.b, 204)