Problem with newton jump code?

Blitz3D Forums/Blitz3D Programming/Problem with newton jump code?

Guy Fawkes(Posted 2009) [#1]
I have been researching newton a bit & i have a bit of a problem with a few functions. Can SOMEONE PLEASE help me fix this code, so my player will NEVER get stuck in the air, my player wont automatically bounce when it moves over a hilly point, and can someone help me get an animated mesh to move around with an animation, and jump with an animation?

use psionics ninja model as the animated model in directx format.

here's the code:

Graphics3D 800, 600, 0, 2

Include "Newton.bb"

AmbientLight 255,255,255

Global cam

cam = CreateCamera()
CameraRange cam, .1, 999999999

Global sky
sky = CreateSphere(100.5)
EntityColor sky, 102, 102, 255
FlipMesh sky
ScaleEntity sky, 999999999,999999999,999999999

;					-- create physic world
phWorldCreate(0,"your license key")
phMatSetDefFriction(.9,.8)

;set the friction for player material to zero
matHero = phMatCreate()
phMatSetFriction(matHero,0,0,0)
;					-- load level and create physic for it
levelmesh = LoadMesh("level.b3d")
ScaleMesh levelmesh,5,5,5
celltex = LoadTexture("cell.bmp")
ScaleTexture celltex,.01,.01
EntityTexture levelmesh,celltex
Global char.phx = phxCreatebox(2,5,2,10.2)
;(2,5,2,10.2)
phBodySetPos(char\body,0,5,0)
charvector = phJointUpVectorCreate(0,1,0,char\body)
phBodySetDamping(char\body,1,1)

phLevelBuildBegin()
	LevelAddMesh(levelmesh)
phLevelBuildEnd()

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
HidePointer

While Not KeyHit(1)
	
UpdateChar2()

PositionEntity sky, EntityX(char\mesh), EntityY(char\mesh), EntityZ(char\mesh)

UpdateWorld

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
	WorldStep(0.5)

RenderWorld

	Color 0,0,0
	Oval GraphicsWidth()/2-1,GraphicsHeight()/2-1,3,3
	Color 255,255,255
	Plot GraphicsWidth()/2,GraphicsHeight()/2
Text 10,10,"Y:"+phBodyGetY(char\body)

Flip
Wend

Function UpdateChar()
	;moving character
	maxforce# = 5.0 ;max force
	;Is there something under legs?
	x# = phBodyGetX(char\body)
	y# = phBodyGetY(char\body)
	z# = phBodyGetZ(char\body)
	If (phRayCast(x,y,z,x,y-5.1,z))
		;Calculate force from keys
		TFormVector maxforce*(KeyDown(32)-KeyDown(30)),maxForce*30*KeyDown(57),maxforce*(KeyDown(17)-KeyDown(31)),0,0
		fx# = TFormedX()
		fy# = TFormedY()
		fz# = TFormedZ()
		phBodyAddRelForce(char\body,fx,fy,fz)
		;stop body if no force was applied
		If (fx = 0) And (fz = 0) And (fy=0)
			phBodySetVel(char\body,0,0,0)
		EndIf
		phBodySetDamping(char\body,1,1)
	Else
		phBodySetDamping(char\body,0,1)
	EndIf
	;reposition camera
	phBodySetOmega(char\body,0,Float(MouseXSpeed())/3.0,0)
	PositionEntity cam,EntityX(char\mesh,1),EntityY(char\mesh,1),EntityZ(char\mesh,1),1
	RotateEntity cam,EntityPitch(cam)+Float(MouseYSpeed())/3.0,EntityYaw(char\mesh),0,1
	
	;shot
	If MouseHit(1)
		TFormPoint 0,0,1000,cam,0
		If phRayCast(EntityX(cam,1),EntityY(cam,1),EntityZ(cam,1),TFormedX(),TFormedY(),TFormedZ())
			shotedbody = phRayGetBody()
			mass# = phBodyGetMass(shotedBody)
			TFormVector 0,0,10,cam,0;bullet impulse
			dvelx# = TFormedX()/mass;
			dvely# = TFormedY()/mass;
			dvelz# = TFormedZ()/mass
			phBodyAddImpulse(shotedbody,phRayGetX(),phRayGetY(),phRayGetZ(),dvelx,dvely,dvelz)
			PlaySound(snd)
		EndIf
	EndIf
End Function

Function UpdateChar2();another example of character controller
	;moving char
	maxvel# = 15.0 ;max velocity
	;Is there anything under legs?
	x# = phBodyGetX(char\body)
	y# = phBodyGetY(char\body)
	z# = phBodyGetZ(char\body)
	
	If (phRayCast(x,y,z,x,y-5.1,z));if there's the ground
		;desired velocity
		TFormVector (KeyDown(32)-KeyDown(30)),0,(KeyDown(17)-KeyDown(31)),cam,0
		vx# = TFormedX()*maxvel
		vy# = TFormedY()*maxvel
		vz# = TFormedZ()*maxvel
		;current velocity
		vxcur# = phBodyGetVelX(char\body)
		vycur# = phBodyGetVelY(char\body)
		vzcur# = phBodyGetVelZ(char\body)
		;change in velocity
		dvx# = (vx-vxcur);*.1
		If (vx*vx+vz*vz)<.001 Then dvy# = vy - vycur Else dvy# = 0
		dvz# = (vz-vzcur);*.1
		phBodyAddImpulse(char\body,x,y,z,dvx,dvy,dvz)
		;jump
		If KeyDown(57) phBodyAddForce(char\body,0,5000,0)
		Else;if in air
		phBodySetDamping(char\body,0,1)
	EndIf
	;position camera
	phBodySetOmega(char\body,0,Float(MouseXSpeed())/3.0,0)
	PositionEntity cam,EntityX(char\mesh,1),EntityY(char\mesh,1),EntityZ(char\mesh,1),1
	RotateEntity cam,EntityPitch(cam)+Float(MouseYSpeed())/3.0,EntityYaw(char\mesh),0,1
	;shot
	If MouseHit(1)
		TFormPoint 0,0,1000,cam,0
		If phRayCast(EntityX(cam,1),EntityY(cam,1),EntityZ(cam,1),TFormedX(),TFormedY(),TFormedZ())
			shotbody = phRayGetBody()
			mass# = phBodyGetMass(shotBody)
			TFormVector 0,0,10,cam,0;bullet impulse
			dvelx# = TFormedX()/mass;
			dvely# = TFormedY()/mass;
			dvelz# = TFormedZ()/mass
			phBodyAddImpulse(shotbody,phRayGetX(),phRayGetY(),phRayGetZ(),dvelx,dvely,dvelz)
			PlaySound(snd)
		EndIf
	EndIf	
End Function

Function UpdateChar3();third example of character controller
	;moving char
	maxvel# = 15.0 ;max velocity
	;Is there anything under legs?
	x# = phBodyGetX(char\body)
	y# = phBodyGetY(char\body)
	z# = phBodyGetZ(char\body)
	
	If (phRayCast(x,y,z,x,y-5.5,z));if there's the ground
		;desired velocity
		TFormVector (KeyDown(32)-KeyDown(30)),0,(KeyDown(17)-KeyDown(31)),cam,0
		vx# = TFormedX()*maxvel
		vy# = TFormedY()*maxvel
		vz# = TFormedZ()*maxvel
		;desired velocity projected on the ground plane
		nx# = phRayGetNX()
		ny# = phRayGetNY()
		nz# = phRayGetNZ()
		lambda# = (vx*nx+vy*ny+vz*nz)
		vprojx# = vx - lambda*nx
		vprojy# = vy - lambda*ny
		vprojz# = vz - lambda*nz
		;current velocity
		vxcur# = phBodyGetVelX(char\body)
		vycur# = phBodyGetVelY(char\body)
		vzcur# = phBodyGetVelZ(char\body)
		;change in velocity
		dvx# = (vprojx-vxcur);*.1
		If (vx*vx+vz*vz)<.001 Then dvy# = vy - vycur Else dvy# = 0
		dvz# = (vprojz-vzcur);*.1
		;dvy# = (vprojy-vycur);*.1
		phBodyAddImpulse(char\body,x,y,z,dvx,dvy,dvz)
		;jump
		If KeyDown(57) 
			phBodyAddForce(char\body,0,5000,0)
		EndIf
	Else;if in air
		phBodySetDamping(char\body,0,1)
	EndIf
	;position camera
	phBodySetOmega(char\body,0,Float(MouseXSpeed())/3.0,0)
	PositionEntity cam,EntityX(char\mesh,1),EntityY(char\mesh,1),EntityZ(char\mesh,1),1
	RotateEntity cam,EntityPitch(cam)+Float(MouseYSpeed())/3.0,EntityYaw(char\mesh),0,1
	;shot
	If MouseHit(1)
		TFormPoint 0,0,1000,cam,0
		If phRayCast(EntityX(cam,1),EntityY(cam,1),EntityZ(cam,1),TFormedX(),TFormedY(),TFormedZ())
			shotbody = phRayGetBody()
			mass# = phBodyGetMass(shotBody)
			TFormVector 0,0,10,cam,0;
			dvelx# = TFormedX()/mass;
			dvely# = TFormedY()/mass;
			dvelz# = TFormedZ()/mass
			phBodyAddImpulse(shotbody,phRayGetX(),phRayGetY(),phRayGetZ(),dvelx,dvely,dvelz)
			PlaySound(snd)
		EndIf
	EndIf	
End Function


ANY help is GREATLY appreciated! :)

Thanks! :)

~DS~