public void RefreshReferenceRNames(EngineNS.UISystem.UVAnim uvAnim) { // 资源引用 ReferenceRNameList.Clear(); ReferenceRNameList.Add(uvAnim.TextureRName); ReferenceRNameList.Add(uvAnim.MaterialInstanceRName); }
public override async Task <ResourceInfo> CreateEmptyResource(string absFolder, string rootFolder, IResourceCreateData createData) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); var result = new McBehaviorTreeResourceInfo(); var data = createData as McBTResourceCreateData; result.CenterDataTypeName = data.CenterDataTypeName; var reName = EngineNS.CEngine.Instance.FileManager._GetRelativePathFromAbsPath(absFolder + "/" + data.ResourceName, rootFolder); reName += EngineNS.CEngineDesc.MacrossExtension; result.ResourceName = EngineNS.RName.GetRName(reName, data.RNameType); result.BaseTypeIsMacross = data.IsMacrossType; if (result.BaseTypeIsMacross) { result.BaseTypeSaveName = data.ClassType.FullName; var baseResInfo = await GetBaseMacrossResourceInfo(this); if (baseResInfo != null) { ReferenceRNameList.Add(baseResInfo.ResourceName); } } else { result.BaseTypeSaveName = EngineNS.Rtti.RttiHelper.GetTypeSaveString(data.ClassType); } result.ResourceType = EngineNS.Editor.Editor_RNameTypeAttribute.Macross; // 创建时走一遍编译,保证当前Macross能够取到this类型 var csType = ECSType.Client; var codeGenerator = new CodeGenerator(); var ctrl = new McBTMacrossLinkControl(); ctrl.CurrentResourceInfo = result; ctrl.CSType = csType; var codeStr = await codeGenerator.GenerateCode(result, ctrl); if (!EngineNS.CEngine.Instance.FileManager.DirectoryExists(result.ResourceName.Address)) { EngineNS.CEngine.Instance.FileManager.CreateDirectory(result.ResourceName.Address); } var codeFile = $"{result.ResourceName.Address}/{result.ResourceName.PureName()}_{csType.ToString()}.cs"; using (var fs = new System.IO.FileStream(codeFile, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite)) { fs.Write(System.Text.Encoding.Default.GetBytes(codeStr), 0, Encoding.Default.GetByteCount(codeStr)); } await codeGenerator.GenerateAndSaveMacrossCollector(csType); var files = codeGenerator.CollectionMacrossProjectFiles(csType); codeGenerator.GenerateMacrossProject(files.ToArray(), csType); EditorCommon.Program.BuildGameDll(true); return(result); }
public void RefreshReferenceRNames(EngineNS.Graphics.Mesh.CGfxMesh mesh) { // 刷新引用 ReferenceRNameList.Clear(); ReferenceRNameList.Add(mesh.MeshPrimitiveName); foreach (var matName in mesh.MaterialNames) { ReferenceRNameList.Add(matName); } }
public void RefreshReferenceRNames(EngineNS.Graphics.CGfxMaterialInstance matIns) { // 刷新资源引用 ReferenceRNameList.Clear(); ReferenceRNameList.Add(matIns.MaterialName); for (UInt32 i = 0; i < matIns.SRVNumber; i++) { var rName = matIns.GetSRVName(i); ReferenceRNameList.Add(rName); } }
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); } } } }
public void RefreshReferenceRNames(EngineNS.Graphics.CGfxMaterial mat) { // 资源引用刷新 ReferenceRNameList.Clear(); foreach (var param in mat.ParamList) { switch (param.VarType) { case EngineNS.EShaderVarType.SVT_Texture: case EngineNS.EShaderVarType.SVT_Sampler: { ReferenceRNameList.Add(param.TextureRName); } break; } } }
public async System.Threading.Tasks.Task RefreshReferenceRNames(EngineNS.GamePlay.Actor.GPrefab prefab) { // 刷新资源引用 ReferenceRNameList.Clear(); HashSet <RName> refObjectHashSet = new HashSet <RName>(); await EngineNS.GamePlay.Actor.GActor.AnalysisActorRefResource(prefab, refObjectHashSet, null); foreach (var i in refObjectHashSet) { if (i.Name.EndsWith(".shadingenv")) { continue; } ReferenceRNameList.Add(i); } }
public override async Task Save(bool withSnapshot = false) { Version++; if (BaseTypeIsMacross && ReferenceRNameList.Count == 0) { var macrossDirs = EngineNS.CEngine.Instance.FileManager.GetFiles(EngineNS.CEngine.Instance.FileManager.ProjectContent, BaseType.Name + EngineNS.CEngineDesc.MacrossEnumExtension + ".rinfo", System.IO.SearchOption.AllDirectories); if (macrossDirs.Count > 0) { var resInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(macrossDirs[0], null); if (resInfo != null) { ReferenceRNameList.Add(resInfo.ResourceName); } } } await base.Save(withSnapshot); }
protected override async Task OnReferencedRNameChangedOverride(ResourceInfo referencedResInfo, EngineNS.RName newRName, EngineNS.RName oldRName) { if (referencedResInfo.ResourceType == EngineNS.Editor.Editor_RNameTypeAttribute.Material) { ReferenceRNameList.Remove(ParentMaterialRName); if (newRName != null) { ParentMaterialRName = referencedResInfo.ResourceName; ReferenceRNameList.Add(ParentMaterialRName); } await Save(); var matIns = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(EngineNS.CEngine.Instance.RenderContext, ResourceName); EngineNS.CEngine.Instance.MaterialInstanceManager.RemoveMaterialFromDic(ResourceName); matIns.OnlySetMaterialName(referencedResInfo.ResourceName); matIns.SaveMaterialInstance(); } else if (referencedResInfo.ResourceType == EngineNS.Editor.Editor_RNameTypeAttribute.Texture) { ReferenceRNameList.Remove(oldRName); if (newRName != null) { ReferenceRNameList.Add(referencedResInfo.ResourceName); } await Save(); var matIns = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(EngineNS.CEngine.Instance.RenderContext, ResourceName); for (uint i = 0; i < matIns.SRVNumber; i++) { var srvName = matIns.GetSRVName(i); if (srvName == oldRName) { var texture = CEngine.Instance.TextureManager.GetShaderRView(CEngine.Instance.RenderContext, referencedResInfo.ResourceName); matIns.SetSRV(i, texture); } } matIns.SaveMaterialInstance(); } }
public override async Task <ResourceInfo> CreateEmptyResource(string absFolder, string rootFolder, IResourceCreateData createData) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); var result = new McLogicAnimationResourceInfo(); var data = createData as McLAResourceCreateData; result.SkeletonAsset = data.SkeletonAsset; result.CenterDataTypeName = data.CenterDataTypeName; var reName = EngineNS.CEngine.Instance.FileManager._GetRelativePathFromAbsPath(absFolder + "/" + data.ResourceName, rootFolder); reName += EngineNS.CEngineDesc.MacrossExtension; result.ResourceName = EngineNS.RName.GetRName(reName, data.RNameType); result.BaseTypeIsMacross = data.IsMacrossType; if (result.BaseTypeIsMacross) { result.BaseTypeSaveName = data.ClassType.FullName; var baseResInfo = await GetBaseMacrossResourceInfo(this); if (baseResInfo != null) { ReferenceRNameList.Add(baseResInfo.ResourceName); } } else { result.BaseTypeSaveName = EngineNS.Rtti.RttiHelper.GetTypeSaveString(data.ClassType); } //var macData = new MacrossData(result.ResourceName); //macData.ParentType = data.ClassType; //macData.CSType = data.CSType; //macData.Id = Guid.NewGuid(); //macData.Save(); //var code = "namespace MacrossClasses\r\n"; //code += "{\r\n"; //code += $"\t// class name:{result.ResourceName.PureName()}\r\n"; //code += $"\tpublic class Macross_{macData.Id.ToString().Replace("-", "")} : {macData.ParentType.FullName}\r\n"; //code += "\t{\r\n"; //code += "\t}\r\n"; //code += "}\r\n"; //using(var writer = System.IO.File.CreateText(result.ResourceName.Address + MacrossData.MacrossCodeExtension)) //{ // writer.WriteLine(code); //} //result.mMacrossData = macData; result.ResourceType = EngineNS.Editor.Editor_RNameTypeAttribute.Macross; // 创建时走一遍编译,保证当前Macross能够取到this类型 var csType = ECSType.Client; var codeGenerator = new CodeGenerator(); var ctrl = new MCLAMacrossLinkControl(); ctrl.CurrentResourceInfo = result; ctrl.CSType = csType; var codeStr = await codeGenerator.GenerateCode(result, ctrl); if (!EngineNS.CEngine.Instance.FileManager.DirectoryExists(result.ResourceName.Address)) { EngineNS.CEngine.Instance.FileManager.CreateDirectory(result.ResourceName.Address); } var codeFile = $"{result.ResourceName.Address}/{result.ResourceName.PureName()}_{csType.ToString()}.cs"; using (var fs = new System.IO.FileStream(codeFile, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite)) { fs.Write(System.Text.Encoding.Default.GetBytes(codeStr), 0, Encoding.Default.GetByteCount(codeStr)); } await codeGenerator.GenerateAndSaveMacrossCollector(csType); var files = codeGenerator.CollectionMacrossProjectFiles(csType); codeGenerator.GenerateMacrossProject(files.ToArray(), csType); EditorCommon.Program.BuildGameDll(true); return(result); }
public override async Task <ResourceInfo> CreateEmptyResource(string absFolder, string rootFolder, IResourceCreateData createData) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); var result = new ParticleResourceInfo(); var data = createData as ParticleCreateData; //result.CenterDataTypeName = data.CenterDataTypeName; var reName = EngineNS.CEngine.Instance.FileManager._GetRelativePathFromAbsPath(absFolder + "/" + data.ResourceName, rootFolder); reName += EngineNS.CEngineDesc.MacrossExtension; result.ResourceName = EngineNS.RName.GetRName(reName, data.RNameType); result.BaseTypeIsMacross = data.IsMacrossType; if (result.BaseTypeIsMacross) { result.BaseTypeSaveName = data.ClassType.FullName; var baseResInfo = await GetBaseMacrossResourceInfo(this); if (baseResInfo != null) { ReferenceRNameList.Add(baseResInfo.ResourceName); } } else { result.BaseTypeSaveName = EngineNS.Rtti.RttiHelper.GetTypeSaveString(data.ClassType); } result.ResourceType = EngineNS.Editor.Editor_RNameTypeAttribute.Macross; //拷贝模板 if (string.IsNullOrEmpty(data.TemplateName) == false) { string newfolder = result.ResourceName.Address; string tempfolder = RName.GetRName(data.TemplateName).Address; EngineNS.CEngine.Instance.FileManager.CreateDirectory(newfolder); EngineNS.CEngine.Instance.FileManager.CopyDirectory(tempfolder, newfolder); //EngineNS.CEngine.Instance.FileManager.DeleteFile(newfolder + "/particle1_Client.cs"); //string newcsname = newfolder + "/" + data.ResourceName + "_Client.cs"; //if (EngineNS.CEngine.Instance.FileManager.FileExists(newcsname)) //{ // EngineNS.CEngine.Instance.FileManager.DeleteFile(newcsname); //} var csfiles = EngineNS.CEngine.Instance.FileManager.GetFiles(newfolder, "*.cs", System.IO.SearchOption.AllDirectories); if (csfiles != null && csfiles.Count != 0) { for (int i = 0; i < csfiles.Count; i++) { if (EngineNS.CEngine.Instance.FileManager.FileExists(csfiles[i])) { EngineNS.CEngine.Instance.FileManager.DeleteFile(csfiles[i]); } } } } // 创建时走一遍编译,保证当前Macross能够取到this类型 var csType = ECSType.Client; var codeGenerator = new CodeGenerator(); var ctrl = new ParticleMacrossLinkControl(); ctrl.CurrentResourceInfo = result; ctrl.CSType = csType; var codeStr = await codeGenerator.GenerateCode(result, ctrl); if (!EngineNS.CEngine.Instance.FileManager.DirectoryExists(result.ResourceName.Address)) { EngineNS.CEngine.Instance.FileManager.CreateDirectory(result.ResourceName.Address); } var codeFile = $"{result.ResourceName.Address}/{result.ResourceName.PureName()}_{csType.ToString()}.cs"; using (var fs = new System.IO.FileStream(codeFile, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite)) { fs.Write(System.Text.Encoding.Default.GetBytes(codeStr), 0, Encoding.Default.GetByteCount(codeStr)); } await codeGenerator.GenerateAndSaveMacrossCollector(csType); var files = codeGenerator.CollectionMacrossProjectFiles(csType); codeGenerator.GenerateMacrossProject(files.ToArray(), csType); EditorCommon.Program.BuildGameDll(true); return(result); }