// todo: UnlockedAchievements

        public AchievementManager(string filePath, IEnumerable<Achievement> achievements)
            : base(filePath)
        {
            Ensure.NotNull(achievements);
            _achievements = new ReadOnlyArray<Achievement>(achievements.ToArray());
            _achievementsByName = _achievements.ToDictionary(achivement => achivement.Name);

            this.Load();
            this.HookAchievementUnlockedEvents();
        }
        // todo: UnlockedAchievements

        public AchievementManager(IEnumerable<Achievement> achievements, string achievementSaveFileName)
        {
            Ensure.NotNull(achievements);
            Ensure.NotNullOrWhitespace(achievementSaveFileName);
            Ensure.IsValidPath(achievementSaveFileName);

            _achievements = new ReadOnlyArray<Achievement>(achievements.ToArray());
            _achievementsByName = _achievements.ToDictionary(achivement => achivement.Name);
            _achievementSaveFileName = achievementSaveFileName;

            this.LoadFromFile();
            this.HookAchievementUnlockedEvents();
        }