animating characters during network update

Blitz3D Forums/Blitz3D Programming/animating characters during network update

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

I have a game I am working on....the animation works great for the main character (local) but when the game is updating network players...how do I make the walking animations work as a network player is updated?

chris

posted below is my code for network updates


Function UpdateNetwork()
While RecvNBMsg(mainstream)
	Select NBMsgType(mainstream)
		Case 100 ;New Player
			serverid$ = converttoid(serverip,serverport)
			If nbuserid = serverid
			checknbdatabase(mainstream) ;Make sure the host only does this
			ElseIf nbuserid <> serverid ;If you are not the server
			i.nbplayer = New nbplayer
			i\name = nbmsgdata(mainstream)
			i\ip = nbmsgip(mainstream)
			i\port = nbmsgport(mainstream)
			i\id = converttoid(i\ip,i\port)
			EndIf
			p.player = CreatePlayer(0,10,0, nbmsgfrom(mainstream) )
			pack$ = EntityX(play\entity) +" "+ EntityY(play\entity) +" "+ EntityZ(play\entity)
			SendNBMsg(1,pack,nbmsgfrom(mainstream),mainstream)
			pitch# = EntityPitch(play\entity)
			roll# = EntityRoll(play\entity)
			pack$=LSet$( pitch,7 )+LSet$( EntityYaw(play\entity),7 )+LSet$( roll,7 )
			SendNBMsg(3,pack,nbmsgfrom(mainstream),mainstream)


		Case 101 ;Player Left
			For p.player = Each player
		DebugLog("entity id:"+p\net_id +" netid:" + nbmsgfrom(mainstream))
			If p\net_id = nbmsgfrom(mainstream);Left$(nbmsgfrom(mainstream),Len(nbmsgfrom(mainstream))-3)
			FreeEntity p\model
			For n.nbplayer = Each nbplayer
				If n\id = p\net_id Then Delete n
				Next
			Delete p : Exit
			EndIf
			Next
		Case 1 ;Position File
			For p.player = Each player
			If p\net_id = nbmsgfrom(mainstream)
			dat$ = nbmsgdata$(mainstream)
			Local num1$,num2$,num3$,count
			For wc = 1 To Len(dat)
			let$ = Mid(dat,wc,1)
			If let = " " Then count = count + 1
			If let <> " "
				If count = 0
				num1 = num1 + let
				ElseIf count = 1
				num2 = num2 + let
				ElseIf count = 2
				num3 = num3 + let
				EndIf
			EndIf
			Next
			p\px = Float(num1) : p\py = Float(num2) : p\pz = Float(num3)
			HideEntity p\entity
			PositionEntity p\entity,p\px,p\py,p\pz : ShowEntity p\entity
			Exit
			EndIf
			Next
		Case 2 ;Movement File
			For p.player = Each player
			If p\net_id = nbmsgfrom(mainstream)
			move = nbmsgdata$(mainstream)
			If move = 1 ;Forward
			MoveEntity p\entity,0,0,1
			DebugLog("moved entity f" + p\net_id)
				AnimateMD2 p\model,1,p\anim_speed,3,31,1
	AnimateMD2 p\model,1,1,32,100,1

			ElseIf move = 2;Back
			MoveEntity p\entity,0,0,-1
	AnimateMD2 p\model,1,p\anim_speed,1,31,1
	AnimateMD2 p\model,1,1,32,100,1

			DebugLog("moved entity b" + p\net_id)
			ElseIf move = 3;Left

	AnimateMD2 p\model,1,p\anim_speed,1,31,1
	AnimateMD2 p\model,1,1,32,100,1
			TurnEntity p\entity,0,6,0
			DebugLog("moved entity l" + p\net_id)
			ElseIf move = 4;Right

	AnimateMD2 p\model,1,p\anim_speed,1,31,1
	AnimateMD2 p\model,1,1,32,100,1
			TurnEntity p\entity,0,-6,0
			DebugLog("moved entity r" + p\net_id)
			EndIf
			Exit
			EndIf
			Next
	
		Case 3 ;Rotation File
			For p.player = Each player
			If p\net_id = nbmsgfrom(mainstream)
			dat$ = nbmsgdata$(mainstream)
			rotx# = Float(Mid(dat,1,7)) :roty#=Float(Mid(dat,8,7)) : rotz#=Float(Mid(dat,15,7))
			RotateEntity p\entity,rotx,roty,rotz
			Exit
			EndIf
			Next
	End Select
Wend

For p.player = Each player
If p\net_id <> nbuserid
TranslateEntity p\entity,0,-.2,0
EndIf
Next
End Function