Skip to content

Commit

Permalink
Merge pull request #133 from melsaa/master
Browse files Browse the repository at this point in the history
Add Screen.display_sprite()
  • Loading branch information
arnauddupuis committed Oct 16, 2020
2 parents ba5593b + f436070 commit 9269cb5
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 0 deletions.
76 changes: 76 additions & 0 deletions pygamelib/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -3119,3 +3119,79 @@ def display_at(
eol = self.terminal.clear_eol
with self.terminal.location(column, row):
print(text, eol, end=end, file=file, flush=flush)

def display_sprite_at(
self,
sprite,
filler=core.Sprixel(" "),
row=0,
column=0,
file=sys.stdout,
flush=False,
):
"""
.. versionadded:: 1.3.0
Displays sprite at a given position.
If a :class:`~pygamelib.gfx.core.Sprixel` is empty, then it's going to be
replaced by filler.
:param sprite: The sprite object to display.
:type sprite: :class:`~pygamelib.gfx.core.Sprite`
:param filler: A sprixel object to replace all empty sprixels in sprite.
:type filler: :class:`~pygamelib.gfx.core.Sprixel`
:param row: The row position in the terminal window.
:type row: int
:param column: The column position in the terminal window.
:type column: int
:param file:
:type file: stream
:param flush: print() parameter to flush the stream after printing
:type flush: bool
Example::
screen.display_sprite_at(panda_sprite,
int(screen.height/2),
int(screen.width/2)
)
"""
for r in range(0, sprite.size[1]):
for c in range(0, sprite.size[0]):
if sprite._sprixels[r][c] == core.Sprixel():
self.display_at(
filler, row + r, column + c, file=file, flush=flush
)
else:
self.display_at(
sprite._sprixels[r][c], row + r, column + c, file=file, flush=flush
)

def display_sprite(self, sprite, filler=core.Sprixel(" "), file=sys.stdout, flush=False):
"""
.. versionadded:: 1.3.0
Displays sprite at the current cursor position.
If a :class:`~pygamelib.gfx.core.Sprixel` is empty, then it's going to be
replaced by filler.
:param sprite: The sprite object to display.
:type sprite: :class:`~pygamelib.gfx.core.Sprite`
:param filler: A sprixel object to replace all empty sprixels in sprite.
:type filler: :class:`~pygamelib.gfx.core.Sprixel`
:param file:
:type file: stream
:param flush: print() parameter to flush the stream after printing
:type flush:
Examples::
screen.display_sprite(panda_sprite)
"""
for r in range(0, sprite.size[1]):
for c in range(0, sprite.size[0]):
if sprite._sprixels[r][c] == core.Sprixel():
print(filler, end="")
else:
print(
sprite._sprixels[r][c], end="", file=file, flush=flush,
)
print()
1 change: 1 addition & 0 deletions tests/panda.spr
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"sprites_count": 1, "sprites": {"panda": {"size": [8, 8], "name": "panda", "default_sprixel": {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, "sprixels": [[{"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}], [{"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}], [{"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}], [{"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}], [{"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[41m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[41m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}], [{"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}], [{"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[47m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}], [{"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": " ", "bg_color": "\u001b[40m", "fg_color": "", "is_bg_transparent": false}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}, {"model": "", "bg_color": "", "fg_color": "", "is_bg_transparent": true}]]}}}
17 changes: 17 additions & 0 deletions tests/test_engine_screen.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from pygamelib import engine
from pygamelib.gfx.core import Sprite, SpriteCollection, Sprixel
import unittest
from blessed import Terminal

Expand Down Expand Up @@ -43,6 +44,22 @@ def test_screen_display(self):
)
)

def test_screen_display_sprite(self):
sprites_panda = SpriteCollection.load_json_file("tests/panda.spr")
self.assertIsNone(
self.screen.display_sprite(sprites_panda["panda"], filler=Sprixel(" "))
)

def test_screen_display_sprite_at(self):
sprites_panda = SpriteCollection.load_json_file("tests/panda.spr")
self.assertIsNone(
self.screen.display_sprite_at(
sprites_panda["panda"],
Sprixel(" "),
int(self.screen.height / 2),
int(self.screen.width / 2),
)
)

if __name__ == "__main__":
unittest.main()

0 comments on commit 9269cb5

Please sign in to comment.