Exemple #1
0
        /// <summary>
        /// 获取内部变量的值
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static object GetInternalValue(string name)
        {
            BaseValue bv = data.GetBaseValue(name);

            if (bv != null)
            {
                return(bv.GetValue());
            }
            else
            {
                Debug.LogError("不存在内部变量:" + name);
                return(null);
            }
        }
        /// <summary>
        /// 设置内部变量的值
        /// </summary>
        /// <param name="name"></param>
        /// <param name="value"></param>
        public void SetInternalValue(string name, object value)
        {
            BaseValue bv = data.GetBaseValue(name);

            if (bv != null)
            {
                if (!bv.GetValue().Equals(value))
                {
                    if (inValueEventDic[name] != null)
                    {
                        inValueEventDic[name](name, value);
                    }
                }
                bv.SetValue(value);
            }
        }
        protected override bool Compare(params object[] objs)
        {
            object value  = logicObject.logicManager.GetInternalValue(internalValueName);
            object value1 = null;

            if (useInternalValue)
            {
                value1 = logicObject.logicManager.GetInternalValue(compareInternalValueName);
            }
            else
            {
                value1 = compareBaseValue.GetValue();
            }

            return(CompareValue.Compare(value, value1, compareType));
        }
    /// <summary>
    /// 获取储存的实例(赋值)
    /// </summary>
    /// <param name="getInstanceCallBackR">自定义实例生成,用于GameObject组件赋值</param>
    /// <returns></returns>
    public object GetValue(object classObj = null)
    {
        if (string.IsNullOrEmpty(ScriptName))
        {
            return(null);
        }
        Type type = null;

        if (classObj == null)
        {
            type     = ReflectionUtils.GetTypeByTypeFullName(ScriptName);
            classObj = ReflectionUtils.CreateDefultInstance(type);
        }
        else
        {
            type = classObj.GetType();
            if (type.FullName != ScriptName)
            {
                Debug.LogError("类型不同=》ScriptName:" + ScriptName + "  classObj:" + classObj.GetType());
            }
        }

        BindingFlags flags = BindingFlags.Instance | BindingFlags.Public;

        for (int i = 0; i < fieldValues.Count; i++)
        {
            BaseValue fInfo = fieldValues[i];
            FieldInfo f     = type.GetField(fInfo.name, flags);
            if (f != null && f.Name == fInfo.name)
            {
                try
                {
                    f.SetValue(classObj, fInfo.GetValue());
                }
                catch (Exception e)
                {
                    Debug.LogError(e);
                }
            }
        }



        PropertyInfo[] propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
        foreach (var pinfo in propertyValues)
        {
            if (string.IsNullOrEmpty(pinfo.name))
            {
                continue;
            }

            PropertyInfo property = type.GetProperty(pinfo.name, BindingFlags.Public | BindingFlags.Instance);
            if (property.CanWrite)
            {
                try
                {
                    property.SetValue(classObj, pinfo.GetValue(), null);
                }catch (Exception e)
                {
                    Debug.LogError(e);
                }
            }
        }


        return(classObj);
    }