public void Update(Result[] results) { bool allIsOk = true; int score = -1; foreach (AchievQuery query in Queries) { //is there any query that wasn't set in the results? bool wasChecked = false; foreach (Result result in results) { if (result.ScoreType == WhatIncrement) { score = result.Value; } if (query.IsTheSameType(result)) { wasChecked = true; } if (!query.CanAccept(result)) { allIsOk = false; } } //if there was no result for specific query, then this is no good if (!wasChecked) { allIsOk = false; } } if (allIsOk && score != -1) //score is -1 when achievement and results have different scoreTypes. no worries, this is normal, when updating just some of achievements while game is running { if (_Type == ACHIEVEMENT_TYPE.INCREMENTAL && ProcessScore(score) > 0) //there is no need to send request to inrement by zero { GoogleAchievement.IncrementAchievement(Id, ProcessScore(score)); } if (_Type == ACHIEVEMENT_TYPE.UNLOCKABLE) { GoogleAchievement.UnlockAchievement(Id); } } }