diff options
Diffstat (limited to 'asciifarm/client')
| -rw-r--r-- | asciifarm/client/display/display.py | 2 | ||||
| -rw-r--r-- | asciifarm/client/display/textinput.py | 1 | ||||
| -rw-r--r-- | asciifarm/client/gameclient.py | 24 | ||||
| -rw-r--r-- | asciifarm/client/inputhandling.hy | 55 | ||||
| -rw-r--r-- | asciifarm/client/keymacros.hy | 7 |
5 files changed, 67 insertions, 22 deletions
diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py index abc3616..8515d65 100644 --- a/asciifarm/client/display/display.py +++ b/asciifarm/client/display/display.py @@ -133,7 +133,7 @@ class Display: def getString(self): """This does actually read input""" - return self.textInput.getString() + return str(self.textInput.getString(), "utf-8") def update(self): changed = False diff --git a/asciifarm/client/display/textinput.py b/asciifarm/client/display/textinput.py index 6af5a78..f2f08a5 100644 --- a/asciifarm/client/display/textinput.py +++ b/asciifarm/client/display/textinput.py @@ -24,6 +24,7 @@ class TextInput: self.reading = False win.erase() win.noutrefresh() + self.widget.change() return string def update(self): diff --git a/asciifarm/client/gameclient.py b/asciifarm/client/gameclient.py index b3b046b..6a80572 100644 --- a/asciifarm/client/gameclient.py +++ b/asciifarm/client/gameclient.py @@ -13,11 +13,7 @@ import string from .display.display import Display import hy - -hywrapper = """\ -(do - (require [asciifarm.client.keymacros [*]]) - {{ {} }})""" +from .inputhandling import InputHandler class Client: @@ -29,8 +25,10 @@ class Client: self.connection = connection self.logFile = logFile - self.commands = hy.eval(hy.read_str(hywrapper.format(keybindings))) - self.controlsString = self.commands.get("help", "") + self.inputHandler = InputHandler(self, self.display, self.connection) + self.inputHandler.readCommands(keybindings) + + self.controlsString = self.inputHandler.getDocs() self.display.showInfo(self.controlsString) @@ -38,15 +36,6 @@ class Client: def send(self, data): self.connection.send(json.dumps(data)) - def getDisplay(self): - return self.display - - def readString(self): - text = self.display.getString() - string = str(text, "utf-8") - if string: - self.connection.send(json.dumps(["input", ["say", string]])) - def start(self): threading.Thread(target=self.listen, daemon=True).start() self.connection.send(json.dumps(["name", self.name])) @@ -126,8 +115,7 @@ class Client: keyname = str(curses.keyname(key), "utf-8") except ValueError: continue - if keyname in self.commands: - self.commands[keyname](self) + self.inputHandler.onKey(keyname) diff --git a/asciifarm/client/inputhandling.hy b/asciifarm/client/inputhandling.hy new file mode 100644 index 0000000..8d19e4a --- /dev/null +++ b/asciifarm/client/inputhandling.hy @@ -0,0 +1,55 @@ + +(require [asciifarm.client.keymacros [*]]) + +(defmacro eval-in-context [code] + `( + (eval `(do + (require [asciifarm.client.keymacros [*]]) + (fn [client display connection] + ~~code))) + self.client + self.display + self.connection)) + +(defmacro sendinput [message] `( + self.client.send ["input" ~message])) + +(defclass InputHandler [] + + (defn --init-- [self client display connection] + (setv self.client client) + (setv self.display display) + (setv self.connection connection) + (setv self.commands None)) + + (defn readCommands [self commandsstring] + (setv self.commands + (dict-comp + (eval key) + ( + (eval `(do + (require [asciifarm.client.keymacros [*]]) + (fn [handler] + (fn [] ~value)))) + self) + [[key value] (.items (read-str commandsstring))]))) + + (defn runCommand [self commandstring] + (eval (read-str (+ "(" commandstring ")")))) + + (defn parseMessage [self message] + (if message + (if (= (first message) "/") + (do + (setv msg (.join "" (drop 1 message))) + (if (= (first msg) "/") + (inp ["say" msg]) + (self.runCommand msg))) + (inp ["say" message])))) + + (defn getDocs [self] + (if (in "help" self.commands) ((get self.commands "help")) "")) + + (defn onKey [self key] + (if (in key self.commands) ((get self.commands key)))) +) diff --git a/asciifarm/client/keymacros.hy b/asciifarm/client/keymacros.hy index b7ff113..595a98c 100644 --- a/asciifarm/client/keymacros.hy +++ b/asciifarm/client/keymacros.hy @@ -1,15 +1,16 @@ + (defmacro send [data] - `(fn [client] (client.send ~data))) + `(self.client.send ~data)) (defmacro inp [action] `(send ["input" ~action])) (defmacro doall [actions] - `(fn [client] (for [action ~actions] (action client)))) + `(for [action ~actions] (action))) (defmacro selector [name] - `(.getSelector (.getDisplay client) ~name)) + `(self.display.getSelector ~name)) (defmacro selectorvalue [name] `(.getValue (selector ~name))) |
