예제 #1
0
        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);
                    }
                }
            }
        }
        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);
        }