diff --git a/src/guiengine/widgets/kart_stats_widget.cpp b/src/guiengine/widgets/kart_stats_widget.cpp index 796e0de3a..179f92b58 100644 --- a/src/guiengine/widgets/kart_stats_widget.cpp +++ b/src/guiengine/widgets/kart_stats_widget.cpp @@ -80,37 +80,42 @@ KartStatsWidget::KartStatsWidget(core::recti area, const int player_id, irr::core::recti massArea(m_skill_bar_x, m_skill_bar_y, m_skill_bar_x + m_skill_bar_w, m_skill_bar_y + m_skill_bar_h); - m_mass_bar = NULL; + SkillLevelWidget* skill_bar = NULL; - m_mass_bar = new SkillLevelWidget(massArea, m_player_id, + skill_bar = new SkillLevelWidget(massArea, m_player_id, (int) props->getMass()/10, "Weight"); - m_mass_bar->m_properties[PROP_ID] = StringUtils::insertValues("@p%i_mass", m_player_id); + skill_bar->m_properties[PROP_ID] = StringUtils::insertValues("@p%i_mass", m_player_id); + + m_skills.push_back(skill_bar); + m_children.push_back(skill_bar); // ---- Speed skill level widget irr::core::recti speedArea(m_skill_bar_x, m_skill_bar_y - m_skill_bar_h - 10, m_skill_bar_x + m_skill_bar_w, m_skill_bar_y + 10); - m_speed_bar = NULL; + skill_bar = NULL; - m_speed_bar = new SkillLevelWidget(speedArea, m_player_id, + skill_bar = new SkillLevelWidget(speedArea, m_player_id, (int) props->getMaxSpeed()/10, "Speed"); - m_speed_bar->m_properties[PROP_ID] = StringUtils::insertValues("@p%i_speed", m_player_id); + skill_bar->m_properties[PROP_ID] = StringUtils::insertValues("@p%i_speed", m_player_id); + + m_skills.push_back(skill_bar); + m_children.push_back(skill_bar); // ---- Acceleration skill level widget irr::core::recti accelArea(m_skill_bar_x, m_skill_bar_y + m_skill_bar_h + 10, m_skill_bar_x + m_skill_bar_w, m_skill_bar_y + 2*m_skill_bar_y + 10); - m_accel_bar = NULL; + skill_bar = NULL; - m_accel_bar = new SkillLevelWidget(accelArea, m_player_id, + skill_bar = new SkillLevelWidget(accelArea, m_player_id, (int) props->getTrackConnectionAccel()/10, "Accel"); - m_accel_bar->m_properties[PROP_ID] = StringUtils::insertValues("@p%i_accel", m_player_id); + skill_bar->m_properties[PROP_ID] = StringUtils::insertValues("@p%i_accel", m_player_id); - m_children.push_back(m_mass_bar); - m_children.push_back(m_speed_bar); - m_children.push_back(m_accel_bar); + m_skills.push_back(skill_bar); + m_children.push_back(skill_bar); } // KartStatsWidget @@ -118,43 +123,42 @@ KartStatsWidget::KartStatsWidget(core::recti area, const int player_id, void KartStatsWidget::add() { - m_mass_bar->add(); - m_speed_bar->add(); - m_accel_bar->add(); + for (int i = 0; i < SKILL_COUNT; ++i) { + m_skills[i]->add(); + } } void KartStatsWidget::move(int x, int y, int w, int h) { Widget::move(x,y,w,h); setSize(m_x, m_y, m_w, m_h); - - if (m_mass_bar != NULL) + int offset = (m_h - (SKILL_COUNT*m_skill_bar_h)) / 2; + for (int i = 0; i < SKILL_COUNT; ++i) { - m_mass_bar->move(m_skill_bar_x, - m_skill_bar_y, - m_skill_bar_w, - m_skill_bar_h); - } - - if (m_speed_bar != NULL) - { - m_speed_bar->move(m_skill_bar_x, - m_skill_bar_y - m_skill_bar_h - 10, + m_skills[i]->move(m_skill_bar_x, + m_y + offset + m_skill_bar_h*i, m_skill_bar_w, m_skill_bar_h); } - if (m_accel_bar != NULL) - { - m_accel_bar->move(m_skill_bar_x, - m_skill_bar_y + m_skill_bar_h + 10, - m_skill_bar_w, - m_skill_bar_h); - } - -} +} //move // ----------------------------------------------------------------------------- +// ---- set value for given type +void KartStatsWidget::setValue(Stats type, int value) +{ + m_skills[type]->setValue(value); +} //setValue + +// ----------------------------------------------------------------------------- + +// ---- get value for given type +int KartStatsWidget::getValue(Stats type) +{ + return m_skills[type]->getValue(); +} // getVAlue + +// ---- set size for widgets inside KartStatsWidget void KartStatsWidget::setSize(const int x, const int y, const int w, const int h) { m_x = x; @@ -178,24 +182,3 @@ void KartStatsWidget::setSize(const int x, const int y, const int w, const int h } // setSize // ----------------------------------------------------------------------------- - -void KartStatsWidget::setMass(int value) -{ - m_mass_bar->setValue(value); -} - -// ----------------------------------------------------------------------------- - -void KartStatsWidget::setAcceleration(int value) -{ - m_accel_bar->setValue(value); -} - -// ----------------------------------------------------------------------------- - -void KartStatsWidget::setSpeed(int value) -{ - m_speed_bar->setValue(value); -} -// ----------------------------------------------------------------------------- - diff --git a/src/guiengine/widgets/kart_stats_widget.hpp b/src/guiengine/widgets/kart_stats_widget.hpp index 3d4962140..8fca22ea9 100644 --- a/src/guiengine/widgets/kart_stats_widget.hpp +++ b/src/guiengine/widgets/kart_stats_widget.hpp @@ -38,6 +38,7 @@ namespace GUIEngine * \ingroup widgetsgroup */ + class KartStatsWidget : public Widget { /** When inferring widget size from its label length, this method will be called to @@ -52,13 +53,20 @@ class KartStatsWidget : public Widget int m_skill_bar_x, m_skill_bar_y, m_skill_bar_h, m_skill_bar_w; int m_player_id; - SkillLevelWidget* m_mass_bar; - SkillLevelWidget* m_speed_bar; - SkillLevelWidget* m_accel_bar; + + std::vector m_skills; public: + enum Stats + { + SKILL_MASS, + SKILL_SPEED, + SKILL_ACCEL, + SKILL_COUNT + }; + LEAK_CHECK() KartStatsWidget(core::recti area, const int player_id, @@ -85,14 +93,10 @@ class KartStatsWidget : public Widget void setSize(const int x, const int y, const int w, const int h); /** Change the value of the widget, it must be a percent. */ - void setMass(int value); - void setAcceleration(int value); - void setSpeed(int value); + void setValue(Stats type, int value); /** Get the current values of the widget. */ - int getMass() {return m_mass_bar->getValue(); }; - int getAcceleration() {return m_accel_bar->getValue(); }; - int getSpeed() {return m_speed_bar->getValue(); }; + int getValue(Stats type); }; } diff --git a/src/guiengine/widgets/skill_level_widget.cpp b/src/guiengine/widgets/skill_level_widget.cpp index ec09f55c4..f8b3c3cfa 100644 --- a/src/guiengine/widgets/skill_level_widget.cpp +++ b/src/guiengine/widgets/skill_level_widget.cpp @@ -128,10 +128,10 @@ void SkillLevelWidget::setSize(const int x, const int y, const int w, const int } m_bar_x = x + w/2; - m_bar_y = y; + m_bar_y = y + m_h/2 - m_bar_h/2; m_label_x = x; - m_label_y = y; + m_label_y = y + m_h/2 - m_label_h/2; } // setSize // ----------------------------------------------------------------------------- diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index d579ab414..de955a6b5 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -797,20 +797,6 @@ void PlayerKartWidget::setSize(const int x, const int y, const int w, const int // ------------------------------------------------------------------------- -void PlayerKartWidget::setKartStats(const std::string& selection) -{ - assert(m_magic_number == 0x33445566); - const KartProperties *kp = - kart_properties_manager->getKart(selection); - if (kp != NULL) - { - m_kart_stats->setMass((int)kp->getMass()/10); - m_kart_stats->setSpeed((int)kp->getMaxSpeed()/10); - m_kart_stats->setAcceleration((int)kp->getTrackConnectionAccel()/10); - m_kart_stats->update(0); - } -} - /** Sets which kart was selected for this player */ void PlayerKartWidget::setKartInternalName(const std::string& whichKart) { @@ -1503,9 +1489,9 @@ void KartSelectionScreen::updateKartStats(uint8_t widget_id, if (kp != NULL) { Log::verbose("updateKartStats", StringUtils::toString((int)kp->getMass()/10).c_str()); - w->setMass((int)kp->getMass()/10); - w->setSpeed((int)kp->getMaxSpeed()/10); - w->setAcceleration((int)kp->getTrackConnectionAccel()/10); + w->setValue(KartStatsWidget::SKILL_MASS, (int)kp->getMass()/10); + w->setValue(KartStatsWidget::SKILL_SPEED, (int)kp->getMaxSpeed()/10); + w->setValue(KartStatsWidget::SKILL_ACCEL, (int)kp->getTrackConnectionAccel()/10); w->update(0); } } diff --git a/src/states_screens/kart_selection.hpp b/src/states_screens/kart_selection.hpp index 85c6986e5..e42abbf93 100644 --- a/src/states_screens/kart_selection.hpp +++ b/src/states_screens/kart_selection.hpp @@ -346,11 +346,6 @@ public: // ------------------------------------------------------------------------- - /** Set the kart stats for this player */ - void setKartStats(const std::string& selection); - - // ------------------------------------------------------------------------- - /** Sets which kart was selected for this player */ void setKartInternalName(const std::string& whichKart);