Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarStatisticsDatabase.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/StarStatisticsDatabase.hpp')
-rw-r--r--source/game/StarStatisticsDatabase.hpp51
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