diff options
| author | troido <troido@protonmail.com> | 2018-09-06 18:51:15 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2018-09-06 18:51:15 +0200 |
| commit | 5bd11fd1914ea6744852b78047b207e521a304f1 (patch) | |
| tree | d60947313eb14470be2e91b1f4975ab933059278 | |
| parent | 6c3ff03ab92c2d4493355fdbb31a7ababbba97f4 (diff) | |
made menus switchable so not all menus need to be in view all the time
| -rw-r--r-- | asciifarm/client/commandhandler.py | 10 | ||||
| -rw-r--r-- | asciifarm/client/display/display.py | 8 | ||||
| -rw-r--r-- | asciifarm/client/display/inventory.py | 13 | ||||
| -rw-r--r-- | asciifarm/client/display/screen.py | 5 | ||||
| -rw-r--r-- | asciifarm/client/display/switcher.py | 25 | ||||
| -rw-r--r-- | asciifarm/client/display/widget.py | 6 | ||||
| -rw-r--r-- | asciifarm/client/display/widimp.py | 6 | ||||
| -rw-r--r-- | asciifarm/client/display/window.py | 1 | ||||
| -rw-r--r-- | asciifarm/keybindings/keybindings.json | 7 |
9 files changed, 64 insertions, 17 deletions
diff --git a/asciifarm/client/commandhandler.py b/asciifarm/client/commandhandler.py index d34f367..0b5351a 100644 --- a/asciifarm/client/commandhandler.py +++ b/asciifarm/client/commandhandler.py @@ -21,7 +21,8 @@ class CommandHandler: "log": self.log, "do": self.do, "runinput": self.runInput, - "select": self.select, + "selectwidget": self.selectWidget, + "selectitem": self.selectItem, "inputwithselected": self.actWithSelected, "eval": self.eval, "exec": self.exec, @@ -72,8 +73,11 @@ class CommandHandler: def runInput(self, startText=""): self.client.inputHandler.startTyping(startText) - def select(self, widget, value, relative=False, modular=False): - self.client.display.getWidget(widget).select(value, relative, modular) + def selectWidget(self, value, relative=False, modular=False): + self.client.display.getWidget("switch").select(value, relative, modular) + + def selectItem(self, value, relative=False, modular=False): + self.client.display.getWidget("switch").getSelectedItem().getImpl().select(value, relative, modular) def actWithSelected(self, action, widget): self.input([action, self.client.display.getWidget(widget).getSelected()]) diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py index e681945..1d5f542 100644 --- a/asciifarm/client/display/display.py +++ b/asciifarm/client/display/display.py @@ -8,6 +8,7 @@ from .inventory import Inventory from .screen import Screen from .colours import Colours from .messages import Messages +from .switcher import Switcher from .textinput import TextInput from .widget import Widget @@ -47,7 +48,8 @@ class Display: self.characters[name + '-' + ALPHABET[i]] = (charMap["alphabet"][i], fg, bg) self.defaultChar = parseSprite(charMap.get("default", "?")) - self.screen = Screen(self, stdscr, self.colours) + screen = Screen(self, stdscr, self.colours) + self.screen = screen self.widgets = {} @@ -64,6 +66,10 @@ class Display: self.addWidget(Messages(), "msg") self.addWidget(TextInput(), "textinput") + + switcher = Switcher([self.widgets["ground"], self.widgets["inventory"]], 1) + self.addWidget(switcher, "switch") + self.forced = False self.update() diff --git a/asciifarm/client/display/inventory.py b/asciifarm/client/display/inventory.py index 06cc633..4ad7719 100644 --- a/asciifarm/client/display/inventory.py +++ b/asciifarm/client/display/inventory.py @@ -24,14 +24,23 @@ class Inventory(WidImp): if value >= invLen: value = invLen-1 if value in range(invLen): - self.selector = value - self.change() + 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 diff --git a/asciifarm/client/display/screen.py b/asciifarm/client/display/screen.py index 7b609c4..31b50c8 100644 --- a/asciifarm/client/display/screen.py +++ b/asciifarm/client/display/screen.py @@ -58,11 +58,12 @@ class Screen: "textinput": self.makeWin(0, inputY, sideX - 1, inputH), "health": self.makeWin(sideX, healthY, sideW, healthH), - "ground": self.makeWin(sideX, groundY, sideW, groundH), - "inventory": self.makeWin(sideX, invY, sideW, invH), + "ground": self.makeWin(sideX, groundY, sideW, invH), + "inventory": self.makeWin(sideX, groundY, sideW, invH), "equipment": self.makeWin(sideX, eqY, sideW, eqH), "info": self.makeWin(sideX, infoY, sideW, infoH) } + def makeWin(self, x, y, width, height): if width < 1 or height < 1: diff --git a/asciifarm/client/display/switcher.py b/asciifarm/client/display/switcher.py new file mode 100644 index 0000000..196aa88 --- /dev/null +++ b/asciifarm/client/display/switcher.py @@ -0,0 +1,25 @@ + +from .widimp import WidImp +from .inventory import Inventory + +class Switcher(Inventory): + """An area that can contain multiple widgets but only shows one at a time. + There is a function to switch between the displayed widgets. + """ + + def __init__(self, widgets, initial=0): + Inventory.__init__(self, " ") + self.setInventory(widgets) + + for wid in widgets: + wid.hidden = True + + self.select(initial) + + def doSelect(self, value): + self.getSelectedItem().hidden = True + self.selector = value + newWid = self.getSelectedItem() + newWid.hidden = False + newWid.change() + diff --git a/asciifarm/client/display/widget.py b/asciifarm/client/display/widget.py index c5c0dfc..59bed62 100644 --- a/asciifarm/client/display/widget.py +++ b/asciifarm/client/display/widget.py @@ -11,6 +11,7 @@ class Widget: self.win = None self.screen = None self.changed = False + self.hidden = False def setWin(self, win, screen): self.win = win @@ -25,14 +26,11 @@ class Widget: def change(self): self.changed = True - def doUpdate(self): - self.screen.update() - def isChanged(self): return self.changed def update(self): - if not self.getWin() or self.getWin().hidden: + if not self.getWin() or self.hidden: return self.impl.update(self.getWin()) self.changed = False diff --git a/asciifarm/client/display/widimp.py b/asciifarm/client/display/widimp.py index 1fa4240..145aa6b 100644 --- a/asciifarm/client/display/widimp.py +++ b/asciifarm/client/display/widimp.py @@ -4,11 +4,15 @@ class WidImp: """widget implementation""" + _widget = None + def setWidget(self, widget): self._widget = widget + self.change() def change(self): - self._widget.change() + if self._widget is not None: + self._widget.change() def update(self, win): pass diff --git a/asciifarm/client/display/window.py b/asciifarm/client/display/window.py index b6ac782..d5c3945 100644 --- a/asciifarm/client/display/window.py +++ b/asciifarm/client/display/window.py @@ -8,7 +8,6 @@ class Window: self.win = win self.colours = colours - self.hidden = False def getSize(self): if not self.win: diff --git a/asciifarm/keybindings/keybindings.json b/asciifarm/keybindings/keybindings.json index f43515e..d2148e5 100644 --- a/asciifarm/keybindings/keybindings.json +++ b/asciifarm/keybindings/keybindings.json @@ -23,9 +23,10 @@ ["input", ["interact", "south"]], ["input", ["interact", "east"]], ["input", ["interact", "west"]]]], -"c": ["select", "inventory", 1, true, true], -"x": ["select", "ground", 1, true, true], -"v": ["select", "equipment", 1, true, true], +"x": ["selectitem", -1, true, true], +"c": ["selectitem", 1, true, true], +"v": ["selectwidget", -1, true, true], +"b": ["selectwidget", 1, true, true], "f": ["do", [ ["input", ["attack"]], ["input", ["attack", "north"]], |
