summaryrefslogtreecommitdiff
path: root/asciifarm
diff options
context:
space:
mode:
Diffstat (limited to 'asciifarm')
-rw-r--r--asciifarm/client/display/display.py2
-rw-r--r--asciifarm/client/display/textinput.py1
-rw-r--r--asciifarm/client/gameclient.py24
-rw-r--r--asciifarm/client/inputhandling.hy55
-rw-r--r--asciifarm/client/keymacros.hy7
-rw-r--r--asciifarm/keybindings/keybindings.hy12
-rw-r--r--asciifarm/keybindings/vimbindings.hy2
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"])