int Add(QueryMatchID matchId,
                IMRObject objectRef,
                Exclusivity exclusivity,
                int bestMatchDataId,
                bool isRequired,
                CachedTraitCollection traitCache,
                ProxyConditions condition,
                ProxyTraitRequirements requirements,
                ConditionRatingsData rating,
                HashSet <int> matchSet,
                Dictionary <int, float> flatRatings,
                QueryResult result)
        {
            var index = GetInsertionIndex();

            QueryMatchIds[index]           = matchId;
            ObjectReferences[index]        = objectRef;
            Exclusivities[index]           = exclusivity;
            Required[index]                = isRequired;
            BestMatchDataIds[index]        = bestMatchDataId;
            CachedTraits[index]            = traitCache;
            Conditions[index]              = condition;
            TraitRequirements[index]       = requirements;
            RelationMemberships[index]     = null;
            ConditionRatings[index]        = rating;
            ReducedConditionRatings[index] = flatRatings;
            ConditionMatchSets[index]      = matchSet;
            QueryResults[index]            = result;

            m_Count++;
            ValidIndices.Add(index);
            return(index);
        }
        internal bool DataPassesAllConditions(ProxyConditions conditions, int dataId)
        {
            if (conditions.TryGetType(out ISemanticTagCondition[] semanticTagConditions))
            {
                GetTraitProvider(out MARSTraitDataProvider <bool> tagTraitProvider);

                foreach (var condition in semanticTagConditions)
                {
                    if (!tagTraitProvider.TryGetTraitValue(dataId, condition.traitName, out var traitValue))
                    {
                        if (condition.matchRule == SemanticTagMatchRule.Match)
                        {
                            return(false);
                        }

                        continue;
                    }

                    if (condition.PassesCondition(ref traitValue) && condition.matchRule == SemanticTagMatchRule.Match)
                    {
                        continue;
                    }

                    return(false);
                }
            }

            return(DataPassesAllConditionsInternal(conditions, dataId));
        }
        public void ConditionRatingsData_ConstructsCorrectSizeArray_ForConditionCount()
        {
            AddOneOfEachConditionType(m_GameObject);
            m_GameObject.AddTestFloatCondition();
            m_GameObject.AddTestFloatCondition();
            m_GameObject.AddComponent <TestConditions.Pose>();

            var ratings = new ConditionRatingsData(ProxyConditions.FromGenericIMRObject(m_ConditionsRoot));

            Assert.AreEqual(10, ratings.totalConditionCount);
            Assert.AreEqual(3, ratings[typeof(float)].Count);
            Assert.AreEqual(2, ratings[typeof(Pose)].Count);
            Assert.AreEqual(1, ratings[typeof(bool)].Count);
            Assert.AreEqual(1, ratings[typeof(Vector2)].Count);
            Assert.AreEqual(1, ratings[typeof(Vector3)].Count);
            Assert.AreEqual(1, ratings[typeof(int)].Count);
            Assert.AreEqual(1, ratings[typeof(string)].Count);

            ratings[typeof(int)].AssertCollectionsCreated();
            ratings[typeof(float)].AssertCollectionsCreated();
            ratings[typeof(bool)].AssertCollectionsCreated();
            ratings[typeof(Vector2)].AssertCollectionsCreated();
            ratings[typeof(Vector3)].AssertCollectionsCreated();
            ratings[typeof(string)].AssertCollectionsCreated();
            ratings[typeof(Pose)].AssertCollectionsCreated();
        }
        /// <summary>
        /// See if the value for a given data ID still meets a set of Conditions
        /// </summary>
        /// <param name="dataID">The id of the data value to check</param>
        /// <param name="conditions">The conditions to evaluate against</param>
        /// <param name="result">The Query result to fill out with updated values</param>
        /// <returns>True if the query data still matches, false otherwise</returns>
        public bool TryUpdateQueryMatchData(int dataID, ProxyConditions conditions, ProxyTraitRequirements requirements, QueryResult result)
        {
            if (requirements != null)
            {
                if (!TryFillTraitRequirementsUpdate(dataID, requirements, result))
                {
                    return(false);
                }
            }

            GetTraitProvider(out MARSTraitDataProvider <Pose> poseTraitProvider);
            GetTraitProvider(out MARSTraitDataProvider <bool> tagTraitProvider);
            if (conditions.TryGetType(out ICondition <Pose>[] poseConditions))
            {
                foreach (var condition in poseConditions)
                {
                    if (!poseTraitProvider.TryGetTraitValue(dataID, condition.traitName, out var traitValue))
                    {
                        return(false);
                    }

                    if (condition.PassesCondition(ref traitValue))
                    {
                        result.SetTrait(condition.traitName, this.ApplyOffsetToPose(traitValue));
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            if (conditions.TryGetType(out ISemanticTagCondition[] semanticTagConditions))
            {
                foreach (var condition in semanticTagConditions)
                {
                    if (!tagTraitProvider.TryGetTraitValue(dataID, condition.traitName, out var traitValue))
                    {
                        if (condition.matchRule == SemanticTagMatchRule.Match)
                        {
                            return(false);
                        }

                        continue; // an excluding match update made by lack of tag
                    }

                    if (condition.PassesCondition(ref traitValue) && condition.matchRule == SemanticTagMatchRule.Match)
                    {
                        result.SetTrait(condition.traitName, traitValue);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            // Update all condition types that we don't special-case in generated code
            return(UpdateQueryMatchInternal(dataID, conditions, requirements, result));
        }
示例#5
0
        internal static TryBestMatchArguments GetMatchArgs(this GameObject go,
                                                           Exclusivity exclusivity = Exclusivity.ReadOnly)
        {
            var conditionsRoot = go.GetComponent <TestMRObject>();
            var conditions     = ProxyConditions.FromGenericIMRObject(conditionsRoot);

            return(new TryBestMatchArguments(conditions, exclusivity));
        }
        void SetupObject(GameObject go)
        {
            var rwo = go.AddComponent <Proxy>();

            m_Conditions       = ProxyConditions.FromGenericIMRObject(rwo);
            m_ConditionRatings = new ConditionRatingsData(m_Conditions);
            m_TraitCache       = new CachedTraitCollection(m_Conditions);
            m_Db.FindTraitCollections(m_Conditions, m_TraitCache);
        }
示例#7
0
 internal static QueryArgs GetQueryArgs(this GameObject go, Exclusivity exclusivity = Exclusivity.ReadOnly)
 {
     return(new QueryArgs
     {
         conditions = ProxyConditions.FromGameObject <Proxy>(go),
         exclusivity = exclusivity,
         commonQueryData = new CommonQueryData()
     });
 }
        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);
        }
        internal bool FindTraitCollections(ProxyConditions conditions, CachedTraitCollection cache)
        {
            if (cache.fulfilled)
            {
                return(true);
            }

            cache.fulfilled = FindTraitsInternal(conditions, cache);
            return(cache.fulfilled);
        }
示例#10
0
 public ConditionRatingsData Initialize(ProxyConditions conditions)
 {
     m_SemanticTagListIndex = -1;
     AllRatings.Clear();
     MatchRuleIndexes.Clear();
     TypeToIndex.Clear();
     FromConditions(conditions);
     m_ReductionPower = 1f / m_Count;
     return(this);
 }
示例#11
0
        ProxyConditions SetupExclusiveSemanticTagTest(int count)
        {
            var go             = new GameObject("tag matching test");
            var conditionsRoot = go.AddComponent <TestMRObject>();

            AddSemanticTagCondition(go, TraitNames.Plane);
            AddSemanticTagCondition(go, k_ExcludedTrait, SemanticTagMatchRule.Exclude);
            AddSemanticTagToRange(0, TraitNames.Plane, true, count);
            var conditions = ProxyConditions.FromGenericIMRObject(conditionsRoot);

            Object.DestroyImmediate(go);
            return(conditions);
        }
            internal static ConditionRatingsData Setup()
            {
                var go = new GameObject();

                go.AddComponent <Proxy>();
                go.AddTestFloatCondition();
                go.AddComponent <TestConditions.Pose>();
                var conditions = ProxyConditions.FromGameObject <Proxy>(go);
                var ratings    = new ConditionRatingsData(conditions);

                ratings[typeof(float)][0] = floatRatings;
                ratings[typeof(Pose)][0]  = poseRatings;
                return(ratings);
            }
示例#13
0
        bool DataPassesAllConditionsInternal(ProxyConditions conditions, int dataId)
        {
            if (conditions.TryGetType(out ICondition <System.Int32>[] intConditions))
            {
                if (!ConditionsPass(IntTraitProvider, intConditions, dataId))
                {
                    return(false);
                }
            }

            if (conditions.TryGetType(out ICondition <System.Single>[] floatConditions))
            {
                if (!ConditionsPass(FloatTraitProvider, floatConditions, dataId))
                {
                    return(false);
                }
            }

            if (conditions.TryGetType(out ICondition <System.String>[] stringConditions))
            {
                if (!ConditionsPass(StringTraitProvider, stringConditions, dataId))
                {
                    return(false);
                }
            }

            if (conditions.TryGetType(out ICondition <UnityEngine.Pose>[] poseConditions))
            {
                if (!ConditionsPass(PoseTraitProvider, poseConditions, dataId))
                {
                    return(false);
                }
            }

            if (conditions.TryGetType(out ICondition <UnityEngine.Vector2>[] vector2Conditions))
            {
                if (!ConditionsPass(Vector2TraitProvider, vector2Conditions, dataId))
                {
                    return(false);
                }
            }

            return(true);
        }
        public void SetupBeforeEach()
        {
            SlowTaskModule.instance.ClearTasks();

            m_GameObject = new GameObject("pipeline test condition source");
            SetupObject(m_GameObject);

            m_Child1GameObject = new GameObject("pipeline test member 1");
            m_Child1GameObject.AddComponent <Proxy>();
            m_Child2GameObject = new GameObject("pipeline test member 2");
            m_Child2GameObject.AddComponent <Proxy>();

            ProxyConditions.FromGameObject <Proxy>(m_Child1GameObject);
            ProxyConditions.FromGameObject <Proxy>(m_Child2GameObject);

            m_Ratings.Clear();

            m_Db.Clear();
            k_Intersection.Clear();
        }
        [TestCase(0.05f, 0.06f, 0.08f, 0.1f, 0.05f, 0.1f)]    // 4 near-failures
        public void GetRatingForId_ImplementsInversePowerReduction(
            float one, float two, float three, float four,    // condition ratings
            float minBound, float maxBound)                   // expected boundaries
        {
            const int dataId = 3;
            var       rwo    = m_GameObject.AddComponent <Proxy>();

            m_GameObject.AddTestFloatCondition();
            m_GameObject.AddTestFloatCondition();
            m_GameObject.AddTestVector2Condition();
            m_GameObject.AddSemanticTagCondition();

            var conditions = ProxyConditions.FromGenericIMRObject(rwo);
            var proposal   = new ConditionRatingsData(conditions);

            proposal[typeof(float)][0].Add(dataId, one);
            proposal[typeof(float)][1].Add(dataId, two);
            proposal[typeof(Vector2)][0].Add(dataId, three);
            proposal[typeof(bool)][0].Add(dataId, four);
            AssertBetween(proposal.RatingForId(dataId), minBound, maxBound);
        }
示例#16
0
        public void ExcludedTagsNotUsedAsIntersectionStartingPoint()
        {
            var tagConditions = new ISemanticTagCondition[2];

            tagConditions[0] = m_TestObject.AddSemanticTagCondition("exclude", SemanticTagMatchRule.Exclude);
            tagConditions[1] = m_TestObject.AddSemanticTagCondition("match");

            var conditions = new ProxyConditions(tagConditions);
            var ratings    = new ConditionRatingsData(conditions)
            {
                MatchRuleIndexes = { SemanticTagMatchRule.Exclude, SemanticTagMatchRule.Match }
            };

            // fake like we rated conditions
            var excludeRuleSet     = new [] { 0, 1 };
            var excludeRuleRatings = ratings[typeof(bool)][0];

            foreach (var t in excludeRuleSet)
            {
                excludeRuleRatings.Add(t, 1);
            }

            var matchRuleSet     = new [] { 2, 3, 4 };
            var matchRuleRatings = ratings[typeof(bool)][1];

            foreach (var t in matchRuleSet)
            {
                matchRuleRatings.Add(t, 1);
            }

            var matchSet = new HashSet <int>();

            FindMatchProposalsTransform.GetStartingIdSet(ratings, matchSet);

            // because we can't use the excluding tag ratings as the starting set for intersection,
            // it should skip them & use another set, even though they come first in the ratings in our setup
            Assert.True(matchSet.SetEquals(matchRuleSet));
        }
示例#17
0
        public void Setup()
        {
            m_ConditionsGameObject = new GameObject("test conditions object");
            var conditionsRoot = m_ConditionsGameObject.AddComponent <TestMRObject>();

            for (var i = 0; i < k_ConditionsPerType; ++i)
            {
                var tagCondition = m_ConditionsGameObject.AddComponent <TestSemanticTagCondition>();
                tagCondition.Initialize(i);

                var floatCondition = m_ConditionsGameObject.AddComponent <FloatCondition>();
                floatCondition.Initialize(i);

                var vector2Condition = m_ConditionsGameObject.AddComponent <Vector2Condition>();
                vector2Condition.Initialize(i);
            }

            m_Conditions   = ProxyConditions.FromGenericIMRObject(conditionsRoot);
            m_QueryMatchId = QueryMatchID.Generate();

            m_FloatProvider = new MARSDataProvider <float>();
            m_FloatUser     = new TestMarsDataUser <float>();
        }
示例#18
0
        public void DisabledConditionComponentsAreIgnored()
        {
            var go                    = new GameObject("ignored conditions test");
            var conditionsRoot        = go.AddComponent <TestMRObject>();
            var tagCondition          = go.AddComponent <SemanticTagCondition>();
            var ignoredFloatCondition = go.AddComponent <FloatCondition>();

            ignoredFloatCondition.enabled = false;
            var ignoredVector2Condition = go.AddComponent <Vector2Condition>();

            ignoredVector2Condition.enabled = false;

            var newConditions = ProxyConditions.FromGenericIMRObject(conditionsRoot);

            Object.DestroyImmediate(go);

            newConditions.TryGetType(out ICondition <float>[] floatConditions);
            Assert.Zero(floatConditions.Length);
            newConditions.TryGetType(out ICondition <Vector2>[] vector2Conditions);
            Assert.Zero(vector2Conditions.Length);
            newConditions.TryGetType(out ISemanticTagCondition[] semanticTagConditions);
            Assert.AreEqual(1, semanticTagConditions.Length);
        }
示例#19
0
 /// <summary>
 /// Pre-allocate the storage for match ratings for a condition set.
 /// </summary>
 /// <param name="conditions">The set of conditions to store the results for</param>
 public ConditionRatingsData(ProxyConditions conditions)
 {
     Initialize(conditions);
 }
 public CachedTraitCollection(ProxyConditions conditions)
 {
     // FromConditions' actual implementation is in generated code
     FromConditions(conditions);
 }
        public void FromConditions(ProxyConditions conditions)
        {
            m_Count     = 0;
            s_TypeIndex = 0;
            var semanticTagLength = conditions.GetTypeCount(out ISemanticTagCondition[] semanticTagConditions);

            if (semanticTagLength > 0)
            {
                m_Count += semanticTagLength;
                TypeToIndex[typeof(System.Boolean)] = s_TypeIndex;
                var list = new List <Dictionary <int, float> >();
                list.Fill(semanticTagLength);
                AllRatings.Add(list);
                m_SemanticTagListIndex = s_TypeIndex;
                s_TypeIndex++;
            }

            var intLength = conditions.GetTypeCount(out ICondition <System.Int32>[] intConditions);

            if (intLength > 0)
            {
                m_Count += intLength;
                TypeToIndex[typeof(System.Int32)] = s_TypeIndex;
                var list = new List <Dictionary <int, float> >();
                list.Fill(intLength);
                AllRatings.Add(list);
                s_TypeIndex++;
            }

            var floatLength = conditions.GetTypeCount(out ICondition <System.Single>[] floatConditions);

            if (floatLength > 0)
            {
                m_Count += floatLength;
                TypeToIndex[typeof(System.Single)] = s_TypeIndex;
                var list = new List <Dictionary <int, float> >();
                list.Fill(floatLength);
                AllRatings.Add(list);
                s_TypeIndex++;
            }

            var stringLength = conditions.GetTypeCount(out ICondition <System.String>[] stringConditions);

            if (stringLength > 0)
            {
                m_Count += stringLength;
                TypeToIndex[typeof(System.String)] = s_TypeIndex;
                var list = new List <Dictionary <int, float> >();
                list.Fill(stringLength);
                AllRatings.Add(list);
                s_TypeIndex++;
            }

            var poseLength = conditions.GetTypeCount(out ICondition <UnityEngine.Pose>[] poseConditions);

            if (poseLength > 0)
            {
                m_Count += poseLength;
                TypeToIndex[typeof(UnityEngine.Pose)] = s_TypeIndex;
                var list = new List <Dictionary <int, float> >();
                list.Fill(poseLength);
                AllRatings.Add(list);
                s_TypeIndex++;
            }

            var vector2Length = conditions.GetTypeCount(out ICondition <UnityEngine.Vector2>[] vector2Conditions);

            if (vector2Length > 0)
            {
                m_Count += vector2Length;
                TypeToIndex[typeof(UnityEngine.Vector2)] = s_TypeIndex;
                var list = new List <Dictionary <int, float> >();
                list.Fill(vector2Length);
                AllRatings.Add(list);
                s_TypeIndex++;
            }
        }
        void FromConditions(ProxyConditions conditions)
        {
            var semanticTagLength = conditions.GetTypeCount(out ISemanticTagCondition[] semanticTagConditions);

            if (semanticTagLength > 0)
            {
                SemanticTagCollections = new List <Dictionary <int, System.Boolean> >();
                for (var i = 0; i < semanticTagLength; i++)
                {
                    SemanticTagCollections.Add(null);
                }
            }

            var intLength = conditions.GetTypeCount(out ICondition <System.Int32>[] intConditions);

            if (intLength > 0)
            {
                IntCollections = new List <Dictionary <int, System.Int32> >();
                for (var i = 0; i < intLength; i++)
                {
                    IntCollections.Add(null);
                }
            }

            var floatLength = conditions.GetTypeCount(out ICondition <System.Single>[] floatConditions);

            if (floatLength > 0)
            {
                FloatCollections = new List <Dictionary <int, System.Single> >();
                for (var i = 0; i < floatLength; i++)
                {
                    FloatCollections.Add(null);
                }
            }

            var stringLength = conditions.GetTypeCount(out ICondition <System.String>[] stringConditions);

            if (stringLength > 0)
            {
                StringCollections = new List <Dictionary <int, System.String> >();
                for (var i = 0; i < stringLength; i++)
                {
                    StringCollections.Add(null);
                }
            }

            var poseLength = conditions.GetTypeCount(out ICondition <UnityEngine.Pose>[] poseConditions);

            if (poseLength > 0)
            {
                PoseCollections = new List <Dictionary <int, UnityEngine.Pose> >();
                for (var i = 0; i < poseLength; i++)
                {
                    PoseCollections.Add(null);
                }
            }

            var vector2Length = conditions.GetTypeCount(out ICondition <UnityEngine.Vector2>[] vector2Conditions);

            if (vector2Length > 0)
            {
                Vector2Collections = new List <Dictionary <int, UnityEngine.Vector2> >();
                for (var i = 0; i < vector2Length; i++)
                {
                    Vector2Collections.Add(null);
                }
            }
        }
示例#23
0
        public bool UpdateQueryMatchInternal(int dataID,
                                             ProxyConditions 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);
        }
示例#24
0
        bool FindTraitsInternal(ProxyConditions 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);
        }
 /// <summary>
 /// Tries to fill out a QueryResult with updated data for a query that has been matched.
 /// This also checks if the data no longer meets the given conditions.
 /// </summary>
 /// <param name="dataID">ID for the data used by the query match</param>
 /// <param name="conditions">Criteria that the data must continue to meet</param>
 /// <param name="result">Object that will contain the updated data that still matches the conditions</param>
 /// <returns>True if the data still matches the conditions, false otherwise</returns>
 public static bool TryUpdateQueryMatchData(this IUsesDatabaseQuerying obj, int dataID, ProxyConditions conditions, ProxyTraitRequirements requirements, QueryResult result)
 {
     return(IUsesDatabaseQueryingMethods.TryUpdateQueryMatchData(dataID, conditions, requirements, result));
 }
示例#26
0
 static TryBestMatchArguments MatchArgsForConditions(ProxyConditions conditions, Exclusivity exclusivity)
 {
     return(new TryBestMatchArguments(conditions, exclusivity));
 }