* increase precision of camera mouse sensitivity setting from int to float to make it adapted for new hardware/software

* change mouse sensitivity handling by factor of 3 (old default 3 == new default 9)
This commit is contained in:
Garux 2017-12-15 05:18:09 +03:00
parent aeaeb2a3e6
commit 5c0859be8d
4 changed files with 53 additions and 21 deletions

View File

@ -75,7 +75,7 @@ struct camwindow_globals_private_t
{
int m_nMoveSpeed;
bool m_bCamLinkSpeed;
int m_nAngleSpeed;
float m_angleSpeed;
bool m_bCamInverseMouse;
bool m_bCamDiscrete;
bool m_bCubicClipping;
@ -87,7 +87,7 @@ struct camwindow_globals_private_t
camwindow_globals_private_t() :
m_nMoveSpeed( 100 ),
m_bCamLinkSpeed( true ),
m_nAngleSpeed( 3 ),
m_angleSpeed( 9.f ),
m_bCamInverseMouse( false ),
m_bCamDiscrete( true ),
m_bCubicClipping( false ),
@ -297,16 +297,16 @@ void Camera_FreeMove( camera_t& camera, int dx, int dy ){
}
else // free rotation
{
const float dtime = 0.1f;
const float dtime = 0.0333333f;
if ( g_camwindow_globals_private.m_bCamInverseMouse ) {
camera.angles[CAMERA_PITCH] -= dy * dtime * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_PITCH] -= dy * dtime * g_camwindow_globals_private.m_angleSpeed;
}
else{
camera.angles[CAMERA_PITCH] += dy * dtime * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_PITCH] += dy * dtime * g_camwindow_globals_private.m_angleSpeed;
}
camera.angles[CAMERA_YAW] += dx * dtime * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_YAW] += dx * dtime * g_camwindow_globals_private.m_angleSpeed;
if ( camera.angles[CAMERA_PITCH] > 90 ) {
camera.angles[CAMERA_PITCH] = 90;
@ -357,7 +357,7 @@ void Cam_MouseControl( camera_t& camera, int x, int y ){
}
vector3_add( camera.origin, vector3_scaled( camera.forward, yf * 0.1f * g_camwindow_globals_private.m_nMoveSpeed ) );
camera.angles[CAMERA_YAW] += xf * -0.1f * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_YAW] += xf * -0.1f * g_camwindow_globals_private.m_angleSpeed;
Camera_updateModelview( camera );
}
@ -389,19 +389,19 @@ Vector3 Camera_getFocusPos( camera_t& camera );
void Cam_KeyControl( camera_t& camera, float dtime ){
// Update angles
if ( camera.movementflags & MOVE_ROTLEFT ) {
camera.angles[CAMERA_YAW] += 15 * dtime * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_YAW] += 5.f * dtime * g_camwindow_globals_private.m_angleSpeed;
}
if ( camera.movementflags & MOVE_ROTRIGHT ) {
camera.angles[CAMERA_YAW] -= 15 * dtime * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_YAW] -= 5.f * dtime * g_camwindow_globals_private.m_angleSpeed;
}
if ( camera.movementflags & MOVE_PITCHUP ) {
camera.angles[CAMERA_PITCH] += 15 * dtime * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_PITCH] += 5.f * dtime * g_camwindow_globals_private.m_angleSpeed;
if ( camera.angles[CAMERA_PITCH] > 90 ) {
camera.angles[CAMERA_PITCH] = 90;
}
}
if ( camera.movementflags & MOVE_PITCHDOWN ) {
camera.angles[CAMERA_PITCH] -= 15 * dtime * g_camwindow_globals_private.m_nAngleSpeed;
camera.angles[CAMERA_PITCH] -= 5.f * dtime * g_camwindow_globals_private.m_angleSpeed;
if ( camera.angles[CAMERA_PITCH] < -90 ) {
camera.angles[CAMERA_PITCH] = -90;
}
@ -2151,7 +2151,7 @@ typedef FreeCaller1<float, fieldOfViewImport> fieldOfViewImportCaller;
void Camera_constructPreferences( PreferencesPage& page ){
page.appendSlider( "Movement Speed", g_camwindow_globals_private.m_nMoveSpeed, TRUE, 0, 0, 100, MIN_CAM_SPEED, MAX_CAM_SPEED, 1, 10 );
page.appendCheckBox( "", "Link strafe speed to movement speed", g_camwindow_globals_private.m_bCamLinkSpeed );
page.appendSlider( "Rotation Speed", g_camwindow_globals_private.m_nAngleSpeed, TRUE, 0, 0, 3, 1, 180, 1, 10 );
page.appendSlider( "Mouse Sensitivity", g_camwindow_globals_private.m_angleSpeed, TRUE, 0, 0, 9, 0.1, 180, 0.1, 1 );
page.appendCheckBox( "", "Invert mouse vertical axis", g_camwindow_globals_private.m_bCamInverseMouse );
page.appendCheckBox( "", "Zoom In to Mouse pointer", g_camwindow_globals.m_bZoomInToPointer );
page.appendCheckBox(
@ -2308,7 +2308,7 @@ void CamWnd_Construct(){
GlobalPreferenceSystem().registerPreference( "ShowStats", BoolImportStringCaller( g_camwindow_globals.m_showStats ), BoolExportStringCaller( g_camwindow_globals.m_showStats ) );
GlobalPreferenceSystem().registerPreference( "MoveSpeed", IntImportStringCaller( g_camwindow_globals_private.m_nMoveSpeed ), IntExportStringCaller( g_camwindow_globals_private.m_nMoveSpeed ) );
GlobalPreferenceSystem().registerPreference( "CamLinkSpeed", BoolImportStringCaller( g_camwindow_globals_private.m_bCamLinkSpeed ), BoolExportStringCaller( g_camwindow_globals_private.m_bCamLinkSpeed ) );
GlobalPreferenceSystem().registerPreference( "AngleSpeed", IntImportStringCaller( g_camwindow_globals_private.m_nAngleSpeed ), IntExportStringCaller( g_camwindow_globals_private.m_nAngleSpeed ) );
GlobalPreferenceSystem().registerPreference( "Sensitivity", FloatImportStringCaller( g_camwindow_globals_private.m_angleSpeed ), FloatExportStringCaller( g_camwindow_globals_private.m_angleSpeed ) );
GlobalPreferenceSystem().registerPreference( "CamInverseMouse", BoolImportStringCaller( g_camwindow_globals_private.m_bCamInverseMouse ), BoolExportStringCaller( g_camwindow_globals_private.m_bCamInverseMouse ) );
GlobalPreferenceSystem().registerPreference( "CamDiscrete", makeBoolStringImportCallback( CamWndMoveDiscreteImportCaller() ), BoolExportStringCaller( g_camwindow_globals_private.m_bCamDiscrete ) );
GlobalPreferenceSystem().registerPreference( "CubicClipping", BoolImportStringCaller( g_camwindow_globals_private.m_bCubicClipping ), BoolExportStringCaller( g_camwindow_globals_private.m_bCubicClipping ) );

View File

@ -227,6 +227,14 @@ void IntAdjustmentExport( GtkAdjustment& widget, const IntImportCallback& import
}
typedef ImportExport<GtkAdjustment, int, IntAdjustmentImport, IntAdjustmentExport> IntAdjustmentImportExport;
void FloatAdjustmentImport( GtkAdjustment& widget, float value ){
gtk_adjustment_set_value( &widget, value );
}
void FloatAdjustmentExport( GtkAdjustment& widget, const FloatImportCallback& importCallback ){
importCallback( (float)gtk_adjustment_get_value( &widget ) );
}
typedef ImportExport<GtkAdjustment, float, FloatAdjustmentImport, FloatAdjustmentExport> FloatAdjustmentImportExport;
void IntComboImport( GtkComboBox& widget, int value ){
gtk_combo_box_set_active( &widget, value );
@ -391,6 +399,10 @@ void Dialog::AddIntAdjustmentData( GtkAdjustment& widget, const IntImportCallbac
AddCustomData<IntAdjustmentImportExport>( m_data ).apply( widget, importViewer, exportViewer );
}
void Dialog::AddFloatAdjustmentData( GtkAdjustment& widget, const FloatImportCallback& importViewer, const FloatExportCallback& exportViewer ){
AddCustomData<FloatAdjustmentImportExport>( m_data ).apply( widget, importViewer, exportViewer );
}
void Dialog::AddIntComboData( GtkComboBox& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){
AddCustomData<IntComboImportExport>( m_data ).apply( widget, importViewer, exportViewer );
}
@ -423,6 +435,9 @@ void Dialog::AddDialogData( GtkSpinButton& widget, int& data ){
void Dialog::AddDialogData( GtkAdjustment& widget, int& data ){
AddData<IntAdjustmentImportExport, IntImportExport>( m_data ).apply( widget, data );
}
void Dialog::AddDialogData( GtkAdjustment& widget, float& data ){
AddData<FloatAdjustmentImportExport, FloatImportExport>( m_data ).apply( widget, data );
}
void Dialog::AddDialogData( GtkComboBox& widget, int& data ){
AddData<IntComboImportExport, IntImportExport>( m_data ).apply( widget, data );
}
@ -503,7 +518,7 @@ void Dialog::addCombo( GtkWidget* vbox, const char* name, int& data, StringArray
addCombo( vbox, name, values, IntImportCaller( data ), IntExportCaller( data ) );
}
void Dialog::addSlider( GtkWidget* vbox, const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment ){
void addSlider_( GtkAdjustment* adj, GtkWidget* vbox, const char* name, gboolean draw_value, const char* low, const char* high, int digits ){
#if 0
if ( draw_value == FALSE ) {
GtkWidget* hbox2 = gtk_hbox_new( FALSE, 0 );
@ -521,27 +536,38 @@ void Dialog::addSlider( GtkWidget* vbox, const char* name, int& data, gboolean d
}
}
#endif
// adjustment
GtkObject* adj = gtk_adjustment_new( value, lower, upper, step_increment, page_increment, 0 );
AddIntAdjustmentData( *GTK_ADJUSTMENT( adj ), IntImportCaller( data ), IntExportCaller( data ) );
// scale
GtkWidget* alignment = gtk_alignment_new( 0.0, 0.5, 1.0, 0.0 );
gtk_widget_show( alignment );
GtkWidget* scale = gtk_hscale_new( GTK_ADJUSTMENT( adj ) );
GtkWidget* scale = gtk_hscale_new( adj );
gtk_scale_set_value_pos( GTK_SCALE( scale ), GTK_POS_LEFT );
gtk_widget_show( scale );
gtk_container_add( GTK_CONTAINER( alignment ), scale );
gtk_scale_set_draw_value( GTK_SCALE( scale ), draw_value );
gtk_scale_set_digits( GTK_SCALE( scale ), 0 );
gtk_scale_set_digits( GTK_SCALE( scale ), digits );
GtkTable* row = DialogRow_new( name, alignment );
DialogVBox_packRow( GTK_VBOX( vbox ), GTK_WIDGET( row ) );
}
void Dialog::addSlider( GtkWidget* vbox, const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment ){
// adjustment
GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( value, lower, upper, step_increment, page_increment, 0 ) );
AddIntAdjustmentData( *adj, IntImportCaller( data ), IntExportCaller( data ) );
addSlider_( adj, vbox, name, draw_value, low, high, 0 );
}
void Dialog::addSlider( GtkWidget* vbox, const char* name, float& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment ){
// adjustment
GtkAdjustment* adj = GTK_ADJUSTMENT( gtk_adjustment_new( value, lower, upper, step_increment, page_increment, 0 ) );
AddFloatAdjustmentData( *adj, FloatImportCaller( data ), FloatExportCaller( data ) );
addSlider_( adj, vbox, name, draw_value, low, high, 1 );
}
void Dialog::addRadio( GtkWidget* vbox, const char* name, StringArrayRange names, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){
GtkWidget* alignment = gtk_alignment_new( 0.0, 0.5, 0.0, 0.0 );
gtk_widget_show( alignment );

View File

@ -143,6 +143,7 @@ GtkWidget* addCheckBox( GtkWidget* vbox, const char* name, const char* flag, boo
void addCombo( GtkWidget* vbox, const char* name, StringArrayRange values, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void addCombo( GtkWidget* vbox, const char* name, int& data, StringArrayRange values );
void addSlider( GtkWidget* vbox, const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment );
void addSlider( GtkWidget* vbox, const char* name, float& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment );
void addRadio( GtkWidget* vbox, const char* name, StringArrayRange names, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void addRadio( GtkWidget* vbox, const char* name, int& data, StringArrayRange names );
void addRadioIcons( GtkWidget* vbox, const char* name, StringArrayRange icons, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
@ -176,6 +177,7 @@ void AddFloatEntryData( GtkEntry& object, const FloatImportCallback& importCallb
void AddFloatSpinnerData( GtkSpinButton& object, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback );
void AddIntSpinnerData( GtkSpinButton& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void AddIntAdjustmentData( GtkAdjustment& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void AddFloatAdjustmentData( GtkAdjustment& object, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback );
void AddIntComboData( GtkComboBox& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void AddDialogData( GtkToggleButton& object, bool& data );
@ -187,6 +189,7 @@ void AddDialogData( GtkEntry& object, float& data );
void AddDialogData( GtkSpinButton& object, float& data );
void AddDialogData( GtkSpinButton& object, int& data );
void AddDialogData( GtkAdjustment& object, int& data );
void AddDialogData( GtkAdjustment& object, float& data );
void AddDialogData( GtkComboBox& object, int& data );
};

View File

@ -58,6 +58,9 @@ void appendCombo( const char* name, int& data, StringArrayRange values ){
void appendSlider( const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment ){
m_dialog.addSlider( m_vbox, name, data, draw_value, low, high, value, lower, upper, step_increment, page_increment );
}
void appendSlider( const char* name, float& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment ){
m_dialog.addSlider( m_vbox, name, data, draw_value, low, high, value, lower, upper, step_increment, page_increment );
}
void appendRadio( const char* name, StringArrayRange names, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ){
m_dialog.addRadio( m_vbox, name, names, importCallback, exportCallback );
}