diff options
| author | troido <troido@protonmail.com> | 2019-09-18 12:01:36 +0200 |
|---|---|---|
| committer | troido <troido@protonmail.com> | 2019-09-18 12:01:36 +0200 |
| commit | e2ecd2b2c5b6bc2bc1dbce6f669c96707683313d (patch) | |
| tree | 288079eb19fe3f606e51c2f494aac68d564a4ac8 | |
| parent | 64a5b6d7c732ed108e5705cbbb41b0addd18b510 (diff) | |
menus now work too
| -rw-r--r-- | asciifarm/client/commandhandler.py | 26 | ||||
| -rw-r--r-- | asciifarm/client/gameclient.py | 19 | ||||
| -rw-r--r-- | asciifarm/client/newdisplay/display.py | 78 | ||||
| -rw-r--r-- | asciifarm/client/newdisplay/layout.xml | 42 | ||||
| -rw-r--r-- | asciifarm/client/switchselector.py | 24 | ||||
| -rw-r--r-- | asciifarm/keybindings/default.json | 14 |
6 files changed, 99 insertions, 104 deletions
diff --git a/asciifarm/client/commandhandler.py b/asciifarm/client/commandhandler.py index e55fb65..0fe3c3d 100644 --- a/asciifarm/client/commandhandler.py +++ b/asciifarm/client/commandhandler.py @@ -95,40 +95,40 @@ class CommandHandler: self.client.inputHandler.startTyping(startText) def selectWidget(self, value, relative=False, modular=False): - self.client.switch.select(value, relative, modular) + self.client.display.selectMenu(value, relative, modular) def selectItem(self, value, relative=False, modular=False): - self.client.switch.getSelectedItem()[0].select(value, relative, modular) + self.client.display.selectItem(None, value, relative, modular) #def actWithSelected(self, action, widget): #self.input([action, self.client.display.getWidget(widget).getSelected()]) def useSelected(self): - widget = self.client.switch.getSelectedItem() - selected = widget.getImpl().getSelected() - if widget.name in ("inventory", "equipment"): + menu = self.client.display.getSelectedMenu() + selected = self.client.display.getSelectedItem(menu) + if menu in ("inventory", "equipment"): action = "use" - elif widget.name == "ground": + elif menu == "ground": action = "interact", else: return self.input([action, selected]) def unUseSelected(self): - menu = self.client.switch.getSelectedItem()[0] - selected = widget.getImpl().getSelected() - if widget.name == "inventory": + menu = self.client.display.getSelectedMenu() + selected = self.client.display.getSelectedItem(menu) + if menu == "inventory": action = "drop" - elif widget.name == "equipment": + elif menu == "equipment": action = "unequip" else: return self.input([action, selected]) def takeSelected(self): - widget = self.client.switch.getSelectedItem()[0] - selected = widget.getImpl().getSelected() - if widget.name == "ground": + menu = self.client.display.getSelectedMenu() + selected = self.client.display.getSelectedItem(menu) + if menu == "ground": action = "take" else: return diff --git a/asciifarm/client/gameclient.py b/asciifarm/client/gameclient.py index 46c8553..44a807f 100644 --- a/asciifarm/client/gameclient.py +++ b/asciifarm/client/gameclient.py @@ -13,8 +13,6 @@ from queue import Queue import ratuil.inputs from .inputhandler import InputHandler -from .listselector import ListSelector -from .switchselector import SwitchSelector class Client: @@ -27,17 +25,6 @@ class Client: self.logFile = logFile self.closeMessage = None - # temporary, until these have a better place - self.inventory = ListSelector(self.display.getWidget("inventory")) - self.equipment = ListSelector(self.display.getWidget("equipment")) - self.ground = ListSelector(self.display.getWidget("ground")) - self.switch = SwitchSelector(self.display.getWidget("switch")) - #self.switch.setItems([ - #(self.inventory, None, "Inventory"), - #(self.equipment, None, "Equipment"), - #(self.ground, None, "Ground") - #]) - self.inputHandler = InputHandler(self, keybindings["actions"]) self.controlsString = keybindings.get("help", "") @@ -125,20 +112,20 @@ class Client: if maxHealth is None: self.log("You have died. Restart the client to respawn") if msgType == "inventory": - self.inventory.setItems(msg[1]) + self.display.inventory.setItems(msg[1]) #invbox = self.display.getWidget("inventory") #invbox.setInventory(self.inventory.items) #invbox.select(self.inventory.selector) #self.display.setInventory(msg[1]) if msgType == "equipment": #self.display.setEquipment(msg[1]) - self.equipment.setItems(msg[1]) + self.display.equipment.setItems(msg[1]) #eqbox = self.display.getWidget("equipment") #eqbox.setInventory(self.inventory.items) #eqbox.select(self.equipment.selector) if msgType == "ground": #self.display.setGround(msg[1]) - self.ground.setItems(msg[1]) + self.display.ground.setItems(msg[1]) #grbox = self.display.getWidget("ground") #grbox.setInventory(self.ground.items) #grbox.select(self.ground.selector) diff --git a/asciifarm/client/newdisplay/display.py b/asciifarm/client/newdisplay/display.py index 66f89ca..21358c4 100644 --- a/asciifarm/client/newdisplay/display.py +++ b/asciifarm/client/newdisplay/display.py @@ -7,6 +7,7 @@ from ratuil.bufferedscreen import BufferedScreen as Screen #from ratuil.screen import Screen from ratuil.textstyle import TextStyle from asciifarm.common.utils import get +from ..listselector import ListSelector SIDEWIDTH = 20 @@ -55,36 +56,23 @@ class Display: self.layout.update() - #screen = Screen(self, stdscr, self.colours) - #self.screen = screen - #self.widgets = {} + # temporary, until these have a better place + self.inventory = ListSelector(self.getWidget("inventory")) + self.equipment = ListSelector(self.getWidget("equipment")) + self.ground = ListSelector(self.getWidget("ground")) + self.switch = ListSelector(self.getWidget("switchtitles")) - #self.addWidget(Field((1, 1), charMap.get("charwidth", 1), self.colours), "field") - #self.addWidget(Info(), "info") - #self.addWidget(Health( - #charMap.get("healthfull", ("@",7, 2)), - #charMap.get("healthempty", ("-",7, 1)) - #), - #"health") - #self.addWidget(Inventory("Inventory"), "inventory") - #self.addWidget(Inventory("Ground"), "ground") - #self.addWidget(Inventory("Equipment"), "equipment") + # it is important that these lists have the same order! + self.switch.setItems(["inventory", "equipment", "ground"]) + self.menus = { + "inventory": self.inventory, + "equipment": self.equipment, + "ground": self.ground + } + self.layout.get("switch").select(0) - ##switcher = Switcher([self.widgets["ground"], self.widgets["inventory"], self.widgets["equipment"]], 1) - #self.addWidget(Inventory(""), "switch") - #self.addWidget(Messages(charMap.get("msgcolours", {})), "msg") - #self.addWidget(TextInput(), "textinput") - - #self.forced = False - - #def addWidget(self, w, name, winname=None): - #if not winname: - #winname = name - #widget = Widget(w, name) - #self.widgets[name] = widget - #widget.setWin(winname, self.screen) def getWidget(self, name): return self.layout.get(name) @@ -102,7 +90,7 @@ class Display: for cell in cells: (x, y), spriteNames = cell if not len(spriteNames): - char, fg, bg = self.getChar(0) + char, fg, bg = self.getChar(' ') else: char, fg, bg = self.getChar(spriteNames[0]) for spriteName in spriteNames[1:]: @@ -116,14 +104,35 @@ class Display: self.getWidget("field").set_center(*pos) def setHealth(self, health, maxHealth): + if health is None: + health = 0 + if maxHealth is None: + maxHealth = 0 self.getWidget("health").set_total(maxHealth) self.getWidget("health").set_filled(health) def showInfo(self, infostring): - pass - #self.getWidget("info").showString(infostring) + self.getWidget("info").set_text(infostring) + def selectMenu(self, *args, **kwargs): + self.switch.select(*args, **kwargs) + self.layout.get("switch").select(self.getSelectedMenu()) + + def getSelectedMenu(self): + return self.switch.getSelectedItem() + + def getSelectedItem(self, menu=None): + return self._getMenu(menu).getSelected() + + def selectItem(self, menu=None, *args, **kwargs): + self._getMenu(menu).select(*args, **kwargs) + + def _getMenu(self, name=None): + if name is None: + name = self.getSelectedMenu() + name = name.casefold() + return self.menus[name] #def setInventory(self, items): #self.getWidget("inventory").setInventory(items) @@ -153,17 +162,6 @@ class Display: def update(self): self.layout.update() self.screen.update() - #changed = False - #for widget in self.widgets.values(): - #if self.forced or widget.isChanged(): - #widget.update() - #changed = True - #if changed: - #self.screen.update() - #self.forced = False - - #def forceUpdate(self): - #self.forced = True def getChar(self, sprite): """This returns the character belonging to some spritename. This does not read a character""" diff --git a/asciifarm/client/newdisplay/layout.xml b/asciifarm/client/newdisplay/layout.xml index c7e274c..78337dc 100644 --- a/asciifarm/client/newdisplay/layout.xml +++ b/asciifarm/client/newdisplay/layout.xml @@ -1,22 +1,32 @@ <?xml version="1.0"?> <hbox> <vbox width="20" align="right"> - <bar id="health" height="2" full-char="+" empty-char="-" full-style="fg:1; bg:2" empty-style="fg:2; bg: 1;"></bar> - <switchbox id="switch"> - <listing id="inventory"> - milk - eggs - bread - </listing> - <listing id="equipment"> - cotton underwear - cotton shirt - jeans - friendship bracelet - </listing> - <listing id="ground"> - concrete - </listing> + <bar id="health" height="2" full-char="#" empty-char="_" full-style="fg:2; bg:2" empty-style="fg:1; bg: 1;"></bar> + <listing id="switchtitles" height="0"></listing> + <switchbox id="switch" height="50%"> + <vbox key="inventory"> + <textbox height="1">Inventory:</textbox> + <listing id="inventory"> + milk + eggs + bread + </listing> + </vbox> + <vbox key="equipment"> + <textbox height="1">Equipment:</textbox> + <listing id="equipment"> + cotton underwear + cotton shirt + jeans + friendship bracelet + </listing> + </vbox> + <vbox key="ground"> + <textbox height="1">Ground:</textbox> + <listing id="ground"> + concrete + </listing> + </vbox> </switchbox> <textbox id="info"></textbox> </vbox> diff --git a/asciifarm/client/switchselector.py b/asciifarm/client/switchselector.py index dfc18a7..20571b9 100644 --- a/asciifarm/client/switchselector.py +++ b/asciifarm/client/switchselector.py @@ -6,24 +6,24 @@ class SwitchSelector(ListSelector): - def setItems(self, items): - super().setItems(items) - self.updateVisibility() + #def setItems(self, items): + #super().setItems(items) + #self.updateVisibility() - def updateVisibility(self): - pass - #for i, (_menu, widget, _title) in enumerate(self.items): - #if i == self.selector: - #widget.hidden = False - #widget.change() - #else: - #widget.hidden = True + #def updateVisibility(self): + #pass + ##for i, (_menu, widget, _title) in enumerate(self.items): + ##if i == self.selector: + ##widget.hidden = False + ##widget.change() + ##else: + ##widget.hidden = True def doSelect(self, value): #self.getSelectedItem().widget.hidden = True super().doSelect(value) - self.updateVisibility() + #self.updateVisibility() #self.getSelectedItem().widimp.change() #newWid.hidden = False #newWid.change() diff --git a/asciifarm/keybindings/default.json b/asciifarm/keybindings/default.json index a816527..f8a5b25 100644 --- a/asciifarm/keybindings/default.json +++ b/asciifarm/keybindings/default.json @@ -4,10 +4,10 @@ "s": ["move", "south"], "d": ["move", "east"], "a": ["move", "west"], -"KEY_UP": ["move", "north"], -"KEY_DOWN": ["move", "south"], -"KEY_RIGHT": ["move", "east"], -"KEY_LEFT": ["move", "west"], +"up": ["move", "north"], +"down": ["move", "south"], +"right": ["move", "east"], +"left": ["move", "west"], "k": ["move", "north"], "j": ["move", "south"], "l": ["move", "east"], @@ -33,9 +33,9 @@ "D": ["input", ["attack", "east"]], "A": ["input", ["attack", "west"]], "t": ["runinput"], -"NEWLINE": ["runinput"], -"KEY_PPAGE": ["scrollchat", 1], -"KEY_NPAGE": ["scrollchat", -1], +"enter": ["runinput"], +"pageup": ["scrollchat", 1], +"pagedown": ["scrollchat", -1], "/": ["runinput", "/"] }, "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" |
