summaryrefslogtreecommitdiffhomepage
path: root/src/camera.h
diff options
context:
space:
mode:
authorvictorfisac <[email protected]>2017-07-15 16:05:00 +0200
committervictorfisac <[email protected]>2017-07-15 16:05:00 +0200
commiteb7b5e59bbaec0f556c4fde21cd0bf20819a8108 (patch)
tree37d153ffc14c5ba799169b91b2e14a32b06a710a /src/camera.h
parentf9277f216372179560c560427beccdd2e5c5d094 (diff)
parent910b4b5d53d9a904070807de5e8a66edadd939e3 (diff)
downloadraylib-eb7b5e59bbaec0f556c4fde21cd0bf20819a8108.tar.gz
raylib-eb7b5e59bbaec0f556c4fde21cd0bf20819a8108.zip
Merge branch 'master' of https://github.com/raysan5/raylib
Diffstat (limited to 'src/camera.h')
-rw-r--r--src/camera.h69
1 files changed, 27 insertions, 42 deletions
diff --git a/src/camera.h b/src/camera.h
index 87ba1942..8067e7bf 100644
--- a/src/camera.h
+++ b/src/camera.h
@@ -1,6 +1,6 @@
/*******************************************************************************************
*
-* raylib Camera System - Camera Modes Setup and Control Functions
+* raylib.camera - Camera system with multiple modes support
*
* NOTE: Memory footprint of this library is aproximately 52 bytes (global variables)
*
@@ -22,7 +22,7 @@
*
* LICENSE: zlib/libpng
*
-* Copyright (c) 2015-2016 Ramon Santamaria (@raysan5)
+* Copyright (c) 2015-2017 Ramon Santamaria (@raysan5)
*
* This software is provided "as-is", without any express or implied warranty. In no event
* will the authors be held liable for any damages arising from the use of this software.
@@ -181,7 +181,14 @@ void SetCameraMoveControls(int frontKey, int backKey,
// Types and Structures Definition
//----------------------------------------------------------------------------------
// Camera move modes (first person and third person cameras)
-typedef enum { MOVE_FRONT = 0, MOVE_BACK, MOVE_RIGHT, MOVE_LEFT, MOVE_UP, MOVE_DOWN } CameraMove;
+typedef enum {
+ MOVE_FRONT = 0,
+ MOVE_BACK,
+ MOVE_RIGHT,
+ MOVE_LEFT,
+ MOVE_UP,
+ MOVE_DOWN
+} CameraMove;
//----------------------------------------------------------------------------------
// Global Variables Definition
@@ -203,15 +210,14 @@ static int cameraMode = CAMERA_CUSTOM; // Current camera mode
#if defined(CAMERA_STANDALONE)
// NOTE: Camera controls depend on some raylib input functions
// TODO: Set your own input functions (used in UpdateCamera())
-static Vector2 GetMousePosition() { return (Vector2){ 0.0f, 0.0f }; }
-static void SetMousePosition(Vector2 pos) {}
+static void EnableCursor() {} // Unlock cursor
+static void DisableCursor() {} // Lock cursor
+
+static int IsKeyDown(int key) { return 0; }
+
static int IsMouseButtonDown(int button) { return 0;}
static int GetMouseWheelMove() { return 0; }
-static int GetScreenWidth() { return 1280; }
-static int GetScreenHeight() { return 720; }
-static void ShowCursor() {}
-static void HideCursor() {}
-static int IsKeyDown(int key) { return 0; }
+static Vector2 GetMousePosition() { return (Vector2){ 0.0f, 0.0f }; }
#endif
//----------------------------------------------------------------------------------
@@ -242,18 +248,23 @@ void SetCameraMode(Camera camera, int mode)
cameraAngle.y = -asinf(fabsf(dy)/distance.y); // Camera angle in plane XY (0 aligned with X, move positive CW)
// NOTE: Just testing what cameraAngle means
- //cameraAngle.x = 0.0f*DEG2RAD; // Camera angle in plane XZ (0 aligned with Z, move positive CCW)
+ //cameraAngle.x = 0.0f*DEG2RAD; // Camera angle in plane XZ (0 aligned with Z, move positive CCW)
//cameraAngle.y = -60.0f*DEG2RAD; // Camera angle in plane XY (0 aligned with X, move positive CW)
playerEyesPosition = camera.position.y;
+
+ // Lock cursor for first person and third person cameras
+ if ((mode == CAMERA_FIRST_PERSON) ||
+ (mode == CAMERA_THIRD_PERSON)) DisableCursor();
+ else EnableCursor();
cameraMode = mode;
}
// Update camera depending on selected mode
// NOTE: Camera controls depend on some raylib functions:
-// Mouse: GetMousePosition(), SetMousePosition(), IsMouseButtonDown(), GetMouseWheelMove()
-// System: GetScreenWidth(), GetScreenHeight(), ShowCursor(), HideCursor()
+// System: EnableCursor(), DisableCursor()
+// Mouse: IsMouseButtonDown(), GetMousePosition(), GetMouseWheelMove()
// Keys: IsKeyDown()
// TODO: Port to quaternion-based camera
void UpdateCamera(Camera *camera)
@@ -284,36 +295,10 @@ void UpdateCamera(Camera *camera)
if (cameraMode != CAMERA_CUSTOM)
{
- // Get screen size
- int screenWidth = GetScreenWidth();
- int screenHeight = GetScreenHeight();
-
- if ((cameraMode == CAMERA_FIRST_PERSON) ||
- (cameraMode == CAMERA_THIRD_PERSON))
- {
- HideCursor();
-
- if (mousePosition.x < (float)screenHeight/3.0f) SetMousePosition((Vector2){ screenWidth - screenHeight/3, mousePosition.y });
- else if (mousePosition.y < (float)screenHeight/3.0f) SetMousePosition((Vector2){ mousePosition.x, screenHeight - screenHeight/3 });
- else if (mousePosition.x > (screenWidth - (float)screenHeight/3.0f)) SetMousePosition((Vector2){ screenHeight/3, mousePosition.y });
- else if (mousePosition.y > (screenHeight - (float)screenHeight/3.0f)) SetMousePosition((Vector2){ mousePosition.x, screenHeight/3 });
- else
- {
- mousePositionDelta.x = mousePosition.x - previousMousePosition.x;
- mousePositionDelta.y = mousePosition.y - previousMousePosition.y;
- }
- }
- else // CAMERA_FREE, CAMERA_ORBITAL
- {
- ShowCursor();
-
- mousePositionDelta.x = mousePosition.x - previousMousePosition.x;
- mousePositionDelta.y = mousePosition.y - previousMousePosition.y;
- }
+ mousePositionDelta.x = mousePosition.x - previousMousePosition.x;
+ mousePositionDelta.y = mousePosition.y - previousMousePosition.y;
- // NOTE: We GetMousePosition() again because it can be modified by a previous SetMousePosition() call
- // If using directly mousePosition variable we have problems on CAMERA_FIRST_PERSON and CAMERA_THIRD_PERSON
- previousMousePosition = GetMousePosition();
+ previousMousePosition = mousePosition;
}
// Support for multiple automatic camera modes