The Best MouseLook Code.

Blitz3D Forums/Blitz3D Programming/The Best MouseLook Code.

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.

Ok here's my mousecode I use. Hit the "=" key change from Flip True to Flip False.

EDIT: Added in a sniper scope. Press RMB to toggle between 1x and 3x power.

;MouseLook Code
;by Chroma

Global sw = 1024, sh = 768
Graphics3D sw,sh,0,2
SetBuffer BackBuffer()

;delta time vars
Global dt#,NewTime%,OldTime%,TotalTime%
NewTime = MilliSecs()
OldTime = NewTime

;fps calc
Global framecounter_counter
Global framecounter_time
Global framecounter_framerate
Global FPS$
Function FPS$()
    Framecounter_counter=Framecounter_counter+1
    If Framecounter_time=0 Then Framecounter_time=MilliSecs()
    If Framecounter_time+1001<MilliSecs() Then
        Framecounter_framerate=Framecounter_counter
           Framecounter_counter=0
        Framecounter_time=MilliSecs()
        EndIf
        zsemi$="FPS: "+Framecounter_framerate
Return zsemi$
End Function


Global cam_piv = CreatePivot()
Global cam = CreateCamera(cam_piv)
CameraRange cam,0.2,10000
PositionEntity cam,0,1.6,0

; mouse sensitivity
Local mlook_spd# = 12.0		;speed
Local mlook_dmp# = 20.0		;damper

;Make some cubes to look at
Dim cube(200)
For n=1 To 200
cube(n) = CreateCube()
ScaleEntity cube(n), Rand(1,50),Rand(1,50),Rand(1,50)
PositionEntity cube(n), Rand(-1000,1000),Rand(-1000,1000),Rand(-1000,1000)
Next

Local flp = True

Local cam_zoom = 1

; Reset Mouse
HidePointer
MoveMouse sw/2,sh/2

While Not KeyHit(1)
Cls

Delta_Time()

If MouseHit(2)
	zoom = 1 - zoom
	Select zoom
		Case 0
			cam_zoom = 1
			mlook_spd = 12.0
		Case 1
			cam_zoom = 3
			mlook_spd = 12.0 * 5 
		End Select
	CameraZoom cam,cam_zoom
	
EndIf

;Hit the "=" key to toggle Flip True/False
If KeyHit(13) Then flp = 1 - flp

; ---FPS Code---
;mouselook
mxspd# = MouseXSpeed() / mlook_spd
myspd# = MouseYSpeed() / mlook_spd
If mxspd <> 0 Or myspd <> 0 Then MoveMouse sw/2,sh/2
mlook_yaw#   = mlook_yaw - mxspd
mlook_pitch# = mlook_pitch + myspd
If mlook_pitch => 89 Then mlook_pitch = 89
If mlook_pitch =< -89 Then mlook_pitch = -89
mlook_yaw2# = mlook_yaw2# + ((mlook_yaw# - mlook_yaw2#) * mlook_dmp#) * dt
mlook_pitch2# = mlook_pitch2# + ((mlook_pitch# - mlook_pitch2#) * mlook_dmp#) * dt
RotateEntity cam,mlook_pitch2,mlook_yaw2,0

UpdateWorld
RenderWorld

Text 5,5,"Press '=' to toggle Flip state."
Text 5,25,FPS()
Text 5,65,"RMB to toggle sniper scope."
Text 5,85,"Magnification: "+cam_zoom+"x"

;2D Crosshair
Color 0,255,0
Line sw/2-5,sh/2,sw/2-9,sh/2
Line sw/2+5,sh/2,sw/2+9,sh/2
Line sw/2,sh/2-5,sw/2,sh/2-9
Line sw/2,sh/2+5,sw/2,sh/2+9
Color 255,255,255

Flip flp
Wend
End

Function Delta_Time()
	NewTime = MilliSecs()	
	dt = Float (NewTime - OldTime)/1000
	OldTime = NewTime
	TotalTime = TotalTime + dt
End Function