summaryrefslogtreecommitdiff
path: root/asciifarm/client/display/screen.py
blob: ec49d348f35b6c74254d7c9836637f4451a8d3ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

import curses
from .fieldpad import FieldPad

import signal

SIDEWIDTH = 20
HEALTHHEIGHT = 1

class Screen:
    
    
    def __init__(self, stdscr, maxSize=(float("inf"),float("inf")), charSize=1):
        curses.curs_set(0)
        self.stdscr = stdscr
        self.height, self.width = self.stdscr.getmaxyx()
        self.changed = False
        signal.signal(signal.SIGWINCH, self.updateSize)
    
    def updateSize(self, *args):
        curses.endwin()
        curses.initscr()
        self.height, self.width = self.stdscr.getmaxyx()
        self.stdscr.clear()
        self.change()
    
    def getWidth(self):
        return self.width
    
    def getHeight(self):
        return self.height
    
    def change(self):
        self.changed = True
    
    def update(self, fieldPad, infoPad, healthPad):
        if self.changed:
            fieldEnd = min(fieldPad.getWidth(), self.getWidth()-SIDEWIDTH-1)
            fieldPad.update(self, 0,0,fieldEnd, min(fieldPad.getHeight(), self.getHeight()))
            healthPad.update(self, fieldEnd+1,0, self.getWidth(), HEALTHHEIGHT)
            infoPad.update(self, fieldEnd+1,HEALTHHEIGHT, self.getWidth(), self.getHeight())
            curses.doupdate()
        self.changed = False