public async System.Threading.Tasks.Task SetObjectToEdit(ResourceEditorContext context)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            var info = context.ResInfo as EditorCommon.ResourceInfos.SkeletonResourceInfo;

            if (mCurrentResourceInfo == null || mCurrentResourceInfo.ResourceName != info.ResourceName)
            {
                mCurrentResourceInfo = info;
                SetBinding(TitleProperty, new Binding("ResourceName")
                {
                    Source = context.ResInfo, Converter = new EditorCommon.Converter.RNameConverter_PureName()
                });
                IconBrush = context.ResInfo.ResourceTypeBrush;
                mSkeletonTreeViewOperation = new SkeletonTreeViewOperation();
                mSkeleton = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(EngineNS.CEngine.Instance.RenderContext, mCurrentResourceInfo.ResourceName);
                mSkeletonTreeViewOperation.Skeleton         = mSkeleton;
                mSkeletonTreeViewOperation.SkeletonTreeView = TreeView_Skeleton;
                CreateSkeletonTreeView();
                await CachingPreviewMeshOfSkeleton();

                await mPreviewSceneControl.Initialize(mSceneName);

                ProGrid_PreviewScene.Instance = mPreviewSceneControl;
                await PreviewMeshChanged();

                CEngine.Instance.TickManager.AddTickInfo(this);
            }
        }
Esempio n. 2
0
 public EditorBoneDetial(CGfxSkeleton skeleton, CGfxBone bone, CGfxBone parentBone)
 {
     mBone       = bone;
     mParentBone = parentBone;
     if (bone.ChildNumber > 0)
     {
         for (uint i = 0; i < bone.ChildNumber; ++i)
         {
             var childIndex = bone.GetChild(i);
             var child      = skeleton.GetBone(childIndex);
             mChildren.Add(new EditorBoneDetial(skeleton, child, bone));
         }
     }
 }
        public void SetObject(EditorAnimationClip animSequence, AnimationClipResourceInfo resourceInfo)
        {
            mEditorAnimationClip = animSequence;
            mCurrentResourceInfo = resourceInfo;
            mSkeletonAsset       = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(EngineNS.CEngine.Instance.RenderContext, RName.GetRName(mCurrentResourceInfo.SkeletonAsset));
            AnimationPlayingCtrl.AnimationName     = mEditorAnimationClip.AnimationClip.Name.PureName();
            AnimationPlayingCtrl.TotalFrame        = mEditorAnimationClip.AnimationClip.KeyFrames;
            AnimationPlayingCtrl.Duration          = mEditorAnimationClip.AnimationClip.Duration;
            AnimationPlayingCtrl.OnTickBarScaling += AnimationPlayingCtrl_OnTickBarScaling;
            if (mCurrentResourceInfo.NotifyTrackMap != null && mCurrentResourceInfo.NotifyTrackMap.Count != 0)
            {
                EngineNS.Thread.ASyncSemaphore smp = EngineNS.Thread.ASyncSemaphore.CreateSemaphore(mCurrentResourceInfo.TrackCount);
                for (int i = 0; i < mCurrentResourceInfo.TrackCount; ++i)
                {
                    var notify = CreateNotifyTrack(i);
                    AddNotifyTrack(i, notify, false);
                    notify.OnLoaded += (sender, e) =>
                    {
                        smp.Release();
                    };
                }
                Action action = async() =>
                {
                    await smp.Await();

                    foreach (var notify in mEditorAnimationClip.AnimationClip.InstanceNotifies)
                    {
                        var trackId = GetTrackId(notify.ID);
                        if (trackId >= 0)
                        {
                            var getter = mNotifyEditeControlList[trackId].AddNotify(notify.NotifyName, notify);
                            mEditorAnimationClip.NofityPairs.Add(notify.ID, getter);
                        }
                    }
                    foreach (var pair in mCurrentResourceInfo.NotifyTrackMap)
                    {
                        var trackId = GetTrackId(pair.NotifyID);
                        if (trackId >= 0)
                        {
                        }
                    }
                };
                action.Invoke();
            }
            else
            {
                AddNotifyTrack(0, CreateNotifyTrack(0));
            }
        }
Esempio n. 4
0
        public CGfxSkeletonAction GetSkeletonAction(CGfxSkeleton skeleton, RName name, bool firstLoad = true)
        {
            CGfxSkeletonAction action;

            if (false == SkeletonActions.TryGetValue(name, out action))
            {
                action = new CGfxSkeletonAction();
                if (action.MakeTPoseActionFromSkeleton(skeleton, name, firstLoad) == false)
                {
                    return(null);
                }

                SkeletonActions.Add(name, action);
            }
            return(action);
        }
