From f72c658220a78ec058ceca25118e3e9a499a6c2b Mon Sep 17 00:00:00 2001 From: troido Date: Wed, 17 Jan 2018 20:26:16 +0100 Subject: updated maps and refactored client: renamed display parts and removed selector --- asciifarm/client/display/field.py | 72 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 asciifarm/client/display/field.py (limited to 'asciifarm/client/display/field.py') diff --git a/asciifarm/client/display/field.py b/asciifarm/client/display/field.py new file mode 100644 index 0000000..c38a82b --- /dev/null +++ b/asciifarm/client/display/field.py @@ -0,0 +1,72 @@ + +import curses + + +class Field: + + + def __init__(self, size=(1,1), charSize=1, colours=False): + self.pad = curses.newpad(size[1]+1, (size[0]+1)*charSize) + self.size = size + self.charSize = charSize + self.center = (0, 0) + self.colours = colours + self.changed = False + self.widget = None + + def setWidget(self, widget): + self.widget = widget + + def resize(self, width, height): + self.size = (width, height) + self.pad.resize(height+1, width*self.charSize) + self.widget.change() + win = self.widget.getWin() + if win: + win.erase() + win.noutrefresh() + + def changeCell(self, x, y, sprites): + """ sprites must always have at least one element """ + char, colour, bgcolour = sprites[0] + if bgcolour is None: + for (ch, co, bg) in sprites: + if bg is not None: + bgcolour = bg + break + else: + bgcolour = 0 + if colour is not None and self.colours: + self.pad.addstr(y, x*self.charSize, char, self.colours.get(colour, bgcolour)) + else: + self.pad.addstr(y, x*self.charSize, char) + self.widget.change() + + def setCenter(self, pos): + self.center = pos + self.widget.change() + + def getWidth(self): + return self.size[0]*self.charSize + + def getHeight(self): + return self.size[1] + + def _roundWidth(self, x): + return x // self.charSize * self.charSize + + def update(self): + win = self.widget.getWin() + width, height = win.getSize() + x, y = win.getPos() + xmax = x + width + ymax = y + height + self.pad.noutrefresh( + max(0, min(self.getHeight()-height, self.center[1] - int(height/2))), + max(0, min( + self._roundWidth(self.getWidth()-width), + self._roundWidth(self.center[0]*self.charSize - int(width/2)))), + y, + x + max(0, (width - self.getWidth()) // 2), + ymax, + xmax) -- cgit