* 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; int m_nMoveSpeed;
bool m_bCamLinkSpeed; bool m_bCamLinkSpeed;
int m_nAngleSpeed; float m_angleSpeed;
bool m_bCamInverseMouse; bool m_bCamInverseMouse;
bool m_bCamDiscrete; bool m_bCamDiscrete;
bool m_bCubicClipping; bool m_bCubicClipping;
@ -87,7 +87,7 @@ struct camwindow_globals_private_t
camwindow_globals_private_t() : camwindow_globals_private_t() :
m_nMoveSpeed( 100 ), m_nMoveSpeed( 100 ),
m_bCamLinkSpeed( true ), m_bCamLinkSpeed( true ),
m_nAngleSpeed( 3 ), m_angleSpeed( 9.f ),
m_bCamInverseMouse( false ), m_bCamInverseMouse( false ),
m_bCamDiscrete( true ), m_bCamDiscrete( true ),
m_bCubicClipping( false ), m_bCubicClipping( false ),
@ -297,16 +297,16 @@ void Camera_FreeMove( camera_t& camera, int dx, int dy ){
} }
else // free rotation else // free rotation
{ {
const float dtime = 0.1f; const float dtime = 0.0333333f;
if ( g_camwindow_globals_private.m_bCamInverseMouse ) { 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{ 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 ) { if ( camera.angles[CAMERA_PITCH] > 90 ) {
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 ) ); 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 ); Camera_updateModelview( camera );
} }
@ -389,19 +389,19 @@ Vector3 Camera_getFocusPos( camera_t& camera );
void Cam_KeyControl( camera_t& camera, float dtime ){ void Cam_KeyControl( camera_t& camera, float dtime ){
// Update angles // Update angles
if ( camera.movementflags & MOVE_ROTLEFT ) { 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 ) { 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 ) { 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 ) { if ( camera.angles[CAMERA_PITCH] > 90 ) {
camera.angles[CAMERA_PITCH] = 90; camera.angles[CAMERA_PITCH] = 90;
} }
} }
if ( camera.movementflags & MOVE_PITCHDOWN ) { 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 ) { if ( camera.angles[CAMERA_PITCH] < -90 ) {
camera.angles[CAMERA_PITCH] = -90; camera.angles[CAMERA_PITCH] = -90;
} }
@ -2151,7 +2151,7 @@ typedef FreeCaller1<float, fieldOfViewImport> fieldOfViewImportCaller;
void Camera_constructPreferences( PreferencesPage& page ){ 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.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.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( "", "Invert mouse vertical axis", g_camwindow_globals_private.m_bCamInverseMouse );
page.appendCheckBox( "", "Zoom In to Mouse pointer", g_camwindow_globals.m_bZoomInToPointer ); page.appendCheckBox( "", "Zoom In to Mouse pointer", g_camwindow_globals.m_bZoomInToPointer );
page.appendCheckBox( 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( "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( "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( "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( "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( "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 ) ); 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; 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 ){ void IntComboImport( GtkComboBox& widget, int value ){
gtk_combo_box_set_active( &widget, 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 ); 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 ){ void Dialog::AddIntComboData( GtkComboBox& widget, const IntImportCallback& importViewer, const IntExportCallback& exportViewer ){
AddCustomData<IntComboImportExport>( m_data ).apply( widget, importViewer, 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 ){ void Dialog::AddDialogData( GtkAdjustment& widget, int& data ){
AddData<IntAdjustmentImportExport, IntImportExport>( m_data ).apply( widget, 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 ){ void Dialog::AddDialogData( GtkComboBox& widget, int& data ){
AddData<IntComboImportExport, IntImportExport>( m_data ).apply( widget, 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 ) ); 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 0
if ( draw_value == FALSE ) { if ( draw_value == FALSE ) {
GtkWidget* hbox2 = gtk_hbox_new( FALSE, 0 ); GtkWidget* hbox2 = gtk_hbox_new( FALSE, 0 );
@ -521,27 +536,38 @@ void Dialog::addSlider( GtkWidget* vbox, const char* name, int& data, gboolean d
} }
} }
#endif #endif
// adjustment
GtkObject* adj = gtk_adjustment_new( value, lower, upper, step_increment, page_increment, 0 );
AddIntAdjustmentData( *GTK_ADJUSTMENT( adj ), IntImportCaller( data ), IntExportCaller( data ) );
// scale // scale
GtkWidget* alignment = gtk_alignment_new( 0.0, 0.5, 1.0, 0.0 ); GtkWidget* alignment = gtk_alignment_new( 0.0, 0.5, 1.0, 0.0 );
gtk_widget_show( alignment ); 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_scale_set_value_pos( GTK_SCALE( scale ), GTK_POS_LEFT );
gtk_widget_show( scale ); gtk_widget_show( scale );
gtk_container_add( GTK_CONTAINER( alignment ), scale ); gtk_container_add( GTK_CONTAINER( alignment ), scale );
gtk_scale_set_draw_value( GTK_SCALE( scale ), draw_value ); 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 ); GtkTable* row = DialogRow_new( name, alignment );
DialogVBox_packRow( GTK_VBOX( vbox ), GTK_WIDGET( row ) ); 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 ){ 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 ); GtkWidget* alignment = gtk_alignment_new( 0.0, 0.5, 0.0, 0.0 );
gtk_widget_show( alignment ); 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, StringArrayRange values, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void addCombo( GtkWidget* vbox, const char* name, int& data, StringArrayRange values ); 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, 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, StringArrayRange names, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void addRadio( GtkWidget* vbox, const char* name, int& data, StringArrayRange names ); 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 ); 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 AddFloatSpinnerData( GtkSpinButton& object, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback );
void AddIntSpinnerData( GtkSpinButton& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); void AddIntSpinnerData( GtkSpinButton& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void AddIntAdjustmentData( GtkAdjustment& 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 AddIntComboData( GtkComboBox& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void AddDialogData( GtkToggleButton& object, bool& data ); 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, float& data );
void AddDialogData( GtkSpinButton& object, int& data ); void AddDialogData( GtkSpinButton& object, int& data );
void AddDialogData( GtkAdjustment& object, int& data ); void AddDialogData( GtkAdjustment& object, int& data );
void AddDialogData( GtkAdjustment& object, float& data );
void AddDialogData( GtkComboBox& object, int& 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 ){ 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 ); 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 ){ void appendRadio( const char* name, StringArrayRange names, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ){
m_dialog.addRadio( m_vbox, name, names, importCallback, exportCallback ); m_dialog.addRadio( m_vbox, name, names, importCallback, exportCallback );
} }