Add a system to allow the user to change the input mapping for the camera, pattern it off the other raylib functions, such as SetExitKey
This commit is contained in:
parent
5dedb27ce0
commit
ab8b2fb7a3
16
src/raylib.h
16
src/raylib.h
|
|
@ -895,6 +895,22 @@ typedef enum {
|
||||||
CAMERA_ORTHOGRAPHIC // Orthographic projection
|
CAMERA_ORTHOGRAPHIC // Orthographic projection
|
||||||
} CameraProjection;
|
} CameraProjection;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CAMERA_INPUT_FORWARD = 0,
|
||||||
|
CAMERA_INPUT_BACK,
|
||||||
|
CAMERA_INPUT_LEFT,
|
||||||
|
CAMERA_INPUT_RIGHT,
|
||||||
|
CAMERA_INPUT_PITCH_UP,
|
||||||
|
CAMERA_INPUT_PITCH_DOWN,
|
||||||
|
CAMERA_INPUT_YAW_LEFT,
|
||||||
|
CAMERA_INPUT_YAW_RIGHT,
|
||||||
|
CAMERA_INPUT_ROLL_LEFT,
|
||||||
|
CAMERA_INPUT_ROLL_RIGHT,
|
||||||
|
CAMERA_INPUT_ZOOM_IN,
|
||||||
|
CAMERA_INPUT_ZOOM_OUT,
|
||||||
|
}CameraInputKeys;
|
||||||
|
#define CAMERA_MAX_INPUT_KEYS 12
|
||||||
|
|
||||||
// N-patch layout
|
// N-patch layout
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NPATCH_NINE_PATCH = 0, // Npatch layout: 3x3 tiles
|
NPATCH_NINE_PATCH = 0, // Npatch layout: 3x3 tiles
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,22 @@
|
||||||
CAMERA_PERSPECTIVE = 0,
|
CAMERA_PERSPECTIVE = 0,
|
||||||
CAMERA_ORTHOGRAPHIC
|
CAMERA_ORTHOGRAPHIC
|
||||||
} CameraProjection;
|
} CameraProjection;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CAMERA_INPUT_FORWARD = 0,
|
||||||
|
CAMERA_INPUT_BACK,
|
||||||
|
CAMERA_INPUT_LEFT,
|
||||||
|
CAMERA_INPUT_RIGHT,
|
||||||
|
CAMERA_INPUT_PITCH_UP,
|
||||||
|
CAMERA_INPUT_PITCH_DOWN,
|
||||||
|
CAMERA_INPUT_YAW_LEFT,
|
||||||
|
CAMERA_INPUT_YAW_RIGHT,
|
||||||
|
CAMERA_INPUT_ROLL_LEFT,
|
||||||
|
CAMERA_INPUT_ROLL_RIGHT,
|
||||||
|
CAMERA_INPUT_ZOOM_IN,
|
||||||
|
CAMERA_INPUT_ZOOM_OUT,
|
||||||
|
}CameraInputKeys;
|
||||||
|
#define CAMERA_MAX_INPUT_KEYS 12
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -130,6 +146,9 @@ void CameraRoll(Camera *camera, float angle);
|
||||||
Matrix GetCameraViewMatrix(Camera *camera);
|
Matrix GetCameraViewMatrix(Camera *camera);
|
||||||
Matrix GetCameraProjectionMatrix(Camera* camera, float aspect);
|
Matrix GetCameraProjectionMatrix(Camera* camera, float aspect);
|
||||||
|
|
||||||
|
void CameraSetup();
|
||||||
|
void SetCameraInputKey(int input, int key);
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -192,6 +211,8 @@ Matrix GetCameraProjectionMatrix(Camera* camera, float aspect);
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
//...
|
//...
|
||||||
|
|
||||||
|
static int CameraInputMap[CAMERA_MAX_INPUT_KEYS] = { 0 };
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module specific Functions Declaration
|
// Module specific Functions Declaration
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
@ -200,6 +221,33 @@ Matrix GetCameraProjectionMatrix(Camera* camera, float aspect);
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module Functions Definition
|
// Module Functions Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// initializes the camera input keys used in UpdateCamera
|
||||||
|
void CameraSetup()
|
||||||
|
{
|
||||||
|
CameraInputMap[CAMERA_INPUT_FORWARD] = KEY_W;
|
||||||
|
CameraInputMap[CAMERA_INPUT_BACK] = KEY_S;
|
||||||
|
CameraInputMap[CAMERA_INPUT_LEFT] = KEY_A;
|
||||||
|
CameraInputMap[CAMERA_INPUT_RIGHT] = KEY_D;
|
||||||
|
CameraInputMap[CAMERA_INPUT_PITCH_UP] = KEY_UP;
|
||||||
|
CameraInputMap[CAMERA_INPUT_PITCH_DOWN] = KEY_DOWN;
|
||||||
|
CameraInputMap[CAMERA_INPUT_YAW_LEFT] = KEY_LEFT;
|
||||||
|
CameraInputMap[CAMERA_INPUT_YAW_RIGHT] = KEY_RIGHT;
|
||||||
|
CameraInputMap[CAMERA_INPUT_ROLL_LEFT] = KEY_Q;
|
||||||
|
CameraInputMap[CAMERA_INPUT_ROLL_RIGHT] = KEY_E;
|
||||||
|
CameraInputMap[CAMERA_INPUT_ZOOM_IN] = KEY_KP_SUBTRACT;
|
||||||
|
CameraInputMap[CAMERA_INPUT_ZOOM_OUT] = KEY_KP_ADD;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets the input key mapping
|
||||||
|
void SetCameraInputKey(int input, int key)
|
||||||
|
{
|
||||||
|
if (input < 0 || input >= CAMERA_MAX_INPUT_KEYS)
|
||||||
|
return;
|
||||||
|
|
||||||
|
CameraInputMap[input] = key;
|
||||||
|
}
|
||||||
|
|
||||||
// Returns the cameras forward vector (normalized)
|
// Returns the cameras forward vector (normalized)
|
||||||
Vector3 GetCameraForward(Camera *camera)
|
Vector3 GetCameraForward(Camera *camera)
|
||||||
{
|
{
|
||||||
|
|
@ -420,28 +468,28 @@ void UpdateCamera(Camera *camera, int mode)
|
||||||
bool rotateUp = mode == CAMERA_FREE;
|
bool rotateUp = mode == CAMERA_FREE;
|
||||||
|
|
||||||
// Camera rotation
|
// Camera rotation
|
||||||
if (IsKeyDown(KEY_DOWN)) CameraPitch(camera, -CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_PITCH_DOWN])) CameraPitch(camera, -CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
|
||||||
if (IsKeyDown(KEY_UP)) CameraPitch(camera, CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_PITCH_UP])) CameraPitch(camera, CAMERA_ROTATION_SPEED, lockView, rotateAroundTarget, rotateUp);
|
||||||
if (IsKeyDown(KEY_RIGHT)) CameraYaw(camera, -CAMERA_ROTATION_SPEED, rotateAroundTarget);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_YAW_RIGHT])) CameraYaw(camera, -CAMERA_ROTATION_SPEED, rotateAroundTarget);
|
||||||
if (IsKeyDown(KEY_LEFT)) CameraYaw(camera, CAMERA_ROTATION_SPEED, rotateAroundTarget);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_YAW_LEFT])) CameraYaw(camera, CAMERA_ROTATION_SPEED, rotateAroundTarget);
|
||||||
if (IsKeyDown(KEY_Q)) CameraRoll(camera, -CAMERA_ROTATION_SPEED);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_ROLL_LEFT])) CameraRoll(camera, -CAMERA_ROTATION_SPEED);
|
||||||
if (IsKeyDown(KEY_E)) CameraRoll(camera, CAMERA_ROTATION_SPEED);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_ROLL_RIGHT])) CameraRoll(camera, CAMERA_ROTATION_SPEED);
|
||||||
|
|
||||||
CameraYaw(camera, -mousePositionDelta.x*CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget);
|
CameraYaw(camera, -mousePositionDelta.x*CAMERA_MOUSE_MOVE_SENSITIVITY, rotateAroundTarget);
|
||||||
CameraPitch(camera, -mousePositionDelta.y*CAMERA_MOUSE_MOVE_SENSITIVITY, lockView, rotateAroundTarget, rotateUp);
|
CameraPitch(camera, -mousePositionDelta.y*CAMERA_MOUSE_MOVE_SENSITIVITY, lockView, rotateAroundTarget, rotateUp);
|
||||||
|
|
||||||
// Camera movement
|
// Camera movement
|
||||||
if (IsKeyDown(KEY_W)) CameraMoveForward(camera, CAMERA_MOVE_SPEED, moveInWorldPlane);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_FORWARD])) CameraMoveForward(camera, CAMERA_MOVE_SPEED, moveInWorldPlane);
|
||||||
if (IsKeyDown(KEY_A)) CameraMoveRight(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_LEFT])) CameraMoveRight(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane);
|
||||||
if (IsKeyDown(KEY_S)) CameraMoveForward(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_BACK])) CameraMoveForward(camera, -CAMERA_MOVE_SPEED, moveInWorldPlane);
|
||||||
if (IsKeyDown(KEY_D)) CameraMoveRight(camera, CAMERA_MOVE_SPEED, moveInWorldPlane);
|
if (IsKeyDown(CameraInputMap[CAMERA_INPUT_RIGHT])) CameraMoveRight(camera, CAMERA_MOVE_SPEED, moveInWorldPlane);
|
||||||
//if (IsKeyDown(KEY_SPACE)) CameraMoveUp(camera, CAMERA_MOVE_SPEED);
|
//if (IsKeyDown(KEY_SPACE)) CameraMoveUp(camera, CAMERA_MOVE_SPEED);
|
||||||
//if (IsKeyDown(KEY_LEFT_CONTROL)) CameraMoveUp(camera, -CAMERA_MOVE_SPEED);
|
//if (IsKeyDown(KEY_LEFT_CONTROL)) CameraMoveUp(camera, -CAMERA_MOVE_SPEED);
|
||||||
|
|
||||||
// Zoom target distance
|
// Zoom target distance
|
||||||
CameraMoveToTarget(camera, -GetMouseWheelMove());
|
CameraMoveToTarget(camera, -GetMouseWheelMove());
|
||||||
if (IsKeyPressed(KEY_KP_SUBTRACT)) CameraMoveToTarget(camera, 2.0f);
|
if (IsKeyPressed(CameraInputMap[CAMERA_INPUT_ZOOM_IN])) CameraMoveToTarget(camera, 2.0f);
|
||||||
if (IsKeyPressed(KEY_KP_ADD)) CameraMoveToTarget(camera, -2.0f);
|
if (IsKeyPressed(CameraInputMap[CAMERA_INPUT_ZOOM_OUT])) CameraMoveToTarget(camera, -2.0f);
|
||||||
}
|
}
|
||||||
#endif // !CAMERA_STANDALONE
|
#endif // !CAMERA_STANDALONE
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -838,6 +838,9 @@ void InitWindow(int width, int height, const char *title)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(SUPPORT_CAMERA_SYSTEM)
|
||||||
|
CameraSetup();
|
||||||
|
#endif
|
||||||
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) || defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
|
#if defined(PLATFORM_DESKTOP) || defined(PLATFORM_WEB) || defined(PLATFORM_RPI) || defined(PLATFORM_DRM)
|
||||||
// Initialize graphics device (display device and OpenGL context)
|
// Initialize graphics device (display device and OpenGL context)
|
||||||
// NOTE: returns true if window and graphic device has been initialized successfully
|
// NOTE: returns true if window and graphic device has been initialized successfully
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user