From fcdb12093506e889dc2c38a8375cb9bb9ffd3e90 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Mon, 23 Mar 2020 20:24:20 +0100 Subject: [PATCH] Comment tweaks --- src/camera.h | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/src/camera.h b/src/camera.h index d54339ac9..f1ef42e91 100644 --- a/src/camera.h +++ b/src/camera.h @@ -197,22 +197,23 @@ typedef enum { MOVE_DOWN } CameraMove; +// Camera global state context data typedef struct { - int mode; // Current camera mode - float targetDistance; // Camera distance from position to target - float playerEyesPosition; // Default player eyes position from ground (in meters) - Vector2 angle; // Camera angle in plane XZ + int mode; // Current camera mode + float targetDistance; // Camera distance from position to target + float playerEyesPosition; // Default player eyes position from ground (in meters) + Vector2 angle; // Camera angle in plane XZ int moveControl[6]; - int smoothZoomControl; // raylib: KEY_LEFT_CONTROL - int altControl; // raylib: KEY_LEFT_ALT - int panControl; // raylib: MOUSE_MIDDLE_BUTTON + int smoothZoomControl; // raylib: KEY_LEFT_CONTROL + int altControl; // raylib: KEY_LEFT_ALT + int panControl; // raylib: MOUSE_MIDDLE_BUTTON } CameraData; //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- -static CameraData CAMERA = { +static CameraData CAMERA = { // Global CAMERA state context .mode = 0, .targetDistance = 0, .playerEyesPosition = 1.85f, @@ -228,7 +229,6 @@ static CameraData CAMERA = { //---------------------------------------------------------------------------------- #if defined(CAMERA_STANDALONE) // NOTE: Camera controls depend on some raylib input functions -// TODO: Set your own input functions (used in UpdateCamera()) static void EnableCursor() {} // Unlock cursor static void DisableCursor() {} // Lock cursor @@ -273,13 +273,13 @@ void SetCameraMode(Camera camera, int mode) // System: EnableCursor(), DisableCursor() // Mouse: IsMouseButtonDown(), GetMousePosition(), GetMouseWheelMove() // Keys: IsKeyDown() -// TODO: Port to quaternion-based camera +// TODO: Port to quaternion-based camera (?) 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 + // TODO: Compute CAMERA.targetDistance and CAMERA.angle here (?) // Mouse movement detection Vector2 mousePositionDelta = { 0.0f, 0.0f }; @@ -290,7 +290,6 @@ void UpdateCamera(Camera *camera) bool panKey = IsMouseButtonDown(CAMERA.panControl); bool altKey = IsKeyDown(CAMERA.altControl); bool szoomKey = IsKeyDown(CAMERA.smoothZoomControl); - bool direction[6] = { IsKeyDown(CAMERA.moveControl[MOVE_FRONT]), IsKeyDown(CAMERA.moveControl[MOVE_BACK]), IsKeyDown(CAMERA.moveControl[MOVE_RIGHT]), @@ -298,7 +297,7 @@ void UpdateCamera(Camera *camera) IsKeyDown(CAMERA.moveControl[MOVE_UP]), IsKeyDown(CAMERA.moveControl[MOVE_DOWN]) }; - // TODO: Consider touch inputs for camera + // TODO: Touch input detection (probably gestures system required) if (CAMERA.mode != CAMERA_CUSTOM) { @@ -309,19 +308,20 @@ void UpdateCamera(Camera *camera) } // Support for multiple automatic camera modes + // NOTE: In case of CAMERA_CUSTOM nothing happens here, user must update it manually switch (CAMERA.mode) { - case CAMERA_FREE: + case CAMERA_FREE: // Camera free controls, using standard 3d-content-creation scheme { // Camera zoom if ((CAMERA.targetDistance < CAMERA_FREE_DISTANCE_MAX_CLAMP) && (mouseWheelMove < 0)) { CAMERA.targetDistance -= (mouseWheelMove*CAMERA_MOUSE_SCROLL_SENSITIVITY); - if (CAMERA.targetDistance > CAMERA_FREE_DISTANCE_MAX_CLAMP) CAMERA.targetDistance = CAMERA_FREE_DISTANCE_MAX_CLAMP; } + // Camera looking down - // TODO: Review, weird comparisson of CAMERA.targetDistance == 120.0f? + // TODO: Review, weird comparison of CAMERA.targetDistance == 120.0f? else if ((camera->position.y > camera->target.y) && (CAMERA.targetDistance == CAMERA_FREE_DISTANCE_MAX_CLAMP) && (mouseWheelMove < 0)) { camera->target.x += mouseWheelMove*(camera->target.x - camera->position.x)*CAMERA_MOUSE_SCROLL_SENSITIVITY/CAMERA.targetDistance; @@ -397,8 +397,9 @@ void UpdateCamera(Camera *camera) camera->position.x = -sinf(CAMERA.angle.x)*CAMERA.targetDistance*cosf(CAMERA.angle.y) + camera->target.x; camera->position.y = -sinf(CAMERA.angle.y)*CAMERA.targetDistance + camera->target.y; camera->position.z = -cosf(CAMERA.angle.x)*CAMERA.targetDistance*cosf(CAMERA.angle.y) + camera->target.z; + } break; - case CAMERA_ORBITAL: + case CAMERA_ORBITAL: // Camera just orbits around target, only zoom allowed { CAMERA.angle.x += CAMERA_ORBITAL_SPEED; // Camera orbit angle CAMERA.targetDistance -= (mouseWheelMove*CAMERA_MOUSE_SCROLL_SENSITIVITY); // Camera zoom @@ -412,7 +413,7 @@ void UpdateCamera(Camera *camera) camera->position.z = cosf(CAMERA.angle.x)*CAMERA.targetDistance*cosf(CAMERA.angle.y) + camera->target.z; } break; - case CAMERA_FIRST_PERSON: + 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] - sinf(CAMERA.angle.x)*direction[MOVE_FRONT] - @@ -428,10 +429,6 @@ void UpdateCamera(Camera *camera) sinf(CAMERA.angle.x)*direction[MOVE_LEFT] - sinf(CAMERA.angle.x)*direction[MOVE_RIGHT])/PLAYER_MOVEMENT_SENSITIVITY; - bool isMoving = false; // Required for swinging - - for (int i = 0; i < 6; i++) if (direction[i]) { isMoving = true; break; } - // Camera orientation calculation CAMERA.angle.x += (mousePositionDelta.x*-CAMERA_MOUSE_MOVE_SENSITIVITY); CAMERA.angle.y += (mousePositionDelta.y*-CAMERA_MOUSE_MOVE_SENSITIVITY); @@ -448,8 +445,9 @@ void UpdateCamera(Camera *camera) camera->target.x = camera->position.x - transform.m12; camera->target.y = camera->position.y - transform.m13; camera->target.z = camera->position.z - transform.m14; - - if (isMoving) swingCounter++; + + // If movement detected (some key pressed), increase swinging + for (int i = 0; i < 6; i++) if (direction[i]) { swingCounter++; break; } // Camera position update // NOTE: On CAMERA_FIRST_PERSON player Y-movement is limited to player 'eyes position' @@ -458,9 +456,8 @@ void UpdateCamera(Camera *camera) camera->up.x = sinf(swingCounter/(CAMERA_FIRST_PERSON_STEP_TRIGONOMETRIC_DIVIDER*2))/CAMERA_FIRST_PERSON_WAVING_DIVIDER; camera->up.z = -sinf(swingCounter/(CAMERA_FIRST_PERSON_STEP_TRIGONOMETRIC_DIVIDER*2))/CAMERA_FIRST_PERSON_WAVING_DIVIDER; - } break; - case CAMERA_THIRD_PERSON: + case CAMERA_THIRD_PERSON: // Camera moves as in a third-person game, following target at a distance, controls are configurable { camera->position.x += (sinf(CAMERA.angle.x)*direction[MOVE_BACK] - sinf(CAMERA.angle.x)*direction[MOVE_FRONT] - @@ -497,6 +494,7 @@ void UpdateCamera(Camera *camera) camera->position.z = cosf(CAMERA.angle.x)*CAMERA.targetDistance*cosf(CAMERA.angle.y) + camera->target.z; } break; + case CAMERA_CUSTOM: break; default: break; } }