예제 #1
0
        public LAAnimPoseStreamControl(LAAnimPoseStreamControlConstructionParams csParam)
            : base(csParam)
        {
            InitConstruction();
            FileName = csParam.FileName;
            //WidthScale = csParam.WidthScale;
            //AnimationFilePath = csParam.AnimationFilePath;

            //DefaultState = csParam.DefaultState;
            NodeName = csParam.NodeName;
            //Width = TimeLength.GetWidthByTime(Duration, WidthScale) + ExtraWidth;
            OnAdded = csParam.OnAdded;
            BindingTemplateClassInstanceProperties();


            IsOnlyReturnValue = true;
            InitializeLinkControl(csParam);

            var clip = EngineNS.Bricks.Animation.AnimNode.AnimationClip.CreateSync(FileName);

            if (clip != null)
            {
                OnAdded?.Invoke(EngineNS.RName.GetRName(clip.GetElementProperty(EngineNS.Bricks.Animation.AnimNode.ElementPropertyType.EPT_Skeleton)));
            }
        }
예제 #2
0
        public CubeTexture(CodeGenerateSystem.Base.ConstructionParams smParam)
            : base(smParam)
        {
            InitializeComponent();

            IsInConstantBuffer = false;
            IsGeneric          = true;
            mDropAdorner       = new EditorCommon.DragDrop.DropAdorner(Image_Texture);

            ShaderVarInfo.EditorType = "Texture";
            //ShaderVarInfo.VarName = GetTextureName();

            TexturePath = EngineNS.CEngine.Instance.GameEditorInstance.Desc.DefaultTextureName;

            AddLinkPinInfo("TextureLink", TextureLink, TextureLink.BackBrush);
            AddLinkPinInfo("UVLink_3D", UVLink_3D, null);
            AddLinkPinInfo("RGBALink", RGBALink, RGBALink.BackBrush);
            AddLinkPinInfo("RGBLink", RGBLink, RGBLink.BackBrush);
            AddLinkPinInfo("RLink", RLink, RLink.BackBrush);
            AddLinkPinInfo("GLink", GLink, GLink.BackBrush);
            AddLinkPinInfo("BLink", BLink, BLink.BackBrush);
            AddLinkPinInfo("ALink", ALink, ALink.BackBrush);

            InitializeShaderVarInfo();
        }
예제 #3
0
        private void Image_Texture_Drop(object sender, DragEventArgs e)
        {
            var element = sender as FrameworkElement;

            if (element == null)
            {
                return;
            }

            if (EditorCommon.DragDrop.DragDropManager.Instance.DragType.Equals("ResourceItem"))
            {
                e.Handled = true;
                var layer = AdornerLayer.GetAdornerLayer(element);
                layer.Remove(mDropAdorner);

                if (AllowResourceItemDrop(e) == enDropResult.Allow)
                {
                    var formats = e.Data.GetFormats();
                    var datas   = e.Data.GetData(formats[0]) as EditorCommon.DragDrop.IDragAbleObject[];
                    foreach (var data in datas)
                    {
                        var resInfo = data as EditorCommon.Resources.ResourceInfo;
                        if (resInfo == null)
                        {
                            continue;
                        }

                        TexturePath = resInfo.ResourceName;
                        break;
                    }
                }
            }
        }
예제 #4
0
        public AnimationAsset(AnimationAssetConstructionParams csParam)
            : base(csParam)
        {
            InitConstruction();



            if (csParam.AnimAsset == null)
            {
                csParam.AnimAsset = new AnimAsset();
                if (csParam.HostNodesContainer.HostNode is AnimStateControl)
                {
                    csParam.AnimAsset.AnimAssetLocationName = csParam.HostNodesContainer.HostNode.NodeName;
                    csParam.AnimAsset.AnimAssetLocation     = AnimAssetLocation.State;
                    csParam.AnimAsset.AnimAssetName         = csParam.NodeName.PureName();
                }
                else
                {
                    System.Diagnostics.Debugger.Break();
                }
            }
            var cpInfos = new List <CodeGenerateSystem.Base.CustomPropertyInfo>();

            cpInfos.Add(CodeGenerateSystem.Base.CustomPropertyInfo.GetFromParamInfo(typeof(bool), "IsLoop", new Attribute[] { new EngineNS.Rtti.MetaDataAttribute() }));
            mTemplateClassInstance = CodeGenerateSystem.Base.PropertyClassGenerator.CreateClassInstanceFromCustomPropertys(cpInfos, this);
            var clsType  = mTemplateClassInstance.GetType();
            var xNamePro = clsType.GetProperty("IsLoop");

            xNamePro.SetValue(mTemplateClassInstance, csParam.IsLoop);
            RNameNodeName     = csParam.NodeName;
            NodeName          = csParam.NodeName.PureName();
            Notifies          = csParam.Notifies;
            IsOnlyReturnValue = true;
            AddLinkPinInfo("AnimAssetLinkHandle", mCtrlValueLinkHandle, null);
        }
