From c1bb8f9fbae1b98c9800f3a08fb2c7d1d1cc4fcd Mon Sep 17 00:00:00 2001 From: Atdunbg Date: Sun, 8 Mar 2026 19:27:00 +0800 Subject: [PATCH] readd Sprite Renderer render and panel edit; in renderer scene, add icon for camera and light; improve a user-friendly EditorCamera, is more like UE Editor Camera; fix woring build m_ProjectionMatrix for SceneCamera::Orthographic --- Editor/Editor/EditorLayer.cpp | 13 +- Editor/assets/editor/Camera.png | Bin 0 -> 2240 bytes Editor/assets/editor/light.png | Bin 0 -> 65896 bytes Editor/assets/shaders/Renderer2D.glsl | 13 +- Prism/src/Prism/Core/ImGui/ImGui.h | 5 + Prism/src/Prism/Core/KeyCodes.h | 7 +- Prism/src/Prism/Editor/EditorCamera.cpp | 95 ++++++++- Prism/src/Prism/Editor/EditorCamera.h | 11 + Prism/src/Prism/Editor/SceneHierachyPanel.cpp | 95 +++++---- Prism/src/Prism/Renderer/Renderer2D.cpp | 73 ++++--- Prism/src/Prism/Renderer/Renderer2D.h | 11 + Prism/src/Prism/Scene/Components.h | 12 +- Prism/src/Prism/Scene/Scene.cpp | 198 +++++++++++------- Prism/src/Prism/Scene/Scene.h | 4 + Prism/src/Prism/Scene/SceneCamera.cpp | 2 +- 15 files changed, 380 insertions(+), 159 deletions(-) create mode 100644 Editor/assets/editor/Camera.png create mode 100644 Editor/assets/editor/light.png diff --git a/Editor/Editor/EditorLayer.cpp b/Editor/Editor/EditorLayer.cpp index 61ef8b1..8bc513e 100644 --- a/Editor/Editor/EditorLayer.cpp +++ b/Editor/Editor/EditorLayer.cpp @@ -102,6 +102,7 @@ namespace Prism } } + // Draw Colliders if (!m_SelectionContext.empty()) { auto& selection = m_SelectionContext[0]; @@ -492,6 +493,7 @@ namespace Prism m_ObjectsPanel->OnImGuiRender(); m_SceneHierarchyPanel->OnImGuiRender(); + m_EditorCamera.OnImGuiRender(); // Editor Panel ------------------------------------------------------------------------------ ImGui::Begin("Environment"); @@ -880,14 +882,17 @@ namespace Prism m_RuntimeScene->OnEvent(e); } - EventDispatcher dispatcher(e); - dispatcher.Dispatch(PM_BIND_EVENT_FN(EditorLayer::OnKeyPressedEvent)); - dispatcher.Dispatch(PM_BIND_EVENT_FN(EditorLayer::OnMouseButtonPressedEvent)); + if (Input::GetCursorMode() == CursorMode::Normal) + { + EventDispatcher dispatcher(e); + dispatcher.Dispatch(PM_BIND_EVENT_FN(EditorLayer::OnKeyPressedEvent)); + dispatcher.Dispatch(PM_BIND_EVENT_FN(EditorLayer::OnMouseButtonPressedEvent)); + } } bool EditorLayer::OnKeyPressedEvent(KeyPressedEvent& e) { - if (m_ViewportPanelHovered) + if (m_ViewportPanelFocused) { switch (e.GetKeyCode()) { diff --git a/Editor/assets/editor/Camera.png b/Editor/assets/editor/Camera.png new file mode 100644 index 0000000000000000000000000000000000000000..11c81636a4cc8270ae5718c7659d9406c11825de GIT binary patch literal 2240 zcmai0c|4T+9)4%$jjB{^`crNkA*AqbMP zVKKSj+xq826anu$E_d@Fhj)_$sX;>}>F@W%`qWr1$wru_S(jhZxf8@nTK{E)zpd#F4pk5Vj|-$&JJy zrQ(QtlpP!e>ctCkFh*hs5Y*9cJD%8+U{)-m%tuhHsDloZN~BL&N$o?*5cCb#FB(sz z?6vT7xC~)V=j{6D#SqrIWDaVHCvwT!?k(zkL|S1%2EPiEgn1%q%5w||-Nv8$Ukg^F zElb-35C%)8qz{uBg2>wnI}jW!Ca-wxS-GsVGCoe8Hh zHZuf5QAXF4wfq)TrG%L>N<>)3OOjjTAdJaMQmg|yLMIhW@HjY0Kr#HJ7B;j(3|F+> ztq5jL{z>!1?i2{Sb|F30ipob+%bs210HrqyONz;2>pNN#D}6X54X|_m&A?7k9Nc!< zpi=8UVYidusp6m%{{J&as_I@uMj`#V0hr`76P+`P;)&rTq%MtJ@GH{)VflJ>w%eD` zprPgIxJCfi+J+MDOaC*bGKiKKmn}bbr#`>$=rOiecUc=De*eo|G1WBJSWO+?wX*># ziH&_YM6c=x5p&;PXM_7FmOTSa^>&+4$$Rvi;ATo9pBi;v+V~D3D<<^Tt4(?h>8ggp z6RJT&SHpP$yNfCt%O!qXoTzw)z(=|7`}dJz#5d9DJ=u4+AL_B?I+N<^Z6zWz4h9SJ z7|!TOS028W!s5yD5jSaa&9HsL-K`O>WgZQ^GgEIZSACZ%D?|N^vSd-Cmd*=7uzkF- zUa;BdV(u}K;g?O9O1dW=erjiB`aQX=-1>HA(i2V2b)dHYoHEFyz_%29TOPYfhKSzk zlz-S|n6GzO(k!j;$(9VQ#YN2^_!f3@hQm&l?xUX1)#jbCcL`^8mV2wRoa?<$hH@wE zYD>DeU!R6Pnm0}xBCOd&@8oay+KyLqmz(R>(13Tr?h#2hbY|UZ#~vwRGgeo^6Us#k z{fmg>rb_wMrRCx%xB0oxDup3<^xFVk76;qN8fT2!LFfv_`->AyqB@VfR{wC14$o(c z$(pM0k<_OJGO;k}HxHVVFcHE`#N)Z^WCkfV$H7qwe?CTqrEC(}jzVa-utQ4%#Oiy{ z^Acjp(zPRMfv|4UsE6ZnAgqJxV&MtAtHpS$M(hAqp*1SvCE(o>6%J$_w1JF+kIRUZ zeg-D}s$ZyL4HP)aXO5>q*yr|h7q^n-50R_|JJhs++pj8R86$i|3Nc_F0jV=K(>w;^ ztH|(6d;p?{m_@c(KF z`Or3}cgbLOiIStHOGoxWsO`=B`xWuTbXp+o@ONR?EG%;N0zyb=?@a~4eJ45P<%uWi zhdof|d`wtgZqIEg4Rj}t>xIV}ZuqOkRILmiense68>>E|on5|+wB9vY2)#{sF=QMx zn}RW4xHfO=b3b_ITg}4Px3y%U?$cv_xr-apGMe7wtm$(}* z*Krg6Tk57Kvi@N~ax73%DImPc)vk-MiZbsVTpjeI_h)^im&*M#XtL*4a6S~RY zpDbmYDYw$>gEO-jA!tNk$FsXj6 zkKRye*G*Kx?k95CWS2}&UJ*h3xJSj~;1B&bzw~p>wKw~S77b6C8VZ#j)Q9BKYo{@d z`K#2mkopxiRm$3o!|;#Zs48Ece~n-5W|HPFQ~Q?8YQFA5^X(tjI73wd3k{5@NrL_A zmfp|DeRIqFumP82muwcAhBnyL^Jv|XGX~x4M>^TYg5D*m=LkG*@*%x2?{hSrE&07({;!A z|8Aihu%&u2h?!%C@6j7z`+#mw+f88eUZ0%)9pH$UNsiFh1Xjz_T0W`9N8INP9-IQ4 z=E~C_Y$5dFxPRCza2{`8Z+{kqMKq6{3bXP6HT5BRKt&Ivb}RkB_u-Fw0oiM_|rdKsKq(JFi zxR}v)jSZolG}~AUGH5@C`W*Xz=c@7q2atnj_Tr)Ih+Tue`jJG z7^vVEjcRio9ME-*OaPU~@Nx{~ffi3P9Zf~w#DeR`w{IsWqnY4G}HkKUb-F=?eAH_A2?*IS* literal 0 HcmV?d00001 diff --git a/Editor/assets/editor/light.png b/Editor/assets/editor/light.png new file mode 100644 index 0000000000000000000000000000000000000000..6f235b02d3096a167eb5fed51f55568b5e18d826 GIT binary patch literal 65896 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