summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortroido <troido@hotmail.com>2018-01-02 11:26:08 +0100
committertroido <troido@hotmail.com>2018-01-02 11:26:08 +0100
commitc98b58820f957a9d94756338c0e9c3971b5d2085 (patch)
tree7c5762a24771bd10fe670b8f65b1fac9ec2838d3
parent5e12a9ed28154407ee0453913d74bcc9366fe2df (diff)
sprites without a background will now take the background of the sprite below it (if any)
-rw-r--r--asciifarm/client/display/display.py24
-rw-r--r--asciifarm/client/display/fieldpad.py11
-rw-r--r--asciifarm/common/utils.py7
3 files changed, 33 insertions, 9 deletions
diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py
index a9d0a92..998ac8d 100644
--- a/asciifarm/client/display/display.py
+++ b/asciifarm/client/display/display.py
@@ -11,6 +11,8 @@ from .messagepad import MessagePad
from .textinput import TextInput
from .widget import Widget
+from asciifarm.common.utils import get
+
SIDEWIDTH = 20
@@ -23,7 +25,15 @@ class Display:
self.colours = Colours()
else:
self.colours = None
- self.characters = charMap["mapping"]
+ self.characters = {}
+ for name, sprite in charMap["mapping"].items():
+ if isinstance(sprite, str):
+ self.characters[name] = (sprite, None, None)
+ continue
+ char = get(sprite, 0, " ")
+ fg = get(sprite, 1)
+ bg = get(sprite, 2)
+ self.characters[name] = (char, fg, bg)
self.defaultChar = charMap.get("default", "?")
self.screen = Screen(self, stdscr)
@@ -74,9 +84,10 @@ class Display:
def drawFieldCells(self, cells):
for cell in cells:
(x, y), spriteNames = cell
- spriteName = spriteNames[0] if len(spriteNames) else " "
- sprite = self.getChar(spriteName)
- self.fieldPad.changeCell(x, y, *sprite)
+ sprites = [self.getChar(spriteName) for spriteName in spriteNames]
+ if not len(sprites):
+ sprites = [self.getChar(" ")]
+ self.fieldPad.changeCell(x, y, sprites)
#self.change()
def setFieldCenter(self, pos):
@@ -121,10 +132,7 @@ class Display:
def getChar(self, sprite):
"""This returns the character belonging to some spritename. This does not read a character"""
- char = self.characters.get(sprite, self.defaultChar)
- if isinstance(char, str):
- return [char]
- return char
+ return self.characters.get(sprite, self.defaultChar)
def getString(self):
"""This does actually read input"""
diff --git a/asciifarm/client/display/fieldpad.py b/asciifarm/client/display/fieldpad.py
index bb15a0e..24baa81 100644
--- a/asciifarm/client/display/fieldpad.py
+++ b/asciifarm/client/display/fieldpad.py
@@ -26,7 +26,16 @@ class FieldPad:
win.erase()
win.noutrefresh()
- def changeCell(self, x, y, char, colour=None, bgcolour=0):
+ def changeCell(self, x, y, sprites):
+ """ sprites must always have at least one element """
+ char, colour, bgcolour = sprites[0]
+ if bgcolour == None:
+ for (ch, co, bg) in sprites:
+ if bg != None:
+ bgcolour = bg
+ break
+ else:
+ bgcolour = 0
if colour != None and self.colours:
self.pad.addstr(y, x*self.charSize, char, self.colours.get(colour, bgcolour))
else:
diff --git a/asciifarm/common/utils.py b/asciifarm/common/utils.py
index b37ec02..cdc8dd5 100644
--- a/asciifarm/common/utils.py
+++ b/asciifarm/common/utils.py
@@ -38,3 +38,10 @@ def readFile(filepath):
with open(filepath, "r") as f:
text = f.read()
return text
+
+
+def get(collection, i, default=None):
+ """ Get an element in an indexed collection, or the default in case the index is out of bounds """
+ if i < 0 or i >= len(collection):
+ return default
+ return collection[i]