예제 #5
0
        public void CollectRefRNames(List <EngineNS.RName> rNames)
        {
            var tcType = mTemplateClassInstance.GetType();

            foreach (var cNode in mChildNodes)
            {
                var cCtrl = cNode as CodeDomNode.MethodInvokeParameterControl;
                if (cCtrl == null)
                {
                    continue;
                }

                if (cCtrl.ParamType == typeof(EngineNS.RName))
                {
                    var param    = cCtrl.CSParam as MethodInvokeParameterControl.MethodInvokeParameterConstructionParams;
                    var property = tcType.GetProperty(param.ParamInfo.ParamName);
                    var value    = property.GetValue(mTemplateClassInstance) as EngineNS.RName;
                    if (!rNames.Contains(value))
                    {
                        rNames.Add(value);
                    }
                }
                else if (cCtrl.ParamType.GetInterface(typeof(EngineNS.Macross.IMacrossType).FullName) != null)
                {
                    EngineNS.RName ValueRName = EngineNS.RName.GetRName(cCtrl.ParamType.FullName + ".macross");//EngineNS.Macross.MacrossFactory.Instance.GetMacrossRName(cCtrl.ParamType);
                    if (ValueRName != EngineNS.RName.EmptyName)
                    {
                        if (!rNames.Contains(ValueRName))
                        {
                            rNames.Add(ValueRName);
                        }
                    }
                }
            }
        }
예제 #6
0
 public static string GetClassNamespace(EngineNS.RName rname)
 {
     if (rname == null)
     {
         return("");
     }
     return(rname.RelativePath().Replace("/", ".").TrimEnd('.'));
 }
예제 #7
0
        public void TrySaveRInfo(string resType, EngineNS.RName name, object obj)
        {
            var rInfo = this.CreateResourceInfo(resType);

            if (rInfo != null)
            {
                var noused = rInfo.Save(name.Address + ".rinfo", false);
            }
        }
예제 #8
0
        public static PluginControlContainer GetEditor(EngineNS.RName resourceName)
        {
            PluginControlContainer editCtrl;

            if (mControlsDic.TryGetValue(resourceName, out editCtrl))
            {
                return(editCtrl);
            }
            return(null);
        }
예제 #9
0
 void TextureLink_OnAddLinkInfo(LinkInfo linkInfo)
 {
     if (!linkInfo.m_linkFromObjectInfo.mIsLoadingLinks && !linkInfo.m_linkToObjectInfo.mIsLoadingLinks)
     {
         TextureControl tCtrl = linkInfo.m_linkFromObjectInfo.HostNodeControl as TextureControl;
         if (tCtrl != null)
         {
             TexturePath = tCtrl.TextureRName;
         }
     }
 }
예제 #10
0
        public AnimationAsset(AnimationAssetConstructionParams csParam)
            : base(csParam)
        {
            InitConstruction();

            RNameNodeName     = csParam.NodeName;
            NodeName          = csParam.NodeName.PureName();
            Notifies          = csParam.Notifies;
            IsOnlyReturnValue = true;
            AddLinkPinInfo("AnimAssetLinkHandle", mCtrlValueLinkHandle, null);
        }
