def creepilyMoveCloser(node):
	global introAudio1, introAudio2
	global comeForward, firstSeatPosition, seatQueue
	global PID
	dout = DataOutputHelper(PID)
	comeForward = seatQueue[-2]
	firstSeatPosition = seatQueue[0]
	node.setPosition(firstSeatPosition)
	
	yield viztask.waitMediaEnd(introAudio1)
	
	introAudio2.play()
	
	# We want the participant to have a minute after the audio ends
	viz.callback(viz.MEDIA_EVENT,onAudioEnd)
	dout.timestamp(dout.busFile, 'Initial audio ended')
	
	yield viztask.waitMediaEnd(introAudio2)

	yield viztask.waitTime(.1) # Pause necessary for NodeViewDetection to get necessary info about node
	nvd = DetectWhetherInView.NodeViewDetection(node)
	FadeObject.beginFading()
	
	moveAsUsual = False
	getCloserBeforeBackAway = True
	
	while getCloserBeforeBackAway:
		node.setPosition(firstSeatPosition)
		yield waitTilNodeAndDestOutsideView(nvd, firstSeatPosition)
		yield waitTilNodeInsideView(nvd)
		node.setPosition(comeForward)
		yield creepilyMakeEyeContact(node, comeForward, dout)
		yield moveBackToFirstSeat(node, seatQueue)
		if abs(node.getPosition()[0] - firstSeatPosition[0]) < 0.1:
			getCloserBeforeBackAway = False
			moveAsUsual = True
	
	print 'waiting til node inside view...'
	yield waitTilNodeInsideView(nvd)	
	while moveAsUsual:
		print 'waiting until node and dest outside view...'
		nextPosition = seatQueue[1] # Peek at nextPosition
		yield waitTilNodeAndDestOutsideView(nvd, nextPosition) # Pauses til node and that position are outside of view
		
		# Move to nextPosition
		print 'node and dest are outside view! Moving to next position...'
		node.setPosition(nextPosition)
		seatQueue.rotate(-1) # update seatQueue
		
		print 'waiting til node inside view...'
		yield waitTilNodeInsideView(nvd)
		
		print 'creepily dodging eye contact...'
		yield creepilyMakeEyeContact(node, seatQueue[0], dout)
		
	
		#if seatQueue[0] is not finalSeatPosition:
		print 'waiting 5 seconds then moving him back if hes in view at the end of the 5 seconds.' # TODO: This is not exactly what we want.
		yield moveBackwardsIfStaredAt(node, nvd) # If the node is not in the last seat position,
def init(avatar, pack_objs, intro, **kwargs):
	global isBusScene, moveSeats, seatQueue
	isBusScene = False
	DetectWhetherInView.init(**kwargs)
	seats = [Seats.getseatplacement(id)[0] for id in avatar.teleSeatIDs] # TODO: Abstract to handle arbitrary orientation too (for front right seats)
	seatQueue = deque([[seat[0],seat[1],seat[2]-0.5] for seat in seats]) # Node is in bus aisle

	
	global introAudio1, introAudio2
	introAudio1 = intro
	introAudio2 = viz.addAudio('Audio/CreepyTaskIntroduction.wav')
	
	FadeObject.init(pack_objs, 25, 0.01, **kwargs)
	
	viztask.schedule( creepilyMoveCloser(avatar) )
import viz
import vizact
import FadeObject
import keyboardcontrol

keyboardcontrol.control(viz.MainView)  

VFOV_DEFAULT = 40 # Vertical field of view in degrees
VFOV_RIFT = 106.09 # source: https://vrwiki.wikispaces.com/Oculus+Rift+Development+Kit+2
HFOV_RIFT = 95.06 # source: https://vrwiki.wikispaces.com/Oculus+Rift+Development+Kit+2


viz.setMultiSample(4)
viz.fov(60)
viz.go()

viz.MainView.setPosition([2, 1, 2])
viz.MainView.setEuler([227,10,0])

#setting scene
ground = viz.addChild('ground.osgb')
day = viz.add('sky_day.osgb')
day.renderToBackground()

#wheelbarrow object and node detector
wb = viz.addChild('wheelbarrow.ive')

FadeObject.init(wb, 10, 0.01)
FadeObject.beginFading()