Skip to content

Commit fc9b84c

Browse files
author
WALL OF JUSTICE
committed
* quick turn controls setting
1 parent e7c2fe3 commit fc9b84c

File tree

3 files changed

+100
-3
lines changed

3 files changed

+100
-3
lines changed

src/actplayer.cpp

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,42 @@ bool Player::Ghost_t::handleQuickTurn(bool useRefreshRateDelta)
287287
int dir = ((quickTurnRotation > 0) ? 1 : -1);
288288
if ( my->ticks - quickTurnStartTicks < 15 )
289289
{
290-
GHOSTCAM_ROTX = dir * players[player.playernum]->settings.quickTurnSpeed * *cvar_quick_turn_speed;
290+
int turnspeed = 1;
291+
if ( inputs.hasController(player.playernum) )
292+
{
293+
turnspeed = static_cast<int>(playerSettings[multiplayer ? 0 : player.playernum].quick_turn_speed);
294+
}
295+
else if ( inputs.bPlayerUsingKeyboardControl(player.playernum) )
296+
{
297+
turnspeed = static_cast<int>(playerSettings[multiplayer ? 0 : player.playernum].quick_turn_speed_mkb);
298+
}
299+
else
300+
{
301+
turnspeed = static_cast<int>(playerSettings[multiplayer ? 0 : player.playernum].quick_turn_speed);
302+
}
303+
turnspeed = std::min(5, std::max(1, turnspeed));
304+
float mult = 1.f;
305+
switch ( turnspeed )
306+
{
307+
case 1:
308+
mult = 1.f;
309+
break;
310+
case 2:
311+
mult = 1.25f;
312+
break;
313+
case 3:
314+
mult = 1.5f;
315+
break;
316+
case 4:
317+
mult = 2.5f;
318+
break;
319+
case 5:
320+
mult = 3.f;
321+
break;
322+
default:
323+
break;
324+
}
325+
GHOSTCAM_ROTX = dir * players[player.playernum]->settings.quickTurnSpeed * *cvar_quick_turn_speed * mult;
291326
}
292327
else
293328
{
@@ -2488,7 +2523,42 @@ bool Player::PlayerMovement_t::handleQuickTurn(bool useRefreshRateDelta)
24882523
int dir = ((quickTurnRotation > 0) ? 1 : -1);
24892524
if ( my->ticks - quickTurnStartTicks < 15 )
24902525
{
2491-
PLAYER_ROTX = dir * players[player.playernum]->settings.quickTurnSpeed * *cvar_quick_turn_speed;
2526+
int turnspeed = 1;
2527+
if ( inputs.hasController(player.playernum) )
2528+
{
2529+
turnspeed = static_cast<int>(playerSettings[multiplayer ? 0 : player.playernum].quick_turn_speed);
2530+
}
2531+
else if ( inputs.bPlayerUsingKeyboardControl(player.playernum) )
2532+
{
2533+
turnspeed = static_cast<int>(playerSettings[multiplayer ? 0 : player.playernum].quick_turn_speed_mkb);
2534+
}
2535+
else
2536+
{
2537+
turnspeed = static_cast<int>(playerSettings[multiplayer ? 0 : player.playernum].quick_turn_speed);
2538+
}
2539+
turnspeed = std::min(5, std::max(1, turnspeed));
2540+
float mult = 1.f;
2541+
switch ( turnspeed )
2542+
{
2543+
case 1:
2544+
mult = 1.f;
2545+
break;
2546+
case 2:
2547+
mult = 1.25f;
2548+
break;
2549+
case 3:
2550+
mult = 1.5f;
2551+
break;
2552+
case 4:
2553+
mult = 2.5f;
2554+
break;
2555+
case 5:
2556+
mult = 3.f;
2557+
break;
2558+
default:
2559+
break;
2560+
}
2561+
PLAYER_ROTX = dir * players[player.playernum]->settings.quickTurnSpeed * *cvar_quick_turn_speed * mult;
24922562
}
24932563
else
24942564
{

src/player.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ struct PlayerSettings_t
6565
real_t gamepad_righty_sensitivity = 1.0;
6666
bool gamepad_rightx_invert = false;
6767
bool gamepad_righty_invert = false;
68+
float quick_turn_speed = 1.f;
69+
float quick_turn_speed_mkb = 1.f;
6870
void init(const int _player)
6971
{
7072
player = _player;

src/ui/MainMenu.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,8 @@ namespace MainMenu {
553553
float turn_sensitivity_y = 50.f;
554554
bool gamepad_camera_invert_x = false;
555555
bool gamepad_camera_invert_y = false;
556+
float quick_turn_speed_control = 1.f;
557+
float quick_turn_speed_mkb_control = 1.f;
556558
inline void save(int index);
557559
static inline Controls load(int index);
558560
static inline Controls reset();
@@ -2750,6 +2752,8 @@ namespace MainMenu {
27502752
settings.gamepad_righty_sensitivity = std::min(std::max(25.f / 32768.f, turn_sensitivity_y / 32768.f), 200.f / 32768.f);
27512753
settings.gamepad_rightx_invert = gamepad_camera_invert_x;
27522754
settings.gamepad_righty_invert = gamepad_camera_invert_y;
2755+
settings.quick_turn_speed = std::max(1.f, std::min(5.f, quick_turn_speed_control));
2756+
settings.quick_turn_speed_mkb = std::max(1.f, std::min(5.f, quick_turn_speed_mkb_control));
27532757
}
27542758

27552759
inline Controls Controls::load(int index) {
@@ -2766,6 +2770,8 @@ namespace MainMenu {
27662770
controls.turn_sensitivity_y = settings.gamepad_righty_sensitivity * 32768.0;
27672771
controls.gamepad_camera_invert_x = settings.gamepad_rightx_invert;
27682772
controls.gamepad_camera_invert_y = settings.gamepad_righty_invert;
2773+
controls.quick_turn_speed_control = settings.quick_turn_speed;
2774+
controls.quick_turn_speed_mkb_control = settings.quick_turn_speed_mkb;
27692775
return controls;
27702776
}
27712777

@@ -2786,6 +2792,8 @@ namespace MainMenu {
27862792
file->property("turn_sensitivity_y", turn_sensitivity_y);
27872793
file->property("gamepad_camera_invert_x", gamepad_camera_invert_x);
27882794
file->property("gamepad_camera_invert_y", gamepad_camera_invert_y);
2795+
file->property("quick_turn_speed_control", quick_turn_speed_control);
2796+
file->property("quick_turn_speed_mkb_control", quick_turn_speed_mkb_control);
27892797
return true;
27902798
}
27912799

@@ -3009,7 +3017,7 @@ namespace MainMenu {
30093017
}
30103018

30113019
bool AllSettings::serialize(FileInterface* file) {
3012-
int version = 20;
3020+
int version = 21;
30133021
file->property("version", version);
30143022
file->property("mods", mods);
30153023
file->property("crossplay_enabled", crossplay_enabled);
@@ -3116,6 +3124,8 @@ namespace MainMenu {
31163124
file->property("gamepad_camera_invert_x", controls.gamepad_camera_invert_x);
31173125
file->property("gamepad_camera_invert_y", controls.gamepad_camera_invert_y);
31183126
}
3127+
file->propertyVersion("quick_turn_speed_control", version >= 21, controls.quick_turn_speed_control);
3128+
file->propertyVersion("quick_turn_speed_mkb_control", version >= 21, controls.quick_turn_speed_mkb_control);
31193129
for (int c = 0; c < MAX_SPLITSCREEN; ++c) {
31203130
this->controls[c] = controls;
31213131
}
@@ -4989,6 +4999,12 @@ namespace MainMenu {
49894999
return buf;
49905000
}
49915001

5002+
static const char* sliderFloorInt(float v) {
5003+
static char buf[8];
5004+
snprintf(buf, sizeof(buf), "%d", (int)floor(v));
5005+
return buf;
5006+
};
5007+
49925008
static int settingsAddSlider(
49935009
Frame& frame,
49945010
int y,
@@ -6904,6 +6920,9 @@ namespace MainMenu {
69046920
y += settingsAddBooleanOption(*settings_subwindow, y, "mkb_world_tooltips", Language::get(5226), Language::get(5227),
69056921
allSettings.controls[bound_player].mkb_world_tooltips_enabled, [](Button& button)
69066922
{soundToggleSetting(button); allSettings.controls[bound_player].mkb_world_tooltips_enabled = button.isPressed();});
6923+
y += settingsAddSlider(*settings_subwindow, y, "quick_turn_speed_mkb_control", Language::get(6310), Language::get(6311),
6924+
allSettings.controls[bound_player].quick_turn_speed_mkb_control, 1.f, 5.f, sliderFloorInt, [](Slider& slider)
6925+
{soundSliderSetting(slider, true); allSettings.controls[bound_player].quick_turn_speed_mkb_control = slider.getValue(); });
69076926

69086927
hookSettings(*settings_subwindow,
69096928
{{Setting::Type::Customize, "bindings"},
@@ -6912,6 +6931,7 @@ namespace MainMenu {
69126931
{Setting::Type::Boolean, "reverse_mouse"},
69136932
{Setting::Type::Boolean, "smooth_mouse"},
69146933
{Setting::Type::Boolean, "mkb_world_tooltips"},
6934+
{Setting::Type::Slider, "quick_turn_speed_mkb_control"},
69156935
});
69166936
}
69176937

@@ -6934,6 +6954,10 @@ namespace MainMenu {
69346954
y += settingsAddBooleanOption(*settings_subwindow, y, "gamepad_camera_invert_y", Language::get(5239), Language::get(5240),
69356955
allSettings.controls[bound_player].gamepad_camera_invert_y, [](Button& button)
69366956
{soundToggleSetting(button); allSettings.controls[bound_player].gamepad_camera_invert_y = button.isPressed();});
6957+
6958+
y += settingsAddSlider(*settings_subwindow, y, "quick_turn_speed_control", Language::get(6310), Language::get(6311),
6959+
allSettings.controls[bound_player].quick_turn_speed_control, 1.f, 5.f, sliderFloorInt, [](Slider& slider)
6960+
{soundSliderSetting(slider, true); allSettings.controls[bound_player].quick_turn_speed_control = slider.getValue(); });
69376961

69386962
hookSettings(*settings_subwindow,
69396963
{{Setting::Type::Customize, "bindings"},
@@ -6942,6 +6966,7 @@ namespace MainMenu {
69426966
{Setting::Type::Slider, "turn_sensitivity_y"},
69436967
{Setting::Type::Boolean, "gamepad_camera_invert_x"},
69446968
{Setting::Type::Boolean, "gamepad_camera_invert_y"},
6969+
{Setting::Type::Slider, "quick_turn_speed_control"},
69456970
});
69466971
}
69476972

0 commit comments

Comments
 (0)