예제 #11
0
        public RNameMapper GetRNameIndex(EngineNS.RName name)
        {
            if (string.IsNullOrEmpty(name.Name))
            {
                return(null);
            }
            var         path = RNameToPathName(name);
            RNameMapper mapper;

            if (NameMapper.TryGetValue(path, out mapper))
            {
                return(mapper);
            }
            mapper           = new RNameMapper();
            mapper.Index     = NameMapper.Count;
            mapper.PathName  = path;
            mapper.Name      = name;
            NameMapper[path] = mapper;
            return(mapper);
        }
예제 #12
0
        public bool Write(EngineNS.RName rname)
        {
            System.Diagnostics.Debug.Assert(Writing);
            if (CoreObject.Pointer == IntPtr.Zero)
            {
                return(false);
            }

            unsafe
            {
                byte ver = 1;
                Write(ver);
                //XndSDK.XNDAttrib_WriteStringA(CoreObject, rname.Name);
                //byte val = (byte)rname.RNameType;
                //Write(val);
                var se = EngineNS.IO.Serializer.TypeDescGenerator.Instance.GetSerializer(typeof(EngineNS.RName));
                se.WriteValue(rname, this);
            }
            return(true);
        }
예제 #13
0
        public override async System.Threading.Tasks.Task Load(EngineNS.IO.XndNode xndNode)
        {
            var att = xndNode.FindAttrib("tex2Ddata");

            if (att != null)
            {
                switch (att.Version)
                {
                case 0:
                {
                    att.BeginRead();
                    string name;
                    att.Read(out name);
                    TexturePath = EngineNS.RName.GetRName(name);
                    att.EndRead();
                }
                break;
                }
            }
            await base.Load(xndNode);
        }
예제 #14
0
        public bool Read(out EngineNS.RName rname)
        {
            System.Diagnostics.Debug.Assert(Reading);
            rname = EngineNS.RName.EmptyName;
            if (CoreObject.Pointer == IntPtr.Zero)
            {
                return(false);
            }

            byte ver = 0;

            Read(out ver);
            unsafe
            {
                switch (ver)
                {
                case 0:
                {
                    IntPtr strPtr = XndSDK.XNDAttrib_ReadStringA(CoreObject);
                    var    name   = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(strPtr);
                    XndSDK.XNDAttrib_FreeStringA(strPtr);
                    byte type;
                    Read(out type);
                    rname = EngineNS.RName.GetRName(name, (RName.enRNameType)type);
                }
                break;

                case 1:
                {
                    var se = EngineNS.IO.Serializer.TypeDescGenerator.Instance.GetSerializer(typeof(EngineNS.RName));
                    rname = (EngineNS.RName)se.ReadValue(this);
                }
                break;
                }
            }
            return(true);
        }
예제 #15
0
        private void Button_SetTexturePath_Click(object sender, RoutedEventArgs e)
        {
            var data = EditorCommon.PluginAssist.PropertyGridAssist.GetSelectedObjectData("Texture");

            if (data == null)
            {
                return;
            }

            if (data.Length <= 0)
            {
                return;
            }

            TexturePath = data[0] as EngineNS.RName;

            // 向连接到本节点的其他节点发送贴图设置的信息以便其他节点更新显示贴图
            var linkObj = TextureLink.GetLinkedObject(0, false);

            if (linkObj is Texture.Tex2D)
            {
                ((Texture.Tex2D)linkObj).TexturePath = TexturePath;
            }
        }
예제 #16
0
 protected override Task OnReferencedRNameChangedOverride(ResourceInfo referencedResInfo, EngineNS.RName newRName, EngineNS.RName oldRName)
 {
     throw new NotImplementedException();
 }
        public async System.Threading.Tasks.Task OnResetPreviewMaterialParentMaterial(ResourceInfos.MaterialInstanceResourceInfo.MaterialInstanceEditProperty miep, EngineNS.RName newValue)
        {
            var rc  = EngineNS.CEngine.Instance.RenderContext;
            var mat = await EngineNS.CEngine.Instance.MaterialManager.GetMaterialAsync(rc, newValue);

            mPreviewMaterialInstance.NewMaterialInstance(rc, mat, mPreviewMaterialInstance.Name);
            mPreviewMaterialInstance.ResetValuesFromMaterial(mat);
            miep.SetMaterialInstance(mPreviewMaterialInstance);

            ProGrid.Instance = null;
            ProGrid.Instance = miep;
            if (mMeshComponent != null)
            {
                for (int i = 0; i < mMeshComponent.MaterialNumber; i++)
                {
                    await mMeshComponent.SetMaterialInstanceAsync(rc, (uint)i, mPreviewMaterialInstance, null);
                }
            }
        }
