Beispiel #1
0
        public void CreateTemplateClass(List <CodeGenerateSystem.Base.CustomPropertyInfo> cpInfos)
        {
            var csParam = CSParam as ReturnCustomConstructParam;

            mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, this, $"CustomReturn_{csParam.MethodInfo.MethodName}_{Guid.NewGuid().ToString().Replace("-","_")}", false);
            InitTemplateClass_WPF(cpInfos);
        }
        public static void SaveClassInstanceProperties(CodeGenerateSystem.Base.GeneratorClassBase classInstance, EngineNS.IO.XndAttrib att)
        {
            if (classInstance == null)
            {
                return;
            }

            var pros = classInstance.GetType().GetProperties();

            att.Write((int)pros.Length);
            foreach (var pro in pros)
            {
                att.Write(pro.Name);
                var typeSaveStr = EngineNS.Rtti.RttiHelper.GetTypeSaveString(pro.PropertyType);
                att.Write(typeSaveStr);
                var serializer = EngineNS.IO.Serializer.TypeDescGenerator.Instance.GetSerializer(pro.PropertyType);
                if (serializer == null && pro.PropertyType.IsInterface == false)
                {
                    throw new InvalidOperationException($"保存属性失败,{pro.Name}({pro.PropertyType.FullName})找不到对应的序列化器");
                }
                var infoDesc = new EngineNS.Rtti.PropMemberDesc(pro);
                var val      = pro.GetValue(classInstance);
                serializer.WriteValue(val, att);
            }
        }
Beispiel #3
0
        public ColorControl(CodeGenerateSystem.Base.ConstructionParams csParam)
            : base(csParam)
        {
            var cpInfos = new List <CodeGenerateSystem.Base.CustomPropertyInfo>();
            var cpInfo  = CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(EngineNS.Color), "Color", new Attribute[] { new DisplayNameAttribute("颜色"), new EngineNS.Editor.Editor_ColorPicker(), new EngineNS.Rtti.MetaDataAttribute() });

            cpInfos.Add(cpInfo);
            mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, this);
            InitConstruction();

            var linkType = CodeGenerateSystem.Base.LinkPinControl.GetLinkTypeFromTypeString(mValueType.FullName);

            AddLinkPinInfo("Ctrlvalue_ColorIn", mCtrlvalue_ColorIn, null);
            AddLinkPinInfo("Ctrlvalue_ColorOut", mCtrlvalue_ColorOut, null);

            mInComponentLinks.Add(mCtrlValueInR);
            mInComponentLinks.Add(mCtrlValueInG);
            mInComponentLinks.Add(mCtrlValueInB);
            mInComponentLinks.Add(mCtrlValueInA);
            AddLinkPinInfo("CtrlValueInR", mCtrlValueInR, null);
            AddLinkPinInfo("CtrlValueInG", mCtrlValueInG, null);
            AddLinkPinInfo("CtrlValueInB", mCtrlValueInB, null);
            AddLinkPinInfo("CtrlValueInA", mCtrlValueInA, null);

            mOutComponentLinks.Add(mCtrlValueOutR);
            mOutComponentLinks.Add(mCtrlValueOutG);
            mOutComponentLinks.Add(mCtrlValueOutB);
            mOutComponentLinks.Add(mCtrlValueOutA);
            AddLinkPinInfo("CtrlValueOutR", mCtrlValueOutR, null);
            AddLinkPinInfo("CtrlValueOutG", mCtrlValueOutG, null);
            AddLinkPinInfo("CtrlValueOutB", mCtrlValueOutB, null);
            AddLinkPinInfo("CtrlValueOutA", mCtrlValueOutA, null);
        }
Beispiel #4
0
        public BezierControl(CodeGenerateSystem.Base.ConstructionParams csParam)
            : base(csParam)
        {
            var cpInfos = new List <CodeGenerateSystem.Base.CustomPropertyInfo>();

            cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "XMax", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() }));
            cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "XMin", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() }));
            cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "YMax", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() }));
            cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(double), "YMin", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() }));
            cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(bool), "XLoop", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() }));
            mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, this);

            InitConstruction();
            NodeName = "Bezier";

            // X输入
            AddLinkPinInfo("CtrlValueInputHandle", mCtrlValueInputHandle, null);
            // Y输出
            AddLinkPinInfo("CtrlValueOutputHandle", mCtrlValueOutputHandle, null);
            // Y轴最大值
            AddLinkPinInfo("CtrlValueYMaxInputHandle", mCtrlValueYMaxInputHandle, null);
            // Y轴最小值
            AddLinkPinInfo("CtrlValueYMinInputHandle", mCtrlValueYMinInputHandle, null);
            // X轴最小值
            AddLinkPinInfo("CtrlValueXMinInputHandle", mCtrlValueXMinInputHandle, null);
            // X轴最大值
            AddLinkPinInfo("CtrlValueXMaxInputHandle", mCtrlValueXMaxInputHandle, null);
            // X循环
            AddLinkPinInfo("CtrlValueXLoopHandle", mCtrlValueXLoopHandle, null);
        }
        private void Btn_ClassSetting_Click(object sender, RoutedEventArgs e)
        {
            if (CurrentResourceInfo.BaseType == null)
            {
                EditorCommon.MessageBox.Show("找不到当前Macross的基类");
                return;
            }

            if (mClassSettingPropertiesClassInstance == null)
            {
                var atts   = CurrentResourceInfo.BaseType.GetCustomAttributes(typeof(EngineNS.Editor.Editor_MacrossClassAttribute), true);
                var att    = atts[0] as EngineNS.Editor.Editor_MacrossClassAttribute;
                var csType = att.CSType;
                List <CodeGenerateSystem.Base.CustomPropertyInfo> cpInfos = new List <CodeGenerateSystem.Base.CustomPropertyInfo>();

                var baseTypeCPInfo = new CodeGenerateSystem.Base.CustomPropertyInfo()
                {
                    PropertyName = "BaseType",
                    PropertyType = typeof(Type),
                    DefaultValue = CurrentResourceInfo.BaseType,
                    CurrentValue = CurrentResourceInfo.BaseType,
                };
                // Editor.Editor_BaseTypeDefine 限定类型基类
                baseTypeCPInfo.PropertyAttributes.Add(new EngineNS.Editor.Editor_TypeFilterAttribute(EngineNS.Editor.Editor_TypeFilterAttribute.enTypeFilter.Class, EngineNS.Editor.Editor_MacrossClassAttribute.enMacrossType.Inheritable));

                cpInfos.Add(baseTypeCPInfo);

                var initParam = new CodeGenerateSystem.Base.ConstructionParams()
                {
                    CSType = csType,
                };
                var tempNode = new TempNode(initParam);
                mClassSettingPropertiesClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, tempNode, "MCSetting_" + EngineNS.Editor.Assist.GetValuedGUIDString(Guid.NewGuid()), false);
                var classType = mClassSettingPropertiesClassInstance.GetType();
                //var classType = CodeGenerateSystem.Base.PropertyClassGenerator.CreateTypeFromCustomPropertys(cpInfos, "MacrossClassSettingDynamicAssembly", );
                //mClassSettingPropertiesClassInstance = System.Activator.CreateInstance(classType) as CodeGenerateSystem.Base.GeneratorClassBase;
                //mClassSettingPropertiesClassInstance.CSType = csType;
                foreach (var cpInfo in cpInfos)
                {
                    var pro = classType.GetProperty(cpInfo.PropertyName);
                    pro.SetValue(mClassSettingPropertiesClassInstance, cpInfo.CurrentValue, null);
                }

                mClassSettingPropertiesClassInstance.OnPropertyChangedAction = (propertyName, newValue, oldValue) =>
                {
                    switch (propertyName)
                    {
                    case "BaseType":
                        CurrentResourceInfo.ResetBaseType((Type)newValue);
                        break;
                    }
                };
            }

            var ctrl = LinksTabControl.SelectedContent as MacrossLinkControl;

            ctrl.PG.Instance = mClassSettingPropertiesClassInstance;
        }
