#pragma once #include "StarRoot.hpp" #include "StarAssets.hpp" #include "StarLruCache.hpp" namespace Star { STAR_STRUCT(StatEvent); STAR_STRUCT(Achievement); STAR_CLASS(StatisticsDatabase); struct StatEvent { String eventName; StringList scripts; Json config; }; struct Achievement { String name; StringList triggers; StringList scripts; Json config; }; class StatisticsDatabase { public: StatisticsDatabase(); StatEventPtr event(String const& eventName) const; AchievementPtr achievement(String const& name) const; StringList allAchievements() const; StringList achievementsForStat(String const& statName) const; private: static StatEventPtr readEvent(String const& path); static AchievementPtr readAchievement(String const& path); StringMap m_eventPaths; StringMap m_achievementPaths; StringMap m_statAchievements; mutable Mutex m_cacheMutex; mutable HashLruCache m_eventCache; mutable HashLruCache m_achievementCache; }; }