View Single Post
  #8  
Old 04-26-2016, 10:45 AM
jelly jelly is offline
Member
 
Join Date: Feb 2016
Posts: 38
Unhappy problem resetting an animation path

I have a little problem that I have been stuck on for quite some time now. It is related to using several animation paths.

My trial function does the following: An animation is triggered right at the beginning, which takes the viewpoint through a short maze, according to the control points of the patheMaze1 animation. The viewpoint then stops at a position in front of two doors. Here one of two arrow keys must be pressed. This then triggers one of two possible animation paths (either going through the left or through the right door). Then all of this should repeat 4 times.

The problem is that I tried working with resetting the animation paths, linkin and unlinking the paths and the viewpoint and resetting the viewpoints at various locations in the code. Nothing seems to work.

I now have a new function that gives the coordinates of the animation path and the viewpoint (which should be linked) every 2 sec in order to be better able to understand the location coordinates. The code I have now (at the bottom) gives these following coordinates.

NEW TRIAL
View : [0.0, 1.399999976158142, -8.0]
Maze1 : [-6.390899658203125, 1.399999976158142, -8.0]

View : [0.0, 1.399999976158142, -7.971726894378662]
Maze1 : [0.0, 1.399999976158142, -7.971726894378662]
View : [0.0, 1.399999976158142, 5.0]
Maze1 : [0.0, 1.399999976158142, 5.0]
LEFT DOOR
View : [-0.5865119695663452, 1.399999976158142, 7.255815505981445]
Maze1 : [0.0, 1.399999976158142, 5.0]

NEW TRIAL
View : [0.0, 1.399999976158142, -8.0]
Maze1 : [-6.400000095367432, 1.399999976158142, -8.0]

View : [-1.8042783737182617, 1.399999976158142, -8.0]
Maze1 : [-1.8042783737182617, 1.399999976158142, -8.0]
View : [0.0, 1.399999976158142, 1.3455696105957031]
Maze1 : [0.0, 1.399999976158142, 1.3455696105957031]
View : [0.0, 1.399999976158142, 4.923357009887695]
Maze1 : [0.0, 1.399999976158142, 5.0]
LEFT DOOR
View : [-1.2999999523162842, 1.399999976158142, 10.0]
Maze1 : [0.0, 1.399999976158142, 5.0]

NEW TRIAL
View : [0.0, 1.399999976158142, -8.0]
Maze1 : [-6.400000095367432, 1.399999976158142, -8.0]

View : [-1.6976442337036133, 1.399999976158142, -8.0]
Maze1 : [-1.6976442337036133, 1.399999976158142, -8.0]
View : [0.0, 1.399999976158142, 1.5620803833007812]
Maze1 : [0.0, 1.399999976158142, 1.5620803833007812]
LEFT DOOR
View : [-1.2999999523162842, 1.399999976158142, 10.0]
Maze1 : [0.0, 1.399999976158142, 5.0]

NEW TRIAL
View : [0.0, 1.399999976158142, -8.0]
Maze1 : [-6.400000095367432, 1.399999976158142, -8.0]

View : [-4.900414943695068, 1.399999976158142, -8.0]
Maze1 : [-4.900414943695068, 1.399999976158142, -8.0]
View : [0.0, 1.399999976158142, -4.9427947998046875]
Maze1 : [0.0, 1.399999976158142, -4.9427947998046875]
View : [0.0, 1.399999976158142, 4.9235992431640625]
Maze1 : [0.0, 1.399999976158142, 5.0]
View : [0.0, 1.399999976158142, 4.9235992431640625]
Maze1 : [0.0, 1.399999976158142, 5.0]

QUESTION: I have highlighted in red, whenever the maze animation path and the viewpoint are not coinciding. WHY COULD THIS BE? I would really appreciate your help, because apart from the animation path basics, I have found no other online resources to understand how several animation paths may interact/ disturb each other and all my efforts so far of trying to come up with combinations and move pieces of code around, have not been successful

