Переглянути джерело

REVIEWED: `UpdateCameraPro()` to use `Vector3`

Ray 2 роки тому
батько
коміт
8ca3212701
2 змінених файлів з 30 додано та 17 видалено
  1. 13 9
      examples/core/core_3d_camera_first_person.c
  2. 17 8
      src/rcamera.h

+ 13 - 9
examples/core/core_3d_camera_first_person.c

@@ -123,15 +123,19 @@ int main(void)
         // This new camera function allows custom movement/rotation values to be directly provided
         // as input parameters, with this approach, rcamera module is internally independent of raylib inputs
         UpdateCameraPro(&camera,
-            (IsKeyDown(KEY_W) || IsKeyDown(KEY_UP))*0.1f -      // Move forward-backward
-            (IsKeyDown(KEY_S) || IsKeyDown(KEY_DOWN))*0.1f,    
-            (IsKeyDown(KEY_D) || IsKeyDown(KEY_RIGHT))*0.1f -   // Move right-left
-            (IsKeyDown(KEY_A) || IsKeyDown(KEY_LEFT))*0.1f,
-            0.0f,                                               // Move up-down
-            GetMouseWheelMove()*2.0f,                           // Move to target (zoom)
-            GetMouseDelta().x*0.05f,                            // Rotation: yaw
-            GetMouseDelta().y*0.05f,                            // Rotation: pitch
-            0.0f);                                              // Rotation: roll
+            (Vector3){
+                (IsKeyDown(KEY_W) || IsKeyDown(KEY_UP))*0.1f -      // Move forward-backward
+                (IsKeyDown(KEY_S) || IsKeyDown(KEY_DOWN))*0.1f,    
+                (IsKeyDown(KEY_D) || IsKeyDown(KEY_RIGHT))*0.1f -   // Move right-left
+                (IsKeyDown(KEY_A) || IsKeyDown(KEY_LEFT))*0.1f,
+                0.0f                                                // Move up-down
+            },
+            (Vector3){
+                GetMouseDelta().x*0.05f,                            // Rotation: yaw
+                GetMouseDelta().y*0.05f,                            // Rotation: pitch
+                0.0f                                                // Rotation: roll
+            },
+            GetMouseWheelMove()*2.0f);                              // Move to target (zoom)
 */
         //----------------------------------------------------------------------------------
 

+ 17 - 8
src/rcamera.h

@@ -471,25 +471,34 @@ void UpdateCamera(Camera *camera, int mode)
 #endif // !CAMERA_STANDALONE
 
 // Update camera movement, movement/rotation values should be provided by user
-void UpdateCameraPro(Camera *camera, float moveForward, float moveRightLeft, float moveUpDown, float moveToTarget, float yaw, float pitch, float roll)
+void UpdateCameraPro(Camera *camera, Vector3 movement, Vector3 rotation, float zoom)
 {
+    // Required values
+    // movement.x - Move forward/backward
+    // movement.y - Move right/left
+    // movement.z - Move up/down
+    // rotation.x - yaw
+    // rotation.y - pitch
+    // rotation.z - roll
+    // zoom - Move towards target
+
     bool lockView = true;
     bool rotateAroundTarget = false;
     bool rotateUp = false;
     bool moveInWorldPlane = true;
 
     // Camera rotation
-    CameraPitch(camera, -pitch*DEG2RAD, lockView, rotateAroundTarget, rotateUp);
-    CameraYaw(camera, -yaw*DEG2RAD, rotateAroundTarget);
-    CameraRoll(camera, roll*DEG2RAD);
+    CameraPitch(camera, -rotation.y*DEG2RAD, lockView, rotateAroundTarget, rotateUp);
+    CameraYaw(camera, -rotation.x*DEG2RAD, rotateAroundTarget);
+    CameraRoll(camera, rotation.z*DEG2RAD);
 
     // Camera movement
-    CameraMoveForward(camera, moveForward, moveInWorldPlane);
-    CameraMoveRight(camera, moveRightLeft, moveInWorldPlane);
-    CameraMoveUp(camera, moveUpDown);
+    CameraMoveForward(camera, movement.x, moveInWorldPlane);
+    CameraMoveRight(camera, movement.y, moveInWorldPlane);
+    CameraMoveUp(camera, movement.z);
 
     // Zoom target distance
-    CameraMoveToTarget(camera, moveToTarget);
+    CameraMoveToTarget(camera, zoom);
 }
 
 #endif // CAMERA_IMPLEMENTATION