From 1b130a4bce32f25597ab6458f0f2fcb867b53b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sun, 23 Jun 2024 00:26:55 +0200 Subject: [PATCH] Basic save component button --- .../resources/Textures/EditorIcons.dds | Bin 311424 -> 327808 bytes .../resources/Textures/EditorIcons.dds.ass | 35 +++++++- .../resources/Textures/EditorIcons.psd | Bin 83914 -> 87626 bytes .../src/EditWindows/ComponentEditWindow.bf | 83 +++++++++++++++++- GlitchyEditor/src/Editor.bf | 24 +++-- GlitchyEditor/src/EditorIcons.bf | 2 + GlitchyEditor/src/EditorLayer.bf | 3 +- GlitchyEngine/src/World/Scene.bf | 4 +- 8 files changed, 136 insertions(+), 15 deletions(-) diff --git a/GlitchyEditor/resources/Textures/EditorIcons.dds b/GlitchyEditor/resources/Textures/EditorIcons.dds index 5781d7a76e04b5e60f93a99263a1961088d9f663..c28f49608b2d98b571ca8b525f9f7e05b68ddc64 100644 GIT binary patch delta 3724 zcmb7He@K*P9QS#ix6P%US6Ue=UC2o5oNuA%(AFF2GF0wFqZ=t*%WV$ZvMg$tkStik zns+^|XJyf`##XEFwl{c)UGugYML$R|wpd%q7|cmF-k9+TV-{<*$ zzQ2DwJNvSC_T?1R)HK_6q@|^0S!tR9|7la;my?!8;E(VoN9h+0{_JCJ2NBkfX{G7h zP%{M{?`h_fg1^(%clRmU4xg41bFipwdi|4P$QeZrc!Esox1#bV?& zmdnRVtGRz&nKWJ?b;R^IOS8m)OY;HoL4h2E5g^;S{<2*-f2DQ8{R?g3!Je7?+?IYG zl-Z`^)scn_ACn{w?~n=G5#(eTz^e^CYXbOdA>1y-?2<&^n5ZS#4(1dh36dI!AHKX6kRW| z3a>r~44MxN(z$iiCLa7q)Qf2y9hiHlHApbT)49%ubInjW;cj2Q;BzrAXA&3_8JKX`Vt|8_-!Zt*C_{ED(xgs;(Cc7;N z<5hx)#ue;!uRaBjyMUhuoeUul#RSuQa+Fb!uoq=z$w*?LkE{cjEl9Wr78@r=xFz%U zlkG{=Dos0pr~`=(!{UtuYS3<;Ft#x}M6n+BOS&{ZCCyo=P+Q0i!NbfAMsXu4R4x$!HH$zP*ME75G9!+1L4HKyW$H12pP^!+%&qFI5sz41Y}7e&n@a*dsqSiE{hm?%m;WW$gZLw}KS)YXM0OI5KA_}U4v zJQLHuDghWs!cAdpfHZT*U?Xm0P?ku~QaUjWJ4Z;m7^8g5!fF|8q!*y`J$>IzFTwu* z6;wL5(i&AbQf;$`hzGk!4Kj_GC&BDd8}-vlW%mC70i6{)l5pN8_t3=I7!6A#;M-v$ zSw=M(JW5A1ldTYo%m$QYOgJwQ<+MHtLDsFJIl<}CNKQTfZS;I7`cnfhnFa&nf=aCe zXNeJC{7%ZMALvu^BAUo5FOo#grl5Bl>Rn0XrMvWsQaL3dpNb)D7FNL>yOo}Mu|nRJ z3m?-C<%g6q(2hpK0;TdgK@cQdMkHMR*3-ZN!srM*1TT^eQ6WhY`3(e)Wv@lgb<~6epNW zhRTqAY}l_x_K4CWhi7XyV_X}eT*0K+wAGbE9mmeykJ7@GX1RcC&>grmIe~92w1GT% z(yraNh{Lzp&d~Mc+&+t%zLf57xL@h^ISoLB$= delta 2947 zcmbtWeN0qG5NG$jRQv!QAni43JraqaP#;Aj77Rzl6a$nqp6MCSa8_c^l*TisEmVn; zYHbUKJJ-5tsO73j3xUL^k7P|Wa#n0iTH~eK)TBnS)kva5Q~OVo+ID6icW|K8r2p)j zeLM4;kDZyFJuNf$v}Deys90m)m6Vi}rqLt^d?P9>nMp|mK7@VcT6Ch?$mH4uS}eRN z>TUA0l|}c}iK-O!4q?&Cg}k4V>l0a-;abPND`*iO`H9)FU_*L*-#}RZCY{xmIpJGu z)|Pc^W6wGt6!O6jXf-o7FE$;+mBb9X7Nr5=GRXx*h&!h#6}VJ#Z-e4uk(MleWU0y} zJD4@y?C?EK<%1z=GmXZfjF@1-1R{rr_mT=+oZy(78}E~OJQ`58vq0mJku_CavUPb~3ox3~oXkAR{W6u{)PXH_Oz(tg->d z3+%yOAMbQUrz-+OAyr$M;;`4fv8K+a}o8}*kGZ~_1j9l2u6v5oxqagkyn%k zZU_?Q-Yu#}gnzZ%E<}t*0COSHH*)wA?VzIMPvS-g<19{OIRm_J#uW>D&-mLk!8xeQ z6skN~I6sy*vnE41Evm9~g{4q}>PGn2(|Qf_vs6SH=s?B@xrbiNm;~jJfG)BEQ(qd=2K`}oK15^w7~mcn zz+`#~Lo&A)(I7L9wF!rZW@5H47hqLB;aVM4MdVw0Wd?}HBVLWrgWOr9EJdmXz2(|< z(vG_W2r`|Bs-LVt{kIf2mnE}A4Bn+CCdV_#MEr%Z%*tnjLvvZ}npLR2N0dCKGC|^* zDHG(W=5jFi5xBfTfOIht7c-Ra(c8(z?E%H|7RB$0g*l2Zq3UGbj@N15KSt;`(D^Rv ztRUj*t4crWw5r`Iig31a4g1kT^vVixTpj{0oq}?&QDnKt8;LB#QN@^9$t>EMpU_cd zq&@@#n$Z9U5z)7l^Jsu?Ygn<4SP-G6p8fpC~lj!_N`2+K7eDD2Sk-gVy*a8~% zd8`-t0Lo`T`Y?d?kk7qM3Y6e$q>DL*Wv2>pM~Hf$YO2J&0Y!Fx`G8zQ#RHJwHY}eq z+>LbbpTR_ys^7P{BmD8l^W8s6tu&@6YtYww70*YVE%>JF7Ang4fUGF>sHXk5cP3$ zlbi{xe%*>jt%k7QgjvoBT2?|q&JsQK>aaC`F{AN5qT(ac$@*KK7sKzVC-K6q0TGBM zJZ}^Fr)mH@(OPK|4vtre_~%Qt7ny6~KkpEsnd;E!$oQmD)$|U}B;xWVwP4yajI`GL S3R*mJ5S%#9{+~Yp+xIU342*^V diff --git a/GlitchyEditor/resources/Textures/EditorIcons.dds.ass b/GlitchyEditor/resources/Textures/EditorIcons.dds.ass index 2e9b553..af9876b 100644 --- a/GlitchyEditor/resources/Textures/EditorIcons.dds.ass +++ b/GlitchyEditor/resources/Textures/EditorIcons.dds.ass @@ -2,10 +2,39 @@ AssetLoader = null, Config = null, Importer = "TextureImporter", - ImporterConfig = null, + ImporterConfig = (GlitchyEditor.Assets.Importers.TextureImporterConfig){ + _isSrgb = false + }, Processor = null, - ProcessorConfig = null, + ProcessorConfig = (GlitchyEditor.Assets.Processors.TextureProcessorConfig){ + _generateMipMaps = .No, + _samplerStateDescription = { + MinFilter = .Linear, + MagFilter = .Linear, + MipFilter = .Linear, + FilterMode = .Default, + ComparisonFunction = .Never, + AddressModeU = .Clamp, + AddressModeV = .Clamp, + AddressModeW = .Clamp, + MipLODBias = 0, + MipMinLOD = -Infinity, + MipMaxLOD = Infinity, + MaxAnisotropy = 1, + BorderColor = { + R = 1, + G = 1, + B = 1, + A = 1 + } + }, + _textureType = .Texture, + _sprites = [ + ] + }, Exporter = null, - ExporterConfig = null, + ExporterConfig = { + _compression = .None + }, AssetHandle = 17408033053158961990 } \ No newline at end of file diff --git a/GlitchyEditor/resources/Textures/EditorIcons.psd b/GlitchyEditor/resources/Textures/EditorIcons.psd index ce42cce50ba8dcf05c73afdd1e3fd5ab135f5615..5ff9b69e42d967adec0ae15cdac042d667781724 100644 GIT binary patch delta 6399 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 V=M^g@BxoW2n)+x&ki8bce*w+zL!STu delta 2923 zcmaLYd3a7&9tZH>7a6IgguF(`A|{>2I-;bK$nug{vc8t2F@_q;q-~OxscnojVru4z zEjZ;zX`gECGNVdLOQ$l=qgf=Vr5K8qh9ap%BqUy$-#zEG^pELtp7);LJ@?+T-Ou~G zrTK29d2TB_o3%K!vePE_1NlS;Hj&4k0IYARo{ee0C&{B>Pc{+Ale&*opqdFP=8Xckiaz}}b`#Bwu)RoSESchBWrR#wY~}&>5TNhLw4XZ zS=kP~zAcnbyY%|z(o~v84hp006ev6EDaD(5O6gA#*)rr*SILk?TT_`N=NbBF)fqHh z?wKo-TOj3ancxcft(J{jOp7R+vShmRXolQ3P4_cXURRpLljXVDlqu0PX?cZ`$*u>L z3FOEcUB%rM6sieDUZ_xWihTTT&=qnvJ-$UYzrM*SKhsjlb34ID9WUyDV&2gS{;EZB z2b3_vVN<<}qfx4|inDM;IerRP(Ivf6#!;OSu0Aj6hjLY4l8K{gM(HdZ<7JW3Px~XO zIL^*Uc&X(_CgE$&?}8W=Rp!8nRd+(vH)TmUsn*{KXU7<{P;ZvU;S_JQ%TSlg7vVa? z2LshdM^jLxvhIecuw&y;t-R|()QMwbQLB0#XVj^porJnXlapqigugNN#3 zQ>tn>yG|N&M#8q*iJ_|Y+!i@?0txE&f8UYNwYbX|2p`!Q~2>W4XAMBK*{;NjS8+!jtk@yXu55>4vac;v!L>Bp zRsPrClfFY=#0b^;$MLA=LJtY|{5TQ!_`N|0QAsx(xX-;pWPi`yaHu{v-$Ek?g(66O zcXJRPDBoMJ$wn=^6({kzTZ8->e_4&{SNR*<;;t$3|GdW4Vd#iLSLLGjaiu?Q@Nygc zp^bG@o>d;kSb&O^@UgJ~wYsXic4k*@KSgM3>5rVb-8Rm`RklQywHSr!;3wV!Rj!;q zHW#Sc)pcNZrg$7tWPkI)a8dnr|3x+#iY6my= zYbTA`TA?;J)Li?pJtiA%4j$)$DTdppE^1uR0jVx)JiH@P1zRwm>xdC9ar}}e47nga z?1>QVt{3;UAwc8n%CFntCpWwBd~Cz>zi5pINZt}`%fcRE3o_6KK81`+L(xg?s&Y5d zc+syBs;SwzDg+(auQNOix-^~G!nwLLdKz(@>4m;ek>g71{E0b!wF`m`I%OrgNM6zv zcCBtGdwV1DDSEuw8)J;U9G&LuT;_w38lRoV`yy5gwDV10q-cgCInNL2+F~pxbi5JGdiVR=B49LMq>wUXe`)7s^9@%6~$Rf)x;kdxduiB~@lD}|K3HeDtaw7wozs7Z#V(g4`bjTV z4vb{)ApF(1+-^w5a9)4RHZF&;;|2WL;Ed;v12D}9-Tnk;Yo0w2FB_MM92hJBtpuoX zw&yFs7;SLwG%g(+ItZ>jm}^`v(j;$$V2B|(MJK=@i^vNujeWu%Ys?JO8eO_}h5cWR z>@^r&QNaTTqla*O*{UizcQ7oDUk;W}s?K?HP|8{1GHdIjYU74*BpP@&o*W@@ITu98 zRV&x|aA>5o=#Oi<0heZ+d0AIl@zN+n;{>0Mk_|b@A$ECAe^Ap!n8y%ltm0Wiq_LX6 zwW?Z<87h?OxWKCJ@pI95L$+jHH0Gdzy<((l%-F&2xYF+Uc$JSrZZJSq+|Oms0$hI+uG<1t@4KNF9IGSuV*{6z-7 zoPg;vjpRfPuU z=ue)Fw~odn>9NfiWJv#6W8}UDuCS^`P8utHJm4?JB25VQNXA$>TbPU}xmJ{{-&wU) L{p`EetdRZ(=0j_( diff --git a/GlitchyEditor/src/EditWindows/ComponentEditWindow.bf b/GlitchyEditor/src/EditWindows/ComponentEditWindow.bf index 2dcd423..00b2972 100644 --- a/GlitchyEditor/src/EditWindows/ComponentEditWindow.bf +++ b/GlitchyEditor/src/EditWindows/ComponentEditWindow.bf @@ -116,9 +116,17 @@ namespace GlitchyEditor.EditWindows bool nodeOpen = ImGui.CollapsingHeader(header.CStr(), .DefaultOpen | .AllowOverlap | .Framed | .SpanFullWidth); + ImGui.PushID(header.CStr()); + defer { ImGui.PopID(); } + + float positionX = ImGui.GetWindowContentRegionMax().x; + + float2 buttonSize = (.)ImGui.CalcTextSize("..."); + if (showComponentContextMenu != null) { - ImGui.SameLine(ImGui.GetWindowContentRegionMax().x - ImGui.CalcTextSize("...").x - 2 * ImGui.GetStyle().FramePadding.x); + positionX -= buttonSize.X + 2 * ImGui.GetStyle().FramePadding.x; + ImGui.SameLine(positionX); if (ImGui.SmallButton("...")) { @@ -133,6 +141,79 @@ namespace GlitchyEditor.EditWindows } } + if (ImGui.BeginPopupModal("Create new entity?###CopyNewEntityToEditor")) + { + //ImGui.Text("This entity only exists in play mode. Do you want to copy only this component, or all components?"); + ImGui.Text("This entity only exists in play mode. Saving will create an entity that only contains this component."); + + //if (ImGui.Button("Copy only this component")) + if (ImGui.Button("Ok")) + { + Entity editorEntity = Editor.Instance.EditorScene.CreateEntity(entity.Name, entity.UUID); + + Scene.CopyComponent(entity, editorEntity); + + if (typeof(TComponent) == typeof(ScriptComponent)) + { + // TODO: Copy script data into editor + // TODO: Somehow get the scriptserializer used to serialize the editor scene + //scriptSerializer.SerializeScriptInstance(((ScriptComponent*)component).Instance); + } + + ImGui.CloseCurrentPopup(); + } + + ImGui.SameLine(); + + // TODO! + /*if (ImGui.Button("Copy all components")) + { + ImGui.CloseCurrentPopup(); + } + + ImGui.SameLine(); + */ + + if (ImGui.Button("Cancel")) + { + ImGui.CloseCurrentPopup(); + } + + ImGui.EndPopup(); + } + + if (ScriptEngine.ApplicationInfo.IsInPlayMode) + { + positionX -= buttonSize.X + 1 * ImGui.GetStyle().FramePadding.x; + ImGui.SameLine(positionX); + + float2 imageButtonSize = (.)buttonSize; + imageButtonSize.X -= ImGui.GetStyle().FramePadding.x * 2; + imageButtonSize.Y -= ImGui.GetStyle().FramePadding.y * 2; + + //if (ImGui.ImageButton("save", EditorIcons.Instance.Save, (.)imageButtonSize)) + if (ImGui.SmallButton("Save")) + { + if (Entity editorEntity = Editor.Instance.EditorScene.GetEntityByID(entity.UUID)) + { + Scene.CopyComponent(entity, editorEntity); + + if (typeof(TComponent) == typeof(ScriptComponent)) + { + // TODO: Copy script data into editor + // TODO: Somehow get the scriptserializer used to serialize the editor scene + //scriptSerializer.SerializeScriptInstance(((ScriptComponent*)component).Instance); + } + } + else + { + ImGui.OpenPopup("###CopyNewEntityToEditor"); + } + } + + ImGui.AttachTooltip("Save component to edit mode."); + } + if (nodeOpen && ImGui.BeginPropertyTable("properties", TableId)) { if (entity.TryGetComponent(let actualComponent)) diff --git a/GlitchyEditor/src/Editor.bf b/GlitchyEditor/src/Editor.bf index 8dab152..77b250a 100644 --- a/GlitchyEditor/src/Editor.bf +++ b/GlitchyEditor/src/Editor.bf @@ -11,7 +11,8 @@ namespace GlitchyEditor { class Editor { - private Scene _scene; + private Scene _activeScene; + private Scene _editorScene; private EditorContentManager _contentManager; private AssetThumbnailManager _thumbnailManager; @@ -31,17 +32,23 @@ namespace GlitchyEditor public Scene CurrentScene { - get => _scene; + get => _activeScene; set { - if (_scene == value) + if (_activeScene == value) return; - _scene = value; - _entityHierarchyWindow.SetContext(_scene); + _activeScene = value; + _entityHierarchyWindow.SetContext(_activeScene); } } + public Scene EditorScene + { + get => _editorScene; + set => _editorScene = value; + } + public EditorContentManager ContentManager => _contentManager; public AssetThumbnailManager ThumbnailManager => _thumbnailManager; @@ -73,12 +80,13 @@ namespace GlitchyEditor public static Editor Instance => s_Instance; /// Creates a new editor for the given world - public this(Scene scene, EditorContentManager contentManager, AssetThumbnailManager thumbnailManager) + public this(Scene activeScene, Scene editorScene, EditorContentManager contentManager, AssetThumbnailManager thumbnailManager) { Log.EngineLogger.AssertDebug(s_Instance == null, "Cannot create a second instance of a singleton."); s_Instance = this; - _scene = scene; + _activeScene = activeScene; + _editorScene = editorScene; _contentManager = contentManager; _thumbnailManager = thumbnailManager; @@ -94,7 +102,7 @@ namespace GlitchyEditor { _sceneViewportWindow = new EditorViewportWindow(this); _gameViewportWindow = new GameViewportWindow(this); - _entityHierarchyWindow = new EntityHierarchyWindow(this, _scene); + _entityHierarchyWindow = new EntityHierarchyWindow(this, _activeScene); _componentEditWindow = new ComponentEditWindow(); _contentBrowserWindow = new ContentBrowserWindow(this, (.)Application.Instance.ContentManager, _thumbnailManager); _inspectorWindow = new InspectorWindow(this); diff --git a/GlitchyEditor/src/EditorIcons.bf b/GlitchyEditor/src/EditorIcons.bf index 4a4f6a1..b073eb9 100644 --- a/GlitchyEditor/src/EditorIcons.bf +++ b/GlitchyEditor/src/EditorIcons.bf @@ -31,6 +31,7 @@ namespace GlitchyEditor public SubTexture2D File_Shader ~ _.ReleaseRef(); public SubTexture2D Entity_Visible ~ _.ReleaseRef(); public SubTexture2D Entity_Hidden ~ _.ReleaseRef(); + public SubTexture2D Save ~ _.ReleaseRef(); public static EditorIcons Instance => _editorIcons; @@ -67,6 +68,7 @@ namespace GlitchyEditor File_Shader = GetNextGridTexture(ref pen, iconSize); Entity_Visible = GetNextGridTexture(ref pen, iconSize); Entity_Hidden = GetNextGridTexture(ref pen, iconSize); + Save = GetNextGridTexture(ref pen, iconSize); } public ~this() diff --git a/GlitchyEditor/src/EditorLayer.bf b/GlitchyEditor/src/EditorLayer.bf index b16bb2d..f3a0ee2 100644 --- a/GlitchyEditor/src/EditorLayer.bf +++ b/GlitchyEditor/src/EditorLayer.bf @@ -362,7 +362,7 @@ namespace GlitchyEditor private void InitEditor() { - _editor = new Editor(_editorScene, _contentManager, _thumbnailManager); + _editor = new Editor(_editorScene, _editorScene, _contentManager, _thumbnailManager); _editor.SceneViewportWindow.ViewportSizeChanged.Add(new (s, e) => EditorViewportSizeChanged(s, e)); _editor.GameViewportWindow.ViewportSizeChanged.Add(new (s, e) => GameViewportSizeChanged(s, e)); _editor.CurrentCamera = &_camera; @@ -983,6 +983,7 @@ namespace GlitchyEditor SetReference!(_editorScene, scene); _editor.CurrentScene = _editorScene; + _editor.EditorScene = _editorScene; SetReference!(_activeScene, _editorScene); if (_editorScene != null) diff --git a/GlitchyEngine/src/World/Scene.bf b/GlitchyEngine/src/World/Scene.bf index bd2a0ab..c9e6550 100644 --- a/GlitchyEngine/src/World/Scene.bf +++ b/GlitchyEngine/src/World/Scene.bf @@ -216,7 +216,7 @@ namespace GlitchyEngine.World } /// Copy POD components that don't need any extra care. - private static void CopyComponent(Entity source, Entity target) where TComponent : struct, new + public static void CopyComponent(Entity source, Entity target) where TComponent : struct, new { if (source.TryGetComponent(let sourceComponent)) { @@ -232,7 +232,7 @@ namespace GlitchyEngine.World } /// Copy components that have custom copy methods. - private static void CopyComponent(Entity source, Entity target) where TComponent : struct, new, ICopyComponent + public static void CopyComponent(Entity source, Entity target) where TComponent : struct, new, ICopyComponent { if (source.TryGetComponent(let sourceComponent)) {