Added Mouse Overrun Buffer option as proposed by kp
This commit is contained in:
parent
609e6ca584
commit
d3660207d2
|
@ -74,6 +74,7 @@ struct control_info {
|
|||
};
|
||||
ramp_controls_t<float> down_time; // to scale movement depending on how long the key is pressed
|
||||
fix pitch_time, vertical_thrust_time, heading_time, sideways_thrust_time, bank_time, forward_thrust_time;
|
||||
fix excess_pitch_time, excess_vertical_thrust_time, excess_heading_time, excess_sideways_thrust_time, excess_bank_time, excess_forward_thrust_time;
|
||||
state_controls_t state; // to scale movement for keys only we need them to be separate from joystick/mouse buttons
|
||||
array<fix, JOY_MAX_AXES> joy_axis, raw_joy_axis;
|
||||
array<fix, 3> mouse_axis, raw_mouse_axis;
|
||||
|
|
|
@ -85,6 +85,7 @@ struct player_config
|
|||
array<int, 6> JoystickSpeed;
|
||||
ubyte MouseFlightSim;
|
||||
array<int, 6> MouseSens;
|
||||
array<int, 6> MouseOverrun;
|
||||
int MouseFSDead;
|
||||
int MouseFSIndicator;
|
||||
array<cockpit_mode_t, 2> CockpitMode; // 0 saves the "real" cockpit, 1 also saves letterbox and rear. Used to properly switch between modes and restore the real one.
|
||||
|
|
|
@ -1494,6 +1494,16 @@ static inline void adjust_button_time(fix &o, uint8_t add, uint8_t sub, fix v)
|
|||
o -= v;
|
||||
}
|
||||
|
||||
static void clamp_kconfig_control_with_overrun(fix &value, const fix &bound, fix &excess, const fix &ebound)
|
||||
{
|
||||
/* Assume no integer overflow here */
|
||||
value += excess;
|
||||
const auto ivalue = value;
|
||||
clamp_symmetric_value(value, bound);
|
||||
excess = ivalue - value;
|
||||
clamp_symmetric_value(excess, ebound);
|
||||
}
|
||||
|
||||
void kconfig_read_controls(const d_event &event, int automap_flag)
|
||||
{
|
||||
static fix64 mouse_delta_time = 0;
|
||||
|
@ -1782,12 +1792,12 @@ void kconfig_read_controls(const d_event &event, int automap_flag)
|
|||
}
|
||||
|
||||
//----------- Clamp values between -FrameTime and FrameTime
|
||||
clamp_symmetric_value(Controls.pitch_time, frametime/2);
|
||||
clamp_symmetric_value(Controls.heading_time, frametime);
|
||||
clamp_symmetric_value(Controls.vertical_thrust_time, frametime);
|
||||
clamp_symmetric_value(Controls.sideways_thrust_time, frametime);
|
||||
clamp_symmetric_value(Controls.bank_time, frametime);
|
||||
clamp_symmetric_value(Controls.forward_thrust_time, frametime);
|
||||
clamp_kconfig_control_with_overrun(Controls.pitch_time, FrameTime/2, Controls.excess_pitch_time, FrameTime * PlayerCfg.MouseOverrun[1] * 2);
|
||||
clamp_kconfig_control_with_overrun(Controls.heading_time, FrameTime, Controls.excess_heading_time, FrameTime * PlayerCfg.MouseOverrun[0] * 2);
|
||||
clamp_kconfig_control_with_overrun(Controls.vertical_thrust_time, FrameTime, Controls.excess_vertical_thrust_time, FrameTime * PlayerCfg.MouseOverrun[3] * 2);
|
||||
clamp_kconfig_control_with_overrun(Controls.sideways_thrust_time, FrameTime, Controls.excess_sideways_thrust_time, FrameTime * PlayerCfg.MouseOverrun[2] * 2);
|
||||
clamp_kconfig_control_with_overrun(Controls.bank_time, FrameTime, Controls.excess_bank_time, FrameTime * PlayerCfg.MouseOverrun[4] * 2);
|
||||
clamp_kconfig_control_with_overrun(Controls.forward_thrust_time, FrameTime, Controls.excess_forward_thrust_time, FrameTime * PlayerCfg.MouseOverrun[5] * 2);
|
||||
}
|
||||
|
||||
void reset_cruise(void)
|
||||
|
|
|
@ -1091,6 +1091,9 @@ static void input_config_sensitivity()
|
|||
DXX_##VERB##_TEXT("Mouse Sensitivity:", opt_label_ms) \
|
||||
DXX_INPUT_THROTTLE_SENSITIVITY(VERB,ms,PlayerCfg.MouseSens) \
|
||||
DXX_##VERB##_TEXT("", opt_label_blank_ms) \
|
||||
DXX_##VERB##_TEXT("Mouse Overrun Buffer:", opt_label_mo) \
|
||||
DXX_INPUT_THROTTLE_SENSITIVITY(VERB,mo,PlayerCfg.MouseOverrun) \
|
||||
DXX_##VERB##_TEXT("", opt_label_blank_mo) \
|
||||
DXX_##VERB##_TEXT("Mouse FlightSim Deadzone:", opt_label_mfsd) \
|
||||
DXX_##VERB##_SLIDER("X/Y", opt_mfsd_deadzone, PlayerCfg.MouseFSDead, 0, 16) \
|
||||
|
||||
|
@ -1119,6 +1122,7 @@ static void input_config_sensitivity()
|
|||
constexpr uint_fast32_t joyspd = items.opt_label_jp + 1;
|
||||
constexpr uint_fast32_t joydead = items.opt_label_jd + 1;
|
||||
constexpr uint_fast32_t mousesens = items.opt_label_ms + 1;
|
||||
constexpr uint_fast32_t mouseoverrun = items.opt_label_mo + 1;
|
||||
const auto &m = items.m;
|
||||
|
||||
for (unsigned i = 0; i <= 5; i++)
|
||||
|
@ -1130,6 +1134,7 @@ static void input_config_sensitivity()
|
|||
PlayerCfg.JoystickSens[i] = m[joysens+i].value;
|
||||
PlayerCfg.JoystickDead[i] = m[joydead+i].value;
|
||||
PlayerCfg.MouseSens[i] = m[mousesens+i].value;
|
||||
PlayerCfg.MouseOverrun[i] = m[mouseoverrun+i].value;
|
||||
}
|
||||
constexpr uint_fast32_t mousefsdead = items.opt_mfsd_deadzone;
|
||||
PlayerCfg.MouseFSDead = m[mousefsdead].value;
|
||||
|
|
|
@ -143,6 +143,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
|||
#define MOUSE_FSDEAD_VALUE_TEXT "%d"
|
||||
#define MOUSE_FSINDICATOR_NAME_TEXT "fsindi"
|
||||
#define MOUSE_FSINDICATOR_VALUE_TEXT "%d"
|
||||
#define MOUSE_OVERRUN_NAME_TEXT "overrun"
|
||||
#define WEAPON_KEYv2_HEADER_TEXT "[weapon keys v2]"
|
||||
#define WEAPON_KEYv2_VALUE_TEXT "0x%x,0x%x,0x%x"
|
||||
#define COCKPIT_HEADER_TEXT "[cockpit]"
|
||||
|
@ -222,6 +223,7 @@ int new_player_config()
|
|||
PlayerCfg.JoystickSpeed[0] = PlayerCfg.JoystickSpeed[1] = PlayerCfg.JoystickSpeed[2] = PlayerCfg.JoystickSpeed[3] = PlayerCfg.JoystickSpeed[4] = PlayerCfg.JoystickSpeed[5] = 16;
|
||||
PlayerCfg.MouseFlightSim = 0;
|
||||
PlayerCfg.MouseSens[0] = PlayerCfg.MouseSens[1] = PlayerCfg.MouseSens[2] = PlayerCfg.MouseSens[3] = PlayerCfg.MouseSens[4] = PlayerCfg.MouseSens[5] = 8;
|
||||
PlayerCfg.MouseOverrun[0] = PlayerCfg.MouseOverrun[1] = PlayerCfg.MouseOverrun[2] = PlayerCfg.MouseOverrun[3] = PlayerCfg.MouseOverrun[4] = PlayerCfg.MouseOverrun[5] = 0;
|
||||
PlayerCfg.MouseFSDead = 0;
|
||||
PlayerCfg.MouseFSIndicator = 1;
|
||||
PlayerCfg.CockpitMode[0] = PlayerCfg.CockpitMode[1] = CM_FULL_COCKPIT;
|
||||
|
@ -380,6 +382,8 @@ static int read_player_dxx(const char *filename)
|
|||
PlayerCfg.MouseFlightSim = atoi(value);
|
||||
else if (convert_pattern_array(SENSITIVITY_NAME_TEXT, PlayerCfg.MouseSens, line, value))
|
||||
;
|
||||
else if (convert_pattern_array(MOUSE_OVERRUN_NAME_TEXT, PlayerCfg.MouseOverrun, line, value))
|
||||
;
|
||||
else if(!strcmp(line,MOUSE_FSDEAD_NAME_TEXT))
|
||||
PlayerCfg.MouseFSDead = atoi(value);
|
||||
else if(!strcmp(line,MOUSE_FSINDICATOR_NAME_TEXT))
|
||||
|
@ -713,6 +717,7 @@ static int write_player_dxx(const char *filename)
|
|||
PHYSFSX_printf(fout,MOUSE_HEADER_TEXT "\n");
|
||||
PHYSFSX_printf(fout,MOUSE_FLIGHTSIM_NAME_TEXT "=" MOUSE_FLIGHTSIM_VALUE_TEXT "\n",PlayerCfg.MouseFlightSim);
|
||||
print_pattern_array(fout, SENSITIVITY_NAME_TEXT, PlayerCfg.MouseSens);
|
||||
print_pattern_array(fout, MOUSE_OVERRUN_NAME_TEXT, PlayerCfg.MouseOverrun);
|
||||
PHYSFSX_printf(fout,MOUSE_FSDEAD_NAME_TEXT "=" MOUSE_FSDEAD_VALUE_TEXT "\n",PlayerCfg.MouseFSDead);
|
||||
PHYSFSX_printf(fout,MOUSE_FSINDICATOR_NAME_TEXT "=" MOUSE_FSINDICATOR_VALUE_TEXT "\n",PlayerCfg.MouseFSIndicator);
|
||||
PHYSFSX_printf(fout,END_TEXT "\n");
|
||||
|
|
Loading…
Reference in a new issue