diff options
| author | Nikolay Krasheninnikov <[email protected]> | 2021-09-10 12:51:59 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-09-10 11:51:59 +0200 |
| commit | 18d73eef195b0f7db307ee321031f8843e65cd50 (patch) | |
| tree | efe474e8fbe48c3ff0196b161d5090273b7c18dc /src/camera.h | |
| parent | 7bf31dd46897f4fd590b9db275caeb42992ccd47 (diff) | |
| download | raylib-18d73eef195b0f7db307ee321031f8843e65cd50.tar.gz raylib-18d73eef195b0f7db307ee321031f8843e65cd50.zip | |
Fixes target direction for first person camera mode. (#1977)
Co-authored-by: Nikolai Krasheninnikov <[email protected]>
Diffstat (limited to 'src/camera.h')
| -rw-r--r-- | src/camera.h | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/camera.h b/src/camera.h index 08448089..6aad6c2f 100644 --- a/src/camera.h +++ b/src/camera.h @@ -204,6 +204,7 @@ typedef struct { float targetDistance; // Camera distance from position to target float playerEyesPosition; // Player eyes position from ground (in meters) Vector2 angle; // Camera angle in plane XZ + Vector2 previousMousePosition; // Previous mouse position // Camera movement control keys int moveControl[6]; // Move controls (CAMERA_FIRST_PERSON) @@ -220,6 +221,7 @@ static CameraData CAMERA = { // Global CAMERA state context .targetDistance = 0, .playerEyesPosition = 1.85f, .angle = { 0 }, + .previousMousePosition = { 0 }, .moveControl = { 'W', 'S', 'D', 'A', 'E', 'Q' }, .smoothZoomControl = 341, // raylib: KEY_LEFT_CONTROL .altControl = 342, // raylib: KEY_LEFT_ALT @@ -263,6 +265,8 @@ void SetCameraMode(Camera camera, int mode) CAMERA.playerEyesPosition = camera.position.y; // Init player eyes position to camera Y position + CAMERA.previousMousePosition = GetMousePosition(); // Init mouse position + // Lock cursor for first person and third person cameras if ((mode == CAMERA_FIRST_PERSON) || (mode == CAMERA_THIRD_PERSON)) DisableCursor(); else EnableCursor(); @@ -279,7 +283,6 @@ void SetCameraMode(Camera camera, int mode) void UpdateCamera(Camera *camera) { static int swingCounter = 0; // Used for 1st person swinging movement - static Vector2 previousMousePosition = { 0.0f, 0.0f }; // TODO: Compute CAMERA.targetDistance and CAMERA.angle here (?) @@ -302,10 +305,10 @@ void UpdateCamera(Camera *camera) if (CAMERA.mode != CAMERA_CUSTOM) { - mousePositionDelta.x = mousePosition.x - previousMousePosition.x; - mousePositionDelta.y = mousePosition.y - previousMousePosition.y; + mousePositionDelta.x = mousePosition.x - CAMERA.previousMousePosition.x; + mousePositionDelta.y = mousePosition.y - CAMERA.previousMousePosition.y; - previousMousePosition = mousePosition; + CAMERA.previousMousePosition = mousePosition; } // Support for multiple automatic camera modes |
