33#include " game_constants.hpp"
44#include " settings.hpp"
55#include " shared_settings_keys.hpp"
6-
76#include " movement_controller.hpp"
7+ #include " ../key_checker.hpp"
88
99namespace PanzerChasm
1010{
1111
1212static const float g_z_near= 1 .0f / 12 .0f ; // Must be greater, then z_near in software rasterizer.
1313
14- using KeyCode= SystemEvent::KeyEvent::KeyCode;
15-
16- class KeyChecker
17- {
18- public:
19- KeyChecker ( Settings& settings, const KeyboardState& keyboard_state )
20- : settings_(settings), keyboard_state_(keyboard_state)
21- {}
22-
23- bool operator ()( const char * const key_setting_name, const KeyCode default_value ) const
24- {
25- const KeyCode key= static_cast <KeyCode>( settings_.GetOrSetInt ( key_setting_name, static_cast <int >(default_value) ) );
26- if ( key > KeyCode::Unknown && key < KeyCode::KeyCount )
27- return keyboard_state_[ static_cast <unsigned int >( key ) ];
28- return false ;
29- }
30-
31- private:
32- Settings& settings_;
33- const KeyboardState& keyboard_state_;
34- };
35-
3614MovementController::MovementController (
3715 Settings& settings,
3816 const m_Vec3& angle,
3917 float aspect )
4018 : settings_( settings )
4119 , angle_(angle), aspect_(aspect)
4220 , speed_(0 .0f )
21+ , mouse_look_( settings_.GetOrSetBool( SettingsKeys::perm_mlook, true ) )
22+ , mouse_look_pressed_( false )
4323 , start_tick_( Time::CurrentTime() )
4424 , prev_calc_tick_( Time::CurrentTime() )
4525{
@@ -65,28 +45,32 @@ void MovementController::UpdateParams()
6545 ClipCameraAngles ();
6646}
6747
68- void MovementController::Tick ( const KeyboardState& keyboard_state )
48+ void MovementController::Tick ( const InputState& input_state )
6949{
7050 const Time new_tick= Time::CurrentTime ();
7151
7252 const float dt_s= ( new_tick - prev_calc_tick_ ).ToSeconds ();
7353
7454 prev_calc_tick_= new_tick;
7555
76- const KeyChecker key_pressed ( settings_,keyboard_state );
56+ const KeyChecker key_pressed ( settings_, input_state );
7757
7858 m_Vec3 rotate_vec ( 0 .0f ,0 .0f , 0 .0f );
79- if ( key_pressed ( SettingsKeys::key_turn_left , KeyCode::Left ) ) rotate_vec.z += +1 .0f ;
80- if ( key_pressed ( SettingsKeys::key_turn_right, KeyCode::Right ) ) rotate_vec.z += -1 .0f ;
81- if ( key_pressed ( SettingsKeys::key_look_up , KeyCode::Up ) ) rotate_vec.x += +1 .0f ;
82- if ( key_pressed ( SettingsKeys::key_look_down , KeyCode::Down ) ) rotate_vec.x += -1 .0f ;
59+
60+ if ( key_pressed ( SettingsKeys::key_perm_mlook, KeyCode::E ) ) mouse_look_ = !mouse_look_;
61+ if ( key_pressed ( SettingsKeys::key_turn_left , KeyCode::KP4 ) ) rotate_vec.z += +1 .0f ;
62+ if ( key_pressed ( SettingsKeys::key_turn_right , KeyCode::KP6 ) ) rotate_vec.z += -1 .0f ;
63+ if ( key_pressed ( SettingsKeys::key_look_up , KeyCode::KP8 ) ) rotate_vec.x += +1 .0f ;
64+ if ( key_pressed ( SettingsKeys::key_look_down , KeyCode::KP2 ) ) rotate_vec.x += -1 .0f ;
65+ if ( key_pressed ( SettingsKeys::key_center_view, KeyCode::KP5 ) ) angle_.x = 0 .0f ;
8366
8467 const float rot_speed= 1 .75f ;
8568 angle_+= dt_s * rot_speed * rotate_vec;
86-
69+
8770 ClipCameraAngles ();
8871
89- jump_pressed_= key_pressed ( SettingsKeys::key_jump, KeyCode::Space );
72+ jump_pressed_= key_pressed ( SettingsKeys::key_jump, KeyCode::Mouse2 );
73+ mouse_look_pressed_ = key_pressed ( SettingsKeys::key_temp_mlook, KeyCode::Q );
9074}
9175
9276void MovementController::SetSpeed ( const float speed )
@@ -101,12 +85,12 @@ void MovementController::SetAngles( float z_angle, float x_angle )
10185}
10286
10387void MovementController::GetAcceleration (
104- const KeyboardState& keyboard_state ,
88+ const InputState& input_state ,
10589 float & out_dir, float & out_acceleration ) const
10690{
10791 m_Vec3 move_vector (0 .0f ,0 .0f ,0 .0f );
10892
109- const KeyChecker key_pressed ( settings_,keyboard_state );
93+ const KeyChecker key_pressed ( settings_,input_state );
11094
11195 if ( key_pressed ( SettingsKeys::key_forward , KeyCode::W ) ) move_vector.y += +1 .0f ;
11296 if ( key_pressed ( SettingsKeys::key_backward , KeyCode::S ) ) move_vector.y += -1 .0f ;
@@ -265,41 +249,44 @@ bool MovementController::JumpPressed() const
265249
266250void MovementController::ControllerRotate ( const int delta_x, const int delta_z )
267251{
268- float base_sensetivity= settings_.GetOrSetFloat ( SettingsKeys::mouse_sensetivity, 0 .5f );
269- base_sensetivity= std::max ( 0 .0f , std::min ( base_sensetivity, 1 .0f ) );
270- settings_.SetSetting ( SettingsKeys::mouse_sensetivity, base_sensetivity );
271-
272- float d_x_f, d_z_f;
273- if ( settings_.GetOrSetBool ( " cl_mouse_filter" , true ) )
252+ if ( ( mouse_look_pressed_ && !mouse_look_ ) || ( !mouse_look_pressed_ && mouse_look_) )
274253 {
275- d_x_f= float ( delta_x + prev_controller_delta_x_ ) * 0 .5f ;
276- d_z_f= float ( delta_z + prev_controller_delta_z_ ) * 0 .5f ;
254+ float base_sensetivity= settings_.GetOrSetFloat ( SettingsKeys::mouse_sensetivity, 0 .5f );
255+ base_sensetivity= std::max ( 0 .0f , std::min ( base_sensetivity, 1 .0f ) );
256+ settings_.SetSetting ( SettingsKeys::mouse_sensetivity, base_sensetivity );
257+
258+ float d_x_f, d_z_f;
259+ if ( settings_.GetOrSetBool ( " cl_mouse_filter" , true ) )
260+ {
261+ d_x_f= float ( delta_x + prev_controller_delta_x_ ) * 0 .5f ;
262+ d_z_f= float ( delta_z + prev_controller_delta_z_ ) * 0 .5f ;
263+ }
264+ else
265+ {
266+ d_x_f= float (delta_x);
267+ d_z_f= float (delta_z);
268+ }
269+
270+ if ( settings_.GetOrSetBool ( " cl_mouse_acceleration" , true ) )
271+ {
272+ const float c_acceleration= 0 .25f ;
273+ const float c_max_acceleration_factor= 2 .0f ;
274+ d_x_f= std::min ( c_acceleration * std::sqrt (std::abs (d_x_f)), c_max_acceleration_factor ) * d_x_f;
275+ d_z_f= std::min ( c_acceleration * std::sqrt (std::abs (d_z_f)), c_max_acceleration_factor ) * d_z_f;
276+ }
277+
278+ const float c_max_exp_sensetivity= 8 .0f ;
279+ const float exp_sensetivity= std::exp ( base_sensetivity * std::log (c_max_exp_sensetivity) ); // [ 1; c_max_exp_sensetivity ]
280+
281+ const float c_pix_scale= 1 .0f / 1024 .0f ;
282+ const float z_direction= settings_.GetOrSetBool ( SettingsKeys::reverse_mouse ) ? -1 .0f : +1 .0f ;
283+
284+ angle_.x -= exp_sensetivity * c_pix_scale * d_x_f * z_direction;
285+ angle_.z -= exp_sensetivity * c_pix_scale * d_z_f * 0 .5f ;
286+
287+ prev_controller_delta_x_= delta_x;
288+ prev_controller_delta_z_= delta_z;
277289 }
278- else
279- {
280- d_x_f= float (delta_x);
281- d_z_f= float (delta_z);
282- }
283-
284- if ( settings_.GetOrSetBool ( " cl_mouse_acceleration" , true ) )
285- {
286- const float c_acceleration= 0 .25f ;
287- const float c_max_acceleration_factor= 2 .0f ;
288- d_x_f= std::min ( c_acceleration * std::sqrt (std::abs (d_x_f)), c_max_acceleration_factor ) * d_x_f;
289- d_z_f= std::min ( c_acceleration * std::sqrt (std::abs (d_z_f)), c_max_acceleration_factor ) * d_z_f;
290- }
291-
292- const float c_max_exp_sensetivity= 8 .0f ;
293- const float exp_sensetivity= std::exp ( base_sensetivity * std::log (c_max_exp_sensetivity) ); // [ 1; c_max_exp_sensetivity ]
294-
295- const float c_pix_scale= 1 .0f / 1024 .0f ;
296- const float z_direction= settings_.GetOrSetBool ( SettingsKeys::reverse_mouse ) ? -1 .0f : +1 .0f ;
297-
298- angle_.x -= exp_sensetivity * c_pix_scale * d_x_f * z_direction;
299- angle_.z -= exp_sensetivity * c_pix_scale * d_z_f * 0 .5f ;
300-
301- prev_controller_delta_x_= delta_x;
302- prev_controller_delta_z_= delta_z;
303290}
304291
305292void MovementController::ClipCameraAngles ()
0 commit comments