public override bool CheckIfNeedImport()
        {
            mAnimAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + AssetImportOption.Name + CEngineDesc.AnimationClipExtension);
            var operationResult = AssetImportMessageType.AMT_UnKnown;

            if (EngineNS.CEngine.Instance.FileManager.FileExists(mAnimAbsFilePath.Address))
            {
                var userDesire = _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_FileExist, 0, "FileExist", ImportPercent);
                operationResult = FileOperation(userDesire, mAnimAbsFilePath);
            }
            if (operationResult == AssetImportMessageType.AMT_IgnoreFile)
            {
                ImportPercent = 1.0f;
                _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Skip", ImportPercent);
                return(false);
            }
            if (operationResult == AssetImportMessageType.AMT_RenameFile)
            {
                var validName = GetValidFileName(AssetImportOption.AbsSavePath, AssetImportOption.Name, CEngineDesc.AnimationClipExtension);
                mAnimAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(validName);
                return(true);
            }
            if (operationResult == AssetImportMessageType.AMT_DeleteOriginFile)
            {
                return(true);
            }
            return(true);
        }
Пример #2
0
 bool CheckPhyGeomIfNeedImport(CGfxMeshImportOption option, string phyGeomType)
 {
     mPhyAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(CEngine.Instance.FileManager.RemoveExtension(MeshPrimitives.Name.Address) + phyGeomType);
     if (EngineNS.CEngine.Instance.FileManager.FileExists(mPhyAbsFilePath.Address))
     {
         var userDesire = _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_FileExist, 0, "Save", ImportPercent);
         mOperationResult = FileOperation(userDesire, mPhyAbsFilePath);
     }
     if (mOperationResult == AssetImportMessageType.AMT_IgnoreFile)
     {
         ImportPercent = 1.0f;
         _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Skip", ImportPercent);
         return(false);
     }
     if (mOperationResult == AssetImportMessageType.AMT_RenameFile)
     {
         int index = GetValidFileNameSuffix(AssetImportOption.AbsSavePath, option.Name, phyGeomType);
         mVmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + phyGeomType);
         mGmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + phyGeomType);
         return(true);
     }
     if (mOperationResult == AssetImportMessageType.AMT_DeleteOriginFile)
     {
         return(true);
     }
     return(true);
 }
Пример #3
0
        public override void Init()
        {
            var option = AssetImportOption as CGfxMeshImportOption;
            var name   = option.Name;

            MeshPrimitives = new EngineNS.Graphics.Mesh.CGfxMeshPrimitives();
            var fullPath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + name + CEngineDesc.MeshSourceExtension);

            MeshPrimitives.Init(CEngine.Instance.RenderContext, fullPath, option.RenderAtom);
        }
Пример #4
0
        protected override async System.Threading.Tasks.Task CreateAnimationSequence(CRenderContext rc, uint actionIndex)
        {
            if (!mImportOption.ImportAnimation)
            {
                return;
            }
            var namePtr    = SDK_AssetImporter_GetActionNameByIndex(mCoreObject, actionIndex);
            var ansiString = Marshal.PtrToStringAnsi(namePtr);

            ansiString = CEngine.Instance.FileManager.GetPureFileFromFullName(mAbsFileName, false);
            //var skeletonAction = new EngineNS.Graphics.Mesh.Skeleton.CGfxSkeletonAction();
            //skeletonAction.Init(rc, RName.GetRName(savePath.Name + "/" + ansiString + CEngineDesc.AnimationSegementExtension));
            //SDK_AssetImporter_GetSkeletonActionByIndex(mCoreObject, rc.CoreObject, i, skeletonAction.CoreObject);

            var animSegement = new CGfxAnimationSequence();

            if (mImportOption.SkeletonAssetName != null && mImportOption.SkeletonAssetName != RName.EmptyName)
            {
                mSkeletonAsset = mImportOption.SkeletonAssetName.Name;
            }
            if (Async)
            {
                await CEngine.Instance.EventPoster.Post(() =>
                {
                    OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateAnimationSequence");
                    animSegement.SkeletonAction = new CGfxSkeletonAction();
                    SDK_AssetImporter_GetSkeletonActionByIndex(mCoreObject, rc.CoreObject, actionIndex, animSegement.SkeletonAction.CoreObject);
                    var name = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.AnimationSequenceExtension);
                    animSegement.SkeletonAssetName = mImportOption.SkeletonAssetName;
                    var skeleton = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, animSegement.SkeletonAssetName);
                    //animSegement.SkeletonAction.FixBoneTree(skeleton);
                    //animSegement.SkeletonAction.FixBoneAnimPose(skeleton);
                    SDK_AssetImporter_CaculateSkeletonActionMotionData(mCoreObject, rc.CoreObject, animSegement.SkeletonAction.CoreObject, skeleton.BoneTab.Clone().CoreObject);
                    animSegement.SaveAs(name);
                    Actions.Add(ansiString, animSegement);
                    return(true);
                }, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor);
            }
            else
            {
                OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateAnimationSequence");
                animSegement.SkeletonAction = new CGfxSkeletonAction();
                SDK_AssetImporter_GetSkeletonActionByIndex(mCoreObject, rc.CoreObject, actionIndex, animSegement.SkeletonAction.CoreObject);
                var name = RName.EditorOnly_GetRNameFromAbsFile(mAbsSavePath + "/" + ansiString + CEngineDesc.AnimationSequenceExtension);
                animSegement.SkeletonAssetName = mImportOption.SkeletonAssetName;
                var skeleton = EngineNS.CEngine.Instance.SkeletonAssetManager.GetSkeleton(rc, animSegement.SkeletonAssetName);
                SDK_AssetImporter_CaculateSkeletonActionMotionData(mCoreObject, rc.CoreObject, animSegement.SkeletonAction.CoreObject, skeleton.BoneTab.Clone().CoreObject);
                animSegement.SkeletonAction.FixBoneTree(skeleton);
                animSegement.SkeletonAction.FixBoneAnimPose(skeleton);
                animSegement.SaveAs(name);
                Actions.Add(ansiString, animSegement);
            }
            return;
        }
Пример #5
0
        public override bool CheckIfNeedImport()
        {
            var option = AssetImportOption as CGfxMeshImportOption;

            if (option.AsPhyGemoConvex || option.AsPhyGemoTri)
            {
                if (option.AsPhyGemoConvex)
                {
                    return(CheckPhyGeomIfNeedImport(option, CEngineDesc.PhyConvexGeom));
                }
                else if (option.AsPhyGemoTri)
                {
                    return(CheckPhyGeomIfNeedImport(option, CEngineDesc.PhyTriangleMeshGeom));
                }
                else if (option.AsPhyGemoHeightField)
                {
                    return(CheckPhyGeomIfNeedImport(option, CEngineDesc.PhyHeightFieldGeom));
                }
            }
            else
            {
                mVmsAbsFilePath = MeshPrimitives.Name;
                mGmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + CEngineDesc.MeshExtension);
                if (EngineNS.CEngine.Instance.FileManager.FileExists(mVmsAbsFilePath.Address))
                {
                    var userDesire = _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_FileExist, 0, "Save", ImportPercent);
                    mOperationResult = FileOperation(userDesire, mVmsAbsFilePath);
                    if (option.CreateGms)
                    {
                        FileOperation(userDesire, mGmsAbsFilePath);
                    }
                }
                if (mOperationResult == AssetImportMessageType.AMT_IgnoreFile)
                {
                    ImportPercent = 1.0f;
                    _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Skip", ImportPercent);
                    return(false);
                }
                if (mOperationResult == AssetImportMessageType.AMT_RenameFile)
                {
                    int index = GetValidFileNameSuffix(AssetImportOption.AbsSavePath, option.Name, CEngineDesc.MeshSourceExtension);
                    mVmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + CEngineDesc.MeshSourceExtension);
                    mGmsAbsFilePath = RName.EditorOnly_GetRNameFromAbsFile(AssetImportOption.AbsSavePath + "/" + option.Name + index.ToString() + CEngineDesc.MeshExtension);
                    return(true);
                }
                if (mOperationResult == AssetImportMessageType.AMT_DeleteOriginFile)
                {
                    return(true);
                }
            }
            return(true);
        }
