diff --git a/data/gui/screens/options/options_ui.stkgui b/data/gui/screens/options/options_ui.stkgui
index 8738a47d7f5..fddb9476592 100644
--- a/data/gui/screens/options/options_ui.stkgui
+++ b/data/gui/screens/options/options_ui.stkgui
@@ -93,6 +93,12 @@
+
+
+
+
+
+
diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp
index 4495c6785da..445e6d59bb5 100644
--- a/src/config/user_config.hpp
+++ b/src/config/user_config.hpp
@@ -657,6 +657,9 @@ namespace UserConfigParams
PARAM_PREFIX BoolUserConfigParam m_speedrun_mode
PARAM_DEFAULT( BoolUserConfigParam(false, "show_speedrun_timer",
&m_video_group, "Display the speedrun timer") );
+ PARAM_PREFIX BoolUserConfigParam m_speedometer
+ PARAM_DEFAULT( BoolUserConfigParam(false, "show_speedometer",
+ &m_video_group, "Display the speedometer") );
PARAM_PREFIX IntUserConfigParam m_max_fps
PARAM_DEFAULT( IntUserConfigParam(120, "max_fps",
&m_video_group, "Maximum fps, should be at least 60") );
diff --git a/src/states_screens/options/options_screen_ui.cpp b/src/states_screens/options/options_screen_ui.cpp
index 93397cb8e14..bf866c857c8 100644
--- a/src/states_screens/options/options_screen_ui.cpp
+++ b/src/states_screens/options/options_screen_ui.cpp
@@ -269,6 +269,20 @@ void OptionsScreenUI::init()
}
}
speedrun_timer->setState( UserConfigParams::m_speedrun_mode );
+
+ CheckBoxWidget* speedometer = getWidget("speedometer");
+ assert( speedometer != NULL );
+
+ speedometer->setState( UserConfigParams::m_speedometer);
+ if (multitouch_enabled)
+ {
+ UserConfigParams::m_speedometer == 0;
+ }
+ else
+ {
+ UserConfigParams::m_speedometer == 1;
+ }
+ speedometer->setState( UserConfigParams::m_speedometer );
} // init
// -----------------------------------------------------------------------------
@@ -499,6 +513,12 @@ void OptionsScreenUI::eventCallback(Widget* widget, const std::string& name, con
}
UserConfigParams::m_speedrun_mode = speedrun_timer->getState();
}
+ else if (name == "speedometer")
+ {
+ CheckBoxWidget* speedometer = getWidget("speedometer");
+ assert( speedometer != NULL );
+ UserConfigParams::m_speedometer = speedometer->getState();
+ }
#endif
} // eventCallback
diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp
index bf437a12ff6..fe0e6e503fc 100644
--- a/src/states_screens/race_gui.cpp
+++ b/src/states_screens/race_gui.cpp
@@ -92,7 +92,7 @@ RaceGUI::RaceGUI()
m_is_tutorial = (RaceManager::get()->getTrackName() == "tutorial");
- // Load speedmeter texture before rendering the first frame
+ // Load speedometer texture before rendering the first frame
m_speed_meter_icon = irr_driver->getTexture(FileManager::GUI_ICON, "speedback.png");
m_speed_bar_icon = irr_driver->getTexture(FileManager::GUI_ICON, "speedfore.png");
//createMarkerTexture();
@@ -401,6 +401,10 @@ void RaceGUI::renderPlayerView(const Camera *camera, float dt)
drawPowerupIcons(kart, viewport, scaling);
drawSpeedEnergyRank(kart, viewport, scaling, dt);
}
+ else
+ {
+ drawSpeedEnergyRank(kart, viewport, scaling, dt);
+ }
}
if (!m_is_tutorial)
@@ -1014,21 +1018,32 @@ void RaceGUI::drawSpeedEnergyRank(const AbstractKart* kart,
float dt)
{
#ifndef SERVER_ONLY
+ if (UserConfigParams::m_speedometer == 0) return; //speedometer hidden
+
float min_ratio = std::min(scaling.X, scaling.Y);
const int SPEEDWIDTH = 128;
int meter_width = (int)(SPEEDWIDTH*min_ratio);
int meter_height = (int)(SPEEDWIDTH*min_ratio);
-
- drawEnergyMeter(viewport.LowerRightCorner.X ,
- (int)(viewport.LowerRightCorner.Y),
- kart, viewport, scaling);
+ if (m_multitouch_gui == NULL || m_multitouch_gui->isSpectatorMode())
+ {
+ drawEnergyMeter(viewport.LowerRightCorner.X ,
+ (int)(viewport.LowerRightCorner.Y),
+ kart, viewport, scaling);
+ }
// First draw the meter (i.e. the background )
// -------------------------------------------------------------------------
core::vector2df offset;
- offset.X = (float)(viewport.LowerRightCorner.X-meter_width) - 24.0f*scaling.X;
- offset.Y = viewport.LowerRightCorner.Y-10.0f*scaling.Y;
-
+ if (m_multitouch_gui == NULL || m_multitouch_gui->isSpectatorMode())
+ {
+ offset.X = (float)(viewport.LowerRightCorner.X-meter_width) - 24.0f*scaling.X;
+ offset.Y = viewport.LowerRightCorner.Y-10.0f*scaling.Y;
+ }
+ else
+ {
+ offset.X = (float)(viewport.LowerRightCorner.X-meter_width) - 220.0f*scaling.X;
+ offset.Y = viewport.LowerRightCorner.Y-60.0f*scaling.Y;
+ }
const core::rect meter_pos((int)offset.X,
(int)(offset.Y-meter_height),
(int)(offset.X+meter_width),
@@ -1125,7 +1140,6 @@ void RaceGUI::drawSpeedEnergyRank(const AbstractKart* kart,
unsigned int count = computeVerticesForMeter(position, threshold, vertices, vertices_count,
speed_ratio, meter_width, meter_height, offset);
-
drawMeterTexture(m_speed_bar_icon, vertices, count);
#endif
} // drawSpeedEnergyRank