Add basic keyboard-only aiming support

This commit is contained in:
360ied 2023-05-08 13:17:44 -04:00
parent aefa0e93e0
commit c0628d4a68
5 changed files with 24 additions and 5 deletions

View File

@ -21,6 +21,13 @@ static void Camera_OnRawMovement(float deltaX, float deltaY) {
cam_deltaX += deltaX; cam_deltaY += deltaY; cam_deltaX += deltaX; cam_deltaY += deltaY;
} }
void Camera_KeyLookUpdate(cc_bool up, cc_bool down, cc_bool right, cc_bool left) {
if (up) cam_deltaY -= 10.0;
if (down) cam_deltaY += 10.0;
if (right) cam_deltaX += 10.0;
if (left) cam_deltaX -= 10.0;
}
/*########################################################################################################################* /*########################################################################################################################*
*--------------------------------------------------Perspective camera-----------------------------------------------------* *--------------------------------------------------Perspective camera-----------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/

View File

@ -80,4 +80,5 @@ CC_API void Camera_Register(struct Camera* camera);
void Camera_CheckFocus(void); void Camera_CheckFocus(void);
void Camera_UpdateProjection(void); void Camera_UpdateProjection(void);
void Camera_SetFov(int fov); void Camera_SetFov(int fov);
void Camera_KeyLookUpdate(cc_bool up, cc_bool down, cc_bool right, cc_bool left);
#endif #endif

View File

@ -325,7 +325,8 @@ const cc_uint8 KeyBind_Defaults[KEYBIND_COUNT] = {
KEY_F5, KEY_F1, KEY_F7, 'C', KEY_F5, KEY_F1, KEY_F7, 'C',
KEY_LCTRL, KEY_LMOUSE, KEY_MMOUSE, KEY_RMOUSE, KEY_LCTRL, KEY_LMOUSE, KEY_MMOUSE, KEY_RMOUSE,
KEY_F6, KEY_LALT, KEY_F8, KEY_F6, KEY_LALT, KEY_F8,
'G', KEY_F10, 0 'G', KEY_F10, 0,
0, 0, 0, 0
}; };
static const char* const keybindNames[KEYBIND_COUNT] = { static const char* const keybindNames[KEYBIND_COUNT] = {
"Forward", "Back", "Left", "Right", "Forward", "Back", "Left", "Right",
@ -336,7 +337,8 @@ static const char* const keybindNames[KEYBIND_COUNT] = {
"ThirdPerson", "HideGUI", "AxisLines", "ZoomScrolling", "ThirdPerson", "HideGUI", "AxisLines", "ZoomScrolling",
"HalfSpeed", "DeleteBlock", "PickBlock", "PlaceBlock", "HalfSpeed", "DeleteBlock", "PickBlock", "PlaceBlock",
"AutoRotate", "HotbarSwitching", "SmoothCamera", "AutoRotate", "HotbarSwitching", "SmoothCamera",
"DropBlock", "IDOverlay", "BreakableLiquids" "DropBlock", "IDOverlay", "BreakableLiquids",
"LookUp", "LookDown", "LookRight", "LookLeft"
}; };
cc_bool KeyBind_IsPressed(KeyBind binding) { return Input_Pressed[KeyBinds[binding]]; } cc_bool KeyBind_IsPressed(KeyBind binding) { return Input_Pressed[KeyBinds[binding]]; }
@ -770,9 +772,17 @@ void InputHandler_PickBlock(void) {
void InputHandler_Tick(void) { void InputHandler_Tick(void) {
cc_bool left, middle, right; cc_bool left, middle, right;
cc_bool look_up, look_down, look_right, look_left;
TimeMS now = DateTime_CurrentUTC_MS(); TimeMS now = DateTime_CurrentUTC_MS();
int delta = (int)(now - input_lastClick); int delta = (int)(now - input_lastClick);
look_up = KeyBind_IsPressed(KEYBIND_LOOK_UP);
look_down = KeyBind_IsPressed(KEYBIND_LOOK_DOWN);
look_right = KeyBind_IsPressed(KEYBIND_LOOK_RIGHT);
look_left = KeyBind_IsPressed(KEYBIND_LOOK_LEFT);
Camera_KeyLookUpdate(look_up, look_down, look_right, look_left);
if (delta < 250) return; /* 4 times per second */ if (delta < 250) return; /* 4 times per second */
input_lastClick = now; input_lastClick = now;
if (Gui.InputGrab) return; if (Gui.InputGrab) return;

View File

@ -132,6 +132,7 @@ enum KeyBind_ {
KEYBIND_HALF_SPEED, KEYBIND_DELETE_BLOCK, KEYBIND_PICK_BLOCK, KEYBIND_PLACE_BLOCK, KEYBIND_HALF_SPEED, KEYBIND_DELETE_BLOCK, KEYBIND_PICK_BLOCK, KEYBIND_PLACE_BLOCK,
KEYBIND_AUTOROTATE, KEYBIND_HOTBAR_SWITCH, KEYBIND_SMOOTH_CAMERA, KEYBIND_AUTOROTATE, KEYBIND_HOTBAR_SWITCH, KEYBIND_SMOOTH_CAMERA,
KEYBIND_DROP_BLOCK, KEYBIND_IDOVERLAY, KEYBIND_BREAK_LIQUIDS, KEYBIND_DROP_BLOCK, KEYBIND_IDOVERLAY, KEYBIND_BREAK_LIQUIDS,
KEYBIND_LOOK_UP, KEYBIND_LOOK_DOWN, KEYBIND_LOOK_RIGHT, KEYBIND_LOOK_LEFT,
KEYBIND_COUNT KEYBIND_COUNT
}; };
typedef int KeyBind; typedef int KeyBind;

View File

@ -2005,11 +2005,11 @@ void OtherKeyBindingsScreen_Show(void) {
*------------------------------------------------MouseKeyBindingsScreen---------------------------------------------------* *------------------------------------------------MouseKeyBindingsScreen---------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
void MouseKeyBindingsScreen_Show(void) { void MouseKeyBindingsScreen_Show(void) {
static const cc_uint8 binds[3] = { KEYBIND_DELETE_BLOCK, KEYBIND_PICK_BLOCK, KEYBIND_PLACE_BLOCK }; static const cc_uint8 binds[7] = { KEYBIND_DELETE_BLOCK, KEYBIND_PICK_BLOCK, KEYBIND_PLACE_BLOCK, KEYBIND_LOOK_UP, KEYBIND_LOOK_DOWN, KEYBIND_LOOK_RIGHT, KEYBIND_LOOK_LEFT };
static const char* const descs[3] = { "Delete block", "Pick block", "Place block" }; static const char* const descs[7] = { "Delete block", "Pick block", "Place block", "Look Up", "Look Down", "Look Right", "Look Left" };
KeyBindsScreen_Reset(Menu_SwitchKeysOther, NULL, 260); KeyBindsScreen_Reset(Menu_SwitchKeysOther, NULL, 260);
KeyBindsScreen_SetLayout(-40, 10, -1); KeyBindsScreen_SetLayout(-140, 10, 5);
KeyBindsScreen.msgText = "&ePress escape to reset the binding"; KeyBindsScreen.msgText = "&ePress escape to reset the binding";
KeyBindsScreen_Show(Array_Elems(binds), binds, descs, "Mouse key bindings"); KeyBindsScreen_Show(Array_Elems(binds), binds, descs, "Mouse key bindings");
} }