예제 #18
0
        protected override async System.Threading.Tasks.Task <ResourceInfo> CreateResourceInfoFromResourceOverride(EngineNS.RName resourceName)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            var retValue = new MaterialResourceInfo();

            retValue.ResourceName = resourceName;
            retValue.ResourceType = EngineNS.Editor.Editor_RNameTypeAttribute.Material;

            return(retValue);
        }
예제 #19
0
        protected override async Task <bool> MoveToFolderOverride(string absFolder, EngineNS.RName currentResourceName)
        {
            var tagRName = EngineNS.RName.EditorOnly_GetRNameFromAbsFile(absFolder + currentResourceName.PureName(true));
            var rc       = EngineNS.CEngine.Instance.RenderContext;

            if (EngineNS.CEngine.Instance.FileManager.FileExists(tagRName.Address))
            {
                if (EditorCommon.MessageBox.Show($"文件夹{absFolder}已存在文件{currentResourceName.PureName()},是否替换?") != EditorCommon.MessageBox.enMessageBoxResult.Yes)
                {
                    return(false);
                }
            }
            // var
            EngineNS.CEngine.Instance.FileManager.MoveFile(currentResourceName.Address + EngineNS.Graphics.CGfxMaterial.ShaderDefineExtension, tagRName.Address + EngineNS.Graphics.CGfxMaterial.ShaderDefineExtension);
            // code
            EngineNS.CEngine.Instance.FileManager.MoveFile(currentResourceName.Address + EngineNS.Graphics.CGfxMaterial.ShaderIncludeExtension, tagRName.Address + EngineNS.Graphics.CGfxMaterial.ShaderIncludeExtension);
            // link
            if (EngineNS.CEngine.Instance.FileManager.FileExists(currentResourceName.Address + EngineNS.Graphics.CGfxMaterial.ShaderLinkExtension))
            {
                EngineNS.CEngine.Instance.FileManager.MoveFile(currentResourceName.Address + EngineNS.Graphics.CGfxMaterial.ShaderLinkExtension, tagRName.Address + EngineNS.Graphics.CGfxMaterial.ShaderLinkExtension);
            }
            // snapshot
            if (EngineNS.CEngine.Instance.FileManager.FileExists(currentResourceName.Address + EditorCommon.Program.SnapshotExt))
            {
                EngineNS.CEngine.Instance.FileManager.MoveFile(currentResourceName.Address + EditorCommon.Program.SnapshotExt, tagRName.Address + EditorCommon.Program.SnapshotExt);
            }
            // material
            EngineNS.CEngine.Instance.FileManager.MoveFile(currentResourceName.Address, tagRName.Address);
            var mat = await EngineNS.CEngine.Instance.MaterialManager.GetMaterialAsync(rc, tagRName, true);

            mat.Name = tagRName;
            mat.SaveMaterial();

            // 刷新所有材质实例
            // 刷新所有打开的材质实例编辑器
            //var matInsFiles = EngineNS.CEngine.Instance.FileManager.GetFiles(EngineNS.CEngine.Instance.FileManager.Content, "*" + EngineNS.CEngineDesc.MaterialInstanceExtension, System.IO.SearchOption.AllDirectories);
            //List<string> refreshedMatIns = new List<string>();
            //foreach (var ctrlData in EditorCommon.PluginAssist.Process.ControlsDic)
            //{
            //    if (ctrlData.Key.GetExtension() == EngineNS.CEngineDesc.MaterialInstanceExtension.TrimStart('.'))
            //    {
            //        var matIns = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, ctrlData.Key);
            //        if (matIns.Material.Name == currentResourceName)
            //        {
            //            EngineNS.CEngine.Instance.MaterialInstanceManager.RemoveMaterialFromDic(ctrlData.Key);
            //            var matInsEditor = ctrlData.Value.Content as MaterialInstanceEditorControl;
            //            var insResInfo = matInsEditor.CurrentContext.ResInfo as MaterialInstanceResourceInfo;
            //            insResInfo.ParentMaterialRName = tagRName;
            //            await insResInfo.Save();

            //            matIns.OnlySetMaterialName(tagRName);
            //            refreshedMatIns.Add(tagRName.Address);
            //            matIns.SaveMaterialInstance();
            //        }
            //    }
            //}
            //foreach(var file in matInsFiles)
            //{
            //    var relFile = EngineNS.CEngine.Instance.FileManager._GetRelativePathFromAbsPath(file, EngineNS.CEngine.Instance.FileManager.Content);
            //    var rName = EngineNS.CEngine.Instance.FileManager.GetRName(relFile);
            //    if (refreshedMatIns.Contains(rName.Address))
            //        continue;

            //    var rInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(rName.Address) as ResourceInfos.MaterialInstanceResourceInfo;
            //    await rInfo.Load(rName.Address + EditorCommon.Program.ResourceInfoExt);
            //    if (rInfo.ParentMaterialRName == currentResourceName)
            //    {
            //        rInfo.ParentMaterialRName = tagRName;
            //        await rInfo.Save();

            //        var matIns = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, rName);
            //        EngineNS.CEngine.Instance.MaterialInstanceManager.RemoveMaterialFromDic(rName);
            //        matIns.OnlySetMaterialName(tagRName);
            //        //matIns.Editor_SetMaterial(mat);
            //        matIns.SaveMaterialInstance();
            //    }
            //}

            return(true);
        }
