def trials(block_no, vis_dist, isDisks=False): info.setText("Hurrah!! Please wait for the experimenter.") for m in range(4): vis_pos = [0, real_tg - vis_dist, vis_dist] sensor_Target = vizproximity.Sensor( vizproximity.RectangleArea([6, 0.1], center=[0, real_tg_dist[(-1)**(m + 1)]]), None) manager.addSensor(sensor_Target) if isDisks: disks.remove() global disks disks = diskCreator(vis_tg) disks.setPosition([0, 0, -vis_dist]) yield viztask.waitNetwork(serverName) sub_rt.write('\nBlock ' + str(block_no) + ' Trial ' + str(m + 1)) vis_tg.color(viz.ORANGE) vis_tg.visible(viz.ON) myNetwork.send('Ready') yield viztask.waitNetwork(serverName) sound.play() myNetwork.send('Block ' + str(block_no) + ' Trial ' + str(m + 1)) colorChange = viztask.schedule(changeColor(vis_tg)) yield vizproximity.waitEnter(sensor_Target) alert.play() print str(block_no) + ' ' + str(m + 1) + ' ' + str( view.getPosition()) + ' ' + str(vis_tg.getPosition()) vis_tg.visible(viz.OFF) sound.stop() colorChange.kill() myNetwork.send('Reach Target!') ori = (1 + (-1)**m) * 90 vistg_p = vis_tg.getPosition() vis_tg.setPosition(vistg_p[0], vistg_p[1], vis_pos[(-1)**m], mode=viz.ABS_PARENT) vis_tg.setEuler([ori, 0, 0], mode=viz.REL_LOCAL) manager.clearSensors() if m < 3: info.visible(viz.ON) yield viztask.waitTime(3) info.visible(viz.OFF) else: sub_rt.write('\nend of block' + str(block_no)) info.setText('End of Block ' + str(block_no)) info.visible(viz.ON) yield viztask.waitTime(3) info.visible(viz.OFF) if isDisks: disks.remove()
def __init__(self, plane, planepos, escena, next, sound): self.plane = viz.addChild(plane, scene=escena) self.plane.setScale(2.5, 2.5, 2.5) self.plane.setPosition(planepos[0], planepos[1]) self.sensorPlane = vizproximity.Sensor( vizproximity.RectangleArea( [2, 10], center=[self.plane.getPosition(0)[0], 0]), None) self.chimesound = sound self.next = next
def experiment(): for trialN in range(10): if trialN < 9: datafile = 'Trial0' + str(trialN + 1) + '.txt' respfile = 'RT_Trial0' + str(trialN + 1) + time.strftime( "_%d-%b-%y_%H-%M") + '.csv' else: datafile = 'Trial' + str(trialN + 1) + '.txt' respfile = 'RT_Trial' + str(trialN + 1) + time.strftime( "_%d-%b-%y_%H-%M") + '.csv' colors = [] with open(datafile, 'rb') as csvfile: csvreader = csv.reader(csvfile, delimiter=' ') for row in csvreader: colors.append(row) colors = numpy.asarray(colors, dtype=uInt8) # colors = colors[0] strobes = Strobes(x, 100) leds = LEDs(colors, 0.05, 0.9403) vizact.onkeydown('.', leds.recordResp) sensor_Target = vizproximity.Sensor( vizproximity.RectangleArea([4, 0.1], center=[0, real_tg_dist[(-1)**trialN]]), None) manager.addSensor(sensor_Target) # Show where the target is and ask them to face to the target yield viztask.waitKeyDown('a') standBy = viztask.schedule(leds.standby(trialN % 2)) # Turn of the LED to get the experiment ready to start yield viztask.waitKeyDown('s') standBy.kill() leds.all_off() leds.stop() monitor_record_Network.send('Start!') strobes.StartTask() f = viztask.schedule(leds.flashing()) monitor_record_Network.send('Start!') yield vizproximity.waitEnter( sensor_Target) # flash until they enter the target zone f.kill() # Once reach the target turn off both the LEDs and strobes strobes.StopTask() strobes.ClearTask() leds.all_off() leds.stop() leds.clear() # Save the data into a csv file leds.saveAsFile(respfile) manager.clearSensors() yield viztask.waitTime(10) viz.quit()
def create_path_sensor(points, radius): """ Create a vizproximity sensor object as a path area shape. Args: points: A list of points that defines the centerline of the path. radius: Distance from the path centerline to path edge. Returns: vizproximity pathArea sensor object. """ return vizproximity.Sensor(vizproximity.PathArea(points, radius), None)
def experiment(): for trial in range(10): sensor_Target = vizproximity.Sensor( vizproximity.RectangleArea([4, 0.1], center=[0, real_tg_dist[(-1)**trial]]), None) manager.addSensor(sensor_Target) yield viztask.waitNetwork(serverName) record = viztask.schedule(writing(trial)) yield viztask.waitTime(0.5) yield vizproximity.waitEnter(sensor_Target) winsound.Beep( 800, 1000 ) # Make a sound to notify the participant that he/she has reached the target. record.kill() manager.clearSensors()
def __init__(self, name, vertices, proximity_manager): """ Args: name: edge_length: position: proximity_manager: """ self.name = name self.proximity_manager = proximity_manager # create ground wall proximity sensor / 0.6 added due to wall thickness self.ground = vizproximity.Sensor(vizproximity.PolygonArea(vertices), None) # and add to vizard proximity manager proximity_manager.addSensor(self.ground)
def __init__(self, name, edge_length, position, proximity_manager): """ Args: name: edge_length: position: proximity_manager: """ self.name = name self.edge_length = edge_length self.proximity_manager = proximity_manager self.position = position # remove y position for proximity sensor which continues indefinitely along y axis self.pos_xz = self.position[0], self.position[2] # create ground wall proximity sensor / 0.6 added due to wall thickness self.ground = vizproximity.Sensor( vizproximity.RectangleArea([edge_length, edge_length], center=self.pos_xz), None)
def addSensor(self): """Add a sensor around the axis to a proximity manager""" self._sensor = vizproximity.Sensor(vizproximity.Sphere(0.4),self) model.proxManager.addSensor(self._sensor)
import vizproximity env = viz.addEnvironmentMap('sky.jpg') viz.clearcolor(viz.SKYBLUE) viz.mouse.setScale(100, 2) # 100x movement speed, 2x rotation speed viz.move([10, 10, 10]) # i think this sets the starting position to 10,10,10 karnak = viz.addChild('KarnakFBX.fbx') viz.setMultiSample(4) viz.go() vizshape.addAxes() info = vizinfo.InfoPanel("Let get started") sensorAvatar1 = vizproximity.Sensor(vizproximity.Box( [3170, 160, 3051], center=[3123.10181, 160.43307, -7414.27441]), source=karnak) sensorAvatar2 = vizproximity.Sensor(vizproximity.Box( [749, 741, 1439], center=[11489.54081, 447.63779, -2581.69801]), source=karnak) sensorAvatar3 = vizproximity.Sensor(vizproximity.Box( [1400, 422, 1400], center=[3854.15869, 375.59055, -1661.75696]), source=karnak) sensorAvatar4 = vizproximity.Sensor(vizproximity.Box( [8555, 811, 6949], center=[6046.80322, 334.64569, 189.79089]), source=karnak) # Michael's additions TempleOfKhonsCenter = [-6856.85400, 80.60259, -5399.07031] TempleOfKhonsBox = [2189.75, 101, 2746] sensorAvatarTempleOfKhons = vizproximity.Sensor(vizproximity.Box(
import vizproximity env = viz.addEnvironmentMap('sky.jpg') viz.clearcolor(viz.SKYBLUE) viz.mouse.setScale(100, 2) # 100x movement speed, 2x rotation speed viz.move([10, 10, 10]) # i think this sets the starting position to 10,10,10 karnak = viz.addChild('KarnakFBX.fbx') viz.setMultiSample(4) viz.go() vizshape.addAxes() info = vizinfo.InfoPanel("Let get started") sensorAvatar1 = vizproximity.Sensor(vizproximity.Box( [3170, 160, 3051], center=[3123.10181, 160.43307, -7414.27441]), source=karnak) sensorAvatar2 = vizproximity.Sensor(vizproximity.Box( [749, 741, 1439], center=[11489.54081, 447.63779, -2581.69801]), source=karnak) sensorAvatar3 = vizproximity.Sensor(vizproximity.Box( [1400, 422, 1400], center=[3854.15869, 375.59055, -1661.75696]), source=karnak) sensorAvatar4 = vizproximity.Sensor(vizproximity.Box( [8555, 811, 6949], center=[6046.80322, 334.64569, 189.79089]), source=karnak) target = vizproximity.Target(viz.MainView) manager = vizproximity.Manager() manager.addSensor(sensorAvatar1)
def reactTime(): clicktime = viz.tick() sub_rt.write(',' + str(clicktime)) vizact.onkeydown('.', reactTime) SPpos = ([0, 0, 0], [0, 1.5, 0], [0, 1.5, distance]) # Set up proximity sensors manager = vizproximity.Manager() target = vizproximity.Target(view) manager.addTarget(target) sensor_Target = vizproximity.Sensor(vizproximity.Box([0.6, 6, 0.1]), source=Target) manager.addSensor(sensor_Target) # Refresh dots def refreshing(clouds): index = 0 while True: clouds[index].remove() pos = np.random.uniform(low=-6, high=6, size=(5250 / freq, 3)) pos[:, 1] = pos[:, 1] / 4 pos[:, 2] = pos[:, 2] - 5 viz.startLayer(viz.POINTS) viz.pointSize(2) for n in range(5250 / freq): viz.vertex(pos[n, 0], pos[n, 1], pos[n, 2])
def trials(block_no, isPoles='None', trialNo=10, trialtype='Offset', continued=False): info.setText("Hurrah!! Please wait for the experimenter.") if isPoles in ['flipped', 'staying']: poles, polelist = poleCreator(ground, pole_wd, pole_dep, pole_ht, pole_no) writePolePos(isPoles, polelist) for m in range(trialNo): # Set up the response recording file global sub_rt if continued: sub_rt = open( 'VRrt_' + str(id) + '_Block_' + str(block_no) + '_Trial_' + str(m + 9) + '_' + time.strftime("%d-%b-%y_%H-%M") + '.csv', 'a') else: sub_rt = open( 'VRrt_' + str(id) + '_Block_' + str(block_no) + '_Trial_' + str(m + 1) + '_' + time.strftime("%d-%b-%y_%H-%M") + '.csv', 'a') data = 'frameNo,Color,TimeStamp,Response' sub_rt.write('\n' + data) # Set up the real target sensor area sensor_Target = vizproximity.Sensor( vizproximity.RectangleArea([6, 0.1], center=[0, real_tg_dist[(-1)**(m + 1)]]), None) manager.addSensor(sensor_Target) # Set up poles if they change between trials if isPoles == 'changing': poles, polelist = poleCreator(ground, pole_wd, pole_dep, pole_ht, pole_no) writePolePos(isPoles, polelist) elif isPoles == 'flipped': poles.setEuler([(90 * (1 - (-1)**m)), 0, 0], mode=viz.ABS_PARENT) poles.setPosition([0, 0, polePos[(-1)**(m)]], mode=viz.ABS_PARENT) # Stand by yield viztask.waitNetwork(serverName) # choose target depending on walking direction if isPoles == 'flipped': if flippedTarget == 'BO': if m % 2 == 0: Target2.alpha(0) Target1.color(tg2Color) else: Target1.alpha(0) Target2.color(tg2Color) else: if m % 2 == 0: Target2.alpha(0) Target1.color(tg1Color) else: Target1.alpha(0) Target2.color(tg1Color) viz.window.screenCapture('flipped_Image_' + str(m) + '.jpg') else: if m % 2 == 0: Target2.alpha(0) Target1.color(tg1Color) else: Target1.alpha(0) Target2.color(tg2Color) viz.window.screenCapture(isPoles + '_Image_' + str(m) + '.jpg') ground.visible(viz.ON) labNetwork.send('Ready') # Start walking yield viztask.waitNetwork(serverName) metronome.play() if isPoles == 'flipped': if flippedTarget == 'BO': if m % 2 == 0: colorChange = viztask.schedule(changeColor2(Target1)) else: colorChange = viztask.schedule(changeColor2()) else: if m % 2 == 0: colorChange = viztask.schedule(changeColor1()) else: colorChange = viztask.schedule(changeColor1(Target2)) else: if m % 2 == 0: colorChange = viztask.schedule(changeColor1()) else: colorChange = viztask.schedule(changeColor2()) labNetwork.send('Block' + str(block_no) + ' Trial ' + str(m)) yield viztask.waitTime(0.25) # reach the target yield vizproximity.waitEnter(sensor_Target) alert.play() metronome.stop() viz.clearcolor(viz.BLACK) ground.visible(viz.OFF) colorChange.kill() labNetwork.send('Reach Target!') manager.clearSensors() print Target1.getPosition(viz.ABS_GLOBAL) print Target2.getPosition(viz.ABS_GLOBAL) # Set up the information for participants at the end of trial if m < trialNo - 1: info.visible(viz.ON) yield viztask.waitTime(3) info.visible(viz.OFF) if isPoles == 'changing': poles.remove() else: # finish writing the response info.setText('End of Block ' + str(block_no)) info.visible(viz.ON) yield viztask.waitTime(3) info.visible(viz.OFF) if isPoles != 'None': poles.remove() # reset the targets if m % 2 == 0: Target2.alpha(1) else: Target1.alpha(1)
stimuli) + ',' + str(trialNo) + ',' + str(viz.tick()) + ',' + str( view.getPosition()).strip('[]') + ',' + str( view.getEuler()).strip('[]') + '\n' record.write(data) yield viztask.waitTime(1 / 75) # Set up a calibration at the beginning of each trial manager_cali = vizproximity.Manager() # First create a transparent ball eyepatch = viz.addTexQuad(parent=viz.HEAD, color=viz.CYAN, size=1) eyepatch.setPosition([0, 0, 5], viz.ABS_PARENT) eyepatch.alpha(0.5) eyepatch.visible(viz.OFF) # Set up sensor sensor = vizproximity.Sensor(vizproximity.Box(size=[0.4, 0.4, 2]), source=Cross) # Set up target target_cali = vizproximity.Target(eyepatch) # Add sensor and target manager_cali.addSensor(sensor) manager_cali.addTarget(target_cali) # Set up the information panel info = hmd.addMessagePanel('', pos=(0, 0, 3)) info.visible(viz.OFF) # Set up the staircase # Multiple staircases exp_conditions = [ { 'label': 'Very Close',
def __init__(self, canvas): sf = 0.5 model.pointer.setEuler(0, 0, 0) model.pointer.setPosition(0, 0, 0) self.gloveStart = model.pointer.getPosition() self.iterations = 0 self.canvas = canvas self.origPosVec = config.positionVector self.origOrienVec = config.orientationVector #creating directions panel # viz.mouse.setVisible(False) # directions = vizinfo.InfoPanel('', fontSize = 10, parent = canvas, align = viz.ALIGN_LEFT_TOP, title = 'Tutorial', icon = False) # if config.pointerMode ==0: # directions.addItem(viz.addText('Keyboard Controls:')) # directions.addLabelItem(viz.addText('W')) # # if config.pointerMode ==1: # directions.addItem(viz.addText('Spacemouse Controls:')) # directions.addItem(viz.addTexQuad(size = 300, parent = canvas, texture = viz.addTexture('.\\mouse key.png'))) #creating tutorial objects self.dog = viz.addChild('.\\dataset\\dog\\dog.obj') self.dogOutline = viz.addChild('.\\dataset\\dog\\dog.obj') self.dogStart = self.dog.getPosition() self.dog.setScale([sf, sf, sf]) self.dogOutline.setScale([sf, sf, sf]) self.startColor = model.pointer.getColor() #creating dog outline self.dogOutline.alpha(0.8) self.dogOutline.color(0, 5, 0) self.dogOutline.texture(None) #creating proximity manager self.manager = vizproximity.Manager() '''creating dog grab and snap sensors around sphere palced in the center of the dog''' self.dogCenter = vizshape.addSphere(0.1, pos=(self.dogStart)) self.dogSnapSensor = vizproximity.Sensor(vizproximity.Sphere( 0.35, center=[0, 1, 0]), source=self.dogCenter) self.outlineCenter = vizshape.addSphere(0.1, pos=(self.dogStart)) self.dogCenter.setPosition([0, -.35, 0]) self.outlineCenter.setPosition([0, -.35, 0]) self.centerStart = self.dogCenter.getPosition() self.dogGrab = viz.grab(self.dogCenter, self.dog) self.outlineGrab = viz.grab(self.outlineCenter, self.dogOutline) self.dogCenter.color(5, 0, 0) self.outlineCenter.color(0, 5, 0) self.dogCenter.visible(viz.OFF) self.outlineCenter.visible(viz.OFF) self.dogSnapSensor = vizproximity.Sensor(vizproximity.Sphere( 0.35, center=[0, 1, 0]), source=self.dogCenter) self.manager.addSensor(self.dogSnapSensor) self.dogGrabSensor = vizproximity.Sensor(vizproximity.Sphere( 0.85, center=[0, 1, 0]), source=self.dogCenter) self.manager.addSensor(self.dogGrabSensor) '''creating glove target and a dog target. the dog target is a sphere placed at the center of the dog outline''' self.gloveTarget = vizproximity.Target(model.pointer) self.manager.addTarget(self.gloveTarget) self.dogTargetMold = vizshape.addSphere(0.2, parent=self.dogOutline, pos=(self.dogStart)) self.dogTargetMold.setPosition([0, 1.2, 0]) self.dogTargetMold.visible(viz.OFF) self.dogTarget = vizproximity.Target(self.dogTargetMold) self.manager.addTarget(self.dogTarget) #manager proximity events self.manager.onEnter(self.dogGrabSensor, EnterProximity, self.gloveTarget, model.pointer) self.manager.onExit(self.dogGrabSensor, ExitProximity, model.pointer, self.startColor) self.manager.onEnter(self.dogSnapSensor, snapCheckEnter, self.dogTarget) self.manager.onExit(self.dogSnapSensor, snapCheckExit, self.dogTargetMold) #reset command self.keybindings = [] self.keybindings.append( vizact.onkeydown('l', resetGlove, self.manager, self.gloveStart, self.dogCenter, self.outlineCenter)) self.keybindings.append(vizact.onkeydown('p', self.debugger)) #task schedule self.interface = viztask.schedule(self.interfaceTasks()) self.gameMechanics = viztask.schedule(self.mechanics())
boxList = [] #~ stores boxes massMakeBoxes(boxList) width = float(vizinput.input('Input the length from soulder to shoulder: \n ')) hieght = float(vizinput.input('Input the length from shoulder to foot: \n ')) length = float(vizinput.input('Input the length from soulder to arm: \n ')) # coordinates for right hand front # Adjust for centering the boxs x = width / 2 - 0.05 y = hieght - 0.05 z = length - 0.05 boxList[0].setPosition(x, y, z) rightFrontSensor = vizproximity.Sensor(vizproximity.Box([bSize, bSize, bSize]), boxList[0]) manager.addSensor(rightFrontSensor) boxList[0].visible(viz.OFF) # coordinates for left hand front boxList[1].setPosition(-x, y, z) leftFrontSensor = vizproximity.Sensor(vizproximity.Box([bSize, bSize, bSize]), boxList[1]) manager.addSensor(leftFrontSensor) boxList[1].visible(viz.OFF) # coordinates for start sensor right hand boxList[6].setPosition(x, hieght - length, 0) rightHandStart = vizproximity.Sensor(vizproximity.Box([bSize, bSize, bSize]), boxList[6])
for the bomb so you do not run out of time and blow up the city. Press spacebar to begin the bomb defusal game!""".format( TRIAL_COUNT, TRIAL_DURATION) RESULTS = """You found {} of {} bombs.""" TRIAL_SUCCESS = 'Bomb found!' TRIAL_FAIL = 'Failed, Please evacuate !!' # Add main viewpoint as proximity target manager = vizproximity.Manager(viz.MainView) manager.addTarget(vizproximity.Target(viz.MainView)) # Create sensors attached to static matrix #Bomb in car sensor = vizproximity.Sensor(vizproximity.Sphere(15.0), source=viz.Matrix.translate(-85, 0.3, 30)) #Bomb in small building sensor2 = vizproximity.Sensor(vizproximity.Sphere(15.0), source=viz.Matrix.translate(-15, 0, -25)) #Bomb in school sensor3 = vizproximity.Sensor(vizproximity.Sphere(15.0), source=viz.Matrix.translate(70, 0, -20)) #Bomb under bench sensor4 = vizproximity.Sensor(vizproximity.Sphere(15.0), source=viz.Matrix.translate(63, 0.2, 4)) #Bomb under car at gas station sensor5 = vizproximity.Sensor(vizproximity.Sphere(15.0),
scene1.hint(viz.ALLOW_NPOT_TEXTURE_HINT) scene1.disable(0x3000) #Disable clip plane on model waterPlane = vizshape.addPlane(size=[400, 400], pos=[0, 0.2, 0]) obj_vis.append(scene1) obj_vis.append(waterPlane) sky = viz.addChild('sky_day.osgb') obj_vis.append(sky) #bellSensorLocation = viz.addGroup(pos=[0.74121, 0.61385, -74.72057]) #bellSensor = vizproximity.Sensor(vizproximity.Box(size=[6,10,6]),source=bellSensorLocation) #bellLocation = viz.addGroup(pos=[0.90712, 4.80442, -91.77573]) #bell_sound = bellLocation.playsound('bells.wav',flag=viz.PAUSE) stoneSensorLocation = viz.addGroup(pos=[0, 3.5, -90]) stoneSensor = vizproximity.Sensor(vizproximity.Box(size=[2, 3, 2]), source=stoneSensorLocation) from vizfx.postprocess.blur import GaussianBlurEffect from vizfx.postprocess.composite import BlendEffect # Create post process effect for blending to blur effect blur_effect = BlendEffect(None, GaussianBlurEffect(blurRadius=20), blend=0.0) blur_effect.setEnabled(False) vizfx.postprocess.addEffect(blur_effect) def BlurTask(): blur_effect.setBlend(0.0) blur_effect.setEnabled(True) yield viztask.waitCall(blur_effect.setBlend, vizact.mix(0.0, 1.0, time=3.0)) blur_effect.setEnabled(False)
#-----------Info panel set up-------------------- import vizinfo #Add info panel to display messages to participant instructions = vizinfo.InfoPanel(icon=False, key=None) #------------------------------------------------ #-----------Sensor creation---------------------- import vizproximity target = vizproximity.Target(viz.MainView) viewPath = [] inTime = 0 MainViewApproaches = 0 sensor1 = vizproximity.Sensor( vizproximity.RectangleArea([3, 1], center=[-4, 0.375]), None) sensor2 = vizproximity.Sensor( vizproximity.RectangleArea([2.25, 2.25], center=[-4, 2.5]), None) sensor3 = vizproximity.Sensor( vizproximity.RectangleArea([3, 1], center=[-4, 4.75]), None) sensor4 = vizproximity.Sensor( vizproximity.RectangleArea([2.25, 1.5], center=[-4, 6.75]), None) sensor5 = vizproximity.Sensor(vizproximity.CircleArea(0.75, center=[2, 7.5]), None) sensor6 = vizproximity.Sensor( vizproximity.RectangleArea([2.5, 2.5], center=[0, 7.5]), None) sensor7 = vizproximity.Sensor(vizproximity.CircleArea(0.75, center=[-2, 7.5]), None) sensor8 = vizproximity.Sensor( vizproximity.RectangleArea([2.25, 1.5], center=[4, 6.75]), None) sensor9 = vizproximity.Sensor(
viz.mouse.setTrap(True) #アプリ内でしか動けなくなる viz.mouse.setCursor(True) # カーソルが見えるかどうか viz.mouse.setOverride(viz.ON) # 鳩のロゴ pigion_proj = vizfx.addProjector(texture=viz.addTexture('resource/pigion.jpg'), pos=(-8, 3.5, 3.0), euler=(-90, 0, 0), blend=vizfx.BLEND_AVERAGE) vizfx.getComposer().addEffect(pigion_proj.getEffect()) # 鳩のロゴと同じ場所にtexquad pigion = viz.addTexQuad(size=4.5, pos=(-8, 3.5, 3.0), alpha=0) # 鳩のロゴ用のセンサー pigion_sensor = vizproximity.Sensor(vizproximity.CircleArea(4), source=pigion) manager.addSensor(pigion_sensor) # 鳩の説明 pigon_board = viz.addTexQuad(pos=[-8, 3.5, 3.0]) pigon_texture = viz.addTexture('resource/pigon_descrption.JPG') pigon_board.texture(pigon_texture) pigon_board.billboard(viz.BILLBOARD_YAXIS) pigon_board.visible(False) # プロジェクターの表示 projector = viz.add('resource/Electronics_Overhead-Projector.osgb', pos=[0.7, 1.2, 5.4], euler=(180, 0, 0)) projector.collideBox() projector_sound = projector.playsound('sound/brownie8.wav', viz.LOOP)