public static void SetCondition(this IEnumerable <AchievementInfo> infos, AchievementsType type, Func <int, int, bool> conditionFunc) { var typedInfos = infos.Where(info => info.Achievement.Type == type); foreach (var info in typedInfos) { info.CheckCondition = conditionFunc; } }
/// <summary> /// Базовая функция проверки выполнения условия достижения. /// Не рассматривает возможность получения сразу нескольких достижений одного типа /// </summary> private void BaseCheckValue(AchievementsType type, int value) { if (!TryGetInfo(type, out var lockedInfos)) { return; } var achievementInfo = lockedInfos.OrderBy(info => info.Achievement.CompareValue).First(); if (achievementInfo.CheckCondition(value, achievementInfo.Achievement.CompareValue)) { AddAchievement(achievementInfo.Achievement); } }
/// <summary> /// Базовая функция проверки выполнения условия достижения на точное совпадение /// </summary> private void EqualCheckValue(AchievementsType type, int value, [CanBeNull] Action clearBufferVariable) { if (!TryGetInfo(type, out var lockedInfos)) { return; } var achievementInfo = lockedInfos.FirstOrDefault(info => info.CheckCondition(value, info.Achievement.CompareValue)); if (achievementInfo != default) { AddAchievement(achievementInfo.Achievement); } clearBufferVariable?.Invoke(); }
/// <summary> /// Ищет все новые заработанные достижения указанного типа, фиксирует все в PlayerHistory, /// а выводит в UI лишь первое, согласно ключу сортировки /// (в текущей реализации, лучший результат, например, из ТопЧарта 1 и 50 выведет "Топ 1") /// </summary> private void MultipleCheckValue(AchievementsType type, int value, Func <AchievementInfo, int> orderSelector) { if (!TryGetInfo(type, out var lockedInfos)) { return; } var achievementInfos = lockedInfos .Where(info => info.CheckCondition(value, info.Achievement.CompareValue)) .ToArray(); if (achievementInfos.Any()) { var newUnlockedInfos = achievementInfos.OrderBy(orderSelector).ToArray(); for (var i = 0; i < newUnlockedInfos.Length; i++) { AddAchievement(newUnlockedInfos[i].Achievement, i == 0); } } }
/// <summary> /// Поиск достижений определнного типа. /// </summary> private bool TryGetInfo(AchievementsType type, out IEnumerable <AchievementInfo> lockedInfos) { lockedInfos = achievementsData.LockedInfos.Where(info => info.Achievement.Type == type); return(lockedInfos.Any()); }
public void GiveAchievement(AchievementsType AchievementType) { switch (AchievementType) { case AchievementsType.Adventurer: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQAQ", (bool success) => { print(success); }); break; case AchievementsType.Bang: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQAw", (bool success) => { print(success); }); break; case AchievementsType.Unlucky: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQBA", (bool success) => { print(success); }); break; case AchievementsType.TreasureHunter: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQBQ", (bool success) => { print(success); }); break; case AchievementsType.NewJob: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQBg", (bool success) => { print(success); }); break; case AchievementsType.Defender: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQBw", (bool success) => { print(success); }); break; case AchievementsType.Panic: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQCA", (bool success) => { print(success); }); break; case AchievementsType.LaserParty: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQCQ", (bool success) => { print(success); }); break; case AchievementsType.AllSeingEye: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQCg", (bool success) => { print(success); }); break; case AchievementsType.Fisher: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQCw", (bool success) => { print(success); }); break; case AchievementsType.Secret: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQDA", (bool success) => { print(success); }); break; case AchievementsType.WOW: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQEw", (bool success) => { print(success); }); break; case AchievementsType.TryHard: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQFA", (bool success) => { print(success); }); break; case AchievementsType.OMG: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQFQ", (bool success) => { print(success); }); break; case AchievementsType.Ghost: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQFg", (bool success) => { print(success); }); break; case AchievementsType.FarDistances: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQFw", (bool success) => { print(success); }); break; case AchievementsType.HighStakes: PlayGamesPlatform.Instance.UnlockAchievement("CgkIyriH1Y4ZEAIQGA", (bool success) => { print(success); }); break; default: print("Error! This achievement don't found!"); break; } Debug.Log("Выдано достижение: " + AchievementType.ToString()); }