diff options
Diffstat (limited to 'asciifarm/client')
| -rw-r--r-- | asciifarm/client/display/display.py | 38 | ||||
| -rw-r--r-- | asciifarm/client/display/screen.py | 4 | ||||
| -rw-r--r-- | asciifarm/client/display/widget.py | 11 |
3 files changed, 27 insertions, 26 deletions
diff --git a/asciifarm/client/display/display.py b/asciifarm/client/display/display.py index 998ac8d..abc3616 100644 --- a/asciifarm/client/display/display.py +++ b/asciifarm/client/display/display.py @@ -44,7 +44,7 @@ class Display: winname = widgetName widget = Widget(pad) self.widgets[widgetName] = widget - widget.setWin(self.screen.getWin(winname)) + widget.setWin(winname, self.screen) self.fieldPad = FieldPad((1, 1), charMap.get("charwidth", 1), self.colours) setwin(self.fieldPad, "field") @@ -68,8 +68,7 @@ class Display: self.lastinfostring = None - #self.changed = False - + self.forced = False self.update() def getWidget(self, name): @@ -88,24 +87,24 @@ class Display: if not len(sprites): sprites = [self.getChar(" ")] self.fieldPad.changeCell(x, y, sprites) - #self.change() + def setFieldCenter(self, pos): self.fieldPad.setCenter(pos) def setHealth(self, health, maxHealth): self.healthPad.setHealth(health, maxHealth) - #self.change() + def showInfo(self, infostring): if infostring != self.lastinfostring: self.infoPad.showString(infostring) - #self.change() + self.lastinfostring = infostring def setInventory(self, items): self.inventoryPad.setInventory(items) - #self.change() + def setEquipment(self, slots): self.equipment.setInventory( @@ -117,7 +116,6 @@ class Display: def setGround(self, items): self.groundPad.setInventory(items) - #self.change() def getSelector(self, name): widget = self.getWidget(name) @@ -128,7 +126,6 @@ class Display: def addMessage(self, message): self.messagePad.addMessage(message) - #self.change() def getChar(self, sprite): """This returns the character belonging to some spritename. This does not read a character""" @@ -138,18 +135,17 @@ class Display: """This does actually read input""" return self.textInput.getString() - #def change(self): - #self.changed = True - - def update(self, force=False): - #if not self.changed and not force: - #return + def update(self): + changed = False for widget in self.widgets.values(): - if force: - widget.change() - widget.update() + if self.forced or widget.isChanged(): + widget.update() + changed = True - self.screen.update() - - #self.changed = False + if changed: + self.screen.update() + self.forced = False + + def forceUpdate(self): + self.forced = True diff --git a/asciifarm/client/display/screen.py b/asciifarm/client/display/screen.py index 5d17755..e3c9831 100644 --- a/asciifarm/client/display/screen.py +++ b/asciifarm/client/display/screen.py @@ -54,7 +54,7 @@ class Screen: return curses.newwin(height, width, y, x) def getWin(self, name): - return self.windows[name] + return self.windows.get(name, None) def updateSize(self, *args): @@ -62,7 +62,7 @@ class Screen: curses.initscr() self.setWins() self.stdscr.clear() - self.display.update(True) + self.display.forceUpdate() def update(self): diff --git a/asciifarm/client/display/widget.py b/asciifarm/client/display/widget.py index 2c90547..3d89a9c 100644 --- a/asciifarm/client/display/widget.py +++ b/asciifarm/client/display/widget.py @@ -9,13 +9,15 @@ class Widget: self.impl.setWidget(self) self.win = None + self.screen = None self.changed = False - def setWin(self, win): + def setWin(self, win, screen): self.win = win + self.screen = screen def getWin(self): - return self.win + return self.win and self.screen and self.screen.getWin(self.win) def getImpl(self): return self.impl @@ -23,8 +25,11 @@ class Widget: def change(self): self.changed = True + def isChanged(self): + return self.changed + def update(self): - if not self.changed or not self.win: + if not self.getWin(): return self.impl.update() self.changed = False |
