menus now work too

This commit is contained in:
troido 2019-09-18 12:01:36 +02:00
parent 30cdaa55c9
commit 60997eccad
6 changed files with 99 additions and 104 deletions

View File

@ -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

View File

@ -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)

View File

@ -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"""

View File

@ -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>

View File

@ -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()

View File

@ -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"