| 258 | } |
| 259 | |
| 260 | void MovementController::ControllerRotate( const int delta_x, const int delta_z ) |
| 261 | { |
| 262 | float base_sensetivity= settings_.GetOrSetFloat( SettingsKeys::mouse_sensetivity, 0.5f ); |
| 263 | base_sensetivity= std::max( 0.0f, std::min( base_sensetivity, 1.0f ) ); |
| 264 | settings_.SetSetting( SettingsKeys::mouse_sensetivity, base_sensetivity ); |
| 265 | |
| 266 | float d_x_f, d_z_f; |
| 267 | if( settings_.GetOrSetBool( "cl_mouse_filter", true ) ) |
| 268 | { |
| 269 | d_x_f= float( delta_x + prev_controller_delta_x_ ) * 0.5f; |
| 270 | d_z_f= float( delta_z + prev_controller_delta_z_ ) * 0.5f; |
| 271 | } |
| 272 | else |
| 273 | { |
| 274 | d_x_f= float(delta_x); |
| 275 | d_z_f= float(delta_z); |
| 276 | } |
| 277 | |
| 278 | if( settings_.GetOrSetBool( "cl_mouse_acceleration", true ) ) |
| 279 | { |
| 280 | const float c_acceleration= 0.25f; |
| 281 | const float c_max_acceleration_factor= 2.0f; |
| 282 | d_x_f= std::min( c_acceleration * std::sqrt(std::abs(d_x_f)), c_max_acceleration_factor ) * d_x_f; |
| 283 | d_z_f= std::min( c_acceleration * std::sqrt(std::abs(d_z_f)), c_max_acceleration_factor ) * d_z_f; |
| 284 | } |
| 285 | |
| 286 | const float c_max_exp_sensetivity= 8.0f; |
| 287 | const float exp_sensetivity= std::exp( base_sensetivity * std::log(c_max_exp_sensetivity) ); // [ 1; c_max_exp_sensetivity ] |
| 288 | |
| 289 | const float c_pix_scale= 1.0f / 1024.0f; |
| 290 | const float z_direction= settings_.GetOrSetBool( SettingsKeys::reverse_mouse ) ? -1.0f : +1.0f; |
| 291 | |
| 292 | angle_.x-= exp_sensetivity * c_pix_scale * d_x_f * z_direction; |
| 293 | angle_.z-= exp_sensetivity * c_pix_scale * d_z_f * 0.5f; |
| 294 | |
| 295 | prev_controller_delta_x_= delta_x; |
| 296 | prev_controller_delta_z_= delta_z; |
| 297 | } |
| 298 | |
| 299 | void MovementController::ClipCameraAngles() |
| 300 | { |
no test coverage detected