question about collisions

Blitz3D Forums/Blitz3D Beginners Area/question about collisions

ok thank you, the reason i ask is because i started messing around with my fps engine that i started workin on a long time ago and i am having problem with my camera running up the walls while i hold the jump button. i know why it does this(i'm checking collision with my whole level) but i dont know how to fix it. here is my code. i was thinking if i can't get anything else to work that i would put an invisible flat mesh that is not wider then the collision radius at the bottom of the player(pivot)

; * FPS sample.
; * Program code by Simon Harrison (si@...).
; * Gargoyle model by Adam Gore.

; Graphics values
Const width=640,height=480,depth=16								

; Collision type values
Const type_camera=1 
Const type_scenery=3,type_ladders=4	; Destination

; Camera position, angle values
Global cam_x#,cam_z#,cam_pitch#,cam_yaw#						; Current
Global dest_cam_x#,dest_cam_z#,dest_cam_pitch#,dest_cam_yaw#	; Destination
Global jumped = 0
Global PGrav# = 0.0
Global Grav# = 0.2

; Set display mode
Graphics3D width,height,depth
SetBuffer BackBuffer()

; Set up camera
Global camera=CreateCamera()					
CameraRange camera,1,600
EntityRadius camera,7.5
EntityType camera,type_camera
PositionEntity camera,10,10,10

; Set up lights
AmbientLight 191,191,191						
Global light=CreateLight()
LightColor light,31,31,31
RotateEntity light,45,0,0

; Load level
Global level=LoadMesh("interior.x")	
ScaleEntity level,100,100,100
EntityType level,type_scenery
EntityPickMode level,2

; Load ladders collision mesh
Global ladders=LoadMesh("ladders.x")
ScaleEntity ladders,100,100,100
EntityType ladders,type_ladders
EntityAlpha ladders,0

; Initialise collisions
Collisions type_camera,type_scenery,2,3
Collisions type_camera,type_ladders,2,2


; Main loop
; ---------

Global old_time=MilliSecs()
While Not KeyHit(1)

PGrav# = PGrav# - Grav#

TranslateEntity camera,0,PGrav#,0

If EntityCollided(camera,type_scenery)
	PGrav = 0.0
	jumped = 0
EndIf

	UpdateGame()
	UpdateWorld
	RenderWorld
	
	; FPS
	frames=frames+1
	If MilliSecs()-render_time=>1000 Then fps=frames : frames=0 : render_time=MilliSecs()	
	Text 0,0,fps
	
	Flip
	
Wend
End


; --------------------
; Update game function
; --------------------

Function UpdateGame()

	GameInput()
	
End Function


; -------------------
; Game input function
; -------------------

Function GameInput()

	; Mouse look
	; ----------

	; Mouse x and y speed
	mxs=MouseXSpeed()
	mys=MouseYSpeed()

	; Destination camera angle x and y values
	dest_cam_yaw#=dest_cam_yaw#-mxs
	dest_cam_pitch#=dest_cam_pitch#+mys

	; Current camera angle x and y values
	cam_yaw=cam_yaw+((dest_cam_yaw-cam_yaw)/5)
	cam_pitch=cam_pitch+((dest_cam_pitch-cam_pitch)/5)
	
	RotateEntity camera,cam_pitch#,cam_yaw#,0
	
	; Rest mouse position to centre of screen
	MoveMouse width/2,height/2
	

	; Camera move
	; -----------
	
	; Forward/backwards - destination camera move z values
	If KeyDown(17)=True Or MouseDown(2)=True Then dest_cam_z=1
	If KeyDown(31)=True Then dest_cam_z#=-1

	; Strafe - destination camera move x values
	If KeyDown(32)=True Then dest_cam_x=1
	If KeyDown(30)=True Then dest_cam_x=-1
	
	If KeyDown(57) And jumped = 0
		PGrav# = 3.0
		jumped = 1
		FlushKeys
	EndIf
	
	; Current camera move x and z values
	cam_z=cam_z+((dest_cam_z-cam_z)/5)
	cam_x=cam_x+((dest_cam_x-cam_x)/5)

	; Move camera
	MoveEntity camera,cam_x,0,cam_z
	dest_cam_x=0 : dest_cam_z=0
	
	; Climb ladders
	If EntityCollided(camera,type_ladders)<>0 Then PGrav# = PGrav# + .25
End Function


note: most of this code isn't mine it is the fps demo that comes with blitz but my engine isn't this code i was just testing my stuff in an actual level(instead of terrain) so i used that