summaryrefslogtreecommitdiff
path: root/asciifarm/client/display
diff options
context:
space:
mode:
Diffstat (limited to 'asciifarm/client/display')
-rw-r--r--asciifarm/client/display/display.py24
-rw-r--r--asciifarm/client/display/inventorypad.py16
-rw-r--r--asciifarm/client/display/screen.py1
-rw-r--r--asciifarm/client/display/selector.py26
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()