diff options
| -rw-r--r-- | asciifarm/client/commandhandler.py | 34 | ||||
| -rw-r--r-- | asciifarm/client/display/display.py | 9 | ||||
| -rw-r--r-- | asciifarm/client/display/inventory.py | 11 | ||||
| -rw-r--r-- | asciifarm/client/display/screen.py | 19 | ||||
| -rw-r--r-- | asciifarm/client/display/switcher.py | 8 | ||||
| -rw-r--r-- | asciifarm/client/display/widget.py | 7 | ||||
| -rw-r--r-- | asciifarm/client/gameclient.py | 5 | ||||
| -rw-r--r-- | asciifarm/keybindings/keybindings.json | 14 |
8 files changed, 75 insertions, 32 deletions
diff --git a/asciifarm/client/commandhandler.py b/asciifarm/client/commandhandler.py index 0b5351a..1f5177b 100644 --- a/asciifarm/client/commandhandler.py +++ b/asciifarm/client/commandhandler.py @@ -24,6 +24,9 @@ class CommandHandler: "selectwidget": self.selectWidget, "selectitem": self.selectItem, "inputwithselected": self.actWithSelected, + "use": self.useSelected, + "unuse": self.unUseSelected, + "take": self.takeSelected, "eval": self.eval, "exec": self.exec, "scrollchat": self.scrollChat, @@ -82,6 +85,37 @@ class CommandHandler: def actWithSelected(self, action, widget): self.input([action, self.client.display.getWidget(widget).getSelected()]) + def useSelected(self): + widget = self.client.display.getWidget("switch").getSelectedItem() + selected = widget.getImpl().getSelected() + if widget.name in ("inventory", "equipment"): + action = "use" + elif widget.name == "ground": + action = "interact", + else: + return + self.input([action, selected]) + + def unUseSelected(self): + widget = self.client.display.getWidget("switch").getSelectedItem() + selected = widget.getImpl().getSelected() + if widget.name == "inventory": + action = "drop" + elif widget.name == "equipment": + action = "unequip" + else: + return + self.input([action, selected]) + + def takeSelected(self): + widget = self.client.display.getWidget("switch").getSelectedItem() + selected = widget.getImpl().getSelected() + if widget.name == "ground": + action = "take" + else: + return + self.input([action, selected]) + def eval(self, *texts): text = " ".join(texts) self.log(eval(text, {"self": self, "client": self.client, "connection": self.client.connection, "display": self.client.display})) diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py index 1d5f542..0660bb9 100644 --- a/asciifarm/client/display/display.py +++ b/asciifarm/client/display/display.py @@ -63,20 +63,19 @@ class Display: self.addWidget(Inventory("Inventory"), "inventory") self.addWidget(Inventory("Ground"), "ground") self.addWidget(Inventory("Equipment"), "equipment") - self.addWidget(Messages(), "msg") - self.addWidget(TextInput(), "textinput") - switcher = Switcher([self.widgets["ground"], self.widgets["inventory"]], 1) + switcher = Switcher([self.widgets["ground"], self.widgets["inventory"], self.widgets["equipment"]], 1) self.addWidget(switcher, "switch") + self.addWidget(Messages(), "msg") + self.addWidget(TextInput(), "textinput") self.forced = False - self.update() def addWidget(self, w, name, winname=None): if not winname: winname = name - widget = Widget(w) + widget = Widget(w, name) self.widgets[name] = widget widget.setWin(winname, self.screen) diff --git a/asciifarm/client/display/inventory.py b/asciifarm/client/display/inventory.py index 4ad7719..9e62eff 100644 --- a/asciifarm/client/display/inventory.py +++ b/asciifarm/client/display/inventory.py @@ -5,8 +5,9 @@ from .widimp import WidImp class Inventory(WidImp): - def __init__(self, title): + def __init__(self, title, titlebar="{}:"): self.title = title + self.titlebar = titlebar self.items = [] self.selector = 0 @@ -47,7 +48,11 @@ class Inventory(WidImp): 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 @@ -55,11 +60,11 @@ class Inventory(WidImp): start = max(start, 0) end = start + height win.erase() - win.addLine((0,0), (self.title + ":")[:width]) + 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), '*') - win.addLine((1, i+1), item) + win.addLine((1, i+1), self.itemName(item)) if end < len(self.items): win.addLine((width-1, height), "+") if start > 0: diff --git a/asciifarm/client/display/screen.py b/asciifarm/client/display/screen.py index 31b50c8..438e818 100644 --- a/asciifarm/client/display/screen.py +++ b/asciifarm/client/display/screen.py @@ -43,13 +43,11 @@ class Screen: healthY = 0 healthH = self._limitHeight(2, healthY) - groundY = healthY + healthH - groundH = self._limitHeight(6, groundY) - invY = groundY + groundH - invH = self._limitHeight(9, invY) - eqY = invY + invH - eqH = self._limitHeight(5, eqY) - infoY = eqY + eqH + indexY = healthY + healthH + indexH = self._limitHeight(4, indexY) + listY = indexY + indexH + 1 + listH = self._limitHeight(12, listY) + infoY = listY + listH infoH = self._limitHeight(20, infoY) self.windows = { @@ -58,9 +56,10 @@ class Screen: "textinput": self.makeWin(0, inputY, sideX - 1, inputH), "health": self.makeWin(sideX, healthY, sideW, healthH), - "ground": self.makeWin(sideX, groundY, sideW, invH), - "inventory": self.makeWin(sideX, groundY, sideW, invH), - "equipment": self.makeWin(sideX, eqY, sideW, eqH), + "switch": self.makeWin(sideX, indexY, sideW, indexH), + "ground": self.makeWin(sideX, listY, sideW, listH), + "inventory": self.makeWin(sideX, listY, sideW, listH), + "equipment": self.makeWin(sideX, listY, sideW, listH), "info": self.makeWin(sideX, infoY, sideW, infoH) } diff --git a/asciifarm/client/display/switcher.py b/asciifarm/client/display/switcher.py index 196aa88..b62e650 100644 --- a/asciifarm/client/display/switcher.py +++ b/asciifarm/client/display/switcher.py @@ -1,5 +1,5 @@ -from .widimp import WidImp + from .inventory import Inventory class Switcher(Inventory): @@ -8,7 +8,7 @@ class Switcher(Inventory): """ def __init__(self, widgets, initial=0): - Inventory.__init__(self, " ") + Inventory.__init__(self, "", "") self.setInventory(widgets) for wid in widgets: @@ -19,7 +19,11 @@ class Switcher(Inventory): def doSelect(self, value): self.getSelectedItem().hidden = True self.selector = value + self.change() newWid = self.getSelectedItem() newWid.hidden = False newWid.change() + def itemName(self, item): + return item.getImpl().title + diff --git a/asciifarm/client/display/widget.py b/asciifarm/client/display/widget.py index 59bed62..31bb093 100644 --- a/asciifarm/client/display/widget.py +++ b/asciifarm/client/display/widget.py @@ -1,17 +1,16 @@ - - class Widget: - def __init__(self, impl): + def __init__(self, impl, name=None): self.impl = impl - self.impl.setWidget(self) self.win = None self.screen = None self.changed = False self.hidden = False + self.name = name + self.impl.setWidget(self) def setWin(self, win, screen): self.win = win diff --git a/asciifarm/client/gameclient.py b/asciifarm/client/gameclient.py index 4197735..8c94e68 100644 --- a/asciifarm/client/gameclient.py +++ b/asciifarm/client/gameclient.py @@ -10,8 +10,6 @@ import argparse import string from queue import Queue -from .display.screen import Screen -from .display.display import Display from .inputhandler import InputHandler @@ -35,7 +33,8 @@ class Client: def send(self, data): - self.connection.send(json.dumps(data)) + text = json.dumps(data) + self.connection.send(text) def start(self): threading.Thread(target=self.listen, daemon=True).start() diff --git a/asciifarm/keybindings/keybindings.json b/asciifarm/keybindings/keybindings.json index d2148e5..ecd8fd2 100644 --- a/asciifarm/keybindings/keybindings.json +++ b/asciifarm/keybindings/keybindings.json @@ -12,10 +12,10 @@ "j": ["move", "south"], "l": ["move", "east"], "h": ["move", "west"], -"e": ["inputwithselected", "take", "ground"], -"q": ["inputwithselected", "drop", "inventory"], -"E": ["inputwithselected", "use", "inventory"], -"z": ["inputwithselected", "unequip", "equipment"], +"e": ["input", ["take"]], +"q": ["unuse"], +"Q": ["take"], +"E": ["use"], "R": ["input", ["interact"]], "r": ["do", [ ["input", ["interact"]], @@ -27,6 +27,10 @@ "c": ["selectitem", 1, true, true], "v": ["selectwidget", -1, true, true], "b": ["selectwidget", 1, true, true], +"-": ["selectitem", -1, true, true], +"+": ["selectitem", 1, true, true], +"/": ["selectwidget", -1, true, true], +"*": ["selectwidget", 1, true, true], "f": ["do", [ ["input", ["attack"]], ["input", ["attack", "north"]], @@ -44,5 +48,5 @@ "KEY_NPAGE": ["scrollchat", -1], "/": ["runinput", "/"] }, -"help": "Controls:\n wasd or arrows:\n Move around\n e: Grab\n q: Drop\n E: Use/Equip\n r: Interact\n f: Attack\n t: Chat\n z: Unequip\n xcv: scroll\n ctrl-c: close client" +"help": "Controls:\n wasd or arrows:\n Move around\n e: Grab\n q: Drop/unequip\n selected\n r: Interact\n f: Attack\n t: Chat\n E: Use selected\n Q: Take selected\n xc: select item\n vb: select menu\n ctrl-c: close client" } |
