From 0366f46d3d7e946e254f933888aea4beb4e70658 Mon Sep 17 00:00:00 2001 From: Russell Cohen Date: Wed, 1 Dec 2010 19:46:14 -0500 Subject: Added support for RecursiveHooks, RecursiveBehaviors and GaussianMapper supporting Gaussian based pixel mapping. --- behaviors/BehaviorChain.py | 9 +++++++++ behaviors/ColorChangerBehavior.py | 6 ++++-- behaviors/DecayBehavior.py | 2 +- behaviors/RecursiveDecay.py | 12 ++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 behaviors/RecursiveDecay.py (limited to 'behaviors') 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 -- cgit v1.2.3