Exemplo n.º 1
0
        static private RSTriggerInfo ValidateTriggerId(RSTriggerId inTriggerId, RSValidationFlags inFlags, RSValidationState ioState, RSValidationContext inContext)
        {
            RSTypeInfo restrictTriggerType = inContext.Parameter?.TriggerParameterType;

            if (inTriggerId == RSTriggerId.Null)
            {
                if (restrictTriggerType != null)
                {
                    ioState.Error("Null trigger id provided - require trigger with parameter type {0}", restrictTriggerType);
                }
                else
                {
                    ioState.Warn("Null trigger provided");
                }
                return(null);
            }
            else
            {
                RSTriggerInfo triggerInfo = inContext.Library.GetTrigger(inTriggerId);
                if (triggerInfo == null)
                {
                    ioState.Error("Trigger {0} does not exist", inTriggerId);
                }
                else
                {
                    if (restrictTriggerType != null)
                    {
                        if (restrictTriggerType == RSBuiltInTypes.Void)
                        {
                            if (triggerInfo.ParameterType != null)
                            {
                                ioState.Error("Trigger with no parameter required, but trigger {0} with parameter {1} provided", triggerInfo.Name, triggerInfo.ParameterType.Type);
                            }
                        }
                        else
                        {
                            if (triggerInfo.ParameterType == null)
                            {
                                ioState.Error("Trigger with parameter {0} required, but trigger {1} with no parameter provided", restrictTriggerType, triggerInfo.Name);
                            }
                            else if (!restrictTriggerType.CanConvert(triggerInfo.ParameterType.Type))
                            {
                                ioState.Error("Trigger with parameter {0} required, but trigger {1} with incompatible parameter {2} provided", restrictTriggerType, triggerInfo.Name, triggerInfo.ParameterType.Type);
                            }
                        }
                    }
                }
                return(triggerInfo);
            }
        }
Exemplo n.º 2
0
 static private void ValidateEntityId(RSEntityId inEntityId, RSValidationFlags inFlags, RSValidationState ioState, RSValidationContext inContext)
 {
     if (inEntityId == RSEntityId.Null && !inFlags.Has(RSValidationFlags.AllowNullEntity))
     {
         ioState.Error("Null entity not allowed in this context");
     }
     else if (inEntityId != RSEntityId.Null)
     {
         if (inContext.Manager != null)
         {
             var entity = inContext.Manager.Lookup.EntityWithId(inEntityId);
             if (entity == null)
             {
                 ioState.Error("No entity with id {0} found in entity manager", inEntityId);
             }
         }
         else
         {
             ioState.Warn("No entity manager found - unable to verify that entity with id {0} exists", inEntityId);
         }
     }
 }
Exemplo n.º 3
0
        static private void ValidateEntityScope(EntityScopeData inScope, RSValidationFlags inFlags, RSValidationState ioState, RSValidationContext inContext)
        {
            bool bForceFirst = inFlags.Has(RSValidationFlags.RequireSingleEntity);

            switch (inScope.Type)
            {
            case EntityScopeType.ObjectById:
            {
                RSEntityId entityId = inScope.IdArg;
                ValidateEntityId(entityId, inFlags, ioState, inContext);
                break;
            }

            case EntityScopeType.ObjectsWithGroup:
            {
                if (bForceFirst && !inScope.UseFirst)
                {
                    ioState.Error("Potentially multiple return values in context where only one value is accepted");
                }

                ValidateGroupId(inScope.GroupArg, inFlags, ioState, inContext);
                break;
            }

            case EntityScopeType.ObjectsWithName:
            case EntityScopeType.ObjectsWithPrefab:
            {
                if (bForceFirst && !inScope.UseFirst)
                {
                    ioState.Error("Potentially multiple return values in context where only one value is accepted");
                }

                string name = inScope.SearchArg;
                if (string.IsNullOrEmpty(name))
                {
                    ioState.Warn("Empty search string");
                }
                break;
            }

            case EntityScopeType.Null:
            {
                if (!inFlags.Has(RSValidationFlags.AllowNullEntity))
                {
                    ioState.Error("Null entity not allowed in this context");
                }
                break;
            }

            case EntityScopeType.Invalid:
            {
                ioState.Error("Missing entity");
                break;
            }

            case EntityScopeType.Global:
            {
                if (!inFlags.Has(RSValidationFlags.AllowGlobalEntity))
                {
                    ioState.Error("Global entity not allowed in this context");
                }
                break;
            }

            case EntityScopeType.Argument:
            {
                ValidateTriggerArgument(RSBuiltInTypes.Entity, inFlags, ioState, inContext);
                break;
            }
            }
        }