diff options
Diffstat (limited to 'asciifarm/client/display')
| -rw-r--r-- | asciifarm/client/display/display.py | 24 | ||||
| -rw-r--r-- | asciifarm/client/display/inventorypad.py | 16 | ||||
| -rw-r--r-- | asciifarm/client/display/screen.py | 1 | ||||
| -rw-r--r-- | asciifarm/client/display/selector.py | 26 |
4 files changed, 62 insertions, 5 deletions
diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py index a3dbb2e..4a74711 100644 --- a/asciifarm/client/display/display.py +++ b/asciifarm/client/display/display.py @@ -48,10 +48,23 @@ class Display: setwin(self.textInput, "textinput") self.lastinfostring = None + + + self.widgets = { + "field": self.fieldPad, + "info": self.infoPad, + "health": self.healthPad, + "inventory": self.inventoryPad, + "ground": self.groundPad, + "msg": self.messagePad, + "textinput": self.textInput + } self.changed = False - self.update(True) - + self.update() + + def getWidget(self, name): + return self.widgets.get(name, None) def resizeField(self, size): self.fieldPad.resize(*size) @@ -83,7 +96,14 @@ class Display: def setGround(self, items): self.groundPad.setInventory(items) self.change() + + def getSelector(self, name): + widget = self.getWidget(name) + if not widget or not hasattr(widget, "getSelector"): + return None + return widget.getSelector() + def addMessage(self, message): self.messagePad.addMessage(message) self.change() diff --git a/asciifarm/client/display/inventorypad.py b/asciifarm/client/display/inventorypad.py index 0cb0b01..c8bb497 100644 --- a/asciifarm/client/display/inventorypad.py +++ b/asciifarm/client/display/inventorypad.py @@ -1,10 +1,12 @@ import curses +from .selector import Selector class InventoryPad: def __init__(self, title): self.title = title + self.selector = Selector(self) self.setInventory([]) self.changed = False self.win = None @@ -12,12 +14,18 @@ class InventoryPad: def setWin(self, win): self.win = win + def getSelector(self): + return self.selector + + def change(self): + self.changed = True + def setInventory(self, items): self.items = items self.changed = True - def getHeight(self): - return self.maxItems+2 + def getNumItems(self): + return len(self.items) def update(self, force): if not self.changed and not force or not self.win: @@ -28,5 +36,7 @@ class InventoryPad: win.erase() win.addstr(0,0, (self.title + ":")[:width]) for i, item in enumerate(self.items[:height-1]): - win.addstr(i+1, 2, item) + if i == self.selector.getValue(): + win.addstr(i+1, 0, '*') + win.addstr(i+1, 1, item) win.noutrefresh() diff --git a/asciifarm/client/display/screen.py b/asciifarm/client/display/screen.py index 588310e..5eeb879 100644 --- a/asciifarm/client/display/screen.py +++ b/asciifarm/client/display/screen.py @@ -60,6 +60,7 @@ class Screen: self.setWins() self.stdscr.clear() self.display.update(True) + raise Exception("size updated") def update(self): diff --git a/asciifarm/client/display/selector.py b/asciifarm/client/display/selector.py new file mode 100644 index 0000000..41249c2 --- /dev/null +++ b/asciifarm/client/display/selector.py @@ -0,0 +1,26 @@ + + +class Selector: + + + def __init__(self, inventory): + self.value = 0 + self.inventory = inventory + + def getValue(self): + return min(self.value, self.inventory.getNumItems()-1) + + def select(self, value, relative=False): + invLen = self.inventory.getNumItems() + if relative: + value += self.selector + if value < 0: + if not relative: + value += invLen + else: + value = 0 + if value >= invLen: + value = invLen-1 + if value in range(invLen): + self.selector = value + self.inventory.change() |
