diff options
Diffstat (limited to 'source/game/StarStatisticsDatabase.hpp')
-rw-r--r-- | source/game/StarStatisticsDatabase.hpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/source/game/StarStatisticsDatabase.hpp b/source/game/StarStatisticsDatabase.hpp new file mode 100644 index 0000000..ee30e21 --- /dev/null +++ b/source/game/StarStatisticsDatabase.hpp @@ -0,0 +1,51 @@ +#ifndef STAR_STATISTICS_DATABASE_HPP +#define STAR_STATISTICS_DATABASE_HPP + +#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<String> m_eventPaths; + StringMap<String> m_achievementPaths; + StringMap<StringList> m_statAchievements; + mutable Mutex m_cacheMutex; + mutable HashLruCache<String, StatEventPtr> m_eventCache; + mutable HashLruCache<String, AchievementPtr> m_achievementCache; +}; + +} + +#endif |