Ah, that would make sense actually.
I am experiencing pretty choppy camera movement at the moment though. Would you mind taking a look?
Using a Character controller:
The Set up:
fov as float
fov = 80
fov_add as float
fov_add = 0
start_x = 0
start_y = 0
start_z = 0
SetCameraFOV(1, 80)
SetRawMouseVisible(0)
SetCameraRange(1, 1, 20000)
free_cam = CreateObjectSphere(5, 60, 60)
spectator = false
spectator_speed = 1
player_base = CreateObjectBox(40, 40, 40)
//player_base = CreateObjectCapsule(40, 10, 1)
SetObjectVisible(player_base, 0)
SetObjectCollisionMode(player_base, 0)
SetObjectCullMode(player_base, 1)
vec_curr = CreateVector3( 0, 0, 0 )
vec_old = CreateVector3( 0, 0, 0 )
velo as float
cam_offset = CreateVector3(0,5,0)
cam_orientation = CreateVector3(0,0,0)
camera_lr as float = 0.0
camera_ud as float = 0.0
lr_speed as float = 0.0
fb_speed as float = 0.0
walk_speed = 40.0
sprint_speed = 80.0
walk_speed_final = 0.0
cam_x as float = 0
cam_y as float = 0
cam_z as float = 0
jump_speed = 6
Create3DPhysicsCharacterController(player_base, 0, cam_offset, cam_orientation, 0.0 )
Set3DPhysicsCharacterControllerGravity(player_base, 4.0)
Set3DPhysicsCharacterControllerJumpSpeed(player_base, jump_speed)
//Set3DPhysicsCharacterControllerStepHeight(player_base,20)
// set start position
Set3DPhysicsCharacterControllerPosition(player_base, start_x,start_y,start_z)
The Loop Code:
// camera movement w mouse
camera_lr = camera_lr + (GetRawMouseX()-GetWindowWidth()/2.0)*0.1
camera_ud = camera_ud + (GetRawMouseY()-GetWindowHeight()/2.0)*0.1
//print("cam angle: " + str(camera_ud)
if(camera_ud > 90) then camera_ud = 90
if(camera_ud < -90) then camera_ud = -90
walk_speed_final = walk_speed + (sprint_speed * GetRawKeyState(KEY_LEFT_SHIFT))
// switch to spectator mode
if (GetRawKeyPressed(KEY_P))
if (spectator = false)
spectator = true
else
spectator = false
endif
endif
//print(spectator)
print("x: " + str(floor(GetCameraX(1))) + " y: " + str(floor(GetCameraY(1))) + " Z: " + str(floor(GetCameraZ(1))) )
// calculate velocity
SetVector3(vec_curr, GetObjectX(player_base), GetObjectY(player_base), GetObjectZ(player_base) )
velo = GetVector3Distance( vec_curr, vec_old )
SetVector3(vec_old, GetObjectX(player_base), GetObjectY(player_base), GetObjectZ(player_base) )
//print("velo: " + Str(velo))
if (fov_add < velo*50) then fov_add = fov_add + 0.1
if (fov_add > velo*50) then fov_add = fov_add * 0.9
//SetCameraFOV(1, fov + fov_add)
if (spectator = false)
fb_speed = (GetRawKeyState(KEY_W) - GetRawKeyState(KEY_S) )
lr_speed = (GetRawKeyState(KEY_D) - GetRawKeyState(KEY_A) )
lr_speed = (GetRawKeyState(KEY_D) - GetRawKeyState(KEY_A) )
if(GetRawKeyPressed(KEY_SPACE))
Set3DPhysicsCharacterControllerJumpSpeed(player_base, jump_speed)
Jump3DPhysicsCharacterController(player_base)
endif
if(GetRawKeyPressed(KEY_R)) then Set3DPhysicsCharacterControllerPosition(player_base, start_x,start_y,start_z)
if(GetRawKeyPressed(KEY_T)) then Set3DPhysicsCharacterControllerPosition(player_base, GetObjectX(free_cam),GetObjectY(free_cam),GetObjectZ(free_cam))
if(GetRawKeyReleased(KEY_SPACE)) then Set3DPhysicsCharacterControllerJumpSpeed(player_base, 1.5)
Move3DPhysicsCharacterController( player_base, lr_speed, fb_speed, walk_speed_final)
Rotate3DPhysicsCharacterController(player_base, GetCameraAngleY(1))
if( NOT ObjectSphereCast( 0, GetObjectX(player_base), GetObjectY(player_base), GetObjectZ(player_base), GetObjectX(player_base), GetObjectY(player_base), GetObjectZ(player_base), 50) = 0)
//print('wall')
endif
SetCameraRotation(1, camera_ud, camera_lr, 0.0)
//cam_x = cam_x + (GetObjectX(player_base) - cam_x)*0.5
//cam_y = cam_y + (GetObjectY(player_base) - cam_y)*0.5
//cam_z = cam_z + (GetObjectZ(player_base) - cam_z)*0.5
//SetCameraPosition(1, cam_x, cam_y, cam_z)
SetCameraPosition(1, GetObjectX(player_base), GetObjectY(player_base), GetObjectZ(player_base))
else
spectator_speed = 2 + (GetRawKeyState(KEY_LEFT_SHIFT)*10)
MoveObjectLocalZ(free_cam, (GetRawKeyState(KEY_W) - GetRawKeyState(KEY_S) )*spectator_speed )
MoveObjectLocalX(free_cam, (GetRawKeyState(KEY_D) - GetRawKeyState(KEY_A) )*spectator_speed )
SetObjectRotation(free_cam, camera_ud, camera_lr, 0.0)
camera_lr = camera_lr + (GetRawMouseX()-GetWindowWidth()/2.0)*0.1
camera_ud = camera_ud + (GetRawMouseY()-GetWindowHeight()/2.0)*0.1
SetCameraRotation(1, camera_ud, camera_lr, 0.0)
SetCameraPosition(1, GetObjectX(free_cam), GetObjectY(free_cam), GetObjectZ(free_cam))
endif
SetRawMousePosition( GetWindowWidth()/2.0, GetWindowHeight()/2.0 )
The main issue is that the camera is choppy when the character controller is being moved:
Eisenstadt Studio: Eisenstadtstudio.com
Composers Page: Milesthatch.net