WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 03-14-2013, 01:28 AM
Meneer_Aart Meneer_Aart is offline
Member
 
Join Date: Oct 2011
Posts: 4
avatar walkto interrupt

Hello,

This maybeIs there a way to stop an avatar that's walking from point A to point B "dead in it's tracks"?

My code untill now looks somewhat like this:

Code:
def walk1():
	yield viztask.waitKeyDown( ' ' )
	yield viztask.addAction(avatar, vizact.walkTo([pointA]))
	yield viztask.addAction(avatar, vizact.walkTo([pointB]))
	yield viztask.addAction(avatar, vizact.walkTo([pointC]))
               avatar.state(14)
	yield viztask.waitTime(10)
	viztask.schedule(walk2())

def walk2():
	yield viztask.waitKeyDown( ' ' )
	yield viztask.addAction(avatar, vizact.walkTo([pointD]))
	yield viztask.addAction(avatar, vizact.walkTo([pointE]))
               avatar.state(14)
	yield viztask.waitTime(10)
#main
viztask.schedule(walk1())
So during ANY of the walkto actions i want to be able to stop the avatar where he is, and let him perform some kind of action on that spot.
Reply With Quote
  #2  
Old 03-14-2013, 07:04 AM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
In the following example the spacebar is used to start and stop the avatar as he walks between two points:
Code:
import viz
import viztask
import vizact
viz.go()

viz.add('ground.osgb')
avatar = viz.addAvatar('vcc_male2.cfg',pos=[0,0,9])
avatar.state(1)

walkLeft = vizact.walkTo([2.5,0,9])
walkRight = vizact.walkTo([-2.5,0,9])
walkActions = viz.cycle([walkLeft,walkRight])

waitSpaceBar = viztask.waitKeyDown(' ')
waitLeft = viztask.waitActionEnd(avatar,walkLeft)
waitRight = viztask.waitActionEnd(avatar,walkRight)
waitActions = viz.cycle([waitLeft,waitRight])

def walkAndStopTask():
	yield waitSpaceBar
	while True:
		condition = waitSpaceBar
		walkAction = walkActions.next()
		waitAction = waitActions.next()
		while condition == waitSpaceBar:
			avatar.runAction(walkAction)
			d = yield viztask.waitAny([waitSpaceBar,waitAction])
			condition = d.condition
			if condition == waitSpaceBar:
				avatar.clearActions()
				yield waitSpaceBar
			
viztask.schedule(walkAndStopTask())

Last edited by Jeff; 03-14-2013 at 08:08 AM.
Reply With Quote
  #3  
Old 03-20-2013, 02:41 AM
Meneer_Aart Meneer_Aart is offline
Member
 
Join Date: Oct 2011
Posts: 4
Red face

Thanks for your reply Jeff. I've tried the "clearactions()" statement.
However, since i'm using schedule to arrange the actions, i have to kill that as well to prevent the other walking actions from running.

I've tried this:

Code:
def walk1():
	yield viztask.waitKeyDown( ' ' )
	yield viztask.addAction(avatar, vizact.walkTo([pointA]))
	yield viztask.addAction(avatar, vizact.walkTo([pointB]))
	yield viztask.addAction(avatar, vizact.walkTo([pointC]))
               avatar.state(14)
	yield viztask.waitTime(10)
	viztask.schedule(walk2())

def walk2():
	yield viztask.waitKeyDown( ' ' )
	yield viztask.addAction(avatar, vizact.walkTo([pointD]))
	yield viztask.addAction(avatar, vizact.walkTo([pointE]))
               avatar.state(14)
	yield viztask.waitTime(10)

def stop():
	avatar.clearactions(0)

#main
t = viztask.schedule(walk1())

vizact.onkeydown('l',t.kill)
vizact.onkeydown('k',stop)
And this works, it stops the avatar completely and he returns to his idle state. However, it is inconvenient to have to push 2 keys to stop the avatar, so i tried to add the killing of the schedule to my stop command:

Code:
def stop():
               t.kill
	avatar.clearactions(0)

vizact.onkeydown('k',stop)
But this doesn't work for me, Is there a way to combine the 2 commands? I feel i'm overlooking something very simple here, but i can't quite put my finger on it.
Reply With Quote
  #4  
Old 03-20-2013, 02:59 AM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
Once the user stops the avatar, what is the next action that should be applied to the avatar? If the avatar stops on the way to PointA, should he pick up from the same place later and continue to PointA, or go to PointB, or should the whole task be ended?
Reply With Quote
  #5  
Old 04-02-2013, 07:45 AM
Meneer_Aart Meneer_Aart is offline
Member
 
Join Date: Oct 2011
Posts: 4
Jeff, i'm writing some software for a military simulation, the avatar actually gets shot and killed.
So the whole task should be ended, i would like the avatar to assume a specific state (lie down) and perform no actions anymore after that.
Reply With Quote
  #6  
Old 04-09-2013, 06:39 AM
Meneer_Aart Meneer_Aart is offline
Member
 
Join Date: Oct 2011
Posts: 4
Not to sound too desperate, but i'm still having some difficulties with this. Does anybody perhaps have a suggestion for me?
Reply With Quote
  #7  
Old 04-09-2013, 03:41 PM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
If you're waiting for either the walk action to finish or the keypress to occur you should use the viztask.waitAny command. Then if the event was a keypress you can leave the task using the return command:
Code:
d = yield viztask.waitAny([waitSpaceBar,waitAction])
condition = d.condition
if condition == waitSpaceBar:
	avatar.clearActions()
	return
Reply With Quote
Reply

Tags
avatar, interrupt, stop, walkto


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Avatar & Motion Capture Interface Angie Vizard 1 08-05-2010 07:17 PM
avatar scale and link.setpos conflict? sircedric4 Vizard 0 09-29-2009 08:48 AM
Collision of an avatar with a quad Frank Verberne Vizard 8 06-04-2008 10:44 AM
Looking through the eyes of an avatar Frank Verberne Vizard 2 04-01-2008 06:52 AM
How to make avatar's eyes to blink when speaking michelcm3 Vizard 12 01-15-2008 09:48 AM


All times are GMT -7. The time now is 04:37 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC