예제 #1
0
 static internal void Convert(object[] inValues, RSValue[] ioRSValues)
 {
     for (int i = 0; i < inValues.Length; ++i)
     {
         ioRSValues[i] = RSInterop.ToRSValue(inValues[i]);
     }
 }
예제 #2
0
 static internal RSValue[] Convert(params object[] inValues)
 {
     RSValue[] converted = new RSValue[inValues.Length];
     for (int i = 0; i < inValues.Length; ++i)
     {
         converted[i] = RSInterop.ToRSValue(inValues[i]);
     }
     return(converted);
 }
예제 #3
0
        internal override void Link(RSTypeAssembly inAssembly)
        {
            m_MethodSettings.Configure(m_MethodInfo, m_Parameters, true);
            OwnerType = m_MethodSettings.BoundType;

            ReturnType     = RSInterop.RSTypeFor(m_MethodInfo.ReturnType, inAssembly);
            m_DefaultValue = m_DefaultSystemValue != null?RSInterop.ToRSValue(m_DefaultSystemValue) : ReturnType.DefaultValue;

            GenerateParameters(inAssembly);
        }
예제 #4
0
 internal void PrepArguments(RSValue[] inArgs, ExecutionScope inScope)
 {
     if (inArgs != null && inArgs.Length > 0)
     {
         for (int i = 0; i < inArgs.Length && i + m_MethodSettings.EditorArgsStartIndex < m_CachedArguments.Length; ++i)
         {
             int idx = m_MethodSettings.EditorArgsStartIndex + i;
             m_CachedArguments[idx] = RSInterop.ToObject(m_Parameters[idx].ParameterType, inArgs[i], inScope);
         }
     }
 }
예제 #5
0
        internal void Link(RSTypeAssembly inAssembly)
        {
            Type = RSInterop.RSTypeFor(m_ParameterType, inAssembly);
            if (m_ParameterInfo != null && m_ParameterInfo.HasDefaultValue)
            {
                Default = RSInterop.ToRSValue(m_ParameterInfo.DefaultValue);
            }
            else
            {
                Default = Type.DefaultValue;
            }

            if (m_TriggerParameterType != null)
            {
                TriggerParameterType = RSInterop.RSTypeFor(m_TriggerParameterType, inAssembly);
            }
        }
예제 #6
0
        public RSTypeInfo TypeInfo(RSTriggerInfo inTriggerContext, RSLibrary inLibrary)
        {
            switch (Mode)
            {
            case ResolvableValueMode.Value:
                return(RSInterop.RSTypeFor(Value, inLibrary.TypeAssembly));

            case ResolvableValueMode.Query:
                return(inLibrary.GetQuery(Query.Id)?.ReturnType);

            case ResolvableValueMode.Argument:
                return(inTriggerContext?.ParameterType?.Type);

            case ResolvableValueMode.Register:
                return(RSBuiltInTypes.Any);

            default:
                throw new InvalidOperationException("Unknown ResolvableValueMode " + Mode);
            }
        }
예제 #7
0
        internal RSValue InvokeWithCachedArgs(IRSRuntimeEntity inTarget, ExecutionScope inContext)
        {
            object thisArg;
            bool   bValid = PrepContext(inTarget, inContext, out thisArg);

            if (!bValid)
            {
                if (m_MethodSettings.ComponentType != null)
                {
                    inContext.Logger?.Warn("Unable to evaluate query {0} on Entity \"{1}\" ({2}) - missing component type {3}", Id, inTarget?.Name, inTarget != null ? inTarget.Id : RSEntityId.Null, m_MethodSettings.ComponentType);
                }
                else
                {
                    inContext.Logger?.Warn("Unable to evaluate query {0} on Entity \"{1}\" ({2})", Id, inTarget?.Name, inTarget != null ? inTarget.Id : RSEntityId.Null);
                }
                return(m_DefaultValue);
            }

            object returnVal = m_MethodInfo.Invoke(thisArg, m_CachedArguments);

            return(RSInterop.ToRSValue(returnVal));
        }
예제 #8
0
        internal void Restore(IRSRuntimeComponent inComponent, RSValue inValue, RSEnvironment inEnvironment)
        {
            object restoreValue = RSInterop.ToObject(m_FieldType, inValue, inEnvironment.StaticScope);

            m_FieldInfo.SetValue(inComponent, restoreValue);
        }
예제 #9
0
        internal RSValue Persist(IRSRuntimeComponent inComponent)
        {
            object persistValue = m_FieldInfo.GetValue(inComponent);

            return(RSInterop.ToRSValue(persistValue));
        }
예제 #10
0
 internal void Link(RSTypeAssembly inAssembly)
 {
     Type = RSInterop.RSTypeFor(m_FieldType, inAssembly);
 }