public void Modify(QueryMatchID id, int index, SetChildArgs args) { Assert.IsTrue(MatchIdToIndex.ContainsKey(id) && QueryMatchIds[index].Equals(id) && ValidIndices.Contains(index), $"Invalid query match id {id} or invalid index {index}"); Exclusivities[index] = args.tryBestMatchArgs.exclusivity; Required[index] = args.required; BestMatchDataIds[index] = (int)ReservedDataIDs.Invalid; CachedTraits[index] = new CachedTraitCollection(args.tryBestMatchArgs.conditions); Conditions[index] = args.tryBestMatchArgs.conditions; TraitRequirements[index] = args.TraitRequirements; RelationMemberships[index] = null; ConditionRatings[index].Recycle(); ConditionRatings[index] = Pools.ConditionRatings.Get().Initialize(args.tryBestMatchArgs.conditions); ReducedConditionRatings[index].Clear(); ConditionMatchSets[index].Clear(); QueryResults[index] = new QueryResult { queryMatchId = id }; AcquiringIndices.Add(index); UpdatingIndices.Remove(index); }
public int Register(QueryMatchID id, IMRObject obj, SetChildArgs args) { var index = Add(id, obj, args.tryBestMatchArgs.exclusivity, (int)ReservedDataIDs.Invalid, args.required, new CachedTraitCollection(args.tryBestMatchArgs.conditions), args.tryBestMatchArgs.conditions, args.TraitRequirements, Pools.ConditionRatings.Get().Initialize(args.tryBestMatchArgs.conditions), Pools.DataIdHashSets.Get(), Pools.Ratings.Get(), new QueryResult { queryMatchId = id }); AcquiringIndices.Add(index); List <int> tempIndices; if (MatchIdToIndex.TryGetValue(id, out tempIndices)) { tempIndices.Add(index); } else { tempIndices = new List <int> { index }; MatchIdToIndex[id] = tempIndices; } return(index); }
static Relations MakeBaseSet(out SetQueryResult result, Dictionary <IMRObject, ChildMatchInfo> childrenExpectedMatchInfo) { var gameObject = new GameObject("Set"); gameObject.AddComponent <ProxyGroup>(); k_ToDestroy.Add(gameObject); // Make child MR objects and give them ordinary relations var children = new Dictionary <IMRObject, SetChildArgs>(); for (var i = 0; i < k_RelationCount + 1; ++i) { var childGameObject = new GameObject("Child" + i); k_ToDestroy.Add(childGameObject); childGameObject.transform.SetParent(gameObject.transform); var conditionsRoot = childGameObject.AddComponent <TestMRObject>(); var expectedMatchInfo = new ChildMatchInfo(); childrenExpectedMatchInfo[conditionsRoot] = expectedMatchInfo; var hasTraitCondition = childGameObject.AddComponent <SemanticTagCondition>(); hasTraitCondition.SetTraitName(k_CommonTrait); expectedMatchInfo.semanticTagTraits.Add(k_CommonTrait, true); var conditions = ProxyConditions.FromGenericIMRObject(conditionsRoot); var childArgs = new SetChildArgs(conditions); children[conditionsRoot] = childArgs; } // Make relations and store the expected trait values that will match them var childrenList = new List <IMRObject>(children.Keys); for (var i = 0; i < k_RelationCount; ++i) { var child1 = childrenList[i]; var child2 = childrenList[i + 1]; var floatRelation = gameObject.AddComponent <FloatRelation>(); floatRelation.Initialize(child1, child2, k_FloatTrait1, k_FloatTrait2); childrenExpectedMatchInfo[child1].floatTraits[floatRelation.child1TraitName] = i; childrenExpectedMatchInfo[child2].floatTraits[floatRelation.child2TraitName] = i + 1f; var vector2Relation = gameObject.AddComponent <Vector2Relation>(); vector2Relation.Initialize(child1, child2, k_Vector2Trait1, k_Vector2Trait2); childrenExpectedMatchInfo[child1].vector2Traits[vector2Relation.child1TraitName] = new Vector2(i, 0f); childrenExpectedMatchInfo[child2].vector2Traits[vector2Relation.child2TraitName] = new Vector2(i + 1f, 0f); } result = new SetQueryResult(QueryMatchID.Generate(), childrenList); var relations = new Relations(gameObject, children); s_SetArgs = new SetQueryArgs { relations = relations }; return(relations); }