Thanks Jeff, that brought me closer to a solution, but I can't get it to work.
In each trial there's another sensor that needs to trigger the event, but whatever I do, I can't seem to get the functions/events recognize the newly chosen sensor.
First I thought, well, I would only need to check for the number of targets in the sensor, if a target enters the sensor. Here's some pseudo-code:
Code:
TRIGGER_ACTIVATED_EVENT = viz.getEventID('TRIGGER_ACTIVATED_EVENT')
def checkTrigger(manager,requiredSensor):
activeTargets = manager.getActiveTargets(sensor=requiredSensor)
if len(activeTargets) == len(targets):
time = viz.tick()
viz.sendEvent(TRIGGER_ACTIVATED_EVENT,requiredSensor.name,time)
def myTask():
targets = [target1,target2,target3]
sensors = [sensor1,sensor2,sensor3]
triggerSensor = someSensor
def EnterSensor(e):
checkTrigger(e.manager,triggerSensor)
for sensor in sensors:
manager.addSensor(sensor)
manager.onEnter(sensor, EnterSensor)
results = yield mySubTask()
def mySubTask():
waitTargets = viztask.waitEvent(TRIGGER_ACTIVATED_EVENT)
waitTime = viztask.waitTime(5)
for trial in xrange(100):
triggerSensor = random.choice(sensors)
d = yield viztask.waitAny( [ waitTargets, waitTime ] )
if d.condition is waitTargets:
print 'targets entered'
else:
print '5 seconds passed'
viztask.schedule(myTask)
But the EnterSensor/checkTrigger function is always checking for 'someSensor' and not updating to the new triggerSensor in each trial (IDs were the same for triggerSensor object in both functions, I checked)
Now I tried using
checkingTrigger = vizact.onupdate(0,checkTrigger,manager,triggerSens or)
and using checkingTrigger.setEnabled(viz.<OFF/ON>) when I need it, but it's the same problem in that it only recognizes the very first triggerSensor.
Could you please give a more complete, working example?