made scrolling of chat log possible

This commit is contained in:
troido 2018-01-03 18:30:14 +01:00
parent f17b4e2f86
commit 4750ef3270
4 changed files with 39 additions and 1 deletions

View File

@ -121,6 +121,9 @@ class Display:
def addMessage(self, message): def addMessage(self, message):
self.getWidget("msg").addMessage(message) self.getWidget("msg").addMessage(message)
def scrollBack(self, amount, relative=True):
self.getWidget("msg").scroll(amount, relative)
def getChar(self, sprite): def getChar(self, sprite):
"""This returns the character belonging to some spritename. This does not read a character""" """This returns the character belonging to some spritename. This does not read a character"""
return self.characters.get(sprite, self.defaultChar) return self.characters.get(sprite, self.defaultChar)

View File

@ -8,24 +8,50 @@ class MessagePad():
self.changed = False self.changed = False
self.messages = [] self.messages = []
self.widget = None self.widget = None
self.scrolledBack = 0
def setWidget(self, widget): def setWidget(self, widget):
self.widget = widget self.widget = widget
def addMessage(self, message): def addMessage(self, message):
self.messages.append(message) self.messages.append(message)
if self.scrolledBack:
self.scrolledBack += 1
self.widget.change() 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): def update(self):
win = self.widget.getWin() win = self.widget.getWin()
width, height = win.getSize() width, height = win.getSize()
if height < 1: if height < 1:
return return
lines = [] lines = []
for message in self.messages: messages = self.messages
for message in messages:
lines += textwrap.wrap(message, width) 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: if len(lines) > height:
moreUp = True
lines = lines[len(lines)-height:] lines = lines[len(lines)-height:]
elif len(lines) < height:
lines = (height-len(lines)) * [""] + lines
win.erase() win.erase()
win.addLine((0,0),'\n'.join(lines)) win.addLine((0,0),'\n'.join(lines))
if moreUp:
win.addLine((width-1, 0), '-')
if moreDown:
win.addLine((width-1, height-1), '+')
win.noutrefresh() win.noutrefresh()

View File

@ -14,3 +14,6 @@
(defmacro selectorvalue [name] (defmacro selectorvalue [name]
`(.getValue (selector ~name))) `(.getValue (selector ~name)))
(defmacro log [text]
`(self.client.log ~text))

View File

@ -7,6 +7,10 @@
"KEY_DOWN" (inp ["move" "south"]) "KEY_DOWN" (inp ["move" "south"])
"KEY_RIGHT" (inp ["move" "east"]) "KEY_RIGHT" (inp ["move" "east"])
"KEY_LEFT" (inp ["move" "west"]) "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")]) "e" (inp ["take" (selectorvalue "ground")])
"q" (inp ["drop" (selectorvalue "inventory")]) "q" (inp ["drop" (selectorvalue "inventory")])
"E" (inp ["use" (selectorvalue "inventory")]) "E" (inp ["use" (selectorvalue "inventory")])
@ -23,6 +27,8 @@
(inp ["attack" "west"])]) (inp ["attack" "west"])])
"t" (self.parseMessage (self.display.getString)) "t" (self.parseMessage (self.display.getString))
"KEY_ENTER" (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" "\ "help" "\
Controls: Controls:
wasd or arrows: wasd or arrows: