mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 02:56:09 -04:00
Treat middle mouse button as a key instead.
This means you can rebind 'pick block' to another key, and then assign a hotkey to middle mouse
This commit is contained in:
parent
11e44e9a6b
commit
d82b40bb0b
@ -560,7 +560,7 @@ static void Game_Render3D(double delta, float t) {
|
||||
Entities_RenderHoveredNames(delta);
|
||||
|
||||
left = InputHandler_IsMousePressed(MOUSE_LEFT);
|
||||
middle = InputHandler_IsMousePressed(MOUSE_MIDDLE);
|
||||
middle = KeyBind_IsPressed(KEYBIND_PICK_BLOCK);
|
||||
right = InputHandler_IsMousePressed(MOUSE_RIGHT);
|
||||
|
||||
InputHandler_PickBlocks(true, left, middle, right);
|
||||
|
@ -42,7 +42,7 @@ const char* const Key_Names[KEY_COUNT] = {
|
||||
"KeypadAdd", "KeypadDecimal", "KeypadEnter",
|
||||
"Tilde", "Minus", "Plus", "BracketLeft", "BracketRight", "Slash",
|
||||
"Semicolon", "Quote", "Comma", "Period", "BackSlash",
|
||||
"XButton1", "XButton2",
|
||||
"XButton1", "XButton2", "MouseMid"
|
||||
};
|
||||
|
||||
/* TODO: Should this only be shown in GUI? not saved to disc? */
|
||||
@ -64,7 +64,7 @@ const char* const Key_Names[KEY_COUNT] = {
|
||||
"5", "6", "7", "8", "9",
|
||||
"GRAVE", "MINUS", "PLUS", "LBRACKET", "RBRACKET",
|
||||
"SEMICOLON", "APOSTROPHE", "COMMA", "PERIOD", "SLASH", "BACKSLASH",
|
||||
"XBUTTON1", "XBUTTON2",
|
||||
"XBUTTON1", "XBUTTON2", "MOUSEMID"
|
||||
};*/
|
||||
|
||||
void Key_SetPressed(Key key, bool pressed) {
|
||||
@ -128,7 +128,7 @@ const cc_uint8 KeyBind_Defaults[KEYBIND_COUNT] = {
|
||||
KEY_LSHIFT, 'X', 'Z', 'Q', 'E',
|
||||
KEY_LALT, KEY_F3, KEY_F12, KEY_F11,
|
||||
KEY_F5, KEY_F1, KEY_F7, 'C',
|
||||
KEY_LCTRL, 0, 0, 0,
|
||||
KEY_LCTRL, 0, KEY_MOUSEMID, 0,
|
||||
KEY_F6, KEY_LALT, KEY_F8,
|
||||
'G', KEY_F10, 0
|
||||
};
|
||||
@ -139,7 +139,7 @@ static const char* const keybindNames[KEYBIND_COUNT] = {
|
||||
"Speed", "NoClip", "Fly", "FlyUp", "FlyDown",
|
||||
"ExtInput", "HideFPS", "Screenshot", "Fullscreen",
|
||||
"ThirdPerson", "HideGUI", "AxisLines", "ZoomScrolling",
|
||||
"HalfSpeed", "MouseLeft", "MouseMiddle", "MouseRight",
|
||||
"HalfSpeed", "MouseLeft", "PickBlock", "MouseRight",
|
||||
"AutoRotate", "HotbarSwitching", "SmoothCamera",
|
||||
"DropBlock", "IDOverlay", "BreakableLiquids"
|
||||
};
|
||||
|
@ -39,7 +39,7 @@ enum Key_ {
|
||||
KEY_TILDE, KEY_MINUS, KEY_EQUALS, KEY_LBRACKET, KEY_RBRACKET, KEY_SLASH,
|
||||
KEY_SEMICOLON, KEY_QUOTE, KEY_COMMA, KEY_PERIOD, KEY_BACKSLASH,
|
||||
|
||||
KEY_XBUTTON1, KEY_XBUTTON2, /* so these can be used for hotkeys */
|
||||
KEY_XBUTTON1, KEY_XBUTTON2, KEY_MOUSEMID, /* so these can be used for hotkeys */
|
||||
KEY_COUNT
|
||||
};
|
||||
typedef int Key;
|
||||
@ -100,7 +100,7 @@ enum KeyBind_ {
|
||||
KEYBIND_SPEED, KEYBIND_NOCLIP, KEYBIND_FLY, KEYBIND_FLY_UP, KEYBIND_FLY_DOWN,
|
||||
KEYBIND_EXT_INPUT, KEYBIND_HIDE_FPS, KEYBIND_SCREENSHOT, KEYBIND_FULLSCREEN,
|
||||
KEYBIND_THIRD_PERSON, KEYBIND_HIDE_GUI, KEYBIND_AXIS_LINES, KEYBIND_ZOOM_SCROLL,
|
||||
KEYBIND_HALF_SPEED, KEYBIND_MOUSE_LEFT, KEYBIND_MOUSE_MIDDLE, KEYBIND_MOUSE_RIGHT,
|
||||
KEYBIND_HALF_SPEED, KEYBIND_MOUSE_LEFT, KEYBIND_PICK_BLOCK, KEYBIND_MOUSE_RIGHT,
|
||||
KEYBIND_AUTOROTATE, KEYBIND_HOTBAR_SWITCH, KEYBIND_SMOOTH_CAMERA,
|
||||
KEYBIND_DROP_BLOCK, KEYBIND_IDOVERLAY, KEYBIND_BREAK_LIQUIDS,
|
||||
KEYBIND_COUNT
|
||||
|
@ -35,7 +35,6 @@ bool InputHandler_IsMousePressed(MouseButton button) {
|
||||
|
||||
/* Key --> mouse mappings */
|
||||
if (button == MOUSE_LEFT && KeyBind_IsPressed(KEYBIND_MOUSE_LEFT)) return true;
|
||||
if (button == MOUSE_MIDDLE && KeyBind_IsPressed(KEYBIND_MOUSE_MIDDLE)) return true;
|
||||
if (button == MOUSE_RIGHT && KeyBind_IsPressed(KEYBIND_MOUSE_RIGHT)) return true;
|
||||
return false;
|
||||
}
|
||||
@ -201,6 +200,8 @@ static bool InputHandler_HandleCoreKey(Key key) {
|
||||
} else {
|
||||
InputHandler_CycleDistanceForwards(viewDists, count);
|
||||
}
|
||||
} else if (key == KeyBinds[KEYBIND_PICK_BLOCK]) {
|
||||
InputHandler_PickBlocks(false, false, true, false);
|
||||
} else if (key == KEY_F5 && Game_ClassicMode) {
|
||||
int weather = Env.Weather == WEATHER_SUNNY ? WEATHER_RAINY : WEATHER_SUNNY;
|
||||
Env_SetWeather(weather);
|
||||
@ -408,8 +409,7 @@ static void InputHandler_MouseDown(void* obj, int btn) {
|
||||
}
|
||||
}
|
||||
|
||||
InputHandler_PickBlocks(false, btn == MOUSE_LEFT,
|
||||
btn == MOUSE_MIDDLE, btn == MOUSE_RIGHT);
|
||||
InputHandler_PickBlocks(false, btn == MOUSE_LEFT, false, btn == MOUSE_RIGHT);
|
||||
}
|
||||
|
||||
static void InputHandler_MouseUp(void* obj, int btn) {
|
||||
@ -429,12 +429,11 @@ static void InputHandler_MouseUp(void* obj, int btn) {
|
||||
|
||||
static bool InputHandler_SimulateMouse(Key key, bool pressed) {
|
||||
Key left = KeyBinds[KEYBIND_MOUSE_LEFT];
|
||||
Key middle = KeyBinds[KEYBIND_MOUSE_MIDDLE];
|
||||
Key right = KeyBinds[KEYBIND_MOUSE_RIGHT];
|
||||
MouseButton btn;
|
||||
if (!(key == left || key == middle || key == right)) return false;
|
||||
if (!(key == left || key == right)) return false;
|
||||
|
||||
btn = key == left ? MOUSE_LEFT : key == middle ? MOUSE_MIDDLE : MOUSE_RIGHT;
|
||||
btn = key == left ? MOUSE_LEFT : MOUSE_RIGHT;
|
||||
if (pressed) { InputHandler_MouseDown(NULL, btn); }
|
||||
else { InputHandler_MouseUp(NULL, btn); }
|
||||
return true;
|
||||
|
@ -1758,8 +1758,8 @@ static void MouseKeyBindingsScreen_Init(struct KeyBindingsScreen* s) {
|
||||
}
|
||||
|
||||
void MouseKeyBindingsScreen_Show(void) {
|
||||
static const cc_uint8 binds[3] = { KEYBIND_MOUSE_LEFT, KEYBIND_MOUSE_MIDDLE, KEYBIND_MOUSE_RIGHT };
|
||||
static const char* descs[3] = { "Left", "Middle", "Right" };
|
||||
static const cc_uint8 binds[3] = { KEYBIND_MOUSE_LEFT, KEYBIND_PICK_BLOCK, KEYBIND_MOUSE_RIGHT };
|
||||
static const char* descs[3] = { "Left", "Pick block", "Right" };
|
||||
KeyBindingsScreen_Show(Array_Elems(binds), binds, descs, MouseKeyBindingsScreen_Init);
|
||||
}
|
||||
|
||||
|
26
src/Window.c
26
src/Window.c
@ -268,7 +268,7 @@ static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wPara
|
||||
/* Set before position change, in case mouse buttons changed when outside window */
|
||||
Mouse_SetPressed(MOUSE_LEFT, (wParam & 0x01) != 0);
|
||||
Mouse_SetPressed(MOUSE_RIGHT, (wParam & 0x02) != 0);
|
||||
Mouse_SetPressed(MOUSE_MIDDLE, (wParam & 0x10) != 0);
|
||||
Key_SetPressed(KEY_MOUSEMID, (wParam & 0x10) != 0);
|
||||
/* TODO: do we need to set XBUTTON1/XBUTTON2 here */
|
||||
Mouse_SetPosition(LOWORD(lParam), HIWORD(lParam));
|
||||
break;
|
||||
@ -281,7 +281,7 @@ static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wPara
|
||||
case WM_LBUTTONDOWN:
|
||||
Mouse_SetPressed(MOUSE_LEFT, true); break;
|
||||
case WM_MBUTTONDOWN:
|
||||
Mouse_SetPressed(MOUSE_MIDDLE, true); break;
|
||||
Key_SetPressed(KEY_MOUSEMID, true); break;
|
||||
case WM_RBUTTONDOWN:
|
||||
Mouse_SetPressed(MOUSE_RIGHT, true); break;
|
||||
case WM_XBUTTONDOWN:
|
||||
@ -291,7 +291,7 @@ static LRESULT CALLBACK Window_Procedure(HWND handle, UINT message, WPARAM wPara
|
||||
case WM_LBUTTONUP:
|
||||
Mouse_SetPressed(MOUSE_LEFT, false); break;
|
||||
case WM_MBUTTONUP:
|
||||
Mouse_SetPressed(MOUSE_MIDDLE, false); break;
|
||||
Key_SetPressed(KEY_MOUSEMID, false); break;
|
||||
case WM_RBUTTONUP:
|
||||
Mouse_SetPressed(MOUSE_RIGHT, false); break;
|
||||
case WM_XBUTTONUP:
|
||||
@ -1097,7 +1097,7 @@ void Window_ProcessEvents(void) {
|
||||
|
||||
case ButtonPress:
|
||||
if (e.xbutton.button == 1) Mouse_SetPressed(MOUSE_LEFT, true);
|
||||
else if (e.xbutton.button == 2) Mouse_SetPressed(MOUSE_MIDDLE, true);
|
||||
else if (e.xbutton.button == 2) Key_SetPressed(KEY_MOUSEMID, true);
|
||||
else if (e.xbutton.button == 3) Mouse_SetPressed(MOUSE_RIGHT, true);
|
||||
else if (e.xbutton.button == 4) Mouse_SetWheel(Mouse_Wheel + 1);
|
||||
else if (e.xbutton.button == 5) Mouse_SetWheel(Mouse_Wheel - 1);
|
||||
@ -1107,7 +1107,7 @@ void Window_ProcessEvents(void) {
|
||||
|
||||
case ButtonRelease:
|
||||
if (e.xbutton.button == 1) Mouse_SetPressed(MOUSE_LEFT, false);
|
||||
else if (e.xbutton.button == 2) Mouse_SetPressed(MOUSE_MIDDLE, false);
|
||||
else if (e.xbutton.button == 2) Key_SetPressed(KEY_MOUSEMID, false);
|
||||
else if (e.xbutton.button == 3) Mouse_SetPressed(MOUSE_RIGHT, false);
|
||||
else if (e.xbutton.button == 6) Key_SetPressed(KEY_XBUTTON1, false);
|
||||
else if (e.xbutton.button == 7) Key_SetPressed(KEY_XBUTTON2, false);
|
||||
@ -1661,7 +1661,7 @@ static OSStatus Window_ProcessMouseEvent(EventRef inEvent) {
|
||||
case kEventMouseButtonSecondary:
|
||||
Mouse_SetPressed(MOUSE_RIGHT, down); break;
|
||||
case kEventMouseButtonTertiary:
|
||||
Mouse_SetPressed(MOUSE_MIDDLE, down); break;
|
||||
Key_SetPressed(KEY_MOUSEMID, down); break;
|
||||
}
|
||||
return eventNotHandledErr;
|
||||
|
||||
@ -2226,7 +2226,7 @@ static void Window_HandleMouseEvent(const SDL_Event* e) {
|
||||
case SDL_BUTTON_LEFT:
|
||||
Mouse_SetPressed(MOUSE_LEFT, pressed); break;
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
Mouse_SetPressed(MOUSE_MIDDLE, pressed); break;
|
||||
Key_SetPressed(KEY_MOUSEMID, pressed); break;
|
||||
case SDL_BUTTON_RIGHT:
|
||||
Mouse_SetPressed(MOUSE_RIGHT, pressed); break;
|
||||
case SDL_BUTTON_X1:
|
||||
@ -2403,16 +2403,14 @@ static EM_BOOL Window_MouseWheel(int type, const EmscriptenWheelEvent* ev, void*
|
||||
}
|
||||
|
||||
static EM_BOOL Window_MouseButton(int type, const EmscriptenMouseEvent* ev, void* data) {
|
||||
MouseButton btn;
|
||||
bool down = type == EMSCRIPTEN_EVENT_MOUSEDOWN;
|
||||
Window_CorrectFocus();
|
||||
|
||||
switch (ev->button) {
|
||||
case 0: btn = MOUSE_LEFT; break;
|
||||
case 1: btn = MOUSE_MIDDLE; break;
|
||||
case 2: btn = MOUSE_RIGHT; break;
|
||||
default: return false;
|
||||
case 0: Mouse_SetPressed(MOUSE_LEFT, down); break;
|
||||
case 1: Input_SetPressed(KEY_MOUSEMID, down); break;
|
||||
case 2: Mouse_SetPressed(MOUSE_RIGHT, down); break;
|
||||
}
|
||||
Mouse_SetPressed(btn, type == EMSCRIPTEN_EVENT_MOUSEDOWN);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2420,7 +2418,7 @@ static EM_BOOL Window_MouseMove(int type, const EmscriptenMouseEvent* ev, void*
|
||||
/* Set before position change, in case mouse buttons changed when outside window */
|
||||
Mouse_SetPressed(MOUSE_LEFT, (ev->buttons & 0x01) != 0);
|
||||
Mouse_SetPressed(MOUSE_RIGHT, (ev->buttons & 0x02) != 0);
|
||||
Mouse_SetPressed(MOUSE_MIDDLE, (ev->buttons & 0x04) != 0);
|
||||
Input_SetPressed(KEY_MOUSEMID, (ev->buttons & 0x04) != 0);
|
||||
|
||||
Mouse_SetPosition(ev->canvasX, ev->canvasY);
|
||||
if (win_rawMouse) Event_RaiseMouseMove(&MouseEvents.RawMoved, ev->movementX, ev->movementY);
|
||||
|
Loading…
x
Reference in New Issue
Block a user