internal static bool MeetsPrerequisites(BlueprintArchetype archetype, UnitDescriptor unit, LevelUpState state) { bool?all = null; bool?any = null; foreach (var prerequisite in archetype.GetComponents <Prerequisite>()) { var passed = prerequisite.Check(null, unit, state); if (prerequisite.Group == Prerequisite.GroupType.All) { all = (!all.HasValue) ? passed : (all.Value && passed); } else { any = (!any.HasValue) ? passed : (any.Value || passed); } } var result = (!all.HasValue || all.Value) && (!any.HasValue || any.Value); return(result); }