From 15df08ef67ffe87f0168cff91c90a957afdbba11 Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Mon, 20 Feb 2023 14:28:23 +0800 Subject: [PATCH] Implemented events for screen resize --- SHADE_Engine/src/Camera/SHCameraSystem.cpp | 18 ++++++++++++++++++ SHADE_Engine/src/Camera/SHCameraSystem.h | 5 +++++ SHADE_Engine/src/Events/SHEventDefines.h | 1 + .../src/Graphics/Events/SHGraphicsEvents.h | 9 +++++++++ .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 12 ++++++++++-- .../Particles/SHParticleSubSystem.cpp | 1 + 6 files changed, 44 insertions(+), 2 deletions(-) diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 6ebbd078..d87e428e 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -12,6 +12,7 @@ #include "Editor/SHEditor.h" #include "Math/SHRay.h" #include "Physics/System/SHPhysicsSystem.h" +#include "Graphics/Events/SHGraphicsEvents.h" namespace SHADE @@ -122,6 +123,13 @@ namespace SHADE SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); + + std::shared_ptr> thisReceiver + { + std::make_shared>(this, &SHCameraSystem::ReceiveWindowResizeEvent) + }; + ReceiverPtr receiver = std::dynamic_pointer_cast(thisReceiver); + SHEventManager::SubscribeTo(SH_WINDOW_RESIZE_EVENT, receiver); } @@ -130,6 +138,16 @@ namespace SHADE } + SHEventHandle SHCameraSystem::ReceiveWindowResizeEvent(SHEventPtr eventPtr) noexcept + { + auto const& EVENT_DATA = reinterpret_cast*>(eventPtr.get())->data; + + //std::cout << EVENT_DATA->resizeWidth << std::endl; + //std::cout << EVENT_DATA->resizeHeight << std::endl; + + return eventPtr->handle; + } + SHCameraComponent* SHCameraSystem::GetEditorCamera(void) noexcept { return &editorCamera; diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index baf0ed09..4d6476bf 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -46,6 +46,11 @@ namespace SHADE }; friend class CameraSystemUpdate; + /*-----------------------------------------------------------------------*/ + /* Light functions */ + /*-----------------------------------------------------------------------*/ + SHEventHandle ReceiveWindowResizeEvent(SHEventPtr eventPtr) noexcept; + SHCameraComponent* GetEditorCamera (void) noexcept; void GetCameraAxis(SHCameraComponent const& camera, SHVec3& forward, SHVec3& right, SHVec3& up) const noexcept; diff --git a/SHADE_Engine/src/Events/SHEventDefines.h b/SHADE_Engine/src/Events/SHEventDefines.h index e2fcba10..fa5bcafb 100644 --- a/SHADE_Engine/src/Events/SHEventDefines.h +++ b/SHADE_Engine/src/Events/SHEventDefines.h @@ -25,4 +25,5 @@ constexpr SHEventIdentifier SH_SCENE_EXIT_POST { 16 }; constexpr SHEventIdentifier SH_GRAPHICS_LIGHT_ENABLE_SHADOW_EVENT { 17 }; constexpr SHEventIdentifier SH_BUTTON_CLICK_EVENT { 18 }; constexpr SHEventIdentifier SH_PHYSICS_COLLIDER_DRAW_EVENT { 19 }; +constexpr SHEventIdentifier SH_WINDOW_RESIZE_EVENT { 20 }; diff --git a/SHADE_Engine/src/Graphics/Events/SHGraphicsEvents.h b/SHADE_Engine/src/Graphics/Events/SHGraphicsEvents.h index 06c480ef..51cd7aa2 100644 --- a/SHADE_Engine/src/Graphics/Events/SHGraphicsEvents.h +++ b/SHADE_Engine/src/Graphics/Events/SHGraphicsEvents.h @@ -14,4 +14,13 @@ namespace SHADE //! Generate a renderer for the light component bool generateRenderer; }; + + struct SHWindowResizeEvent + { + // New width when window resizes + uint32_t resizeWidth; + + // New height when window resizes + uint32_t resizeHeight; + }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 976939ce..297a86ae 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -138,8 +138,8 @@ namespace SHADE //SHAssetManager::CompileAsset("../../Assets/Shaders/UI_VS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/UI_FS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/Text_VS.glsl", false); - SHAssetManager::CompileAsset("../../Assets/Shaders/Trajectory_VS.glsl", false); - SHAssetManager::CompileAsset("../../Assets/Shaders/Trajectory_FS.glsl", false); + //SHAssetManager::CompileAsset("../../Assets/Shaders/Trajectory_VS.glsl", false); + //SHAssetManager::CompileAsset("../../Assets/Shaders/Trajectory_FS.glsl", false); // Load Built In Shaders static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet(VS_DEFAULT); @@ -1178,6 +1178,14 @@ namespace SHADE #ifdef SHEDITOR cameraSystem->GetEditorCamera()->SetWidth(static_cast(resizeWidth)); cameraSystem->GetEditorCamera()->SetHeight(static_cast(resizeHeight)); + + // Create new event and broadcast it + SHWindowResizeEvent newEvent; + newEvent.resizeWidth = resizeWidth; + newEvent.resizeHeight = resizeHeight; + + SHEventManager::BroadcastEvent(newEvent, SH_WINDOW_RESIZE_EVENT); + #else #endif diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Particles/SHParticleSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Particles/SHParticleSubSystem.cpp index 39bcab5b..eb3c4f1a 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Particles/SHParticleSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Particles/SHParticleSubSystem.cpp @@ -1,3 +1,4 @@ +#include "SHpch.h" #include "SHParticleSubSustem.h" namespace SHADE