From 91af2392ed44a13a795a500c6fbfe9a22958015b Mon Sep 17 00:00:00 2001 From: Atdunbg <979541498@qq.com> Date: Wed, 11 Jun 2025 00:22:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AE=80=E5=8D=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=B5=84=E4=BA=A7=E8=A7=86=E5=9B=BE,=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=B5=84=E6=BA=90=E6=8B=96=E6=8B=BD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 + Hazel/src/Hazel/Renderer/Renderer2D.cpp | 7 +- Hazel/src/Hazel/Scene/Components.h | 6 +- .../Icons/ContentBrowser/DirectoryIcon.png | Bin 0 -> 5176 bytes .../Icons/ContentBrowser/FileIcon.png | Bin 0 -> 14466 bytes Sandbox/Resources/Icons/PauseButton.png | Bin 0 -> 119 bytes Sandbox/Resources/Icons/PlayButton.png | Bin 0 -> 357 bytes Sandbox/Resources/Icons/SimulateButton.png | Bin 0 -> 667 bytes Sandbox/Resources/Icons/StepButton.png | Bin 0 -> 438 bytes Sandbox/Resources/Icons/StopButton.png | Bin 0 -> 115 bytes Sandbox/src/Editor/EditorLayer.cpp | 34 ++++-- Sandbox/src/Editor/EditorLayer.h | 3 + .../src/Editor/Panels/ContentBroswerPanel.cpp | 101 ++++++++++++++++++ .../src/Editor/Panels/ContentBroswerPanel.h | 32 ++++++ .../src/Editor/Panels/SceneHierachyPanel.cpp | 19 ++++ 15 files changed, 194 insertions(+), 10 deletions(-) create mode 100644 Sandbox/Resources/Icons/ContentBrowser/DirectoryIcon.png create mode 100644 Sandbox/Resources/Icons/ContentBrowser/FileIcon.png create mode 100644 Sandbox/Resources/Icons/PauseButton.png create mode 100644 Sandbox/Resources/Icons/PlayButton.png create mode 100644 Sandbox/Resources/Icons/SimulateButton.png create mode 100644 Sandbox/Resources/Icons/StepButton.png create mode 100644 Sandbox/Resources/Icons/StopButton.png create mode 100644 Sandbox/src/Editor/Panels/ContentBroswerPanel.cpp create mode 100644 Sandbox/src/Editor/Panels/ContentBroswerPanel.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 0abdbb8..aedfe26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) file(GLOB ASSETS Sandbox/assets/*) file(COPY ${ASSETS} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/assets) +file(GLOB RESOURCES Sandbox/Resources/*) +file(COPY ${RESOURCES} DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Resources) add_subdirectory(Hazel) add_subdirectory(Sandbox) \ No newline at end of file diff --git a/Hazel/src/Hazel/Renderer/Renderer2D.cpp b/Hazel/src/Hazel/Renderer/Renderer2D.cpp index 6c56a99..9be1dae 100644 --- a/Hazel/src/Hazel/Renderer/Renderer2D.cpp +++ b/Hazel/src/Hazel/Renderer/Renderer2D.cpp @@ -328,7 +328,7 @@ namespace Hazel FlushAndReset(); } - const glm::vec2 texCoords[] = {{0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f}}; + const glm::vec2 texCoords[] = {{0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f}}; constexpr float textureIndex = 0.0f; constexpr float tilingFactor = 1.0f; @@ -534,6 +534,9 @@ namespace Hazel void Renderer2D::DrawSprite(const glm::mat4& transform, SpriteRendererComponent& src, int entityID) { - DrawQuad(transform, src.Color, entityID); + if (src.Texture) + DrawQuad(transform, src.Texture, src.TilingFactor, src.Color, entityID); + else + DrawQuad(transform, src.Color, entityID); } } diff --git a/Hazel/src/Hazel/Scene/Components.h b/Hazel/src/Hazel/Scene/Components.h index b165abd..fc347b1 100644 --- a/Hazel/src/Hazel/Scene/Components.h +++ b/Hazel/src/Hazel/Scene/Components.h @@ -11,6 +11,8 @@ #define GLM_ENABLE_EXPERIMENTAL #include +#include + #include "glm/glm.hpp" #include "glm/gtx/quaternion.hpp" @@ -45,8 +47,10 @@ namespace Hazel struct SpriteRendererComponent { glm::vec4 Color{1.0f, 1.0f, 1.0f, 1.0f}; + Ref Texture; + float TilingFactor = 1.0f; - SpriteRendererComponent() = default; + SpriteRendererComponent() = default; SpriteRendererComponent(const SpriteRendererComponent&) = default; SpriteRendererComponent(const glm::vec4& color) : Color(color) diff --git a/Sandbox/Resources/Icons/ContentBrowser/DirectoryIcon.png b/Sandbox/Resources/Icons/ContentBrowser/DirectoryIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..62cff34a8daa17005d7246cbec2242e68b826be5 GIT binary patch literal 5176 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 literal 0 HcmV?d00001 diff --git a/Sandbox/Resources/Icons/PauseButton.png b/Sandbox/Resources/Icons/PauseButton.png new file mode 100644 index 0000000000000000000000000000000000000000..1345ae0fe4355f3491a4ad9bfc0773c2ff129314 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzJ5LwKkcif|7dHwr7;rcRp7>`y znYAgG%YJRuzTk;pKbAD8Xf8GT{$_jZ_c{0Fff^7XQqEI6%$C(4j01hSr9Dsx2012P~P{44o zIRFJmnsmt?pk2F`KERjsX_wu9*ZbRTAR?q>m^Ay(3$O{OfGnke32+9Ez%-fy<$@2Z z%|k@ChFI@qvf;Z2HIM_BPz`V$!uGa|QwV5S=pkMAR?u+7I~ z7dwsuR^55>+l1JHC$Q0b?UY>6w*yyQb>;g4Uja{@_~@Is!DkEh+Sk34D_lAd{9{DX zwF5g{b|(Ar8tFSeJp)PqpP zi=Y)RNf{92%HB-fSXQ)xE|RDe3QljClg`K zXrus%gTSClNi42M_5%;3phQ@cenx=~#k~wXjq8z1O7Jz{m6rgg8W3*e6(h6wID4xr zFE->brBY<>A>(BI99QGpzzu7BwKd?1BmT~=>!C5u26|8jS^t2~a=655HG9_NfE6o7 zhS{|#lBESViVoZZg1{%44krh8Ex^R*!h2q>O`_7`hDG3X-6?RwnYMGpL*qiF#SKGl z3w1kS#ZP0&n9e=&FB=)_v@F&WG@=N-aM<7B9|$JsJfQjxv z4+Ftrb0}S&R8Ew^s}b!A3&nY6auZdBHdMf-DC*O>@$i@8ymeZrPO3Fkz_O8^eUiP? zofqr&C29SXTU^}&ei%#JGr5VvcO%v7LXkHh(r^a~VuLs9&-svlEepBbgFe_$0m;(W zzeV7eFxv^ zEpV%WIn_MUmDH;Pk5=N;3?W2Jn$V123oVoZ_yY|*7UGKq#8LnN002ovPDHLkV1f+&aHl%{|lcGuY3#YrbI-KC-GhFxDVNLLcR`WaM zt_?10jrS~$uMAY-?)uOrth&u4vg2FGhNUmPW^8@BsKBXNOeFD#>xaQjXUqGWGlClVV;&{M70n7%cp&&ZRPDH$!BNe)ReBw% zjuUb=owYjIx%j|^Cf~5OP!Wm85hvBMyAG^fqF)nbR@k*m%;vGzB}I2fS=M!`xs_X< z{MplEb#Q%^N=`5#oInZ-jcWC6pK!PC{xWt~$((~7NH7g8o)W%9WEPI+K-K^N2rRNO literal 0 HcmV?d00001 diff --git a/Sandbox/Resources/Icons/StopButton.png b/Sandbox/Resources/Icons/StopButton.png new file mode 100644 index 0000000000000000000000000000000000000000..ce99b3caeda820dfa808bfd2334f50ba25ee5d57 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzD^C~4kcif|7d8qWFyLV}H2VEs zr+lAJg6R*|j^r(||9=}B>)YhMf4BWFP%#`dlzA61yxqiNl5!{QJxJ8k)z4*}Q$iB} D{k9^Y literal 0 HcmV?d00001 diff --git a/Sandbox/src/Editor/EditorLayer.cpp b/Sandbox/src/Editor/EditorLayer.cpp index 861027c..4336783 100644 --- a/Sandbox/src/Editor/EditorLayer.cpp +++ b/Sandbox/src/Editor/EditorLayer.cpp @@ -16,6 +16,9 @@ namespace Hazel { + + extern const std::filesystem::path g_AssetPath; + EditorLayer::EditorLayer() : Layer("HazelEditor"), m_CameraController((float)Application::Get().GetWindow().GetWidth() / (float)Application::Get().GetWindow().GetHeight()) { @@ -191,6 +194,7 @@ namespace Hazel // Scene Hierachy Panel m_SceneHierachyPanel.OnImGuiRender(); + m_ContentBroswerPanel.OnImGuiRender(); // Render Status { @@ -236,6 +240,15 @@ namespace Hazel ImGui::Image(m_FrameBuffer->GetColorAttachmentID(), {m_ViewPortSize.x, m_ViewPortSize.y}, {0, 1}, {1, 0}); + if (ImGui::BeginDragDropTarget()) + { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("CONTENT_BROSWER_ITEM")) + { + const wchar_t* path = (const wchar_t*)payload->Data; + OpenScene(std::filesystem::path(g_AssetPath) / path); + } + ImGui::EndDragDropTarget(); + } auto windowsSize = ImGui::GetWindowSize(); ImVec2 minBound = ImGui::GetWindowPos(); @@ -326,14 +339,17 @@ namespace Hazel { std::string filepath = FileDiaglogs::OpenFile("Scene(*.scene, *.yaml)\0*.scene;*.yaml\0All files\0*.*\0\0"); if (!filepath.empty()) - { - m_ActiveScene = CreateRef(); - m_ActiveScene->OnViewportResize((uint32_t)m_ViewPortSize.x, (uint32_t)m_ViewPortSize.y); - m_SceneHierachyPanel.SetContext(m_ActiveScene); + OpenScene(filepath); + } - SceneSerializer serializer(m_ActiveScene); - serializer.Deserialize(filepath); - } + void EditorLayer::OpenScene(const std::filesystem::path& scenePath) + { + m_ActiveScene = CreateRef(); + m_ActiveScene->OnViewportResize((uint32_t)m_ViewPortSize.x, (uint32_t)m_ViewPortSize.y); + m_SceneHierachyPanel.SetContext(m_ActiveScene); + + SceneSerializer serializer(m_ActiveScene); + serializer.Deserialize(scenePath.string()); } void EditorLayer::NewScene() @@ -359,6 +375,7 @@ namespace Hazel if (e.button.clicks && m_ViewportHovered && !ImGuizmo::IsOver() && Input::IsMouseButtonPressed(SDL_BUTTON_LEFT) && !Input::IsKeyPressed(SDL_SCANCODE_LALT)) m_SceneHierachyPanel.SetSelectedEntity(m_HoveredEntity); +#define SHORTCUT_EXIT (SDL_KMOD_CTRL | SDLK_W) #define SHORTCUT_NEW (SDL_KMOD_CTRL | SDLK_N) #define SHORTCUT_OPEN (SDL_KMOD_CTRL | SDLK_O) #define SHORTCUT_SAVE_ALL (SDL_KMOD_CTRL | SDL_KMOD_SHIFT | SDLK_S) @@ -369,6 +386,9 @@ namespace Hazel switch (ctrl | shift | e.key.key) { + case SHORTCUT_EXIT: + Application::Get().Close(); + break; case SHORTCUT_NEW: NewScene(); break; diff --git a/Sandbox/src/Editor/EditorLayer.h b/Sandbox/src/Editor/EditorLayer.h index 9c9fccf..eae573a 100644 --- a/Sandbox/src/Editor/EditorLayer.h +++ b/Sandbox/src/Editor/EditorLayer.h @@ -6,6 +6,7 @@ #define EDITORLAYER_H #include +#include "Panels/ContentBroswerPanel.h" #include "Panels/SceneHierachyPanel.h" namespace Hazel @@ -25,6 +26,7 @@ namespace Hazel private: void SaveScene() const; void OpenScene(); + void OpenScene(const std::filesystem::path& scenePath); void NewScene(); void ChangeOptMode(unsigned int mode); @@ -49,6 +51,7 @@ namespace Hazel Ref m_FrameBuffer; SceneHierachyPanel m_SceneHierachyPanel; + ContentBroswerPanel m_ContentBroswerPanel; int m_GizmoType = 0; }; diff --git a/Sandbox/src/Editor/Panels/ContentBroswerPanel.cpp b/Sandbox/src/Editor/Panels/ContentBroswerPanel.cpp new file mode 100644 index 0000000..10f2ada --- /dev/null +++ b/Sandbox/src/Editor/Panels/ContentBroswerPanel.cpp @@ -0,0 +1,101 @@ +// +// Created by sfd on 25-6-10. +// + +#include "ContentBroswerPanel.h" + +#include +#include <../../../../Hazel/vendor/imgui/imgui.h> +#include + +namespace Hazel +{ + + extern const std::filesystem::path g_AssetPath = "assets"; + + ContentBroswerPanel::ContentBroswerPanel() + : m_CurrentDirectory(g_AssetPath) + { + m_DirectoryIcon = Texture2D::Create("Resources/Icons/ContentBrowser/DirectoryIcon.png"); + m_FileIcon = Texture2D::Create("Resources/Icons/ContentBrowser/FileIcon.png"); + } + + + void ContentBroswerPanel::OnImGuiRender() + { + ImGui::Begin("ContentBroswerPanel"); + + ImGui::Text("%s", m_CurrentDirectory.string().c_str()); + ImGui::Separator(); + + if (m_CurrentDirectory != std::filesystem::path(g_AssetPath)) + { + if (ImGui::Button("..")) + { + m_CurrentDirectory = m_CurrentDirectory.parent_path(); + } + } + + static float folderSize = 90.0f; + static float padding = 16.0f; + float cellSize = folderSize + padding; + + float panelWidth = ImGui::GetContentRegionAvail().x; + int columnsCount = (int)panelWidth / cellSize; + if (columnsCount <= 1) + columnsCount = 1; + + ImGui::Columns(columnsCount, 0, false); + + for (auto& directory : std::filesystem::directory_iterator(m_CurrentDirectory)) + { + auto& path = directory.path(); + auto relativePath = std::filesystem::relative(directory.path(), g_AssetPath); + std::string filePathString = relativePath.filename().string(); + + + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); + Ref icon = directory.is_directory() ? m_DirectoryIcon : m_FileIcon; + ImGui::ImageButton(std::to_string(hash_value(path)).c_str(),icon->GetRendererID(), {folderSize, folderSize}, {0, 1}, {1, 0}); + ImGui::PopStyleColor(); + + if (ImGui::BeginDragDropSource()) + { + const wchar_t* itemPath = relativePath.c_str(); + ImGui::SetDragDropPayload("CONTENT_BROSWER_ITEM", itemPath, (wcslen(itemPath) + 1) * sizeof(wchar_t), ImGuiCond_Once); + ImGui::EndDragDropSource(); + } + + if (ImGui::IsItemHovered() && ImGui::IsMouseClicked(ImGuiMouseButton_Left)) + { + if (directory.is_directory()) + m_CurrentDirectory /= path.filename(); + } + ImGui::TextWrapped(filePathString.c_str()); + ImGui::NextColumn(); + + /* + if (directory.is_directory()) + { + if (ImGui::Button(filePathString.c_str())) + { + m_CurrentDirectory /= path.filename(); + } + }else + { + if (ImGui::Button(filePathString.c_str())) + { + } + } + */ + + } + + ImGui::Columns(1); + + ImGui::SliderFloat("folder size", &folderSize, 16, 512); + ImGui::SliderFloat("padding", &padding, 0, 32); + + ImGui::End(); + } +} diff --git a/Sandbox/src/Editor/Panels/ContentBroswerPanel.h b/Sandbox/src/Editor/Panels/ContentBroswerPanel.h new file mode 100644 index 0000000..3a5df1c --- /dev/null +++ b/Sandbox/src/Editor/Panels/ContentBroswerPanel.h @@ -0,0 +1,32 @@ +// +// Created by sfd on 25-6-10. +// + +#ifndef CONTENTBROSWERPANEL_H +#define CONTENTBROSWERPANEL_H +#include +#include +#include + +namespace Hazel +{ + class ContentBroswerPanel + { + public: + ContentBroswerPanel(); + virtual ~ContentBroswerPanel() = default; + + void OnImGuiRender(); + private: + + std::filesystem::path m_CurrentDirectory; + + Ref m_DirectoryIcon; + Ref m_FileIcon; + + }; +} + + + +#endif //CONTENTBROSWERPANEL_H diff --git a/Sandbox/src/Editor/Panels/SceneHierachyPanel.cpp b/Sandbox/src/Editor/Panels/SceneHierachyPanel.cpp index cea3a70..f5b7e86 100644 --- a/Sandbox/src/Editor/Panels/SceneHierachyPanel.cpp +++ b/Sandbox/src/Editor/Panels/SceneHierachyPanel.cpp @@ -3,6 +3,8 @@ // #include "SceneHierachyPanel.h" + +#include #include #include #include @@ -10,6 +12,8 @@ namespace Hazel { + extern const std::filesystem::path g_AssetPath; + SceneHierachyPanel::SceneHierachyPanel(const Ref& context) { SetContext(context); @@ -336,6 +340,21 @@ namespace Hazel DrawComponent("Sprite Renderer", entity, [](auto& component) { ImGui::ColorEdit4("Color", glm::value_ptr(component.Color)); + // Texture + ImGui::Button("Texture", ImVec2(100.f, 0.0f)); + + if (ImGui::BeginDragDropTarget()) + { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("CONTENT_BROSWER_ITEM")) + { + const wchar_t* path = (const wchar_t*)payload->Data; + std::filesystem::path texturePath = std::filesystem::path(g_AssetPath) / path; + component.Texture = Texture2D::Create(texturePath.string()); + } + ImGui::EndDragDropTarget(); + } + + ImGui::DragFloat("Tiling Color", &component.TilingFactor, 0.1f, 0.0f, 100.f); }); }