2024-02-25 14:46:47 +00:00
|
|
|
#pragma once
|
2023-06-20 04:33:09 +00:00
|
|
|
|
|
|
|
#include "StarJson.hpp"
|
|
|
|
|
|
|
|
namespace Star {
|
|
|
|
|
|
|
|
STAR_CLASS(StatisticsService);
|
|
|
|
|
|
|
|
class StatisticsService {
|
|
|
|
public:
|
|
|
|
virtual ~StatisticsService() = default;
|
|
|
|
|
|
|
|
virtual bool initialized() const = 0;
|
|
|
|
virtual Maybe<String> error() const = 0;
|
|
|
|
|
|
|
|
// The functions below aren't valid unless initialized() returns true and
|
|
|
|
// error() is empty.
|
|
|
|
|
|
|
|
// setStat should return false for stats or types that aren't known by the
|
|
|
|
// service, without reporting an error.
|
|
|
|
// By sending all stats to the StatisticsService, we can configure collection
|
|
|
|
// of new stats entirely on the service, without any modifications to the game.
|
|
|
|
virtual bool setStat(String const& name, String const& type, Json const& value) = 0;
|
|
|
|
virtual Json getStat(String const& name, String const& type, Json def = {}) const = 0;
|
|
|
|
|
|
|
|
// reportEvent should return false if the service doesn't handle this event.
|
|
|
|
virtual bool reportEvent(String const& name, Json const& fields) = 0;
|
|
|
|
|
|
|
|
virtual bool unlockAchievement(String const& name) = 0;
|
|
|
|
virtual StringSet achievementsUnlocked() const = 0;
|
|
|
|
|
|
|
|
virtual void refresh() = 0;
|
|
|
|
virtual void flush() = 0;
|
|
|
|
virtual bool reset() = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|