|
|
@ -203,15 +203,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 |
|
|
|
|
|
|
|
//---------------------------------------------------------------------------------- |
|
|
@ -246,14 +245,19 @@ void SetCameraMode(Camera camera, int mode) |
|
|
|
//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: |
|
|
|
// System: EnableCursor(), DisableCursor() |
|
|
|
// Mouse: GetMousePosition(), SetMousePosition(), IsMouseButtonDown(), GetMouseWheelMove() |
|
|
|
// System: GetScreenWidth(), GetScreenHeight(), ShowCursor(), HideCursor() |
|
|
|
// Keys: IsKeyDown() |
|
|
|
// TODO: Port to quaternion-based camera |
|
|
|
void UpdateCamera(Camera *camera) |
|
|
@ -284,36 +288,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 |
|
|
|