Esempio n. 5
0
        public bool MakeTPoseActionFromSkeleton(CGfxSkeleton skeleton, RName name, bool firstLoad)
        {
            if (false == SDK_GfxSkeletonAction_MakeTPoseActionFromSkeleton(CoreObject, skeleton.CoreObject, name.Name, firstLoad))
            {
                return(false);
            }

            var num = SDK_GfxSkeletonAction_GetBoneNumber(CoreObject);

            mAnimNodes = new CGfxBoneAnim[num];
            for (UInt32 i = 0; i < num; i++)
            {
                var ptr = SDK_GfxSkeletonAction_GetBoneAnum(CoreObject, i);
                if (ptr.Pointer == IntPtr.Zero)
                {
                    continue;
                }
                mAnimNodes[i] = new CGfxBoneAnim(ptr);
            }
            return(true);
        }
Esempio n. 6
0
        protected override async System.Threading.Tasks.Task CreateVmsAndGms(CRenderContext rc, uint meshIndex)
        {
            if (!mImportOption.ImportMesh)
            {
                return;
            }
            //导入不经过MeshPrimitivesManager
            //var meshPrimitive = CEngine.Instance.MeshPrimitivesManager.NewMeshPrimitives(rc,, 1);
            //meshPrimitive.Name

            var namePtr    = SDK_AssetImporter_GetMeshNameByIndex(mCoreObject, meshIndex);
            var ansiString = Marshal.PtrToStringAnsi(namePtr);

            if (MeshPrimitives.ContainsKey(ansiString))
            {
                ansiString += meshIndex.ToString();
            }
            var atom          = SDK_AssetImporter_GetMesAtomByIndex(mCoreObject, meshIndex);
            var meshPrimitive = new EngineNS.Graphics.Mesh.CGfxMeshPrimitives();
            var fullPath      = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.MeshSourceExtension);

            CEngine.Instance.MeshPrimitivesManager.RemoveMeshPimitives(fullPath);
            if (Async)
            {
                await CEngine.Instance.EventPoster.Post(async() =>
                {
                    OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMeshPrimitive");
                    meshPrimitive.Init(rc, fullPath, atom);
                    SDK_AssetImporter_GetMeshPrimitiveByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject);
                    var skinNativePointer = SDK_AssetImporter_BuildMeshPrimitiveSkinModifierByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject);
                    if (skinNativePointer.GetPointer() != IntPtr.Zero)
                    {
                        var skinModifier      = new CGfxSkinModifier(skinNativePointer);
                        var nativeSkeleton    = CGfxSkinModifier.SDK_GfxSkinModifier_GetSkeleton(skinNativePointer);
                        CGfxSkeleton skeleton = new CGfxSkeleton(nativeSkeleton);
                        EngineNS.Bricks.Animation.Pose.CGfxSkeletonPose pose = new EngineNS.Bricks.Animation.Pose.CGfxSkeletonPose();
                        for (uint i = 0; i < skeleton.BoneTab.BoneNumberNative; ++i)
                        {
                            pose.NewBone(skeleton.BoneTab.GetBoneNative(i).BoneDescNative);
                        }
                        CGfxSkeleton csSkeleton = new CGfxSkeleton();
                        csSkeleton.BoneTab      = pose;
                        skinModifier.Skeleton   = csSkeleton;
                        meshPrimitive.MdfQueue.AddModifier(skinModifier);
                        if (mImportOption.SkeletonAssetName != null && mImportOption.SkeletonAssetName != RName.EmptyName)
                        {
                            var skeletonAsset          = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, mImportOption.SkeletonAssetName, false);
                            skinModifier.SkeletonAsset = mImportOption.SkeletonAssetName.Name;
                            mSkeletonAsset             = mImportOption.SkeletonAssetName.Name;
                        }
                        else
                        {
                            OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateSkeleton");
                            var pureName               = CEngine.Instance.FileManager.GetPureFileFromFullName(mAbsFileName, false);
                            var path                   = mAbsSavePath + "/" + pureName + CEngineDesc.SkeletonExtension;
                            var assetName              = RName.EditorOnly_GetRNameFromAbsFile(path);
                            var skeletonAsset          = EngineNS.CEngine.Instance.SkeletonAssetManager.CreateSkeletonAsset(rc, assetName, skinModifier);
                            skinModifier.SkeletonAsset = assetName.Name;
                            mSkeletonAsset             = assetName.Name;
                            if (!mSkeletonNeedInfo.ContainsKey(pureName))
                            {
                                mSkeletonNeedInfo.Add(pureName, assetName);
                            }
                        }
                    }
                    MeshPrimitives.Add(ansiString, meshPrimitive);
                    if (mImportOption.AsPhyGemoConvex || mImportOption.AsPhyGemoTri)
                    {
                        foreach (var i in MeshPrimitives.Values)
                        {
                            CGfxMeshPrimitives meshprimitive = i as CGfxMeshPrimitives;
                            if (mImportOption.AsPhyGemoConvex)
                            {
                                meshprimitive.CookAndSavePhyiscsGeomAsConvex(CEngine.Instance.RenderContext, EngineNS.CEngine.Instance.PhyContext);
                            }
                            else if (mImportOption.AsPhyGemoTri)
                            {
                                meshprimitive.CookAndSavePhyiscsGeomAsTriMesh(CEngine.Instance.RenderContext, EngineNS.CEngine.Instance.PhyContext);
                            }
                        }
                    }
                    else
                    {
                        await CEngine.Instance.EventPoster.Post(() =>
                        {
                            meshPrimitive.SaveMesh();
                            return(true);
                        }, EngineNS.Thread.Async.EAsyncTarget.Render);
                        //gms
                        if (mImportOption.CreatedGms)
                        {
                            OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMesh");
                            var meshRName = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.MeshExtension);
                            var mesh      = CEngine.Instance.MeshManager.CreateMesh(rc, meshRName, meshPrimitive);
                            CEngine.Instance.MeshManager.RemoveMesh(meshRName);
                            mesh.Init(rc, meshRName, meshPrimitive);
                            var mtl = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("Material/defaultmaterial.instmtl"));
                            for (int i = 0; i < mesh.MtlMeshArray.Length; ++i)
                            {
                                await mesh.SetMaterialInstanceAsync(rc, (uint)i, mtl, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs);
                            }
                            Meshes.Add(ansiString, mesh);
                            mesh.SaveMesh();
                        }
                    }
                    return(true);
                }, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor);
            }
            else
            {
                OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMeshPrimitive");
                meshPrimitive.Init(rc, fullPath, atom);
                SDK_AssetImporter_GetMeshPrimitiveByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject);
                var skinNativePointer = SDK_AssetImporter_BuildMeshPrimitiveSkinModifierByIndex(mCoreObject, rc.CoreObject, meshIndex, meshPrimitive.CoreObject);
                if (skinNativePointer.GetPointer() != IntPtr.Zero)
                {
                    var skinModifier = new CGfxSkinModifier(skinNativePointer);
                    meshPrimitive.MdfQueue.AddModifier(skinModifier);
                    if (mImportOption.SkeletonAssetName != null)
                    {
                        var skeletonAsset = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, mImportOption.SkeletonAssetName, false);
                        skinModifier.SkeletonAsset = mImportOption.SkeletonAssetName.Name;
                    }
                    else
                    {
                        var pureName      = CEngine.Instance.FileManager.GetPureFileFromFullName(mAbsFileName, false);
                        var path          = mAbsSavePath + "/" + pureName + CEngineDesc.SkeletonExtension;
                        var assetName     = RName.EditorOnly_GetRNameFromAbsFile(path);
                        var skeletonAsset = EngineNS.CEngine.Instance.SkeletonAssetManager.CreateSkeletonAsset(rc, assetName, skinModifier);
                        skinModifier.SkeletonAsset = assetName.Name;
                        if (!mSkeletonNeedInfo.ContainsKey(pureName))
                        {
                            mSkeletonNeedInfo.Add(pureName, assetName);
                        }
                    }
                }
                MeshPrimitives.Add(ansiString, meshPrimitive);
                meshPrimitive.SaveMesh();

                //gms
                if (mImportOption.CreatedGms)
                {
                    OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMes");
                    var meshRName = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.MeshExtension);
                    var mesh      = CEngine.Instance.MeshManager.CreateMesh(rc, meshRName, meshPrimitive);
                    CEngine.Instance.MeshManager.RemoveMesh(meshRName);
                    mesh.Init(rc, meshRName, meshPrimitive);
                    var mtl = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, RName.GetRName("Material/defaultmaterial.instmtl"));

                    for (int i = 0; i < mesh.MtlMeshArray.Length; ++i)
                    {
                        await mesh.SetMaterialInstanceAsync(rc, (uint)i, mtl, CEngine.Instance.PrebuildPassData.DefaultShadingEnvs);
                    }
                    Meshes.Add(ansiString, mesh);
                    mesh.SaveMesh();
                }
            }
            //foreach(var mp in MeshPrimitives)
            //{
            //    mp.Value.SaveMesh();
            //}
            //foreach(var mesh in Meshes)
            //{
            //    mesh.Value.SaveMesh();
            //}
            //var info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(fullPath.Address);
            //info.Save();
            return;
        }
Esempio n. 7
0
 public void FixBoneAnimPose(CGfxSkeleton skeleton)
 {
     SDK_GfxSkeletonAction_FixBoneAnimPose(CoreObject, skeleton.CoreObject);
 }