![]() |
|
#1
|
|||
|
|||
If I understand correctly, avatar2 is not updated in client1, and avatar1 is not updated in client2?
If avatar1 is controlled by client1 and avatar2 is controlled by client2, then you should pass information about the position of avatar1 to client2, and of avatar2 to client1. I don't understand the part of client2 not visible in client1's environment. At every client side, you should render 2 avatars (avatar1 & avatar2), and also get the information to make them move. Apparently, both avatars are rendered on the server side. So you should use similar code on both clients to make both avatars visible for both clients. I cannot help you further without more information, e.g. sample code showing the example without the need for extra files/models/setups. |
#2
|
|||
|
|||
basically, what I have is a multi user environment that consists of 1 server and 2 clients. what I mean by a client is the avatar. and I am using 1 pc as the server and the client.
client 1 will do a specific task (search for radiation source) where as client2 will identify the radiation source. both clients can exchange messages between them and with the server. I, as client1, while performing my task and navigating through the environment, I want to c client 2 (avatar2). this is the code: just run the server and then the 2 clients. try to control the movement of avatar1 and c if u can find avatar2 while navigating. ######server code############# Code:
import viz import viznet import viztask import vizmat import vizact import vizshape import vizinfo #add the required imports, start the Vizard engine, set the background, and position the display so that the full map will be visible viz.go() #viz.MainView.setPosition([50,25,-40]) #viz.MainView.lookAt([0,0,0]) #Enable full screen anti-aliasing (FSAA) to smooth edges viz.setMultiSample(4) #Increase the Field of View viz.MainWindow.fov(60) piazza = viz.add('piazza.osgb') #create a list of objects which must be identical to the list of objects on the client.These are the allowable character displays for each client. We then add the map, and finally an empty dictionary to store client information in. objectList = ['duck.wrl','logo.wrl','vcc_male.cfg','vcc_female.cfg'] #maze = viz.add('tankmaze.wrl') objects = {} #events which will be used in the interaction between the client and the server.must be defined in the same way on each client. UPDATE = viznet.id('update') CLIENT_DISCONNECTED = viznet.id('client_disconnected') CHAT = viznet.id('chat') #start the server and handle client joining and client leaving events. The onStopClient function preforms some cleanup actions as described in the comments viznet.server.start(port_in=14950,port_out=14951) def onStartClient(e): print '** Client joined:',e.sender viz.callback(viznet.CLIENT_CONNECT_EVENT,onStartClient) def onStopClient(e): print '** Client left:',e.sender viznet.server.send(CLIENT_DISCONNECTED,client=e.sender) # Alert other clients objects[e.sender].remove() # Remove object from our map del objects[e.sender] # Delete user from array viz.callback(viznet.CLIENT_DISCONNECT_EVENT,onStopClient) #The update function essentially updates a client's position, #however if this is the first time the client's position is updated, it also adds the client to the map. #Adding the user this way makes it so we don't have to have another event to handle when the client has picked a character. #Further more this way we don't have to send a list of already connected clients to all new clients. def update(e): try: objects[e.sender].setPosition(e.pos) objects[e.sender].setEuler(e.ori) except KeyError: # If key doesn't exist add the user's object objects[e.sender] = viz.add(objectList[e.object],scale=[2,2,2],pos=e.pos,euler=e.ori) objects[e.sender].tooltip = e.sender # Sets the tool tip for this object viz.callback(UPDATE,update) # Tool Tip import viztip tth = viztip.ToolTip() tth.start() tth.setDelay(0) # Chat Stuff def updateChat(msg): # Function to update the chat display text.message('\n'.join(text.getMessage().split('\n')[1:])+'\n'+msg) text = viz.addText('\n\n\n\n',viz.SCREEN) # Add to screen text.alignment(viz.TEXT_LEFT_BOTTOM) text.fontSize(25) text.setPosition(.05,.08) input = viz.addText('> _',viz.SCREEN) # Add to screen input.fontSize(25); input.setPosition(.032,.05) input.visible(0) # We only want visible when in type mode def onChat(e): # Update the message display updateChat(e.client+': '+e.chat) viz.callback(CHAT,onChat) # talking = False def onKeyDown(key): global talking if key == 'y' and not talking: # Start talking mode talking = True input.message('> _') input.visible(1) elif key == viz.KEY_ESCAPE and talking: # Exit talking mode talking = False input.visible(0) return True elif talking and key == viz.KEY_RETURN: # Send message talking = False viznet.server.send(CHAT,client='SERVER',chat=input.getMessage()[2:-1]) input.visible(0) # Update display with our message updateChat('SERVER'+': '+input.getMessage()[2:-1]) elif talking and key == viz.KEY_BACKSPACE: # Delete a character if len(input.getMessage()) > 3: input.message(input.getMessage()[:-2]+'_') elif len(key) > 1: # Handle special keys return False elif talking and 32 <= ord(key) <= 126: # Input message input.message(input.getMessage()[:-1]+key+'_') viz.callback(viz.KEYDOWN_EVENT,onKeyDown,priority=-6) Code:
import viz import viznet import vizinfo import vizinput import viztask import vizact import vizshape import vizproximity viz.go() viz.MainView.setPosition([0,0.1,0]) #viz.MainView.lookAt([50,25,-40]) #Enable full screen anti-aliasing (FSAA) to smooth edges viz.setMultiSample(4) #Increase the Field of View viz.MainWindow.fov(60) piazza = viz.add('piazza.osgb') #maze = viz.add('tankmaze.wrl') sphere = vizshape.addSphere(radius=0.2) sphere.setPosition(0,0,20) sphere.color(viz.RED) text = viz.addText('radiation source',parent=sphere) text.setPosition([-0.3,0.3,0]) text.setScale([0.2]*3) text.color(viz.RED) text.visible(viz.ON) text_2D = viz.addText('radiation source area', viz.SCREEN ) text_2D.setPosition(0,0,20) text_2D.color(viz.RED) text_2D.visible(viz.OFF) objects = {} # UPDATE = viznet.id('update') CLIENT_DISCONNECTED = viznet.id('client_disconnected') CHAT = viznet.id('chat') # SERVER_NAME=vizinput.input('Enter Server Name') while not viznet.client.connect(SERVER_NAME,port_in=14951,port_out=14950): if vizinput.ask('Could not connect to ' + SERVER_NAME + ' would you like to try another?'): SERVER_NAME=vizinput.input('Enter Server Name') else: viz.quit() break # objectList = ['duck.wrl','logo.wrl','vcc_male.cfg','vcc_female.cfg'] obj_choice=vizinput.choose('Connected. Select your character',objectList) # #Create proximity manager manager = vizproximity.Manager() #manager.setDebug(viz.ON) #Add main viewpoint as proximity target target = vizproximity.Target(viz.MainView) manager.addTarget(target) #Create sensor using male avatar #avatar = viz.addAvatar('vcc_male2.cfg',pos=[0,0,4],euler=[180,0,0]) #avatar.state(1) #sensor = vizproximity.Sphere(0.2, centre=(0,0,0)) sensor = vizproximity.Sensor( vizproximity.CircleArea(5),source=sphere) manager.addSensor(sensor) #Change state of avatar to talking when the user gets near def EnterProximity(e): text_2D.visible(viz.ON) #text.visible(viz.ON) #Change state of avatar to idle when the user moves away def ExitProximity(e): #text.visible(viz.OFF) text_2D.visible(viz.OFF) manager.onEnter(sensor,EnterProximity) manager.onExit(sensor,ExitProximity) #vizact.onkeydown('d',manager.setDebug,viz.TOGGLE) # def sendUpdate(): ori= viz.MainView.getEuler() pos = viz.MainView.getPosition() viznet.client.sendAll(UPDATE,client=viz.getComputerName(),object=obj_choice,pos=pos,ori=ori) vizact.ontimer(.05,sendUpdate) # def update(e): if e.client != viz.getComputerName(): try: objects[e.client].setPosition(e.pos) objects[e.client].setEuler(e.ori) except KeyError: objects[e.client] = viz.add(objectList[e.object],scale=[2,2,2],pos=e.pos,euler=e.ori) objects[e.client].tooltip = e.client viz.callback(UPDATE,update) # def client_disconnected(e): objects[e.client].remove() del objects[e.client] viz.callback(CLIENT_DISCONNECTED,client_disconnected) def onStopServer(e): print 'Disconnected from server' viz.quit() viz.callback(viznet.SERVER_DISCONNECT_EVENT,onStopServer) # import viztip tth = viztip.ToolTip() tth.start() tth.setDelay(0) # def updateChat(msg): text.message('\n'.join(text.getMessage().split('\n')[1:])+'\n'+msg) text = viz.addText('\n\n\n\n',viz.SCREEN) text.alignment(viz.TEXT_LEFT_BOTTOM) text.fontSize(25) text.setPosition(.05,.08) input = viz.addText('> _',viz.SCREEN) input.fontSize(25) input.setPosition(.032,.05) input.visible(0) def onChat(e): updateChat(e.client+': '+e.chat) viz.callback(CHAT,onChat) talking = False def onKeyDown(key): global talking if key == 'y' and not talking: talking = True input.message('> _') input.visible(1) elif key == viz.KEY_ESCAPE and talking: talking = False input.visible(0) return True elif talking and key == viz.KEY_RETURN: talking = False viznet.client.sendAll(CHAT,client=viz.getComputerName(),chat=input.getMessage()[2:-1]) input.visible(0) elif talking and key == viz.KEY_BACKSPACE: if len(input.getMessage()) > 3: input.message(input.getMessage()[:-2]+'_') elif len(key) > 1: return False elif talking and 32 <= ord(key) <= 126: input.message(input.getMessage()[:-1]+key+'_') viz.callback(viz.KEYDOWN_EVENT,onKeyDown,priority=-6) hope it is clear now. thanx |
#3
|
|||
|
|||
the replay is too long so I had to divided into 2. sorry for that.
######client2####### Code:
import viz import viznet import vizinfo import vizinput import viztask import vizact import vizshape import vizproximity viz.go() viz.MainView.setPosition([0,0.1,0]) #viz.MainView.lookAt([50,25,-40]) #Enable full screen anti-aliasing (FSAA) to smooth edges viz.setMultiSample(4) #Increase the Field of View viz.MainWindow.fov(60) piazza = viz.add('piazza.osgb') #maze = viz.add('tankmaze.wrl') sphere = vizshape.addSphere(radius=0.2) sphere.setPosition(0,0,20) sphere.color(viz.RED) text = viz.addText('radiation source',parent=sphere) text.setPosition([-0.3,0.3,0]) text.setScale([0.2]*3) text.color(viz.RED) text.visible(viz.ON) text_2D = viz.addText('radiation source area', viz.SCREEN ) text_2D.setPosition(0,0,20) text_2D.color(viz.RED) text_2D.visible(viz.OFF) objects = {} # UPDATE = viznet.id('update') CLIENT_DISCONNECTED = viznet.id('client_disconnected') CHAT = viznet.id('chat') # SERVER_NAME=vizinput.input('Enter Server Name') while not viznet.client.connect(SERVER_NAME,port_in=14951,port_out=14950): if vizinput.ask('Could not connect to ' + SERVER_NAME + ' would you like to try another?'): SERVER_NAME=vizinput.input('Enter Server Name') else: viz.quit() break # objectList = ['duck.wrl','logo.wrl','vcc_male.cfg','vcc_female.cfg'] obj_choice=vizinput.choose('Connected. Select your character',objectList) # #Create proximity manager manager = vizproximity.Manager() #manager.setDebug(viz.ON) #Add main viewpoint as proximity target target = vizproximity.Target(viz.MainView) manager.addTarget(target) #Create sensor using male avatar #avatar = viz.addAvatar('vcc_male2.cfg',pos=[0,0,4],euler=[180,0,0]) #avatar.state(1) #sensor = vizproximity.Sphere(0.2, centre=(0,0,0)) sensor = vizproximity.Sensor( vizproximity.CircleArea(5),source=sphere) manager.addSensor(sensor) #Change state of avatar to talking when the user gets near def EnterProximity(e): text_2D.visible(viz.ON) #text.visible(viz.ON) #Change state of avatar to idle when the user moves away def ExitProximity(e): #text.visible(viz.OFF) text_2D.visible(viz.OFF) manager.onEnter(sensor,EnterProximity) manager.onExit(sensor,ExitProximity) #vizact.onkeydown('d',manager.setDebug,viz.TOGGLE) # def sendUpdate(): ori= viz.MainView.getEuler() pos = viz.MainView.getPosition() viznet.client.sendAll(UPDATE,client=viz.getComputerName(),object=obj_choice,pos=pos,ori=ori) vizact.ontimer(.05,sendUpdate) # def update(e): if e.client != viz.getComputerName(): try: objects[e.client].setPosition(e.pos) objects[e.client].setEuler(e.ori) except KeyError: objects[e.client] = viz.add(objectList[e.object],scale=[2,2,2],pos=e.pos,euler=e.ori) objects[e.client].tooltip = e.client viz.callback(UPDATE,update) # def client_disconnected(e): objects[e.client].remove() del objects[e.client] viz.callback(CLIENT_DISCONNECTED,client_disconnected) def onStopServer(e): print 'Disconnected from server' viz.quit() viz.callback(viznet.SERVER_DISCONNECT_EVENT,onStopServer) # import viztip tth = viztip.ToolTip() tth.start() tth.setDelay(0) # def updateChat(msg): text.message('\n'.join(text.getMessage().split('\n')[1:])+'\n'+msg) text = viz.addText('\n\n\n\n',viz.SCREEN) text.alignment(viz.TEXT_LEFT_BOTTOM) text.fontSize(25) text.setPosition(.05,.08) input = viz.addText('> _',viz.SCREEN) input.fontSize(25) input.setPosition(.032,.05) input.visible(0) def onChat(e): updateChat(e.client+': '+e.chat) viz.callback(CHAT,onChat) talking = False def onKeyDown(key): global talking if key == 'y' and not talking: talking = True input.message('> _') input.visible(1) elif key == viz.KEY_ESCAPE and talking: talking = False input.visible(0) return True elif talking and key == viz.KEY_RETURN: talking = False viznet.client.sendAll(CHAT,client=viz.getComputerName(),chat=input.getMessage()[2:-1]) input.visible(0) elif talking and key == viz.KEY_BACKSPACE: if len(input.getMessage()) > 3: input.message(input.getMessage()[:-2]+'_') elif len(key) > 1: return False elif talking and 32 <= ord(key) <= 126: input.message(input.getMessage()[:-1]+key+'_') viz.callback(viz.KEYDOWN_EVENT,onKeyDown,priority=-6) |
![]() |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
input from a text file | dig | Vizard | 5 | 10-20-2013 01:20 AM |
Lighting relevant text? | knightgba | Vizard | 1 | 01-26-2011 05:33 PM |
Informationboxes with text | snoopy78 | Vizard | 3 | 07-16-2009 10:23 AM |
Vizard tech tip: Text to Speech | Jeff | Vizard | 1 | 01-15-2009 09:39 PM |
3d Text with Transparent Borders | vjosh | Vizard | 3 | 12-01-2004 10:50 AM |