diff options
| author | troido <troido@hotmail.com> | 2018-01-02 21:26:46 +0100 |
|---|---|---|
| committer | troido <troido@hotmail.com> | 2018-01-02 21:26:46 +0100 |
| commit | 44c26befaab94781e35d159db82d875bff2ed31e (patch) | |
| tree | 2667a10afd1b62c1217f9bce6b266a5d114cac46 /asciifarm | |
| parent | 8cd98452054fbfe46bc3c78b5b844742e7ed07a4 (diff) | |
keybindings are now executed a bit smarter as hy code
Diffstat (limited to 'asciifarm')
| -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 | ||||
| -rw-r--r-- | asciifarm/keybindings/keybindings.hy | 12 | ||||
| -rw-r--r-- | asciifarm/keybindings/vimbindings.hy | 2 |
7 files changed, 75 insertions, 28 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))) diff --git a/asciifarm/keybindings/keybindings.hy b/asciifarm/keybindings/keybindings.hy index f5b33cc..a54b79a 100644 --- a/asciifarm/keybindings/keybindings.hy +++ b/asciifarm/keybindings/keybindings.hy @@ -1,4 +1,4 @@ - +{ "w" (inp ["move" "north"]) "s" (inp ["move" "south"]) "d" (inp ["move" "east"]) @@ -11,9 +11,9 @@ "q" (inp ["drop" (selectorvalue "inventory")]) "E" (inp ["use" (selectorvalue "inventory")]) "r" (inp ["interact" (selectorvalue "ground")]) -"v" (fn [client] (.select (selector "inventory") 1 True True)) -"c" (fn [client] (.select (selector "ground") 1 True True)) -"x" (fn [client] (.select (selector "equipment") 1 True True)) +"v" (.select (selector "inventory") 1 True True) +"c" (.select (selector "ground") 1 True True) +"x" (.select (selector "equipment") 1 True True) "z" (inp ["unequip" (selectorvalue "equipment")]) "f" (doall [ (inp ["attack"]) @@ -21,7 +21,7 @@ (inp ["attack" "south"]) (inp ["attack" "east"]) (inp ["attack" "west"])]) -"t" (fn [client] (client.readString)) +"t" (self.parseMessage (self.display.getString)) ; This should not work, but somehow it does "help" "\ Controls: wasd or arrows: @@ -34,4 +34,4 @@ Controls: t: Chat z: Unequip xcv: scroll" - +} diff --git a/asciifarm/keybindings/vimbindings.hy b/asciifarm/keybindings/vimbindings.hy index 00c1ae1..b2525f5 100644 --- a/asciifarm/keybindings/vimbindings.hy +++ b/asciifarm/keybindings/vimbindings.hy @@ -1,5 +1,7 @@ +;; Outdated! Don't use + ;; mainly intended as example for using different keybindings "k" (input ["move" "north"]) "j" (input ["move" "south"]) |
