mouse look

Blitz3D Forums/Blitz3D Beginners Area/mouse look

killal4(Posted 2003) [#1]
How can i enable mouse look? hears my code:

Graphics3D 1280,1024


Const type_level=1
Const type_camera=2
HidePointer
Global camera=CreateCamera()
CameraRange camera,1,100000000
EntityRadius camera,5
EntityType camera,type_camera
PositionEntity camera,10,10,10
mxs=MouseXSpeed()
mys=MouseYSpeed()



Collisions type_camera,type_level,2,3


music=LoadSound("ga.mp3")
LoopSound music
PlaySound music

skybox=LoadMesh("sky20.3ds")
ScaleEntity skybox,10000000,10000000,10000000

level=LoadTerrain("ter.bmp")
land=LoadTexture("land.bmp")
terra_detail=400000
TerrainShading level,terra_shade
ScaleTexture land,100,100
EntityTexture level,land,0,0
d=LoadTexture("tex1.bmp")
EntityTexture level,d,0,1
ScaleTexture d,0.1,0.1
RotateEntity level,0,160,0
ScaleEntity level ,100,2000,100
EntityType level,type_level
EntityPickMode level,3,5
PositionEntity level,-150,-5000,-5000
d2=LoadTexture("tex1.bmp")
EntityTexture level,d2,0,2
ScaleTexture d2,50,50
d3=LoadTexture("tex1.bmp")
EntityTexture level,d3,0,3
ScaleTexture d3,5,5
While Not KeyHit(1)
If KeyDown(200) Then
MoveEntity camera,0,0,1
EndIf

If KeyDown(208) Then
MoveEntity camera,0,0,-1
EndIf

If KeyDown(203) Then
TurnEntity camera,0,1.0,0
EndIf
If KeyDown(51) Then
TranslateEntity camera,0,50,0
EndIf
If KeyDown(205) Then
TurnEntity camera,0,-1.0,0
EndIf
If KeyDown(52) Then
MoveEntity camera,0,-50,0
EndIf
If KeyDown(53) Then
MoveEntity camera,0,0,50
EndIf

MoveEntity camera,0,-1,0

UpdateWorld
RenderWorld
If EntityCollided (camera,type_level) Then
Text 1280,1024,"i did it!!!!!"
EndIf


Flip

Wend


EOF(Posted 2003) [#2]
I use the function below.
First, you need to make the following variables global:
Global FL_Pitch#,FL_Yaw#,FL_Roll#,FL_XSpeed#,FL_YSpeed#,FL_ZSpeed#
You can control the camera with the mouse and these keys:

W=forward
S=back
A=left
D=right
R=up
F=down

Just call FreeLook camera somewhere in your main loop.

The function:
; free look with mouse & keys
Function FreeLook(FL_Cam)
	FL_Pitch#=FL_Pitch#-(MouseYSpeed()*0.02) : FL_Pitch#=FL_Pitch#/1.2
	FL_Yaw#=FL_Yaw#+-(MouseXSpeed()*0.02) : FL_Yaw#=FL_Yaw#/1.2
	MoveMouse (GraphicsWidth()/2,GraphicsHeight()/2)
	FL_ZSpeed#=FL_ZSpeed#+Float(KeyDown(17)-KeyDown(31))*0.12 : FL_ZSpeed#=FL_ZSpeed#/1.14;  [w] & [s]
	FL_XSpeed#=FL_XSpeed#+Float(KeyDown(32)-KeyDown(30))*0.12 : FL_XSpeed#=FL_XSpeed#/1.14 ; [a] & [d]
	FL_YSpeed#=FL_YSpeed#+Float(KeyDown(19)-KeyDown(33))*0.12 : FL_YSpeed#=FL_YSpeed#/1.14 ; [r] & [f]
	FL_Roll#=(FL_Yaw#*1.1)-(FL_XSpeed#*2.3)
	MoveEntity FL_Cam,FL_XSpeed#,FL_YSpeed#+Abs(FL_Roll#*FL_XSpeed#)/50,FL_ZSpeed#
	Local cp#=EntityPitch(FL_Cam,True)+FL_Pitch#
	If Abs(cp)>89 Then cp=Sgn(cp)*89
	RotateEntity FL_Cam,cp,EntityYaw(FL_Cam)+FL_Yaw#,FL_Roll#
End Function