Skip to content

Movement Limitation

The Movement Limitation script can be found in ExampleScripts and shows how to place a proximity sensor inside of a large space that uses the head position as a target in order to not allow a user past a certain point. When the user enters the sensor they are automatically pushed back by one meter. 

import sightlab_utils.sightlab as sl
from sightlab_utils.settings import * 
sightlab = sl.SightLab(gui=False)
env = vizfx.addChild("sightlab_resources/example_resources/lab_collision.osgb")
env.collidePlane()
sightlab.setEnvironment(env) 
transportNode = vizconnect.getTransport('main_transport').getNode3d()
import vizproximity
manager = vizproximity.Manager()
# Add main viewpoint as proximity target
target = vizproximity.Target(viz.MainView)
manager.addTarget(target)
collideBox = env.getChild('collideBox')
hallwaySensor = vizproximity.addBoundingBoxSensor(collideBox)
manager.addSensor(hallwaySensor)
manager.setDebug(viz.ON)

def pushBack(e):
 print('pushed back')
 newPosition = [0, 0.0, -1]
 transportNode.setPosition(newPosition)
manager.onEnter(hallwaySensor,pushBack)

def sightLabExperiment():
 while True:
  yield viztask.waitKeyDown(' ')
  yield sightlab.startTrial()
  yield viztask.waitKeyDown(' ')
  yield sightlab.endTrial()
viztask.schedule(sightlab.runExperiment)
viztask.schedule(sightLabExperiment)
viz.callback(viz.getEventID('ResetPosition'), sightlab.resetViewPoint)