menus now work too
This commit is contained in:
parent
30cdaa55c9
commit
60997eccad
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"""
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue