+struct PlayerFovSpec
+{
+ f32 fov;
+
+ // Whether to multiply the client's FOV or to override it
+ bool is_multiplier;
+
+ // The time to be take to trasition to the new FOV value.
+ // Transition is instantaneous if omitted. Omitted by default.
+ f32 transition_time;
+};
+
+struct PlayerControl
+{
+ PlayerControl() = default;
+
+ PlayerControl(
+ bool a_up,
+ bool a_down,
+ bool a_left,
+ bool a_right,
+ bool a_jump,
+ bool a_aux1,
+ bool a_sneak,
+ bool a_zoom,
+ bool a_LMB,
+ bool a_RMB,
+ float a_pitch,
+ float a_yaw,
+ float a_sidew_move_joystick_axis,
+ float a_forw_move_joystick_axis
+ )
+ {
+ up = a_up;
+ down = a_down;
+ left = a_left;
+ right = a_right;
+ jump = a_jump;
+ aux1 = a_aux1;
+ sneak = a_sneak;
+ zoom = a_zoom;
+ LMB = a_LMB;
+ RMB = a_RMB;
+ pitch = a_pitch;
+ yaw = a_yaw;
+ sidew_move_joystick_axis = a_sidew_move_joystick_axis;
+ forw_move_joystick_axis = a_forw_move_joystick_axis;
+ }
+ bool up = false;
+ bool down = false;
+ bool left = false;
+ bool right = false;
+ bool jump = false;
+ bool aux1 = false;
+ bool sneak = false;
+ bool zoom = false;
+ bool LMB = false;
+ bool RMB = false;
+ float pitch = 0.0f;
+ float yaw = 0.0f;
+ float sidew_move_joystick_axis = 0.0f;
+ float forw_move_joystick_axis = 0.0f;
+};
+
+struct PlayerSettings
+{
+ bool free_move = false;
+ bool pitch_move = false;
+ bool fast_move = false;
+ bool continuous_forward = false;
+ bool always_fly_fast = false;
+ bool aux1_descends = false;
+ bool noclip = false;
+ bool autojump = false;
+
+ const std::string setting_names[8] = {
+ "free_move", "pitch_move", "fast_move", "continuous_forward", "always_fly_fast",
+ "aux1_descends", "noclip", "autojump"
+ };
+ void readGlobalSettings();
+};