Beispiel #6
0
        public void CreateTemplateClas()
        {
            var param = CSParam as CreateObjectConstructionParams;

            mClassProperties.Clear();
            if (param.CreateType != null)
            {
                var properties = param.CreateType.GetProperties();
                foreach (var property in properties)
                {
                    var att = EngineNS.Rtti.AttributeHelper.GetCustomAttribute(property, typeof(EngineNS.Editor.MacrossMemberAttribute).FullName, true);
                    if (att == null)
                    {
                        continue;
                    }

                    var cpInfo = new CodeGenerateSystem.Base.CustomPropertyInfo()
                    {
                        PropertyName = property.Name,
                        PropertyType = property.PropertyType,
                        DefaultValue = CodeGenerateSystem.Program.GetDefaultValueFromType(property.PropertyType),
                    };
                    cpInfo.CurrentValue = cpInfo.DefaultValue;
                    bool hasMetaAtt = false;
                    foreach (Attribute customAtt in property.GetCustomAttributes(false))
                    {
                        if (customAtt.GetType().FullName == typeof(EngineNS.Rtti.MetaDataAttribute).FullName)
                        {
                            hasMetaAtt = true;
                        }
                        cpInfo.PropertyAttributes.Add(customAtt);
                    }
                    if (!hasMetaAtt)
                    {
                        cpInfo.PropertyAttributes.Add(new EngineNS.Rtti.MetaDataAttribute());
                    }
                    mClassProperties.Add(cpInfo);
                }
                mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(mClassProperties, this, $"CreateObject_{param.CreateType.FullName}", false);
            }
            if (mDefaultValueObj == null)
            {
                mDefaultValueObj = System.Activator.CreateInstance(param.CreateType);
            }
            var classType = mTemplateClassInstance.GetType();

            foreach (var pro in mClassProperties)
            {
                var proInfo = classType.GetProperty(pro.PropertyName);
                if (proInfo == null)
                {
                    continue;
                }
                var srcProInfo = param.CreateType.GetProperty(pro.PropertyName);
                proInfo.SetValue(mTemplateClassInstance, srcProInfo.GetValue(mDefaultValueObj));
            }
        }
        public static void CloneClassInstanceProperties(CodeGenerateSystem.Base.GeneratorClassBase srcClassInstance, CodeGenerateSystem.Base.GeneratorClassBase tagClassInstance)
        {
            if (srcClassInstance == null || tagClassInstance == null)
            {
                return;
            }

            var srcType = srcClassInstance.GetType();
            var tagType = tagClassInstance.GetType();

            foreach (var pro in srcType.GetProperties())
            {
                var tagPro = tagType.GetProperty(pro.Name);
                if (tagPro == null)
                {
                    continue;
                }

                var val = pro.GetValue(srcClassInstance, null);
                tagPro.SetValue(tagClassInstance, val);
            }
        }
        public static void LoadClassInstanceProperties(CodeGenerateSystem.Base.GeneratorClassBase classInstance, EngineNS.IO.XndAttrib att)
        {
            if (classInstance == null)
            {
                return;
            }

            int count;

            att.Read(out count);
            var classType = classInstance.GetType();

            for (int i = 0; i < count; i++)
            {
                string proName;
                att.Read(out proName);
                string typeSaveStr;
                att.Read(out typeSaveStr);
                var type       = EngineNS.Rtti.RttiHelper.GetTypeFromSaveString(typeSaveStr);
                var serializer = EngineNS.IO.Serializer.TypeDescGenerator.Instance.GetSerializer(type);
                if (serializer == null)
                {
                    throw new InvalidOperationException($"读取属性失败,{proName}({type.FullName})找不到对应的序列化器");
                }
                var val = serializer.ReadValue(att);
                var pro = classType.GetProperty(proName);
                if (pro == null)
                {
                    continue;
                }
                if (pro.PropertyType != type)
                {
                    continue;
                }
                pro.SetValue(classInstance, val);
            }
        }