void FillRelationTraits(Dictionary <IMRObject, int> dataAssignments, Relations relations, Dictionary <IMRObject, QueryResult> childResults) { if (relations.TryGetType(out IRelation <System.Int32>[] intRelations) && intRelations.Length > 0) { foreach (var relation in intRelations) { var child1 = relation.child1; if (childResults.TryGetValue(child1, out var child1Result)) { var trait1Name = relation.child1TraitName; IntTraitProvider.TryGetTraitValue(dataAssignments[child1], trait1Name, out var value1); child1Result.SetTrait(trait1Name, value1); } var child2 = relation.child2; if (childResults.TryGetValue(child2, out var child2Result)) { var trait2Name = relation.child2TraitName; IntTraitProvider.TryGetTraitValue(dataAssignments[child2], trait2Name, out var value2); child2Result.SetTrait(trait2Name, value2); } } } if (relations.TryGetType(out IRelation <UnityEngine.Vector2>[] vector2Relations) && vector2Relations.Length > 0) { foreach (var relation in vector2Relations) { var child1 = relation.child1; if (childResults.TryGetValue(child1, out var child1Result)) { var trait1Name = relation.child1TraitName; Vector2TraitProvider.TryGetTraitValue(dataAssignments[child1], trait1Name, out var value1); child1Result.SetTrait(trait1Name, value1); } var child2 = relation.child2; if (childResults.TryGetValue(child2, out var child2Result)) { var trait2Name = relation.child2TraitName; Vector2TraitProvider.TryGetTraitValue(dataAssignments[child2], trait2Name, out var value2); child2Result.SetTrait(trait2Name, value2); } } } }
bool FindTraitsInternal(Conditions conditions, CachedTraitCollection cache) { if (conditions.GetTypeCount(out ISemanticTagCondition[] semanticTagConditions) > 0) { if (!cache.TryGetType(out List <Dictionary <int, System.Boolean> > semanticTagCollections)) { return(false); } for (var i = 0; i < semanticTagConditions.Length; i++) { var condition = semanticTagConditions[i]; if (!SemanticTagTraitProvider.TryGetAllTraitValues(condition.traitName, out Dictionary <int, System.Boolean> traits)) { if (condition.matchRule == SemanticTagMatchRule.Match) { return(false); } } semanticTagCollections[i] = traits; } } if (conditions.GetTypeCount(out ICondition <System.Int32>[] intConditions) > 0) { if (!cache.TryGetType(out List <Dictionary <int, System.Int32> > intCollections)) { return(false); } for (var i = 0; i < intConditions.Length; i++) { var condition = intConditions[i]; if (!IntTraitProvider.TryGetAllTraitValues(condition.traitName, out Dictionary <int, System.Int32> traits)) { return(false); } intCollections[i] = traits; } } if (conditions.GetTypeCount(out ICondition <System.Single>[] floatConditions) > 0) { if (!cache.TryGetType(out List <Dictionary <int, System.Single> > floatCollections)) { return(false); } for (var i = 0; i < floatConditions.Length; i++) { var condition = floatConditions[i]; if (!FloatTraitProvider.TryGetAllTraitValues(condition.traitName, out Dictionary <int, System.Single> traits)) { return(false); } floatCollections[i] = traits; } } if (conditions.GetTypeCount(out ICondition <System.String>[] stringConditions) > 0) { if (!cache.TryGetType(out List <Dictionary <int, System.String> > stringCollections)) { return(false); } for (var i = 0; i < stringConditions.Length; i++) { var condition = stringConditions[i]; if (!StringTraitProvider.TryGetAllTraitValues(condition.traitName, out Dictionary <int, System.String> traits)) { return(false); } stringCollections[i] = traits; } } if (conditions.GetTypeCount(out ICondition <UnityEngine.Pose>[] poseConditions) > 0) { if (!cache.TryGetType(out List <Dictionary <int, UnityEngine.Pose> > poseCollections)) { return(false); } for (var i = 0; i < poseConditions.Length; i++) { var condition = poseConditions[i]; if (!PoseTraitProvider.TryGetAllTraitValues(condition.traitName, out Dictionary <int, UnityEngine.Pose> traits)) { return(false); } poseCollections[i] = traits; } } if (conditions.GetTypeCount(out ICondition <UnityEngine.Vector2>[] vector2Conditions) > 0) { if (!cache.TryGetType(out List <Dictionary <int, UnityEngine.Vector2> > vector2Collections)) { return(false); } for (var i = 0; i < vector2Conditions.Length; i++) { var condition = vector2Conditions[i]; if (!Vector2TraitProvider.TryGetAllTraitValues(condition.traitName, out Dictionary <int, UnityEngine.Vector2> traits)) { return(false); } vector2Collections[i] = traits; } } return(true); }
public bool UpdateQueryMatchInternal(int dataID, Conditions conditions, ProxyTraitRequirements requirements, QueryResult result) { if (conditions.TryGetType(out ICondition <System.Int32>[] intConditions)) { foreach (var condition in intConditions) { if (!IntTraitProvider.TryGetTraitValue(dataID, condition.traitName, out var traitValue)) { return(false); } if (condition.PassesCondition(ref traitValue)) { result.SetTrait(condition.traitName, traitValue); } else { return(false); } } } if (conditions.TryGetType(out ICondition <System.Single>[] floatConditions)) { foreach (var condition in floatConditions) { if (!FloatTraitProvider.TryGetTraitValue(dataID, condition.traitName, out var traitValue)) { return(false); } if (condition.PassesCondition(ref traitValue)) { result.SetTrait(condition.traitName, traitValue); } else { return(false); } } } if (conditions.TryGetType(out ICondition <System.String>[] stringConditions)) { foreach (var condition in stringConditions) { if (!StringTraitProvider.TryGetTraitValue(dataID, condition.traitName, out var traitValue)) { return(false); } if (condition.PassesCondition(ref traitValue)) { result.SetTrait(condition.traitName, traitValue); } else { return(false); } } } if (conditions.TryGetType(out ICondition <UnityEngine.Vector2>[] vector2Conditions)) { foreach (var condition in vector2Conditions) { if (!Vector2TraitProvider.TryGetTraitValue(dataID, condition.traitName, out var traitValue)) { return(false); } if (condition.PassesCondition(ref traitValue)) { result.SetTrait(condition.traitName, traitValue); } else { return(false); } } } return(true); }