summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortroido <troido@protonmail.com>2018-09-06 18:51:15 +0200
committertroido <troido@protonmail.com>2018-09-06 18:51:15 +0200
commit5bd11fd1914ea6744852b78047b207e521a304f1 (patch)
treed60947313eb14470be2e91b1f4975ab933059278
parent6c3ff03ab92c2d4493355fdbb31a7ababbba97f4 (diff)
made menus switchable so not all menus need to be in view all the time
-rw-r--r--asciifarm/client/commandhandler.py10
-rw-r--r--asciifarm/client/display/display.py8
-rw-r--r--asciifarm/client/display/inventory.py13
-rw-r--r--asciifarm/client/display/screen.py5
-rw-r--r--asciifarm/client/display/switcher.py25
-rw-r--r--asciifarm/client/display/widget.py6
-rw-r--r--asciifarm/client/display/widimp.py6
-rw-r--r--asciifarm/client/display/window.py1
-rw-r--r--asciifarm/keybindings/keybindings.json7
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"]],