diff options
author | Russell Cohen <rcoh@mit.edu> | 2010-11-29 00:00:26 -0500 |
---|---|---|
committer | Russell Cohen <rcoh@mit.edu> | 2010-11-29 00:00:26 -0500 |
commit | cf1f2224b3625b01a6aa7db221403849b308b3bc (patch) | |
tree | 9ad55077f45efc7a8434688332ee281a28a1cae7 /behaviors | |
parent | 9c9babfa7032b443138c4b457aabaf79fad385b3 (diff) |
Making recursive behaviors work. Some bugs existed before. Adding running
behavior which makes a signal bounce back and forth.
Diffstat (limited to 'behaviors')
-rw-r--r-- | behaviors/BehaviorChain.py | 10 | ||||
-rw-r--r-- | behaviors/RunningBehavior.py | 21 |
2 files changed, 30 insertions, 1 deletions
diff --git a/behaviors/BehaviorChain.py b/behaviors/BehaviorChain.py index 15f7d74..8bf97bb 100644 --- a/behaviors/BehaviorChain.py +++ b/behaviors/BehaviorChain.py @@ -2,9 +2,17 @@ from operationscore.Behavior import * import Util import pdb class BehaviorChain(Behavior): + def behaviorInit(self): + self.feedback = {} #dictionary to allow feedback of recursives def processResponse(self, sensorInputs, recursiveInputs): response = sensorInputs for behaviorId in self['ChainedBehaviors']: behavior = Util.getComponentById(behaviorId) - response = behavior.immediateProcessInput(response) + if behaviorId in self.feedback: + recurrence = self.feedback[behaviorId] + else: + recurrence = [] + (response,recurrence) = behavior.immediateProcessInput(response,\ + recurrence) + self.feedback[behaviorId] = recurrence return response diff --git a/behaviors/RunningBehavior.py b/behaviors/RunningBehavior.py new file mode 100644 index 0000000..255ce69 --- /dev/null +++ b/behaviors/RunningBehavior.py @@ -0,0 +1,21 @@ +from operationscore.Behavior import * +import pdb +import Util +class RunningBehavior(Behavior): + def processResponse(self, sensorInputs, recursiveInputs): + newResponses = sensorInputs + ret = [] + ret += newResponses + for recurInput in recursiveInputs: + outDict = dict(recurInput) + if not 'Dir' in outDict: + outDict['Dir'] = 1 #to the right + outDict['Location']= Util.addLocations(outDict['Location'], + (self['StepSize']*outDict['Dir'],0)) + if not Util.pointWithinBoundingBox(outDict['Location'], \ + Util.getScreen().getSize()): + outDict['Dir'] *= -1 + ret.append(outDict) + ret += newResponses + return (ret, ret) + |