74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
|
|
from asciifarm.common import utils
|
|
|
|
from .widimp import WidImp
|
|
|
|
class Inventory(WidImp):
|
|
|
|
def __init__(self, title, titlebar="{}:", selectorChar="*"):
|
|
self.title = title
|
|
self.titlebar = titlebar
|
|
self.selectorChar = selectorChar
|
|
self.items = []
|
|
self.selector = 0
|
|
|
|
def getSelected(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.doSelect(value)
|
|
|
|
def doSelect(self, value):
|
|
self.selector = value
|
|
self.change()
|
|
|
|
def setInventory(self, items):
|
|
self.items = items
|
|
self.selector = utils.clamp(self.selector, 0, len(items)-1)
|
|
self.change()
|
|
|
|
def getItem(self, num):
|
|
return self.items[num]
|
|
|
|
def getSelectedItem(self):
|
|
return self.getItem(self.getSelected())
|
|
|
|
def setTitle(self, title):
|
|
self.title = title
|
|
|
|
def getNumItems(self):
|
|
return len(self.items)
|
|
|
|
def itemName(self, item):
|
|
return item
|
|
|
|
def update(self, win):
|
|
|
|
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.titlebar.format(self.title))[:width])
|
|
for i, item in enumerate(self.items[start:end]):
|
|
if i + start == selected:
|
|
win.addLine((0, i+1), self.selectorChar)
|
|
win.addLine((1, i+1), self.itemName(item))
|
|
if end < len(self.items):
|
|
win.addLine((width-1, height), "+")
|
|
if start > 0:
|
|
win.addLine((width-1, 1), "-")
|
|
win.noutrefresh()
|