Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/camera.h b/src/camera.h
- index 15958ddd..b1913823 100644
- --- a/src/camera.h
- +++ b/src/camera.h
- @@ -83,6 +83,7 @@
- CAMERA_CUSTOM = 0,
- CAMERA_FREE,
- CAMERA_ORBITAL,
- + CAMERA_FLYING,
- CAMERA_FIRST_PERSON,
- CAMERA_THIRD_PERSON
- } CameraMode;
- @@ -164,6 +165,12 @@ void SetCameraMoveControls(int keyFront, int keyBack,
- // ORBITAL_CAMERA
- #define CAMERA_ORBITAL_SPEED 0.01f // Radians per frame
- +// FLYING CAMERA
- +//#define CAMERA_FLYING_MOUSE_SENSITIVITY 0.003f
- +#define CAMERA_FLYING_FOCUS_DISTANCE 25.0f
- +#define CAMERA_FLYING_MIN_CLAMP 89.0f
- +#define CAMERA_FLYING_MAX_CLAMP -89.0f
- +
- // FIRST_PERSON
- //#define CAMERA_FIRST_PERSON_MOUSE_SENSITIVITY 0.003f
- #define CAMERA_FIRST_PERSON_FOCUS_DISTANCE 25.0f
- @@ -263,7 +270,11 @@ void SetCameraMode(Camera camera, int mode)
- CAMERA.playerEyesPosition = camera.position.y; // Init player eyes position to camera Y position
- // Lock cursor for first person and third person cameras
- - if ((mode == CAMERA_FIRST_PERSON) || (mode == CAMERA_THIRD_PERSON)) DisableCursor();
- + if (
- + (mode == CAMERA_FLYING) ||
- + (mode == CAMERA_FIRST_PERSON) ||
- + (mode == CAMERA_THIRD_PERSON)
- + ) DisableCursor();
- else EnableCursor();
- CAMERA.mode = mode;
- @@ -411,6 +422,39 @@ void UpdateCamera(Camera *camera)
- camera->position.z = cosf(CAMERA.angle.x)*CAMERA.targetDistance*cosf(CAMERA.angle.y) + camera->target.z;
- } break;
- + case CAMERA_FLYING: // Camera moves as in a first-person game but not locked to ground, controls are configurable
- + {
- + camera->position.x += (sinf(CAMERA.angle.x)*direction[MOVE_BACK] -
- + sinf(CAMERA.angle.x)*direction[MOVE_FRONT] -
- + cosf(CAMERA.angle.x)*direction[MOVE_LEFT] +
- + cosf(CAMERA.angle.x)*direction[MOVE_RIGHT])/PLAYER_MOVEMENT_SENSITIVITY;
- +
- + camera->position.y += (sinf(CAMERA.angle.y)*direction[MOVE_FRONT] -
- + sinf(CAMERA.angle.y)*direction[MOVE_BACK] +
- + 1.0f*direction[MOVE_UP] - 1.0f*direction[MOVE_DOWN])/PLAYER_MOVEMENT_SENSITIVITY;
- +
- + camera->position.z += (cosf(CAMERA.angle.x)*direction[MOVE_BACK] -
- + cosf(CAMERA.angle.x)*direction[MOVE_FRONT] +
- + sinf(CAMERA.angle.x)*direction[MOVE_LEFT] -
- + sinf(CAMERA.angle.x)*direction[MOVE_RIGHT])/PLAYER_MOVEMENT_SENSITIVITY;
- +
- + // Camera orientation calculation
- + CAMERA.angle.x += (mousePositionDelta.x*-CAMERA_MOUSE_MOVE_SENSITIVITY);
- + CAMERA.angle.y += (mousePositionDelta.y*-CAMERA_MOUSE_MOVE_SENSITIVITY);
- +
- + // Angle clamp
- + if (CAMERA.angle.y > CAMERA_FLYING_MIN_CLAMP*DEG2RAD) CAMERA.angle.y = CAMERA_FLYING_MIN_CLAMP*DEG2RAD;
- + else if (CAMERA.angle.y < CAMERA_FLYING_MAX_CLAMP*DEG2RAD) CAMERA.angle.y = CAMERA_FLYING_MAX_CLAMP*DEG2RAD;
- +
- + // Recalculate camera target considering translation and rotation
- + Matrix translation = MatrixTranslate(0, 0, (CAMERA.targetDistance/CAMERA_FREE_PANNING_DIVIDER));
- + Matrix rotation = MatrixRotateXYZ((Vector3){ PI*2 - CAMERA.angle.y, PI*2 - CAMERA.angle.x, 0 });
- + Matrix transform = MatrixMultiply(translation, rotation);
- +
- + camera->target.x = camera->position.x - transform.m12;
- + camera->target.y = camera->position.y - transform.m13;
- + camera->target.z = camera->position.z - transform.m14;
- + } break;
- case CAMERA_FIRST_PERSON: // Camera moves as in a first-person game, controls are configurable
- {
- camera->position.x += (sinf(CAMERA.angle.x)*direction[MOVE_BACK] -
- diff --git a/src/raylib.h b/src/raylib.h
- index 24992a4f..bf5baa4d 100644
- --- a/src/raylib.h
- +++ b/src/raylib.h
- @@ -855,6 +855,7 @@ typedef enum {
- CAMERA_CUSTOM = 0,
- CAMERA_FREE,
- CAMERA_ORBITAL,
- + CAMERA_FLYING,
- CAMERA_FIRST_PERSON,
- CAMERA_THIRD_PERSON
- } CameraMode;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement