diff options
Diffstat (limited to 'operationscore')
-rw-r--r-- | operationscore/Behavior.py | 29 | ||||
-rw-r--r-- | operationscore/PixelEvent.py | 1 | ||||
-rw-r--r-- | operationscore/PixelMapper.py | 6 |
3 files changed, 15 insertions, 21 deletions
diff --git a/operationscore/Behavior.py b/operationscore/Behavior.py index d48c1d5..882a290 100644 --- a/operationscore/Behavior.py +++ b/operationscore/Behavior.py @@ -22,21 +22,19 @@ class Behavior(SmootCoreObject): self.behaviorInit() def behaviorInit(self): pass + def addMapper(fn): + def withmap(fn): + return self.addMapperToResponse(fn()) + return withmap def processResponse(self, sensorInputs, recursiveInputs): - pass + raise Exception('ProcessResponse not defined!') def addInput(self, sensorInput): self.sensorResponseQueue.append(sensorInput) #used for behavior chaining def immediateProcessInput(self, sensorInputs, recursiveInputs=[]): - try: - (output,recursions) = self.processResponse(sensorInputs, \ + (outputs,recursions) = self.processResponse(sensorInputs, \ recursiveInputs) - if type(output) != type([]): - output = [output] - return self.addMapperToResponse((output, recursions)) #TODO: use a decorator for this? - except: #deal with behaviors that don't return a tuple. - responses = self.processResponse(sensorInputs, recursiveInputs) - return (self.processResponse(sensorInputs, recursiveInputs),[]) + return self.addMapperToResponse((outputs,recursions)) def addInputs(self, sensorInputs): if type(sensorInputs) == type([]): [self.addInput(sensorInput) for sensorInput in sensorInputs] @@ -54,19 +52,8 @@ class Behavior(SmootCoreObject): return responses return responses def timeStep(self): #TODO: type checking. clean this up - responses = self.processResponse(self.sensorResponseQueue, \ + (outputs, recursions) = self.processResponse(self.sensorResponseQueue, \ self.recursiveResponseQueue) - if type(responses) == type(tuple()) and len(responses) == 2: - (outputs, recursions) = responses - else: - outputs = responses - recursions = [] self.sensorResponseQueue = [] self.recursiveResponseQueue = recursions - if type(outputs) != type([]): - outputs = [outputs] - try: - return self.addMapperToResponse(outputs) #TODO: WTF is up with this? - except: - pass return self.addMapperToResponse(outputs) diff --git a/operationscore/PixelEvent.py b/operationscore/PixelEvent.py index 6b0812f..80d3b9e 100644 --- a/operationscore/PixelEvent.py +++ b/operationscore/PixelEvent.py @@ -2,6 +2,7 @@ #which should return a color, or None if the response is complete. Consider #requiring a generate event. from operationscore.SmootCoreObject import * +from pixelevents.StepEvent import * import util.ColorOps as color class PixelEvent(SmootCoreObject): def init(self): diff --git a/operationscore/PixelMapper.py b/operationscore/PixelMapper.py index e3f2515..1f94fa5 100644 --- a/operationscore/PixelMapper.py +++ b/operationscore/PixelMapper.py @@ -3,8 +3,14 @@ import pdb class PixelMapper(SmootCoreObject): def init(self): self.mem = {} #Dictionary of all seen events + self.totalCalls = 0 + self.cachehits = 0 def mapEvent(self, eventLocation, screen): + self.totalCalls += 1 + if self.totalCalls % 100 == 0: + print self['Id'], self.cachehits / float(self.totalCalls) if eventLocation in self.mem: + self.cachehits += 1 return self.mem[eventLocation] else: self.mem[eventLocation] = self.mappingFunction(eventLocation, screen) |