예제 #20
0
        protected override async Task OnReferencedRNameChangedOverride(ResourceInfo referencedResInfo, EngineNS.RName newRName, EngineNS.RName oldRName)
        {
            if (referencedResInfo.ResourceType == EngineNS.Editor.Editor_RNameTypeAttribute.Texture)
            {
                ReferenceRNameList.Remove(oldRName);
                ReferenceRNameList.Add(referencedResInfo.ResourceName);
                await Save();

                // mat
                bool bFinded = false;
                var  mat     = await EngineNS.CEngine.Instance.MaterialManager.GetMaterialAsync(EngineNS.CEngine.Instance.RenderContext, ResourceName);

                foreach (var param in mat.ParamList)
                {
                    if (param.VarType == EngineNS.EShaderVarType.SVT_Texture && param.TextureRName.Equals(oldRName))
                    {
                        param.SetValueStr(referencedResInfo.ResourceName);
                        bFinded = true;
                    }
                }
                mat.SaveMaterial();

                // link
                if (bFinded)
                {
                    var xndHolder = await EngineNS.IO.XndHolder.LoadXND(ResourceName.Address + EngineNS.Graphics.CGfxMaterial.ShaderLinkExtension);

                    if (xndHolder != null)
                    {
                        var container = new CodeGenerateSystem.Base.NodesContainer();
                        await container.Load(xndHolder.Node);

                        xndHolder.Node.TryReleaseHolder();

                        foreach (var node in container.CtrlNodeList)
                        {
                            if (node is Controls.TextureControl)
                            {
                                var tc = node as Controls.TextureControl;
                                if (tc.TextureRName == oldRName)
                                {
                                    tc.TextureRName = referencedResInfo.ResourceName;
                                }
                            }
                        }

                        var saveHolder = EngineNS.IO.XndHolder.NewXNDHolder();
                        container.Save(saveHolder.Node);
                        EngineNS.IO.XndHolder.SaveXND(ResourceName.Address + EngineNS.Graphics.CGfxMaterial.ShaderLinkExtension, saveHolder);
                    }
                }
            }
        }
예제 #21
0
 private string RNameToPathName(EngineNS.RName name)
 {
     return(name.RNameType.ToString() + "|" + name.Name);
 }
예제 #22
0
        protected override async Task <bool> MoveToFolderOverride(string absFolder, EngineNS.RName currentResourceName)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            throw new NotImplementedException();
        }
예제 #23
0
 public static string GetClassName(EngineNS.RName rname)
 {
     return(rname.PureName());
 }