Thank you very much for any kind help or pointers!

Code:
import viz															#Needed to generate a world.
import viztask														#Needed to control the experiment structure.
import vizact

viz.mouse.setVisible(viz.OFF) 										#Stops the mouse appearing on the screen.
viz.mouse.setOverride(viz.ON)										#Stops Vizard navigation using the mouse.

viz.clearcolor(viz.BLACK)

viz.go()

#Add a sky with an environment map.
env = viz.add(viz.ENVIRONMENT_MAP,'sky.jpg')
dome = viz.add('skydome.dlc')
dome.texture(env)

#Load a maze and make it invisible
maze1 = viz.add('Objects/Maze_1.dae')
maze1.visible(viz.OFF)

#Set the start position:
startPos = [-6.4, 1.4, -8]

#Parameters for the viewpoint
view = viz.MainView
view.setPosition(startPos)
view.eyeheight(1.4)
view.collision(viz.ON)
viz.collisionbuffer(0.8)

#Link
link = None

##Animation paths
pathMaze1 = viz.addAnimationPath()
pathMaze1.addControlPoint(2, pos=startPos,euler=(0,0,0))
pathMaze1.addControlPoint(4, pos=startPos,euler=(90,0,0))
pathMaze1.addControlPoint(6, pos=(0,1.4,-8),euler=(0,0,0))
pathMaze1.addControlPoint(8, pos=(0,1.4,5),euler=(0,0,0))
pathMaze1Duration = pathMaze1.getDuration()

pathDoorLeft = viz.addAnimationPath()
pathDoorLeft.addControlPoint(0, pos=(0,1.4,5),euler=(0,0,0))
pathDoorLeft.addControlPoint(1, pos=(0,1.4,5),euler=(-10,0,0))
pathDoorLeft.addControlPoint(2, pos=(-1.3,1.4,10),euler=(-10,0,0))
pathDoorLeftDuration = pathDoorLeft.getDuration()

pathDoorRight = viz.addAnimationPath()
pathDoorRight.addControlPoint(0, pos=(0,1.4,5),euler=(0,0,0))
pathDoorRight.addControlPoint(1, pos=(0,1.4,5),euler=(10,0,0))
pathDoorRight.addControlPoint(2, pos=(1.3,1.4,10),euler=(10,0,0))
pathDoorRightDuration = pathDoorRight.getDuration()


def mazeTrial():
	global link, view, pathMaze1, pathDoorLeft, pathDoorRight, startPos

	print 'NEW TRIAL'

	maze1.visible(viz.ON)

	pathMaze1.reset()

	link = viz.link(pathMaze1, view)
	
	view.reset(viz.HEAD_POS| viz.HEAD_ORI)
	view.setPosition(startPos)

	pathMaze1.play()
	yield viztask.waitTime(pathMaze1Duration)

	link.remove()

	yield viztask.waitKeyDown([viz.KEY_LEFT,viz.KEY_RIGHT])

	if viz.key.isDown(viz.KEY_LEFT):
		print "LEFT DOOR"
		link = viz.link(pathDoorLeft,view)
		pathDoorLeft.play() 
		yield viztask.waitTime(pathDoorLeftDuration)
		pathDoorLeft.reset()
		link.remove()
	elif viz.key.isDown(viz.KEY_RIGHT):
		print "RIGHT DOOR"
		link = viz.link(pathDoorRight,view)
		pathDoorRight.play()
		yield viztask.waitTime(pathDoorRightDuration)
		pathDoorRight.reset()
		link.remove()

# Loop trial 4 times
def masterFunction():
	for x in range(4):
		yield mazeTrial()

#Schedule & trigger Loop
viztask.schedule(masterFunction())


# For control purposes, prints position of View and Maze every 2 sec
def Print_view_pos():
	global view, pathMaze1
	print "View :", view.getPosition()
	print "Maze1 :", pathMaze1.getPosition()
	
vizact.ontimer(2,Print_view_pos)
Reply With Quote