#include "achievements.hpp" #include "Z2AudioLib/Z2SeMgr.h" #include "dusk/achievements.h" #include "fmt/format.h" #include "m_Do/m_Do_audio.h" #include "nav_types.hpp" #include "pane.hpp" namespace dusk::ui { namespace { struct CategoryInfo { AchievementCategory cat; const char* label; }; constexpr CategoryInfo kCategories[] = { {AchievementCategory::Challenge, "Challenge"}, {AchievementCategory::Collection, "Collection"}, {AchievementCategory::Minigame, "Minigame"}, {AchievementCategory::Misc, "Misc"}, {AchievementCategory::Glitched, "Glitched"}, }; Rml::String build_achievement_info_rml(const Achievement& a) { Rml::String s = fmt::format( R"(
)" R"({})" R"({})" R"(
)" R"(

{}

)", a.unlocked ? " unlocked" : "", a.name, a.unlocked ? " unlocked" : " locked", a.unlocked ? "Unlocked" : "Locked", a.description ); if (a.isCounter) { float fraction = a.goal > 0 ? float(a.progress) / float(a.goal) : 1.0f; s += fmt::format( R"()" R"({} / {})", fraction, a.unlocked ? "progress-done" : "progress-ongoing", a.progress, a.goal ); } return s; } class AchievementRow : public FluentComponent { public: AchievementRow(Rml::Element* parent, const Achievement& a) : FluentComponent(createRowRoot(parent)) { auto& btn = add_child