예제 #24
0
        protected override async Task <EditorCommon.Resources.ResourceInfo> CreateResourceInfoFromResourceOverride(EngineNS.RName resourceName)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            var retValue = new FolderResourceInfo();

            retValue.ResourceName = resourceName;
            return(retValue);
        }
예제 #25
0
        public void RecordObject(Object obj, ExcelResourceInfo info)
        {
            if (obj == null)
            {
                return;
            }

            var type = obj.GetType();

            if (DontProcessObject(obj, type))
            {
                return;
            }

            if (DontProcessNameSpace(obj, type))
            {
                return;
            }



            //处理字段集
            FieldInfo[] ActorFields = type.GetFields();

            for (int i = 0; i < ActorFields.Length; i++)
            {
                object value;
                try
                {
                    value = ActorFields[i].GetValue(obj);
                }
                catch (Exception e)

                {
                    value = null;
                }

                if (value == null)
                {
                    continue;
                }

                {
                    //看是否使用宏图文件
                    EngineNS.RName rname = value as EngineNS.RName;
                    if (rname != null)
                    {
                        //Record..
                        info.ReferenceRNameList.Add(rname);
                    }
                }


                Type pp = value.GetType();
                if (IsArray(pp))
                {
                    Type[] args = pp.GetGenericArguments();
                    //Array List
                    if (args.Length == 1 || args.Length == 0)
                    {
                        var tt = (System.Collections.IEnumerable)value;
                        if (tt != null)
                        {
                            foreach (var v in tt)
                            {
                                EngineNS.RName rname = v as EngineNS.RName;
                                if (rname != null)
                                {
                                    //Record..
                                    info.ReferenceRNameList.Add(rname);
                                }
                                else
                                {
                                    RecordObject(v, info);
                                }
                            }
                        }
                    }
                    //Dictionary
                    else if (args.Length == 2)
                    {
                        var tt = (System.Collections.IDictionary)value;
                        if (tt != null)
                        {
                            foreach (var v in tt.Values)
                            {
                                EngineNS.RName rname = v as EngineNS.RName;
                                if (rname != null)
                                {
                                    //Record..
                                    info.ReferenceRNameList.Add(rname);
                                }
                                else
                                {
                                    RecordObject(v, info);
                                }
                            }
                        }
                    }
                }
                else
                {
                    RecordObject(value, info);
                }
            }

            //处理属性集
            PropertyInfo[] ActorProperties = type.GetProperties();
            for (int i = 0; i < ActorProperties.Length; i++)
            {
                object value;
                try
                {
                    value = ActorProperties[i].GetValue(obj);
                }
                catch (Exception e)

                {
                    value = null;
                }

                if (value == null)
                {
                    continue;
                }

                //看是否使用宏图文件
                {
                    EngineNS.RName rname = value as EngineNS.RName;
                    if (rname != null)
                    {
                        //Record..
                        info.ReferenceRNameList.Add(rname);
                    }
                }

                Type pp = value.GetType();
                if (IsArray(pp))
                {
                    Type[] args = pp.GetGenericArguments();
                    //Array List
                    if (args.Length == 1 || args.Length == 0)
                    {
                        var tt = (System.Collections.IEnumerable)value;
                        if (tt != null)
                        {
                            foreach (var v in tt)
                            {
                                EngineNS.RName rname = v as EngineNS.RName;
                                if (rname != null)
                                {
                                    //Record..
                                    info.ReferenceRNameList.Add(rname);
                                }
                                else
                                {
                                    RecordObject(v, info);
                                }
                            }
                        }
                    }
                    //Dictionary
                    else if (args.Length == 2)
                    {
                        var tt = (System.Collections.IDictionary)value;
                        if (tt != null)
                        {
                            foreach (var v in tt.Values)
                            {
                                EngineNS.RName rname = v as EngineNS.RName;
                                if (rname != null)
                                {
                                    //Record..
                                    info.ReferenceRNameList.Add(rname);
                                }
                                else
                                {
                                    RecordObject(v, info);
                                }
                            }
                        }
                    }
                }
                else
                {
                    RecordObject(value, info);
                }
            }
        }