aboutsummaryrefslogtreecommitdiff
path: root/behaviors
diff options
context:
space:
mode:
authorGravatar Russell Cohen <rcoh@mit.edu>2010-11-29 00:00:26 -0500
committerGravatar Russell Cohen <rcoh@mit.edu>2010-11-29 00:00:26 -0500
commitcf1f2224b3625b01a6aa7db221403849b308b3bc (patch)
tree9ad55077f45efc7a8434688332ee281a28a1cae7 /behaviors
parent9c9babfa7032b443138c4b457aabaf79fad385b3 (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.py10
-rw-r--r--behaviors/RunningBehavior.py21
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)
+