aboutsummaryrefslogtreecommitdiff
path: root/behaviors
diff options
context:
space:
mode:
authorGravatar Russell Cohen <rcoh@mit.edu>2010-12-01 19:46:14 -0500
committerGravatar Russell Cohen <rcoh@mit.edu>2010-12-01 19:46:14 -0500
commit0366f46d3d7e946e254f933888aea4beb4e70658 (patch)
tree81e69d857c41d9ff6ab0ee49315c26cd6112f3a9 /behaviors
parentcf1f2224b3625b01a6aa7db221403849b308b3bc (diff)
Added support for RecursiveHooks, RecursiveBehaviors and GaussianMapper
supporting Gaussian based pixel mapping.
Diffstat (limited to 'behaviors')
-rw-r--r--behaviors/BehaviorChain.py9
-rw-r--r--behaviors/ColorChangerBehavior.py6
-rw-r--r--behaviors/DecayBehavior.py2
-rw-r--r--behaviors/RecursiveDecay.py12
4 files changed, 26 insertions, 3 deletions
diff --git a/behaviors/BehaviorChain.py b/behaviors/BehaviorChain.py
index 8bf97bb..8b5cb1d 100644
--- a/behaviors/BehaviorChain.py
+++ b/behaviors/BehaviorChain.py
@@ -4,6 +4,9 @@ import pdb
class BehaviorChain(Behavior):
def behaviorInit(self):
self.feedback = {} #dictionary to allow feedback of recursives
+ self.hooks = self['RecursiveHooks']
+ if self.hooks == None:
+ self.hooks = {}
def processResponse(self, sensorInputs, recursiveInputs):
response = sensorInputs
for behaviorId in self['ChainedBehaviors']:
@@ -14,5 +17,11 @@ class BehaviorChain(Behavior):
recurrence = []
(response,recurrence) = behavior.immediateProcessInput(response,\
recurrence)
+
+ if behaviorId in self.hooks: #process recursive hook if there is one
+ hookBehavior = Util.getComponentById(self.hooks[behaviorId])
+ (response, recurrence) = \
+ hookBehavior.immediateProcessInput(response,
+ recurrence)
self.feedback[behaviorId] = recurrence
return response
diff --git a/behaviors/ColorChangerBehavior.py b/behaviors/ColorChangerBehavior.py
index 8ecc5f2..ca80eb4 100644
--- a/behaviors/ColorChangerBehavior.py
+++ b/behaviors/ColorChangerBehavior.py
@@ -6,7 +6,9 @@ class ColorChangerBehavior(Behavior):
ret = []
for sensory in sensorInputs:
newDict = dict(sensory) #don't run into shallow copy issues
- #TODO: support for PixelEvents
- newDict['Color'] = Util.randomColor()
+ if self['ColorList'] != None:
+ newDict['Color'] = Util.randomColor(self['ColorList'])
+ else:
+ newDict['Color'] = Util.chooseRandomColor()
ret.append(newDict)
return ret
diff --git a/behaviors/DecayBehavior.py b/behaviors/DecayBehavior.py
index 7956cbc..edc833d 100644
--- a/behaviors/DecayBehavior.py
+++ b/behaviors/DecayBehavior.py
@@ -11,4 +11,4 @@ class DecayBehavior(Behavior):
outDict['PixelEvent'] = \
DecayEvent.generate(self['DecayType'],self['Coefficient'], sensory['Color'])
ret.append(outDict)
- return ret
+ return (ret, recursiveInputs)
diff --git a/behaviors/RecursiveDecay.py b/behaviors/RecursiveDecay.py
new file mode 100644
index 0000000..b119b85
--- /dev/null
+++ b/behaviors/RecursiveDecay.py
@@ -0,0 +1,12 @@
+from operationscore.Behavior import *
+class RecursiveDecay(Behavior):
+ def processResponse(self, sensorInputs, recursiveInputs):
+ ret = []
+ for response in recursiveInputs:
+ if not 'ResponsesLeft' in response:
+ response['ResponsesLeft'] = self['InitialResponseCount']
+ else:
+ response['ResponsesLeft'] -= 1
+ if response['ResponsesLeft'] > 0:
+ ret.append(response)
+ return (sensorInputs, ret) #no direct ouput