diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py index 7c5384d..d80703c 100644 --- a/asciifarm/client/display/display.py +++ b/asciifarm/client/display/display.py @@ -121,6 +121,9 @@ class Display: def addMessage(self, message): self.getWidget("msg").addMessage(message) + def scrollBack(self, amount, relative=True): + self.getWidget("msg").scroll(amount, relative) + def getChar(self, sprite): """This returns the character belonging to some spritename. This does not read a character""" return self.characters.get(sprite, self.defaultChar) diff --git a/asciifarm/client/display/messagepad.py b/asciifarm/client/display/messagepad.py index cae66a4..88ac3b4 100644 --- a/asciifarm/client/display/messagepad.py +++ b/asciifarm/client/display/messagepad.py @@ -8,24 +8,50 @@ class MessagePad(): self.changed = False self.messages = [] self.widget = None + self.scrolledBack = 0 def setWidget(self, widget): self.widget = widget def addMessage(self, message): self.messages.append(message) + if self.scrolledBack: + self.scrolledBack += 1 self.widget.change() + def scroll(self, amount, relative=True): + if relative: + self.scrolledBack += amount + else: + self.scrolledBack = amount + self.scrolledBack = max(self.scrolledBack, 0) + self.widget.update() + self.widget.doUpdate() + def update(self): win = self.widget.getWin() width, height = win.getSize() if height < 1: return lines = [] - for message in self.messages: + messages = self.messages + for message in messages: lines += textwrap.wrap(message, width) + self.scrolledBack = max(min(self.scrolledBack, len(lines)-height), 0) + moreDown = False + if self.scrolledBack > 0: + lines = lines[:-self.scrolledBack] + moreDown = True + moreUp = False if len(lines) > height: + moreUp = True lines = lines[len(lines)-height:] + elif len(lines) < height: + lines = (height-len(lines)) * [""] + lines win.erase() win.addLine((0,0),'\n'.join(lines)) + if moreUp: + win.addLine((width-1, 0), '-') + if moreDown: + win.addLine((width-1, height-1), '+') win.noutrefresh() diff --git a/asciifarm/client/keymacros.hy b/asciifarm/client/keymacros.hy index 595a98c..b39ef5e 100644 --- a/asciifarm/client/keymacros.hy +++ b/asciifarm/client/keymacros.hy @@ -14,3 +14,6 @@ (defmacro selectorvalue [name] `(.getValue (selector ~name))) + +(defmacro log [text] + `(self.client.log ~text)) diff --git a/asciifarm/keybindings/keybindings.hy b/asciifarm/keybindings/keybindings.hy index 9c73bee..6f958db 100644 --- a/asciifarm/keybindings/keybindings.hy +++ b/asciifarm/keybindings/keybindings.hy @@ -7,6 +7,10 @@ "KEY_DOWN" (inp ["move" "south"]) "KEY_RIGHT" (inp ["move" "east"]) "KEY_LEFT" (inp ["move" "west"]) +"k" (inp ["move" "north"]) +"j" (inp ["move" "south"]) +"l" (inp ["move" "east"]) +"h" (inp ["move" "west"]) "e" (inp ["take" (selectorvalue "ground")]) "q" (inp ["drop" (selectorvalue "inventory")]) "E" (inp ["use" (selectorvalue "inventory")]) @@ -23,6 +27,8 @@ (inp ["attack" "west"])]) "t" (self.parseMessage (self.display.getString)) "KEY_ENTER" (self.parseMessage (self.display.getString)) +"KEY_PPAGE" (self.display.scrollBack 1) +"KEY_NPAGE" (self.display.scrollBack -1) "help" "\ Controls: wasd or arrows: