diff options
Diffstat (limited to 'asciifarm/client/display/inventory.py')
| -rw-r--r-- | asciifarm/client/display/inventory.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/asciifarm/client/display/inventory.py b/asciifarm/client/display/inventory.py new file mode 100644 index 0000000..0db9037 --- /dev/null +++ b/asciifarm/client/display/inventory.py @@ -0,0 +1,60 @@ + +import curses + +class Inventory: + + def __init__(self, title): + self.title = title + self.widget = None + self.items = [] + self.selector = 0 + + def setWidget(self, widget): + self.widget = widget + + def getSelector(self): + return self.selector + + def select(self, value, relative=False, modular=False): + invLen = len(self.items) + if relative: + value += self.selector + if modular and invLen: + value %= invLen + if value < 0: + value = 0 + if value >= invLen: + value = invLen-1 + if value in range(invLen): + self.selector = value + self.widget.change() + + def setInventory(self, items): + self.items = items + self.widget.change() + + def setTitle(self, title): + self.title = title + + def getNumItems(self): + return len(self.items) + + def update(self): + win = self.widget.getWin() + width, height = win.getSize() + height -= 1 + selected = self.selector + start = min(selected - height//2, len(self.items)-height) + start = max(start, 0) + end = start + height + win.erase() + win.addLine((0,0), (self.title + ":")[:width]) + for i, item in enumerate(self.items[start:end]): + if i + start == selected: + win.addLine((0, i+1), '*') + win.addLine((1, i+1), item) + if end < len(self.items): + win.addLine((width-1, height), "+") + if start > 0: + win.addLine((width-1, 1), "-") + win.noutrefresh() |
