summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asciifarm/client/commandhandler.py26
-rw-r--r--asciifarm/client/gameclient.py19
-rw-r--r--asciifarm/client/newdisplay/display.py78
-rw-r--r--asciifarm/client/newdisplay/layout.xml42
-rw-r--r--asciifarm/client/switchselector.py24
-rw-r--r--asciifarm/keybindings/default.json14
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"