Adding Instructions

Adding Instructions

Located in ExampleScripts - instructions_example.py, ImageInstructions.py and  ImageInstructions_slides.py

Here is how you can add instructions that will show up in either a headset (wherever the user looks) and on the mirrored desktop view. This can be triggered using any event (such as a yield viztask.WaitTime ). This code is also under the "Examples" folder.  The default for skipping past the instruction is either with the left mouse click or controller trigger for single user and SPACEBAR on the server with multi-user. For the image slides example this is SPACEBAR

For SightLab_VR (3D Models Single User)  For 360 Videos and Multi- User see below

#add the lines: 

import viz, vizfx, vizconnect, viztask

from utils import sightlab

from settings import *

from utils import instructions


#Code to disable the GUI from showing (set to 1 if you want the GUI)

sightlab.is_GUI = 1


#run sightlab experiment

def sightLabExperiment():

#set to true before starting experiment

sightlab.setInstructionsFlag(True)

yield viztask.waitKeyDown(' ')

viz.sendEvent(TRIAL_START_EVENT)

#Place your instructions where it says 'test' in example

instructions.instructions.message('test')

#Add whatever trigger you want to click past instructions

yield viztask.waitEvent('triggerPress')

#May need to turn headlight back off

if HEADLIGHT_OFF == True:

sightlab.headLight.disable()

instructions.instructions.message('')

sightlab.setInstructionsFlag(False)


yield viztask.waitKeyDown(' ')

viz.sendEvent(TRIAL_END_EVENT)

viztask.schedule(sightlab.experiment)

viztask.schedule(sightLabExperiment)


Non- GUI Version

#Note remove this code if copying this code into the root folder of your project

import os

original_cwd = os.getcwd()

os.chdir(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))


import viz, vizfx, vizconnect, viztask

import settings

def update_settings(setting_name, value):

setattr(settings, setting_name, value)

update_settings('INSTRUCTIONS_ON_QUAD', True)


from utils import sightlab

from settings import *

from utils import instructions


#Code to disable the GUI from showing (set to 1 if you want the GUI)

sightlab.is_GUI = 0


#Example showing how to set environment. Note that environment should be defined before objects of interest

env = vizfx.addChild("utils/resources/environment/dojo.osgb")

sightlab.objects.append(env)

env.visible(viz.OFF)


#set number of trials

sightlab.sceneConfigDict["trials"] = 3


#run sightlab experiment

def sightLabExperiment():

#Place here if only at the start. Text after .message('')

instructions.instructions.message('Look Around the Room \n\n Press Trigger when Ready')

for i in range(sightlab.sceneConfigDict["trials"]):

#Place here if start of every trial

# instructions.instructions.message('Look Around the Room \n\n Press Trigger when Ready')

yield viztask.waitKeyDown(' ')

viz.sendEvent(TRIAL_START_EVENT)

env.visible(viz.ON)


instructions.instructions.message(' ')


#May need to turn headlight back off

if HEADLIGHT_OFF == True:

sightlab.headLight.disable()


yield viztask.waitKeyDown(' ')

viz.sendEvent(TRIAL_END_EVENT)

#For showing instructions at the end of the last trial

if i >= sightlab.sceneConfigDict["trials"] - 1:

print('All trials completed')

instructions.instructions.message('All Done')

env.visible(viz.OFF)

sightlab.headLight.enable()


viztask.schedule(sightlab.experiment)

viztask.schedule(sightLabExperiment)

If wanting to add instructions mid-experiment (and not just at beginning) will need to manually turn on and off the environment model and the headlight:


yield viztask.waitTime(4)

sightlab.headLight.enable()

sightlab.objects[0].visible(viz.OFF)

instructions.instructions.message('Test')

yield viztask.waitEvent('triggerPress')

sightlab.objects[0].visible(viz.ON)

if HEADLIGHT_OFF == True:

sightlab.headLight.disable()

instructions.instructions.message('')

sightlab.setInstructionsFlag(False)


Note: When using multiple users all clients need to set the instructions flag to the same value (i.e. all to true or all to false)

Another option for adding instructions at specific times and after certain conditions is to use a STIM file


Note: if you want the instructions to show on top of the gray fade quad, change this option in the settings file, or use this code:

import settings

def update_settings(setting_name, value):

setattr(settings, setting_name, value)

update_settings('INSTRUCTIONS_ON_QUAD', True)

from settings import *

from utils import sightlab

You can also use Images for Instructions- See ExampleScripts- ImageInstructions.py and imageInstructions_grabbable.py. See example below

import viz

import vizfx

import settings

def update_settings(setting_name, value):

    setattr(settings, setting_name, value)

update_settings('STARTING_TEXT', '')

update_settings('INSTRUCTIONS_ON_QUAD', True)

update_settings('CONTINUE_EVENT_KEY', '9')

from utils import sightlab

from settings import *


#Code to disable the GUI from showing (set to 1 if you want the GUI)

sightlab.is_GUI = 0


#Example showing how to set environment. Note that environment should be defined before #objects of interest

env = vizfx.addChild("utils/resources/environment/dojo.osgb")

sightlab.objects.append(env)



#run sightlab experiment. Add code here to run alongside main sightlab experiment

import viztask

def sightLabExperiment():

instructionsImageQuad = viz.addTexQuad(pos=[0,1.8,1.1]) #pos=[0,0,1])

instructionsImageQuad.setScale([1,1.5,1])

instructionsImageQuad.drawOrder(125)


pic = viz.addTexture('utils/resources/sightlab_controls.jpg')

pic2 = viz.addTexture('utils/resources/sightlab_controls_oculus.jpg')

instructionsImageQuad.texture(pic)

instructionsImageQuad.visible(viz.ON)

yield viztask.waitKeyDown(' ')

instructionsImageQuad.texture(pic2)

instructionsImageQuad.setScale([1.5,1,1])

while True:

yield viztask.waitKeyDown(' ')

instructionsImageQuad.visible(viz.OFF)

viz.sendEvent(TRIAL_START_EVENT)

print('experiment start')


yield viztask.waitKeyDown(' ')

viz.sendEvent(TRIAL_END_EVENT)

if __name__ == '__main__':

viztask.schedule(sightlab.experiment)

viztask.schedule(sightLabExperiment)

For 360 Videos, Multi-User

#Recommended: Add this  code at the top of your script for 360 videos or SightLabVR_Server and  SightLabVR_Client to add instructions per experiment

import viz

import settings

def setInstructionsFlag(boolean):

    settings.INSTRUCTIONS_FLAG = boolean

setInstructionsFlag(True)

settings.INSTRUCTION_TEXT = 'Look at the Scene'

#before importing sightlab modules


Can use the Settings.py file and change  the flag to true and 'Test' to your instructions (note that setting this to True may cause main sightlab.py to display a black screen to click past)

INSTRUCTIONS_FLAG = False

INSTRUCTION_TEXT = 'Test'