|
|
@ -123,6 +123,7 @@ static int IsKeyDown(int key) { return 0; } |
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
|
|
|
|
// Select camera mode (multiple camera modes available) |
|
|
|
// TODO: Review hardcoded values when changing modes... |
|
|
|
void SetCameraMode(int mode) |
|
|
|
{ |
|
|
|
if ((cameraMode == CAMERA_FIRST_PERSON) && (mode == CAMERA_FREE)) |
|
|
@ -144,7 +145,7 @@ void SetCameraMode(int mode) |
|
|
|
cameraTargetDistance = 10; |
|
|
|
cameraAngle.x = 45 * DEG2RAD; |
|
|
|
cameraAngle.y = -40 * DEG2RAD; |
|
|
|
internalCamera.target = (Vector3){ 0, 0, 0}; |
|
|
|
internalCamera.target = (Vector3){ 0, 0, 0 }; |
|
|
|
ProcessCamera(&internalCamera, &internalCamera.position); |
|
|
|
|
|
|
|
ShowCursor(); |
|
|
@ -154,7 +155,7 @@ void SetCameraMode(int mode) |
|
|
|
cameraTargetDistance = 10; |
|
|
|
cameraAngle.x = 225 * DEG2RAD; |
|
|
|
cameraAngle.y = -40 * DEG2RAD; |
|
|
|
internalCamera.target = (Vector3){ 3, 0, 3}; |
|
|
|
internalCamera.target = (Vector3){ 0, 0, 0}; |
|
|
|
ProcessCamera(&internalCamera, &internalCamera.position); |
|
|
|
} |
|
|
|
|
|
|
@ -162,6 +163,7 @@ void SetCameraMode(int mode) |
|
|
|
} |
|
|
|
|
|
|
|
// Update camera with position |
|
|
|
// TODO: I don't like how this function works right now... not clear enough... |
|
|
|
Camera UpdateCamera(Vector3 *position) |
|
|
|
{ |
|
|
|
// Calculate camera |
|
|
@ -170,41 +172,70 @@ Camera UpdateCamera(Vector3 *position) |
|
|
|
return internalCamera; |
|
|
|
} |
|
|
|
|
|
|
|
void SetCameraMoveControls(int frontKey, int backKey, int leftKey, int rightKey, int upKey, int downKey) |
|
|
|
// Set internal camera position |
|
|
|
void SetCameraPosition(Vector3 position) |
|
|
|
{ |
|
|
|
cameraMoveControl[MOVE_FRONT] = frontKey; |
|
|
|
cameraMoveControl[MOVE_LEFT] = leftKey; |
|
|
|
cameraMoveControl[MOVE_BACK] = backKey; |
|
|
|
cameraMoveControl[MOVE_RIGHT] = rightKey; |
|
|
|
cameraMoveControl[MOVE_UP] = upKey; |
|
|
|
cameraMoveControl[MOVE_DOWN] = downKey; |
|
|
|
internalCamera.position = position; |
|
|
|
|
|
|
|
Vector3 v1 = internalCamera.position; |
|
|
|
Vector3 v2 = internalCamera.target; |
|
|
|
|
|
|
|
float dx = v2.x - v1.x; |
|
|
|
float dy = v2.y - v1.y; |
|
|
|
float dz = v2.z - v1.z; |
|
|
|
|
|
|
|
cameraTargetDistance = sqrt(dx*dx + dy*dy + dz*dz); |
|
|
|
} |
|
|
|
|
|
|
|
void SetCameraMouseSensitivity(float sensitivity) |
|
|
|
// Set internal camera target |
|
|
|
void SetCameraTarget(Vector3 target) |
|
|
|
{ |
|
|
|
mouseSensitivity = (sensitivity / 10000.0); |
|
|
|
internalCamera.target = target; |
|
|
|
|
|
|
|
Vector3 v1 = internalCamera.position; |
|
|
|
Vector3 v2 = internalCamera.target; |
|
|
|
|
|
|
|
float dx = v2.x - v1.x; |
|
|
|
float dy = v2.y - v1.y; |
|
|
|
float dz = v2.z - v1.z; |
|
|
|
|
|
|
|
cameraTargetDistance = sqrt(dx*dx + dy*dy + dz*dz); |
|
|
|
} |
|
|
|
|
|
|
|
// Set camera pan key to combine with mouse movement (free camera) |
|
|
|
void SetCameraPanControl(int panKey) |
|
|
|
{ |
|
|
|
panControlKey = panKey; |
|
|
|
} |
|
|
|
|
|
|
|
// Set camera alt key to combine with mouse movement (free camera) |
|
|
|
void SetCameraAltControl(int altKey) |
|
|
|
{ |
|
|
|
altControlKey = altKey; |
|
|
|
} |
|
|
|
|
|
|
|
// Set camera smooth zoom key to combine with mouse (free camera) |
|
|
|
void SetCameraSmoothZoomControl(int szKey) |
|
|
|
{ |
|
|
|
smoothZoomControlKey = szKey; |
|
|
|
} |
|
|
|
|
|
|
|
void SetCameraTarget(Vector3 target) |
|
|
|
// Set camera move controls (1st person and 3rd person cameras) |
|
|
|
void SetCameraMoveControls(int frontKey, int backKey, int leftKey, int rightKey, int upKey, int downKey) |
|
|
|
{ |
|
|
|
internalCamera.target = target; |
|
|
|
cameraMoveControl[MOVE_FRONT] = frontKey; |
|
|
|
cameraMoveControl[MOVE_LEFT] = leftKey; |
|
|
|
cameraMoveControl[MOVE_BACK] = backKey; |
|
|
|
cameraMoveControl[MOVE_RIGHT] = rightKey; |
|
|
|
cameraMoveControl[MOVE_UP] = upKey; |
|
|
|
cameraMoveControl[MOVE_DOWN] = downKey; |
|
|
|
} |
|
|
|
|
|
|
|
// Set camera mouse sensitivity (1st person and 3rd person cameras) |
|
|
|
void SetCameraMouseSensitivity(float sensitivity) |
|
|
|
{ |
|
|
|
mouseSensitivity = (sensitivity / 10000.0); |
|
|
|
} |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
|
// Module specific Functions Definition |
|
|
@ -298,7 +329,7 @@ static void ProcessCamera(Camera *camera, Vector3 *playerPosition) |
|
|
|
} |
|
|
|
else if ((camera->position.y < camera->target.y) && (camera->target.y > 0) && (mouseWheelMove > 0)) |
|
|
|
{ |
|
|
|
cameraTargetDistance -= (mouseWheelMove * CAMERA_SCROLL_SENSITIVITY); |
|
|
|
cameraTargetDistance -= (mouseWheelMove*CAMERA_SCROLL_SENSITIVITY); |
|
|
|
if (cameraTargetDistance < FREE_CAMERA_DISTANCE_MIN_CLAMP) cameraTargetDistance = FREE_CAMERA_DISTANCE_MIN_CLAMP; |
|
|
|
} |
|
|
|
|
|
|
|