aboutsummaryrefslogtreecommitdiff
path: root/operationscore
diff options
context:
space:
mode:
authorGravatar eugue <eug.sun@gmail.com>2011-01-24 14:41:38 -0500
committerGravatar eugue <eug.sun@gmail.com>2011-01-24 14:41:38 -0500
commit00e836cfa4e2652d724972585d661143142af002 (patch)
treef612ea43024f13dc8c16f192735676e9976630fc /operationscore
parentd39f871cf9fcce13c6db315052a4951f692719f9 (diff)
merge with biginstall
Diffstat (limited to 'operationscore')
-rw-r--r--operationscore/Behavior.py29
-rw-r--r--operationscore/PixelEvent.py1
-rw-r--r--operationscore/PixelMapper.py6
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)