Пример #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;
        }
Пример #7
0
        public override async System.Threading.Tasks.Task SaveAsset()
        {
            var option = AssetImportOption as CGfxMeshImportOption;
            var rc     = CEngine.Instance.RenderContext;

            if (option.AsPhyGemoConvex || option.AsPhyGemoTri || option.AsPhyGemoHeightField)
            {
                if (option.AsPhyGemoConvex)
                {
                    await SavePhyConvexAsset();
                }
                else if (option.AsPhyGemoTri)
                {
                    await SavePhyTriMeshAsset();
                }
                else if (option.AsPhyGemoHeightField)
                {
                    await SavePhyHeightFieldAsset();
                }
            }
            else
            {
                MeshPrimitives.MdfQueue.SyncNativeModifiers();
                string skeletonAssetName = "";
                if (option.HaveSkin)
                {
                    var skinModifier = MeshPrimitives.MdfQueue.FindModifier <CGfxSkinModifier>();
                    if (skinModifier != null)
                    {
                        if (option.Skeleton != RName.EmptyName)
                        {
                            skinModifier.SkeletonAsset = option.Skeleton.Name;
                            skeletonAssetName          = option.Skeleton.Name;
                        }
                        else
                        {
                            var pureName  = CEngine.Instance.FileManager.GetPureFileFromFullName(mVmsAbsFilePath.Name, false);
                            var path      = AssetImportOption.AbsSavePath + "/" + pureName + CEngineDesc.SkeletonExtension;
                            var assetName = RName.EditorOnly_GetRNameFromAbsFile(path);
                            EngineNS.CEngine.Instance.SkeletonAssetManager.Remove(assetName);
                            var skeletonAsset = new Animation.Skeleton.CGfxSkeleton(SDK_GfxAsset_MeshCreater_GetFullSkeleton(CoreObject));
                            CEngine.Instance.SkeletonAssetManager.CreateSkeletonAsset(CEngine.Instance.RenderContext, assetName, skeletonAsset);
                            skinModifier.SkeletonAsset = assetName.Name;
                            skeletonAssetName          = assetName.Name;
                            var skeletonRInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(assetName.Address);

                            var skeInfo = skeletonRInfo as SkeletonResourceInfo;
                            skeInfo.PreViewMesh = mGmsAbsFilePath.Name;
                            await skeletonRInfo.Save();
                        }
                    }
                }
                CEngine.Instance.MeshPrimitivesManager.RemoveMeshPimitives(mVmsAbsFilePath);
                MeshPrimitives.SaveMesh(mVmsAbsFilePath.Address);
                var info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(mVmsAbsFilePath.Address);

                var msRInfo = info as EditorCommon.ResourceInfos.MeshSourceResourceInfo;
                msRInfo.SkeletonAsset = skeletonAssetName;
                await info.Save();

                if (option.CreateGms)
                {
                    //OnResourceImportCheck(this, AsseetImportType.AIT_Import, "CreateMesh");
                    var mesh = CEngine.Instance.MeshManager.CreateMesh(rc, mGmsAbsFilePath, MeshPrimitives);
                    CEngine.Instance.MeshManager.RemoveMesh(mGmsAbsFilePath);
                    mesh.Init(rc, mGmsAbsFilePath, MeshPrimitives);
                    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);
                    }
                    mesh.SaveMesh();
                    info = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromResource(mGmsAbsFilePath.Address);

                    var meshRInfo = info as EditorCommon.ResourceInfos.MeshResourceInfo;
                    meshRInfo.SkeletonAsset = skeletonAssetName;
                    await info.Save();
                }
                ImportPercent = 1.0f;
                _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Import, 0, "Save", ImportPercent);
                _OnCreaterAssetImportMessageDumping(this, AssetImportMessageType.AMT_Save, 0, "Save", 0);
            }
        }