Package fortuneengine :: Module Scene
[hide private]
[frames] | no frames]

Source Code for Module fortuneengine.Scene

  1  import pygame 
  2  from pygame.sprite import RenderUpdates 
  3  
 
4 -class Scene(pygame.sprite.RenderUpdates):
5
6 - def __init__(self, sprites):
7 8 self._spritelist = [[sprites, sprites.getXPos(), sprites.getYPos()]] 9 #self._spritelist.append([sprites, sprites.getXPos(), sprites.getYPos()]) 10 RenderUpdates.__init__(self, sprites) 11 12 self.xPos = 0 13 self.yPos = 0 14 self.xSize = 0 15 self.ySize = 0 16 17 self.calcPosition() 18 self.calcSize() 19 self.setRelativePositions()
20
21 - def calcPosition(self):
22 23 lowestX = 9000 24 lowestY = 9000 25 26 for i in range(len(self._spritelist)): 27 if self._spritelist[i][0].getXPos() < lowestX: lowestX = self._spritelist[i][0].getXPos() 28 if self._spritelist[i][0].getYPos() < lowestY: lowestY = self._spritelist[i][0].getYPos() 29 30 self.xPos = lowestX 31 self.yPos = lowestY
32
33 - def calcSize(self):
34 35 highestX = 0 36 highestY = 0 37 38 for i in range(len(self._spritelist)): 39 if (self._spritelist[i][0].getXPos() + self._spritelist[i][0].getXSize()) > highestX: highestX = self._spritelist[i][0].getXPos() + self._spritelist[i][0].getXSize() 40 if (self._spritelist[i][0].getYPos() + self._spritelist[i][0].getYSize()) > highestY: highestY = self._spritelist[i][0].getYPos() + self._spritelist[i][0].getYSize() 41 42 self.xSize = highestX - self.xPos 43 self.ySize = highestY - self.yPos
44
45 - def addObject(self, newDrawableObject):
46 RenderUpdates.add_internal(self, newDrawableObject) 47 self._spritelist.insert(len(self._spritelist) - 1, [newDrawableObject, newDrawableObject.getXPos(), newDrawableObject.getYPos()])
48
49 - def addObjects(self, newDrawableObjects):
50 for sprite in newDrawableObjects: 51 RenderUpdates.add_internal(self, sprite) 52 self._spritelist.insert(len(self._spritelist) - 1, [sprite, sprite.getXPos(), sprite.getYPos()])
53
54 - def setRelativePositions(self):
55 56 for i in range(len(self._spritelist)): 57 self._spritelist[i][1] = self._spritelist[i][0].getXPos() - self.xPos 58 self._spritelist[i][2] = self._spritelist[i][0].getYPos() - self.yPos
59
60 - def removeObject(self, sprite):
61 62 for i in self._spritelist: 63 if i[0] == sprite: 64 self._spritelist.remove(i) 65 break 66 RenderUpdates.remove_internal(self, sprite)
67
68 - def getObject(self, index):
69 70 if index < len(self._spritelist): 71 return self._spritelist[index][0]
72
73 - def getListSize(self):
74 75 return len(self._spritelist)
76
77 - def getList(self):
78 79 return list(self._spritelist)
80
81 - def moveObjects(self):
82 83 for i in range(len(self._spritelist)): 84 self._spritelist[i][0].move() 85 86 self.calcPosition() 87 self.calcSize() 88 self.setRelativePositions()
89
90 - def moveScene(self, xNudge = 0, yNudge = 0):
91 92 93 for i in range(len(self._spritelist)): 94 95 self._spritelist[i][0].nudge(xNudge, yNudge) 96 97 98 self.calcPosition()
99
100 - def setPosition(self, newXPos = None, newYPos = None):
101 102 if newXPos != None: self.xPos = newXPos 103 if newYPos != None: self.yPos = newYPos 104 105 for i in range(len(self._spritelist)): 106 107 self._spritelist[i][0].setPosition(self.xPos + self._spritelist[i][1], self.yPos + self._spritelist[i][2])
108
109 - def getXPos(self):
110 return self.xPos
111
112 - def getYPos(self):
113 return self.yPos
114
115 - def getXSize(self):
116 return self.xSize
117
118 - def getYSize(self):
119 return self.ySize
120
121 - def scaleObjects(self, newXSize = None, newYSize = None):
122 123 124 for i in range(len(self._spritelist)): 125 self._spritelist[i][0].scale(newXSize, newYSize)
126
127 - def scaleScene(self, newXSize = None, newYSize = None):
128 129 self.calcPosition() 130 self.calcSize() 131 132 xScale = 1 133 yScale = 1 134 135 if newXSize != None: xScale = (newXSize * 1.0)/self.xSize 136 if newYSize != None: yScale = (newYSize * 1.0)/self.ySize 137 138 for i in range(len(self._spritelist)): 139 self._spritelist[i][0].scale(xScale * self._spritelist[iaw][0].getXSize(), yScale * self._spritelist[i][0].getYSize()) 140 self._spritelist[i][1] = xScale * self._spritelist[i][1] 141 self._spritelist[i][2] = yScale * self._spritelist[i][2] 142 143 self.calcPosition() 144 self.calcSize() 145 self.setPosition()
146
147 - def update(self, t):
148 149 for s in self._spritelist: s[0].update(t);
150
151 - def draw(self, surface):
152 spritedict = self.spritedict 153 surface_blit = surface.blit 154 dirty = self.lostsprites 155 self.lostsprites = [] 156 dirty_append = dirty.append 157 for s in self._spritelist: 158 r = spritedict[s[0]] 159 newrect = surface_blit(s[0].image, s[0].rect) 160 if r is 0: 161 dirty_append(newrect) 162 else: 163 if newrect.colliderect(r): 164 dirty_append(newrect.union(r)) 165 else: 166 dirty_append(newrect) 167 dirty_append(r) 168 spritedict[s[0]] = newrect 169 return dirty
170
171 - def drawEntireScene(self, surface):
172 spritedict = self.spritedict 173 surface_blit = surface.blit 174 dirty = self.lostsprites 175 self.lostsprites = [] 176 dirty_append = dirty.append 177 for s in self._spritelist: 178 dirty_append(spritedict[s[0]]) 179 dirty_append(surface_blit(s[0].image, s[0].rect)) 180 return dirty
181
182 - def nextFrame(self):
183 184 for i in range(len(self._spritelist)): 185 186 self._spritelist[i][0].nextFrame()
187