root/traintris/graphics.py @ 198

Revision 198, 7.7 KB (checked in by andefodahl, 23 months ago)

works now x(

Line 
1import pygame
2import os.path
3
4class Graphics:
5    def __init__(self, screen):
6        self.screen = screen
7        self.imageDict = {}
8       
9        self.white = (255, 255, 255)
10        self.black = (0, 0, 0)
11        self.yellow = (255, 255, 0)
12        self.textColor = (55, 74, 46)
13        self.mbcolor = (146,209,79)
14        self.red = (255, 0, 0)
15       
16        self.screenheight = self.screen.get_height()
17        self.screenwidth = self.screen.get_width()
18       
19        #Messageboard drawing presets
20        self.font = pygame.font.SysFont(None, 30)
21        self.font2 = pygame.font.SysFont(None, 20)
22        self.font3 = pygame.font.SysFont(None, 10)
23       
24    #------------------------------------------------------------------
25    # load an image with transparency (key #ff00ff)
26    # convert to display surface format
27    def makeImage(self, filename):
28        image = pygame.image.load(filename).convert()
29        image.set_colorkey((255,0,255))
30        image.convert()
31        return image
32
33    # load a whole set of ground tiles from a manifest file
34    def makeGroundTiles(self, filename):
35        f = open(os.path.join('assets/',filename + '.tiles'))
36        tiles = []
37        for line in f.readlines():
38            line = line.rstrip()
39            if line[0] == '#':
40                continue
41            tiles.append(self.makeImage(os.path.join('gfx','tiles',line)))
42        f.close()
43        return tiles
44
45    #------------------------------------------------------------------
46    # load a whole object tile set
47    def makeObjectTileSet(self, manifest):
48        tiles = []
49        # read the tile definition file
50        f = open(os.path.join('assets',manifest + '.obj'))
51        for line in f.readlines():
52            line = line.rstrip()
53            if line[0] == '#':
54                continue
55            tiles.append(self.makeImage(os.path.join('gfx','objects',line)))
56        f.close()
57        return tiles
58
59    #------------------------------------------------------------------
60    # render gameboard
61    def drawBoard(self, level, tileset, screen):
62        # offset of *top-left corner* of top left tile
63        # 400 - 19 (half tile width)
64        # 120 - 9 (half height of top face of isometric cube)
65        rowstartx = 381
66        rowstarty = 111
67        for i in level:
68            xoff = rowstartx
69            yoff = rowstarty
70            rowstartx -= 18
71            rowstarty += 9
72            for j in i:
73                screen.blit(tileset[j],(xoff,yoff))
74                xoff += 18
75                yoff += 9
76
77    #------------------------------------------------------------------
78    # render objects & mobs (non-flat tiles; can be any height, but only 1 wide)
79    # objects must be considered in terms of their *bottom-left corner* because of the varying heights
80    # the "hotspot" of a mob - the centre of its bottom face - moves in two steps:
81    #   - from source-tile centre to joining edge of source & dest
82    #   - from joining edge of source & dest to centre of dest
83    def drawObjectsAndMobs(self, level, tileset, mobs, surface, frameno, targets = None):
84        ix = 0
85        iy = 0
86
87        xstart = 381
88        ystart = 129
89        for i in level:
90            xoff = xstart - (iy * 18)
91            yoff = ystart + (iy * 9)
92            for j in i:
93                if not j == -1:
94                    surface.blit(tileset[j],(xoff,yoff-tileset[j].get_height()))
95                xoff += 18
96                yoff += 9
97                for mob in mobs:
98                    if mob.location[0] == ix and mob.location[1] == iy:
99                        mob.draw(surface, frameno, targets)
100                ix += 1
101            ix = 0
102            iy += 1
103           
104           
105    #------------------------------------------------------------------
106    # render background
107    def drawBackground(self, dark):
108        #draws summer or winter background accordingly
109        return
110
111    def drawInfoBox(self, name, description, diet, rang, predators, color):
112        boxsize = (self.screenwidth / 5)
113        ystart = self.screenheight - boxsize
114        self.drawImage("infobox", (0, ystart))
115        if rang == "" and predators == "":
116            self.drawText(name, (20, ystart + 20), (boxsize - 40), color, 10)
117            self.drawText(description, (20, ystart + 98), (boxsize - 40), color, 10)
118            self.drawText(diet, (20, ystart + 176), (boxsize - 40), color, 10)
119        else:
120            self.drawText(name, (20, ystart + 20), (boxsize - 40), color, 10)
121            self.drawText(description, (20, ystart + 67), (boxsize - 40), color, 10)
122            self.drawText(diet, (20, ystart + 114), (boxsize - 40), color, 10)
123            self.drawText(rang, (20, ystart + 161), (boxsize - 40), color, 10)
124            self.drawText(predators, (20, ystart + 208), (boxsize - 40), color, 10)
125           
126    def drawDialogBox(self, string1, string2, color):
127        self.drawImage("dialogbox", ((self.screenwidth / 2) - 150, (self.screenheight / 2) - 100))
128        self.drawText(string1, ((self.screenwidth / 2) - 130, (self.screenheight / 2) - 80), 260, color, 40)
129        self.drawText(string2, ((self.screenwidth / 2) -130, (self.screenheight / 2) + 20), 260, color, 40)
130   
131    def drawMenuBox(self):
132        boxsize = ((self.screenwidth) / 5)
133        xstart = self.screenwidth - boxsize
134        ystart = self.screenheight - boxsize
135        self.drawImage("menubox", (xstart, ystart))
136       
137    def drawBottomBar(self, daysRemaining, season, animal, diet, rang):
138        boxsize = (3/5)*self.screenwidth
139        xstart = self.screenwidth / 5
140        ystart = self.screenheight - 90
141        midbox = (1/2)*self.screenwidth
142        self.drawImage("bottomBar", (xstart, ystart))
143        self.drawImage(season, (xstart, ystart))
144        self.drawImage(animal, (midbox, ystart))
145        self.drawText(daysRemaining, (xstart + 100, ystart + 20), (mixbox - 110), self.black, 20)
146        self.drawText(diet, (midbox + 100, ystart + 20), 190, self.black, 20)
147        self.drawText(rang, (mixbox + 300, ystart + 20), 90, self.black, 20)
148   
149    #def drawCategoryBar(self):
150       
151   
152    # def drawOrganismBar(self,
153   
154    # def drawText(self, text, pos, width, color, size)
155   
156    #-------------------------------------------------------------------------------------------------
157    # draws a button (pos is top-left)
158    def drawButton(self, images, mode, pos):
159   
160        if mode == GraphicsConstants.NEUTRAL:
161            image = images[GraphicsConstants.NEUTRAL]
162        elif mode == GraphicsConstants.HOVER:
163            image = images[GraphicsConstants.HOVER]
164        else:
165            image = images[GraphicsConstants.DEPRESSED]
166               
167        self.drawImage(image, (x,y))
168
169    #-------------------------------------------------------------------------------------------------
170    # draws an image based on an identifying string and a pos
171    def drawImage(self, imageName, pos):
172        globalVars.screen.blit(self.loadImage(imageName), pos)
173
174    #-------------------------------------------------------------------------------------------------
175    # loads an image either from a file or from the image dictionary
176    def loadImage(self, imageName):
177        imageName = path.join('gfx\objects', imageName)
178        if not (imageName in self.imageDict):
179            try:
180                image = pygame.image.load(filename).convert()
181                image.set_colorkey((255,0,255))
182                image.convert()
183                self.imageDict[imageName] = image
184            except pygame.error:
185                self.imageDict[imageName] = pygame.image.load(
186                    "images\error.jpg")
187        return self.imageDict[imageName]
188
189   
Note: See TracBrowser for help on using the browser.