diff options
Diffstat (limited to 'pixelcore/Screen.py')
-rw-r--r-- | pixelcore/Screen.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/pixelcore/Screen.py b/pixelcore/Screen.py index cfadee8..b595847 100644 --- a/pixelcore/Screen.py +++ b/pixelcore/Screen.py @@ -19,25 +19,28 @@ class Screen: self.xSortedPixels = [] self.xPixelLocs = [] sizeValid = False - + self.pixelsSorted = False def addStrip(self, lS): self.pixelStrips.append(lS) self.sizeValid = False #keep track of whether or not our screen size has + self.pixelsSorted = False #been invalidated by adding more pixels - self.computeXSortedPixels() #Returns (pixelIndex, pixel). Does a binary search. def pixelsInRange(self, minX, maxX): + if not self.pixelsSorted: + self.computeXSortedPixels() minIndex = Search.find_ge(self.xPixelLocs, minX) maxIndex = Search.find_le(self.xPixelLocs, maxX)+1 return self.xSortedPixels[minIndex:maxIndex] def computeXSortedPixels(self): + self.xSortedPixels = [] for pixel in self: self.xSortedPixels.append((pixel.location[0], pixel)) self.xSortedPixels.sort() self.xPixelLocs = [p[0] for p in self.xSortedPixels] - + self.pixelsSorted = True #For debug only def allOn(self): [lS.allOn(-1) for lS in self.pixelStrips] @@ -49,11 +52,15 @@ class Screen: #increment time -- This processes all queued responses. Responses generated #during this period are added to the queue that will be processed on the next #time step. - def timeStep(self): + #SUBVERTING DESIGN FOR EFFICIENCY 1/24/11, RCOH -- It would be cleaner to store the time on the responses + #themselves, however, it is faster to just pass it in. + def timeStep(self, currentTime=None): + if currentTime == None: + currentTime = timeops.time() tempQueue = list(self.responseQueue) self.responseQueue = [] for response in tempQueue: - self.processResponse(response) + self.processResponse(response, currentTime) #public def respond(self, responseInfo): @@ -77,9 +84,12 @@ class Screen: return (0, 0, maxX+100, maxY+100) #TODO: cleaner #private - def processResponse(self, responseInfo): #we need to make a new dict for + def processResponse(self, responseInfo, currentTime=None): #we need to make a new dict for #each to prevent interference #[strip.respond(dict(responseInfo)) for strip in self.pixelStrips] + if currentTime == None: + currentTime = timeops.time() + print 'cachetime fail' if type(responseInfo) != type(dict()): pass if 'Mapper' in responseInfo: @@ -89,7 +99,8 @@ class Screen: #if type(mapper) != type(PixelMapper): # raise Exception('No default mapper specified.') pixelWeightList = mapper.mapEvent(responseInfo['Location'], self) + main_log.debug('Screen processing response. ' + str(len(pixelWeightList)) + ' events\ +generated') PixelEvent.addPixelEventIfMissing(responseInfo) - currentTime = timeops.time() for (pixel, weight) in pixelWeightList: pixel.processInput(responseInfo['PixelEvent'], 0,weight, currentTime) #TODO: z-index |