public async Task SetObjectToEdit(EngineNS.CRenderContext rc, EditorCommon.Resources.ResourceEditorContext context) { await EngineNS.Thread.AsyncDummyClass.DummyFunc(); Macross_Client.CurrentResourceInfo = HostControl.CurrentResInfo; await Macross_Client.Load(); }
public async System.Threading.Tasks.Task SetObjectToEdit(EditorCommon.Resources.ResourceEditorContext context) { SetBinding(TitleProperty, new Binding("ResourceName") { Source = context.ResInfo, Converter = new EditorCommon.Converter.RNameConverter_PureName() }); // ResInfo 可能在不同的线程生成的,所以这里强制读取一下文件 CurrentResourceInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(context.ResInfo.AbsInfoFileName, context.ResInfo.ParentBrowser) as Macross.ResourceInfos.MacrossResourceInfo; var mclaInfo = CurrentResourceInfo as ResourceInfos.McBehaviorTreeResourceInfo; UpdateUndoRedoKey(); var att = EngineNS.Rtti.AttributeHelper.GetCustomAttribute(CurrentResourceInfo.BaseType, typeof(EngineNS.Editor.Editor_MacrossClassAttribute).FullName, false); if (att != null) { var csType = (EngineNS.ECSType)EngineNS.Rtti.AttributeHelper.GetCustomAttributePropertyValue(att, "CSType"); switch (csType) { case EngineNS.ECSType.Common: { CommonVisible = Visibility.Collapsed; ClientVisible = Visibility.Visible; ServerVisible = Visibility.Visible; CCSShowIdx = 1; Macross_Common.CurrentResourceInfo = mclaInfo; Macross_Client.CurrentResourceInfo = mclaInfo; Macross_Server.CurrentResourceInfo = mclaInfo; } break; case EngineNS.ECSType.Client: { CommonVisible = Visibility.Collapsed; ClientVisible = Visibility.Visible; ServerVisible = Visibility.Collapsed; CCSShowIdx = 1; Macross_Client.CurrentResourceInfo = mclaInfo; } break; case EngineNS.ECSType.Server: { CommonVisible = Visibility.Collapsed; ClientVisible = Visibility.Collapsed; ServerVisible = Visibility.Visible; CCSShowIdx = 2; Macross_Server.CurrentResourceInfo = mclaInfo; } break; } } await Load(); }
// 重新生成Macross代码文件 async Task ReGenerateCodes() { var mExt = new List <string>() { "*" + EngineNS.CEngineDesc.MacrossExtension, "*.animmacross", "*.componentmacross" }; List <string> files = new List <string>(); foreach (var ext in mExt) { var partFiles = EngineNS.CEngine.Instance.FileManager.GetFiles(EngineNS.CEngine.Instance.FileManager.ProjectContent, ext + EditorCommon.Program.ResourceInfoExt, System.IO.SearchOption.AllDirectories); files.AddRange(partFiles); } foreach (var file in files) { if (file.Contains("")) { System.Diagnostics.Debug.WriteLine($"-----{file}"); } try { var resInfo = await EditorCommon.Resources.ResourceInfoManager.Instance.CreateResourceInfoFromFile(file, null) as ResourceInfos.MacrossResourceInfo; var context = new EditorCommon.Resources.ResourceEditorContext(PluginName, resInfo); await SetObjectToEdit(context); var codeStr = await mCodeGenerator.GenerateCode(CurrentResourceInfo, Macross_Client); if (!EngineNS.CEngine.Instance.FileManager.DirectoryExists(CurrentResourceInfo.ResourceName.Address)) { EngineNS.CEngine.Instance.FileManager.CreateDirectory(CurrentResourceInfo.ResourceName.Address); } var codeFile = $"{CurrentResourceInfo.ResourceName.Address}/{CurrentResourceInfo.ResourceName.PureName()}_{Macross_Client.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 CompileCode(EPlatformType.PLATFORM_WIN); } catch (System.Exception e) { System.Diagnostics.Debug.WriteLine($"异常:{file} " + e.ToString()); } } await mCodeGenerator.GenerateAndSaveMacrossCollector(Macross_Client.CSType); List <string> macrossfiles = mCodeGenerator.CollectionMacrossProjectFiles(Macross_Client.CSType); mCodeGenerator.GenerateMacrossProject(macrossfiles.ToArray(), Macross_Client.CSType); }
public static async System.Threading.Tasks.Task OpenEditor(EditorCommon.Resources.ResourceEditorContext context) { await PluginAssist.Process.OnOpenEditor(context); }
public async Task SetObjectToEditor(EngineNS.CRenderContext rc, EditorCommon.Resources.ResourceEditorContext context) { await Viewport.WaitInitComplated(); if (mWindowRectUIShow == null) { var imgInit = new EngineNS.UISystem.Controls.ImageInitializer(); imgInit.ImageBrush.ImageName = EngineNS.RName.GetRName("uieditor/uvanim_dottedline.uvanim", EngineNS.RName.enRNameType.Editor); imgInit.ImageBrush.TileMode = EngineNS.UISystem.Brush.enTileMode.Both; mWindowRectUIShow = new EngineNS.UISystem.Controls.Image(); await mWindowRectUIShow.Initialize(rc, imgInit); } if (mMousePointAtUIRectShow == null) { var imgInit = new EngineNS.UISystem.Controls.ImageInitializer(); imgInit.ImageBrush.ImageName = EngineNS.RName.GetRName("uieditor/uva_pointatrect.uvanim", EngineNS.RName.enRNameType.Editor); imgInit.ImageBrush.TileMode = EngineNS.UISystem.Brush.enTileMode.None; mMousePointAtUIRectShow = new EngineNS.UISystem.Controls.Image(); await mMousePointAtUIRectShow.Initialize(rc, imgInit); mMousePointAtUIRectShow.Visibility = EngineNS.UISystem.Visibility.Collapsed; } if (mGridlineImage2D == null) { mGridlineImage2D = await EngineNS.Graphics.Mesh.CGfxImage2D.CreateImage2D(rc, EngineNS.RName.GetRName("uieditor/mi_background_grid.instmtl", EngineNS.RName.enRNameType.Editor), 0, 0, 0, 1, 1); mGridlineImage2D.RenderMatrix = EngineNS.Matrix.Scaling(Viewport.GetViewPortWidth(), Viewport.GetViewPortHeight(), 1); } await InitPanelRectsShow(); var font = EngineNS.CEngine.Instance.FontManager.GetFont(EngineNS.CEngine.Instance.Desc.DefaultFont, 12, 1024, 128); if (mScaleFontMesh == null) { var mtl = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, EngineNS.RName.GetRName("Material/font.instmtl")); mScaleFontMesh = new EngineNS.Bricks.FreeTypeFont.CFontMesh(); await mScaleFontMesh.SetMaterial(rc, mtl, "txDiffuse"); mScaleFontMesh.RenderMatrix = EngineNS.Matrix.Translate(20, 20, 0); //mScaleFontMesh.Offset = new EngineNS.Vector2(20, 20); //mScaleFontMesh.Scale = new EngineNS.Vector2(1, 1); } //var color = new EngineNS.FrameBufferClearColor(); //color.r = 0.1f; //color.g = 0.1f; //color.b = 0.1f; //color.a = 1.0f; //Viewport.RPolicy.SetClearColorRT(0, ref color); var smp = EngineNS.Thread.ASyncSemaphore.CreateSemaphore(1); Viewport.RPolicy.OnDrawUI += (cmd, view) => { var mtlmesh = mGridlineImage2D.Mesh.MtlMeshArray[0]; var pass = mGridlineImage2D.GetPass(); pass.ViewPort = view.Viewport; if (pass.RenderPipeline == null) { var rplDesc = new EngineNS.CRenderPipelineDesc(); pass.RenderPipeline = rc.CreateRenderPipeline(rplDesc); } pass.RenderPipeline.RasterizerState = mtlmesh.MtlInst.CustomRasterizerState; pass.RenderPipeline.DepthStencilState = mtlmesh.MtlInst.CustomDepthStencilState; pass.RenderPipeline.BlendState = mtlmesh.MtlInst.CustomBlendState; //pass.ShaderSamplerBinder = mtlmesh.GetSamplerBinder(rc, pass.Effect.ShaderProgram); pass.BindCBuffer(pass.Effect.ShaderProgram, pass.Effect.CacheData.CBID_View, view.ScreenViewCB); pass.ShadingEnv.BindResources(mGridlineImage2D.Mesh, pass); cmd.PushPass(pass); mWindowRectUIShow.Draw(rc, cmd, view); foreach (var rect in mPanelRectsShow.Values) { rect.Draw(rc, cmd, view); } HostDesignPanel.CurrentUI.Draw(rc, cmd, view); mMousePointAtUIRectShow.Draw(rc, cmd, view); foreach (var data in mSelectedUIDatas.Values) { data.ShowRect?.Draw(rc, cmd, view); } mSlotOperator?.Draw(rc, cmd, view); mScaleFontMesh.DrawText(rc, font, "缩放:" + mUIScale.ToString("F"), true); for (int i = 0; i < mScaleFontMesh.PassNum; i++) { var fontPass = mScaleFontMesh.GetPass(i); if (fontPass == null) { continue; } fontPass.ViewPort = view.Viewport; fontPass.BindCBuffer(fontPass.Effect.ShaderProgram, fontPass.Effect.CacheData.CBID_View, view.ScreenViewCB); fontPass.ShadingEnv.BindResources(mScaleFontMesh.Mesh, fontPass); cmd.PushPass(fontPass); } if (smp.IsValid) { smp.Release(); } }; await smp.Await(); HostDesignPanel.CurrentUI.SetDesignRect(ref mWindowDesignSize); ShowAll(); }