Add op_get_mouse_buttons
This commit is contained in:
parent
cf4921de1e
commit
129361836f
17
src/mouse.cc
17
src/mouse.cc
|
@ -54,7 +54,7 @@ static unsigned char* _mouse_fptr = NULL;
|
||||||
static double gMouseSensitivity = 1.0;
|
static double gMouseSensitivity = 1.0;
|
||||||
|
|
||||||
// 0x51E2AC
|
// 0x51E2AC
|
||||||
static int gMouseButtonsState = 0;
|
static int last_buttons = 0;
|
||||||
|
|
||||||
// 0x6AC790
|
// 0x6AC790
|
||||||
static bool gCursorIsHidden;
|
static bool gCursorIsHidden;
|
||||||
|
@ -415,7 +415,7 @@ void _mouse_info()
|
||||||
}
|
}
|
||||||
x = 0;
|
x = 0;
|
||||||
y = 0;
|
y = 0;
|
||||||
buttons = gMouseButtonsState;
|
buttons = last_buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
_mouse_simulate_input(x, y, buttons);
|
_mouse_simulate_input(x, y, buttons);
|
||||||
|
@ -447,7 +447,7 @@ void _mouse_simulate_input(int delta_x, int delta_y, int buttons)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (delta_x || delta_y || buttons != gMouseButtonsState) {
|
if (delta_x || delta_y || buttons != last_buttons) {
|
||||||
if (gVcrState == 0) {
|
if (gVcrState == 0) {
|
||||||
if (_vcr_buffer_index == VCR_BUFFER_CAPACITY - 1) {
|
if (_vcr_buffer_index == VCR_BUFFER_CAPACITY - 1) {
|
||||||
vcrDump();
|
vcrDump();
|
||||||
|
@ -464,13 +464,13 @@ void _mouse_simulate_input(int delta_x, int delta_y, int buttons)
|
||||||
_vcr_buffer_index++;
|
_vcr_buffer_index++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (gMouseButtonsState == 0) {
|
if (last_buttons == 0) {
|
||||||
if (!_mouse_idling) {
|
if (!_mouse_idling) {
|
||||||
_mouse_idle_start_time = getTicks();
|
_mouse_idle_start_time = getTicks();
|
||||||
_mouse_idling = 1;
|
_mouse_idling = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
gMouseButtonsState = 0;
|
last_buttons = 0;
|
||||||
_raw_buttons = 0;
|
_raw_buttons = 0;
|
||||||
gMouseEvent = 0;
|
gMouseEvent = 0;
|
||||||
|
|
||||||
|
@ -479,7 +479,7 @@ void _mouse_simulate_input(int delta_x, int delta_y, int buttons)
|
||||||
}
|
}
|
||||||
|
|
||||||
_mouse_idling = 0;
|
_mouse_idling = 0;
|
||||||
gMouseButtonsState = buttons;
|
last_buttons = buttons;
|
||||||
previousEvent = gMouseEvent;
|
previousEvent = gMouseEvent;
|
||||||
gMouseEvent = 0;
|
gMouseEvent = 0;
|
||||||
|
|
||||||
|
@ -703,4 +703,9 @@ void convertMouseWheelToArrowKey(int* keyCodePtr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mouse_get_last_buttons()
|
||||||
|
{
|
||||||
|
return last_buttons;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace fallout
|
} // namespace fallout
|
||||||
|
|
|
@ -52,6 +52,7 @@ void mouseGetPositionInWindow(int win, int* x, int* y);
|
||||||
bool mouseHitTestInWindow(int win, int left, int top, int right, int bottom);
|
bool mouseHitTestInWindow(int win, int left, int top, int right, int bottom);
|
||||||
void mouseGetWheel(int* x, int* y);
|
void mouseGetWheel(int* x, int* y);
|
||||||
void convertMouseWheelToArrowKey(int* keyCodePtr);
|
void convertMouseWheelToArrowKey(int* keyCodePtr);
|
||||||
|
int mouse_get_last_buttons();
|
||||||
|
|
||||||
} // namespace fallout
|
} // namespace fallout
|
||||||
|
|
||||||
|
|
|
@ -396,6 +396,14 @@ static void opGetMouseY(Program* program)
|
||||||
programStackPushInteger(program, y);
|
programStackPushInteger(program, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get_mouse_buttons
|
||||||
|
static void op_get_mouse_buttons(Program* program)
|
||||||
|
{
|
||||||
|
// CE: Implementation is slightly different - it does not handle middle
|
||||||
|
// mouse button.
|
||||||
|
programStackPushInteger(program, mouse_get_last_buttons());
|
||||||
|
}
|
||||||
|
|
||||||
// get_screen_width
|
// get_screen_width
|
||||||
static void opGetScreenWidth(Program* program)
|
static void opGetScreenWidth(Program* program)
|
||||||
{
|
{
|
||||||
|
@ -540,6 +548,7 @@ void sfallOpcodesInit()
|
||||||
interpreterRegisterOpcode(0x821A, opSetWeaponAmmoCount);
|
interpreterRegisterOpcode(0x821A, opSetWeaponAmmoCount);
|
||||||
interpreterRegisterOpcode(0x821C, opGetMouseX);
|
interpreterRegisterOpcode(0x821C, opGetMouseX);
|
||||||
interpreterRegisterOpcode(0x821D, opGetMouseY);
|
interpreterRegisterOpcode(0x821D, opGetMouseY);
|
||||||
|
interpreterRegisterOpcode(0x821E, op_get_mouse_buttons);
|
||||||
interpreterRegisterOpcode(0x8220, opGetScreenWidth);
|
interpreterRegisterOpcode(0x8220, opGetScreenWidth);
|
||||||
interpreterRegisterOpcode(0x8221, opGetScreenHeight);
|
interpreterRegisterOpcode(0x8221, opGetScreenHeight);
|
||||||
interpreterRegisterOpcode(0x8237, opParseInt);
|
interpreterRegisterOpcode(0x8237, opParseInt);
|
||||||
|
|
Loading…
Reference in New Issue